1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-06-02 00:41:42 +00:00

Implemented sub-fragment clobber avoidance. Improved best template updating. Now the graph-based fragment synthesis system works. Still need to clean-up the synthesis rules.

This commit is contained in:
jespergravgaard 2018-01-03 08:15:17 +01:00
parent e9965580a4
commit b55485db50
47 changed files with 507 additions and 673 deletions

View File

@ -48,4 +48,28 @@ public class AsmFragmentClobber {
result = 31 * result + (clobberY ? 1 : 0);
return result;
}
/**
* Determines if this clobber is a subset of the passed clobber.
* If this clobber clobbers the same or fewer registers than the passed clobber it is a subset.
* The empty clobber (clobbers no registers) is a subset of all clobbers.
* @param other The other clobber to examine
* @return true if this clobber clobbers the same or fewer registers than the passed clobber.
*/
public boolean isSubset(AsmFragmentClobber other) {
if(!other.isClobberA() && this.isClobberA()) {
// This clobber clobbers A, while the other does not - not a subset
return false;
}
if(!other.isClobberX() && this.isClobberX()) {
// This clobber clobbers A, while the other does not - not a subset
return false;
}
if(!other.isClobberY() && this.isClobberY()) {
// This clobber clobbers A, while the other does not - not a subset
return false;
}
// This is a subset
return true;
}
}

View File

@ -9,15 +9,32 @@ import java.util.regex.Pattern;
/** AsmFragment synthesis mechanism based on matching fragment signature and reusing another fragment with added prefix/postfix and some bind-mappings */
class AsmFragmentTemplateSynthesisRule {
/** Regular expression that matches the signature of fragments that the synthesis rule can handle.
* Contains matching groups (parenthesis) that are used in sigReplace to build the signature of the sub-fragment to synthesize from. */
final private String sigMatch;
/** Regular expression that limits which fragments the synthesize rule can handle. */
final private String sigAvoid;
/** ASM code prefixed to the sub-fragment when synthesizing. */
final private String asmPrefix;
/** Signature of the sub-fragment to use for synthesizing the fragment. References the matching groups from sigMatch (via $1, $2, ...). */
final private String sigReplace;
/** ASM code postfixed to the sub-fragment when synthesizing. */
final private String asmPostfix;
/** Bindings for mapping replacing parameter names in the signature & ASM of the sub-fragment. */
final private Map<String, String> bindMappings;
/** Indicates whether to map parameters in the signature. If false only the parameters in the ASM are mapped.*/
final private boolean mapSignature;
AsmFragmentTemplateSynthesisRule(String sigMatch, String sigAvoid, String asmPrefix, String sigReplace, String asmPostfix, Map<String, String> bindMappings, boolean mapSignature) {
/** Names of registers ("aa", "xx", "yy") that the sub-fragment is not allowed to clobber. Limits which sub-fragments the rule can use for creating the synthesis. */
final String subDontClobber;
AsmFragmentTemplateSynthesisRule(String sigMatch, String sigAvoid, String asmPrefix, String sigReplace, String asmPostfix, Map<String, String> bindMappings, boolean mapSignature, String subDontClobber) {
this.sigMatch = sigMatch;
this.sigAvoid = sigAvoid;
this.asmPrefix = asmPrefix;
@ -25,10 +42,19 @@ class AsmFragmentTemplateSynthesisRule {
this.asmPostfix = asmPostfix;
this.bindMappings = bindMappings;
this.mapSignature = mapSignature;
this.subDontClobber = subDontClobber;
}
AsmFragmentTemplateSynthesisRule(String sigMatch, String sigAvoid, String asmPrefix, String sigReplace, String asmPostfix, Map<String, String> bindMappings) {
this(sigMatch, sigAvoid, asmPrefix, sigReplace, asmPostfix, bindMappings, true);
this(sigMatch, sigAvoid, asmPrefix, sigReplace, asmPostfix, bindMappings, true, null);
}
AsmFragmentTemplateSynthesisRule(String sigMatch, String sigAvoid, String asmPrefix, String sigReplace, String asmPostfix, Map<String, String> bindMappings, boolean mapSignature) {
this(sigMatch, sigAvoid, asmPrefix, sigReplace, asmPostfix, bindMappings, mapSignature, null);
}
AsmFragmentTemplateSynthesisRule(String sigMatch, String sigAvoid, String asmPrefix, String sigReplace, String asmPostfix, Map<String, String> bindMappings, String subDontClobber) {
this(sigMatch, sigAvoid, asmPrefix, sigReplace, asmPostfix, bindMappings, true, subDontClobber);
}
/**
@ -69,6 +95,12 @@ class AsmFragmentTemplateSynthesisRule {
if(!subTemplate.getSignature().equals(getSubSignature(signature))) {
throw new RuntimeException("Synthesis error! Attempting to synthesize on non-matching sub template sub-signature:"+subTemplate.getSignature()+" expecting:"+getSubSignature(signature));
}
if(subDontClobber!=null) {
if(subDontClobber.contains("aa") && subTemplate.getClobber().isClobberA()) return null;
if(subDontClobber.contains("xx") && subTemplate.getClobber().isClobberX()) return null;
if(subDontClobber.contains("yy") && subTemplate.getClobber().isClobberY()) return null;
}
StringBuilder newFragment = new StringBuilder();
if(asmPrefix != null) {
newFragment.append(asmPrefix).append("\n");
@ -296,8 +328,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("_deref_pbuz1=(.*z1.*)", null, null, "vbuaa=$1", "ldy #0\n" + "sta ({z1}),y\n", null));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuz1=(.*)", ".*z1.*z1.*|.*c1.*c1.*", null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x\n", mapZC));
//synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy=(.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "sta {c1},y\n", mapC));
//synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx=(.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "sta {c1},x\n", mapC));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuyy=(.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "sta {c1},y\n", mapC, "yy"));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)c1_derefidx_vbuxx=(.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "sta {c1},x\n", mapC, "xx"));
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuz2=(.*)", ".*z1.*z1.*|.*z2.*z2.*", null, "vb$1aa=$2", "ldy {z2}\n" + "sta ({z1}),y\n", mapZ2));
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)=_deref_pb(.)c1(.*)", ".*=.*aa.*", "lda {c1}\n", "$1=vb$2aa$3", null, mapC));

View File

@ -194,18 +194,37 @@ public class AsmFragmentTemplateSynthesizer {
* Handle a candidate for best template.
* If the candidate is better than the current best for its clobber profile update the best template
*
* @param template The template candidate to examine
* @param candidate The template candidate to examine
* @return true if the best template was updated
*/
public boolean bestTemplateCandidate(AsmFragmentTemplate template) {
AsmFragmentClobber clobber = template.getClobber();
AsmFragmentTemplate bestTemplate = bestTemplates.get(clobber);
if(bestTemplate == null || bestTemplate.getCycles() > template.getCycles()) {
bestTemplates.put(clobber, template);
return true;
} else {
return false;
public boolean bestTemplateCandidate(AsmFragmentTemplate candidate) {
AsmFragmentClobber candidateClobber = candidate.getClobber();
double candidateCycles = candidate.getCycles();
// Check if any current best templates are better
Set<AsmFragmentClobber> bestClobbers = new LinkedHashSet<>(bestTemplates.keySet());
for(AsmFragmentClobber bestClobber : bestClobbers) {
AsmFragmentTemplate bestTemplate = bestTemplates.get(bestClobber);
double bestCycles = bestTemplate.getCycles();
if(bestClobber.isSubset(candidateClobber) && bestCycles <= candidateCycles) {
// A better template already found - don't update
return false;
}
}
// The candidate is better than some of the current best!
// Remove any current templates that are worse
for(AsmFragmentClobber bestClobber : bestClobbers) {
AsmFragmentTemplate bestTemplate = bestTemplates.get(bestClobber);
double bestCycles = bestTemplate.getCycles();
if(candidateClobber.isSubset(bestClobber) && candidateCycles < bestCycles) {
// The candidate is better - remove the current template
bestTemplates.remove(bestClobber);
}
}
// Update the current best
bestTemplates.put(candidateClobber, candidate);
return true;
}
/**
@ -397,10 +416,14 @@ public class AsmFragmentTemplateSynthesizer {
Collection<AsmFragmentTemplate> subTemplates = subSynthesis.getBestTemplates();
for(AsmFragmentTemplate subTemplate : subTemplates) {
AsmFragmentTemplate synthesized = rule.synthesize(synthesis.getSignature(), subTemplate);
if(log.isVerboseFragmentLog()) {
log.append("Fragment synthesis " + synthesis.getSignature() + " - Successfully synthesized from " + subSignature);
if(synthesized!=null) {
if(log.isVerboseFragmentLog()) {
log.append("Fragment synthesis " + synthesis.getSignature() + " - Successfully synthesized from " + subSignature);
}
modified |= synthesis.bestTemplateCandidate(synthesized);
} else {
log.append("Fragment synthesis " + synthesis.getSignature() + " - Sub clobber prevents synthesis from " + subSignature);
}
modified |= synthesis.bestTemplateCandidate(synthesized);
}
}
if(modified) {

View File

@ -4,7 +4,7 @@
.const SCREEN = $400
jsr main
main: {
.label k = 2
.label l = 2
ldx #0
b1:
lda #0
@ -17,22 +17,21 @@ main: {
inx
cpx #$65
bne b1
lda #0
sta k
b3:
ldy #0
b3:
lda #0
sta l
b4:
eor #$55
tax
ldx k
tya
sta SCREEN,x
lda l
sta SCREEN,y
inc l
lda l
cmp #$65
bne b4
iny
cpy #$65
bne b4
inc k
lda k
cmp #$65
bne b3
rts
}

View File

@ -594,13 +594,11 @@ REGISTER UPLIFT SCOPES
Uplift Scope [main] 303: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 252.5: zp ZP_BYTE:5 [ main::l#2 main::l#1 ] 41.1: zp ZP_BYTE:2 [ main::i#4 main::i#1 ] 37: zp ZP_BYTE:4 [ main::k#4 main::k#1 ]
Uplift Scope []
Uplifting [main] best 6028 combination reg byte a [ main::j#2 main::j#1 ] reg byte y [ main::l#2 main::l#1 ] reg byte x [ main::i#4 main::i#1 ] zp ZP_BYTE:4 [ main::k#4 main::k#1 ]
Uplifting [] best 6028 combination
MISSING FRAGMENTS
pbuc1_derefidx_vbuaa=vbuyy(main:: pbuc1=(const byte*) SCREEN#0 vbuaa=(byte) main::i#4 vbuyy=(byte) main::j#2 )
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ main::k#4 main::k#1 ]
Uplifting [main] best 6028 combination zp ZP_BYTE:4 [ main::k#4 main::k#1 ]
Allocated (was zp ZP_BYTE:4) zp ZP_BYTE:2 [ main::k#4 main::k#1 ]
Uplifting [main] best 6638 combination reg byte a [ main::j#2 main::j#1 ] zp ZP_BYTE:5 [ main::l#2 main::l#1 ] reg byte x [ main::i#4 main::i#1 ] reg byte y [ main::k#4 main::k#1 ]
Uplifting [] best 6638 combination
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ main::l#2 main::l#1 ]
Uplifting [main] best 6638 combination zp ZP_BYTE:5 [ main::l#2 main::l#1 ]
Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:2 [ main::l#2 main::l#1 ]
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
@ -627,7 +625,7 @@ bend_from_b1:
bend:
//SEG9 main
main: {
.label k = 2
.label l = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (byte) main::i#4 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
@ -668,9 +666,8 @@ main: {
bne b1_from_b5
//SEG26 [12] phi from main::@5 to main::@3 [phi:main::@5->main::@3]
b3_from_b5:
//SEG27 [12] phi (byte) main::k#4 = (byte/signed byte/word/signed word) 0 [phi:main::@5->main::@3#0] -- vbuz1=vbuc1
lda #0
sta k
//SEG27 [12] phi (byte) main::k#4 = (byte/signed byte/word/signed word) 0 [phi:main::@5->main::@3#0] -- vbuyy=vbuc1
ldy #0
jmp b3
//SEG28 [12] phi from main::@7 to main::@3 [phi:main::@7->main::@3]
b3_from_b7:
@ -680,8 +677,9 @@ main: {
b3:
//SEG31 [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
b4_from_b3:
//SEG32 [13] phi (byte) main::l#2 = (byte/signed byte/word/signed word) 0 [phi:main::@3->main::@4#0] -- vbuyy=vbuc1
ldy #0
//SEG32 [13] phi (byte) main::l#2 = (byte/signed byte/word/signed word) 0 [phi:main::@3->main::@4#0] -- vbuz1=vbuc1
lda #0
sta l
jmp b4
//SEG33 [13] phi from main::@4 to main::@4 [phi:main::@4->main::@4]
b4_from_b4:
@ -692,23 +690,22 @@ main: {
//SEG36 asm { eor#$55 tax }
eor #$55
tax
//SEG37 [15] *((const byte*) SCREEN#0 + (byte) main::k#4) ← (byte) main::l#2 [ main::k#4 main::l#2 ] ( main:2 [ main::k#4 main::l#2 ] ) -- pbuc1_derefidx_vbuz1=vbuyy
ldx k
tya
sta SCREEN,x
//SEG38 [16] (byte) main::l#1 ← ++ (byte) main::l#2 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG39 [17] if((byte) main::l#1!=(byte/signed byte/word/signed word) 101) goto main::@4 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] ) -- vbuyy_neq_vbuc1_then_la1
cpy #$65
//SEG37 [15] *((const byte*) SCREEN#0 + (byte) main::k#4) ← (byte) main::l#2 [ main::k#4 main::l#2 ] ( main:2 [ main::k#4 main::l#2 ] ) -- pbuc1_derefidx_vbuyy=vbuz1
lda l
sta SCREEN,y
//SEG38 [16] (byte) main::l#1 ← ++ (byte) main::l#2 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] ) -- vbuz1=_inc_vbuz1
inc l
//SEG39 [17] if((byte) main::l#1!=(byte/signed byte/word/signed word) 101) goto main::@4 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda l
cmp #$65
bne b4_from_b4
jmp b7
//SEG40 main::@7
b7:
//SEG41 [18] (byte) main::k#1 ← ++ (byte) main::k#4 [ main::k#1 ] ( main:2 [ main::k#1 ] ) -- vbuz1=_inc_vbuz1
inc k
//SEG42 [19] if((byte) main::k#1!=(byte/signed byte/word/signed word) 101) goto main::@3 [ main::k#1 ] ( main:2 [ main::k#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda k
cmp #$65
//SEG41 [18] (byte) main::k#1 ← ++ (byte) main::k#4 [ main::k#1 ] ( main:2 [ main::k#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG42 [19] if((byte) main::k#1!=(byte/signed byte/word/signed word) 101) goto main::@3 [ main::k#1 ] ( main:2 [ main::k#1 ] ) -- vbuyy_neq_vbuc1_then_la1
cpy #$65
bne b3_from_b7
jmp breturn
//SEG43 main::@return
@ -778,20 +775,20 @@ FINAL SYMBOL TABLE
(byte) main::j#1 reg byte a 151.5
(byte) main::j#2 reg byte a 151.5
(byte) main::k
(byte) main::k#1 k zp ZP_BYTE:2 16.5
(byte) main::k#4 k zp ZP_BYTE:2 20.499999999999996
(byte) main::k#1 reg byte y 16.5
(byte) main::k#4 reg byte y 20.499999999999996
(byte) main::l
(byte) main::l#1 reg byte y 151.5
(byte) main::l#2 reg byte y 101.0
(byte) main::l#1 l zp ZP_BYTE:2 151.5
(byte) main::l#2 l zp ZP_BYTE:2 101.0
reg byte x [ main::i#4 main::i#1 ]
reg byte a [ main::j#2 main::j#1 ]
zp ZP_BYTE:2 [ main::k#4 main::k#1 ]
reg byte y [ main::l#2 main::l#1 ]
reg byte y [ main::k#4 main::k#1 ]
zp ZP_BYTE:2 [ main::l#2 main::l#1 ]
FINAL ASSEMBLER
Score: 4072
Score: 4682
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -809,7 +806,7 @@ Score: 4072
//SEG8 @end
//SEG9 main
main: {
.label k = 2
.label l = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
//SEG11 [5] phi (byte) main::i#4 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
ldx #0
@ -839,16 +836,16 @@ main: {
cpx #$65
bne b1
//SEG26 [12] phi from main::@5 to main::@3 [phi:main::@5->main::@3]
//SEG27 [12] phi (byte) main::k#4 = (byte/signed byte/word/signed word) 0 [phi:main::@5->main::@3#0] -- vbuz1=vbuc1
lda #0
sta k
//SEG27 [12] phi (byte) main::k#4 = (byte/signed byte/word/signed word) 0 [phi:main::@5->main::@3#0] -- vbuyy=vbuc1
ldy #0
//SEG28 [12] phi from main::@7 to main::@3 [phi:main::@7->main::@3]
//SEG29 [12] phi (byte) main::k#4 = (byte) main::k#1 [phi:main::@7->main::@3#0] -- register_copy
//SEG30 main::@3
b3:
//SEG31 [13] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
//SEG32 [13] phi (byte) main::l#2 = (byte/signed byte/word/signed word) 0 [phi:main::@3->main::@4#0] -- vbuyy=vbuc1
ldy #0
//SEG32 [13] phi (byte) main::l#2 = (byte/signed byte/word/signed word) 0 [phi:main::@3->main::@4#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG33 [13] phi from main::@4 to main::@4 [phi:main::@4->main::@4]
//SEG34 [13] phi (byte) main::l#2 = (byte) main::l#1 [phi:main::@4->main::@4#0] -- register_copy
//SEG35 main::@4
@ -856,21 +853,20 @@ main: {
//SEG36 asm { eor#$55 tax }
eor #$55
tax
//SEG37 [15] *((const byte*) SCREEN#0 + (byte) main::k#4) ← (byte) main::l#2 [ main::k#4 main::l#2 ] ( main:2 [ main::k#4 main::l#2 ] ) -- pbuc1_derefidx_vbuz1=vbuyy
ldx k
tya
sta SCREEN,x
//SEG38 [16] (byte) main::l#1 ← ++ (byte) main::l#2 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG39 [17] if((byte) main::l#1!=(byte/signed byte/word/signed word) 101) goto main::@4 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] ) -- vbuyy_neq_vbuc1_then_la1
cpy #$65
//SEG37 [15] *((const byte*) SCREEN#0 + (byte) main::k#4) ← (byte) main::l#2 [ main::k#4 main::l#2 ] ( main:2 [ main::k#4 main::l#2 ] ) -- pbuc1_derefidx_vbuyy=vbuz1
lda l
sta SCREEN,y
//SEG38 [16] (byte) main::l#1 ← ++ (byte) main::l#2 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] ) -- vbuz1=_inc_vbuz1
inc l
//SEG39 [17] if((byte) main::l#1!=(byte/signed byte/word/signed word) 101) goto main::@4 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda l
cmp #$65
bne b4
//SEG40 main::@7
//SEG41 [18] (byte) main::k#1 ← ++ (byte) main::k#4 [ main::k#1 ] ( main:2 [ main::k#1 ] ) -- vbuz1=_inc_vbuz1
inc k
//SEG42 [19] if((byte) main::k#1!=(byte/signed byte/word/signed word) 101) goto main::@3 [ main::k#1 ] ( main:2 [ main::k#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda k
cmp #$65
//SEG41 [18] (byte) main::k#1 ← ++ (byte) main::k#4 [ main::k#1 ] ( main:2 [ main::k#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG42 [19] if((byte) main::k#1!=(byte/signed byte/word/signed word) 101) goto main::@3 [ main::k#1 ] ( main:2 [ main::k#1 ] ) -- vbuyy_neq_vbuc1_then_la1
cpy #$65
bne b3
//SEG43 main::@return
//SEG44 [20] return [ ] ( main:2 [ ] )

View File

@ -18,13 +18,13 @@
(byte) main::j#1 reg byte a 151.5
(byte) main::j#2 reg byte a 151.5
(byte) main::k
(byte) main::k#1 k zp ZP_BYTE:2 16.5
(byte) main::k#4 k zp ZP_BYTE:2 20.499999999999996
(byte) main::k#1 reg byte y 16.5
(byte) main::k#4 reg byte y 20.499999999999996
(byte) main::l
(byte) main::l#1 reg byte y 151.5
(byte) main::l#2 reg byte y 101.0
(byte) main::l#1 l zp ZP_BYTE:2 151.5
(byte) main::l#2 l zp ZP_BYTE:2 101.0
reg byte x [ main::i#4 main::i#1 ]
reg byte a [ main::j#2 main::j#1 ]
zp ZP_BYTE:2 [ main::k#4 main::k#1 ]
reg byte y [ main::l#2 main::l#1 ]
reg byte y [ main::k#4 main::k#1 ]
zp ZP_BYTE:2 [ main::l#2 main::l#1 ]

View File

@ -500,12 +500,8 @@ Uplift Scope [main]
Uplifting [line] best 426 combination reg byte x [ line::x#2 line::x#0 line::x#1 ] zp ZP_BYTE:2 [ line::x1#3 ]
Uplifting [] best 426 combination zp ZP_WORD:4 [ screen#10 screen#14 screen#11 ]
Uplifting [main] best 426 combination
MISSING FRAGMENTS
vbuxx_lt_vbuaa_then_la1(line:: vbuxx=(byte) line::x#1 vbuaa=(byte) line::x1#3 la1=(label) line::b1_from_b1 )
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ line::x1#3 ]
Uplifting [line] best 426 combination zp ZP_BYTE:2 [ line::x1#3 ]
MISSING FRAGMENTS
vbuxx_lt_vbuaa_then_la1(line:: vbuxx=(byte) line::x#1 vbuaa=(byte) line::x1#3 la1=(label) line::b1_from_b1 )
Allocated (was zp ZP_WORD:4) zp ZP_WORD:3 [ screen#10 screen#14 screen#11 ]
ASSEMBLER BEFORE OPTIMIZATION

View File

@ -25,8 +25,8 @@ main: {
sta bits
ldx #0
b2:
lda bits
and #$80
lda #$80
and bits
cmp #0
beq b4
lda #'*'

View File

@ -867,8 +867,8 @@ main: {
//SEG27 main::@2
b2:
//SEG28 [9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ) -- vbuaa=vbuz1_band_vbuc1
lda bits
and #$80
lda #$80
and bits
//SEG29 [10] if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) -- vbuaa_eq_0_then_la1
cmp #0
beq b3_from_b2
@ -1078,8 +1078,8 @@ main: {
//SEG27 main::@2
b2:
//SEG28 [9] (byte~) main::$1 ← (byte) main::bits#2 & (byte/word/signed word) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$1 ] ) -- vbuaa=vbuz1_band_vbuc1
lda bits
and #$80
lda #$80
and bits
//SEG29 [10] if((byte~) main::$1==(byte/signed byte/word/signed word) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ( main:2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ] ) -- vbuaa_eq_0_then_la1
cmp #0
beq b4

View File

@ -594,9 +594,9 @@ main: {
//SEG14 main::@1
b1:
//SEG15 [6] *((const byte*) plots#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda i
tax
sta plots,x
ldy i
tya
sta plots,y
//SEG16 [7] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte/signed byte/word/signed word) 0 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuc2
ldy i
lda #0

View File

@ -460,8 +460,6 @@ Uplift Scope []
Uplifting [fillscreen] best 418 combination reg byte x [ fillscreen::j#2 fillscreen::j#1 ] reg byte a [ fillscreen::c#0 ]
Uplifting [main] best 412 combination reg byte a [ main::c#0 ]
Uplifting [] best 412 combination
MISSING FRAGMENTS
pbuc1_derefidx_vbuaa=vbuyy(fillscreen:: pbuc1=(const byte*) SCREEN#0 vbuaa=(byte) fillscreen::j#2 vbuyy=(byte) fillscreen::c#0 )
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart

View File

@ -1305,9 +1305,9 @@ plot: {
//SEG52 plot::@2
b2:
//SEG53 [20] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[256]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3
ldy i
lda buffer1,y
ldy x
ldx i
lda buffer1,x
sta (line),y
//SEG54 [21] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ) -- vbuz1=_inc_vbuz1
inc i
@ -1383,9 +1383,9 @@ flip: {
//SEG81 flip::@2
b2:
//SEG82 [31] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[256]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy srcIdx
lda buffer1,y
ldy dstIdx
ldx srcIdx
lda buffer1,x
sta buffer2,y
//SEG83 [32] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ) -- vbuz1=_inc_vbuz1
inc srcIdx
@ -1452,9 +1452,9 @@ prepare: {
//SEG106 prepare::@1
b1:
//SEG107 [46] *((const byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda i
tax
sta buffer1,x
ldy i
tya
sta buffer1,y
//SEG108 [47] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) -- vbuz1=_inc_vbuz1
inc i
//SEG109 [48] if((byte) prepare::i#1!=(byte/signed byte/word/signed word) 0) goto prepare::@1 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) -- vbuz1_neq_0_then_la1

View File

@ -259,9 +259,9 @@ main: {
//SEG14 main::@1
b1:
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda i
tax
sta SCREEN,x
ldy i
tya
sta SCREEN,y
//SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
inc i
//SEG17 [8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 100) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1

View File

@ -259,9 +259,9 @@ main: {
//SEG14 main::@1
b1:
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda i
tax
sta SCREEN,x
ldy i
tya
sta SCREEN,y
//SEG16 [7] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda i
clc

View File

@ -359,9 +359,9 @@ main: {
//SEG14 main::@1
b1:
//SEG15 [6] *((const byte*) SCREEN1#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda i
tax
sta SCREEN1,x
ldy i
tya
sta SCREEN1,y
//SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
inc i
//SEG17 [8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 0) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_0_then_la1
@ -380,9 +380,9 @@ main: {
//SEG22 main::@2
b2:
//SEG23 [10] *((const byte*) SCREEN2#0 + (byte) main::j#2) ← (byte) main::j#2 [ main::j#2 ] ( main:2 [ main::j#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda j
tax
sta SCREEN2,x
ldy j
tya
sta SCREEN2,y
//SEG24 [11] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 ] ( main:2 [ main::j#1 ] ) -- vbuz1=_dec_vbuz1
dec j
//SEG25 [12] if((byte) main::j#1!=(byte/word/signed word) 255) goto main::@2 [ main::j#1 ] ( main:2 [ main::j#1 ] ) -- vbuz1_neq_vbuc1_then_la1

View File

@ -46,8 +46,8 @@ main: {
lsr
lsr
lsr
tax
lda bits_count,x
tay
lda bits_count,y
cmp #2
bcc b7
lda #0+1

View File

@ -1648,9 +1648,9 @@ main: {
//SEG84 main::@6
b6:
//SEG85 [55] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda i
tax
sta SCREEN,x
ldy i
tya
sta SCREEN,y
//SEG86 [56] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
inc i
//SEG87 [57] if((byte) main::i#1!=(byte/signed byte/word/signed word) 0) goto main::@6 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_0_then_la1
@ -1795,7 +1795,7 @@ Uplifting [main] best 4373 combination reg byte a [ main::$13 ]
Attempting to uplift remaining variables inzp ZP_BYTE:23 [ main::$14 ]
Uplifting [main] best 4313 combination reg byte a [ main::$14 ]
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ main::$15 ]
Uplifting [main] best 4273 combination reg byte y [ main::$15 ]
Uplifting [main] best 4273 combination reg byte a [ main::$15 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ main::bits#1 ]
Uplifting [main] best 4213 combination reg byte a [ main::bits#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:26 [ main::$20 ]
@ -1805,7 +1805,7 @@ Uplifting [main] best 4093 combination reg byte a [ main::$22 ]
Attempting to uplift remaining variables inzp ZP_BYTE:29 [ main::$23 ]
Uplifting [main] best 4033 combination reg byte a [ main::$23 ]
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ main::$24 ]
Uplifting [main] best 3993 combination reg byte y [ main::$24 ]
Uplifting [main] best 3993 combination reg byte a [ main::$24 ]
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ main::bits#2 ]
Uplifting [main] best 3933 combination reg byte a [ main::bits#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:32 [ main::$29 ]
@ -1813,7 +1813,7 @@ Uplifting [main] best 3873 combination reg byte a [ main::$29 ]
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ main::$31 ]
Uplifting [main] best 3813 combination reg byte a [ main::$31 ]
Attempting to uplift remaining variables inzp ZP_BYTE:35 [ main::$32 ]
Uplifting [main] best 3773 combination reg byte y [ main::$32 ]
Uplifting [main] best 3773 combination reg byte a [ main::$32 ]
Attempting to uplift remaining variables inzp ZP_BYTE:36 [ main::bits#3 ]
Uplifting [main] best 3713 combination reg byte a [ main::bits#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:37 [ main::bits_gen#7 ]
@ -1921,8 +1921,8 @@ main: {
lsr
lsr
//SEG25 [14] (byte) main::bits#0 ← *((const byte[]) bits_count#0 + (byte~) main::$6) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tax
lda bits_count,x
tay
lda bits_count,y
//SEG26 [15] if((byte) main::bits#0<(byte/signed byte/word/signed word) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] ) -- vbuaa_lt_vbuc1_then_la1
cmp #2
bcc b2_from_b1
@ -1960,10 +1960,10 @@ main: {
lsr
//SEG38 [22] (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] ) -- vbuaa=vbuz1_bor_vbuaa
ora _11
//SEG39 [23] (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ) -- vbuyy=vbuaa_ror_1
//SEG39 [23] (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ) -- vbuaa=vbuaa_ror_1
lsr
//SEG40 [24] (byte) main::bits#1 ← *((const byte[]) bits_count#0 + (byte~) main::$15) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG40 [24] (byte) main::bits#1 ← *((const byte[]) bits_count#0 + (byte~) main::$15) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda bits_count,y
//SEG41 [25] if((byte) main::bits#1<(byte/signed byte/word/signed word) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] ) -- vbuaa_lt_vbuc1_then_la1
cmp #2
@ -1997,10 +1997,10 @@ main: {
and #6
//SEG51 [32] (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 main::$23 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 main::$23 ] ) -- vbuaa=vbuaa_ror_1
lsr
//SEG52 [33] (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] ) -- vbuyy=vbuz1_bor_vbuaa
//SEG52 [33] (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] ) -- vbuaa=vbuz1_bor_vbuaa
ora _21
//SEG53 [34] (byte) main::bits#2 ← *((const byte[]) bits_count#0 + (byte~) main::$24) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG53 [34] (byte) main::bits#2 ← *((const byte[]) bits_count#0 + (byte~) main::$24) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda bits_count,y
//SEG54 [35] if((byte) main::bits#2<(byte/signed byte/word/signed word) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] ) -- vbuaa_lt_vbuc1_then_la1
cmp #2
@ -2033,10 +2033,10 @@ main: {
ldy #0
lda (chargen1),y
and #1
//SEG64 [42] (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] ) -- vbuyy=vbuz1_bor_vbuaa
//SEG64 [42] (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] ) -- vbuaa=vbuz1_bor_vbuaa
ora _30
//SEG65 [43] (byte) main::bits#3 ← *((const byte[]) bits_count#0 + (byte~) main::$32) [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG65 [43] (byte) main::bits#3 ← *((const byte[]) bits_count#0 + (byte~) main::$32) [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda bits_count,y
//SEG66 [44] if((byte) main::bits#3<(byte/signed byte/word/signed word) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] ) -- vbuaa_lt_vbuc1_then_la1
cmp #2
@ -2204,18 +2204,18 @@ FINAL SYMBOL TABLE
(byte~) main::$12 reg byte a 22.0
(byte~) main::$13 reg byte a 22.0
(byte~) main::$14 reg byte a 22.0
(byte~) main::$15 reg byte y 22.0
(byte~) main::$15 reg byte a 22.0
(byte~) main::$2 reg byte a 22.0
(byte~) main::$20 reg byte a 22.0
(byte~) main::$21 $21 zp ZP_BYTE:8 7.333333333333333
(byte~) main::$22 reg byte a 22.0
(byte~) main::$23 reg byte a 22.0
(byte~) main::$24 reg byte y 22.0
(byte~) main::$24 reg byte a 22.0
(byte~) main::$29 reg byte a 22.0
(byte~) main::$3 reg byte a 22.0
(byte~) main::$30 $30 zp ZP_BYTE:8 11.0
(byte~) main::$31 reg byte a 22.0
(byte~) main::$32 reg byte y 22.0
(byte~) main::$32 reg byte a 22.0
(byte~) main::$4 reg byte a 22.0
(byte~) main::$5 reg byte a 22.0
(byte~) main::$6 reg byte a 22.0
@ -2279,16 +2279,16 @@ reg byte a [ main::bits#0 ]
reg byte a [ main::$12 ]
reg byte a [ main::$13 ]
reg byte a [ main::$14 ]
reg byte y [ main::$15 ]
reg byte a [ main::$15 ]
reg byte a [ main::bits#1 ]
reg byte a [ main::$20 ]
reg byte a [ main::$22 ]
reg byte a [ main::$23 ]
reg byte y [ main::$24 ]
reg byte a [ main::$24 ]
reg byte a [ main::bits#2 ]
reg byte a [ main::$29 ]
reg byte a [ main::$31 ]
reg byte y [ main::$32 ]
reg byte a [ main::$32 ]
reg byte a [ main::bits#3 ]
reg byte a [ main::bits_gen#7 ]
@ -2370,8 +2370,8 @@ main: {
lsr
lsr
//SEG25 [14] (byte) main::bits#0 ← *((const byte[]) bits_count#0 + (byte~) main::$6) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tax
lda bits_count,x
tay
lda bits_count,y
//SEG26 [15] if((byte) main::bits#0<(byte/signed byte/word/signed word) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ] ) -- vbuaa_lt_vbuc1_then_la1
cmp #2
bcc b7
@ -2403,10 +2403,10 @@ main: {
lsr
//SEG38 [22] (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ] ) -- vbuaa=vbuz1_bor_vbuaa
ora _11
//SEG39 [23] (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ) -- vbuyy=vbuaa_ror_1
//SEG39 [23] (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ] ) -- vbuaa=vbuaa_ror_1
lsr
//SEG40 [24] (byte) main::bits#1 ← *((const byte[]) bits_count#0 + (byte~) main::$15) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG40 [24] (byte) main::bits#1 ← *((const byte[]) bits_count#0 + (byte~) main::$15) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda bits_count,y
//SEG41 [25] if((byte) main::bits#1<(byte/signed byte/word/signed word) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ] ) -- vbuaa_lt_vbuc1_then_la1
cmp #2
@ -2434,10 +2434,10 @@ main: {
and #6
//SEG51 [32] (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 main::$23 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$21 main::$23 ] ) -- vbuaa=vbuaa_ror_1
lsr
//SEG52 [33] (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] ) -- vbuyy=vbuz1_bor_vbuaa
//SEG52 [33] (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$24 ] ) -- vbuaa=vbuz1_bor_vbuaa
ora _21
//SEG53 [34] (byte) main::bits#2 ← *((const byte[]) bits_count#0 + (byte~) main::$24) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG53 [34] (byte) main::bits#2 ← *((const byte[]) bits_count#0 + (byte~) main::$24) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda bits_count,y
//SEG54 [35] if((byte) main::bits#2<(byte/signed byte/word/signed word) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] ( main:2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ] ) -- vbuaa_lt_vbuc1_then_la1
cmp #2
@ -2464,10 +2464,10 @@ main: {
//SEG63 [41] (byte~) main::$31 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$30 main::$31 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$30 main::$31 ] ) -- vbuaa=_deref_pbuz1_band_vbuc1
lda (chargen1),y
and #1
//SEG64 [42] (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] ) -- vbuyy=vbuz1_bor_vbuaa
//SEG64 [42] (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$32 ] ) -- vbuaa=vbuz1_bor_vbuaa
ora _30
//SEG65 [43] (byte) main::bits#3 ← *((const byte[]) bits_count#0 + (byte~) main::$32) [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG65 [43] (byte) main::bits#3 ← *((const byte[]) bits_count#0 + (byte~) main::$32) [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda bits_count,y
//SEG66 [44] if((byte) main::bits#3<(byte/signed byte/word/signed word) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] ( main:2 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ] ) -- vbuaa_lt_vbuc1_then_la1
cmp #2

View File

@ -19,18 +19,18 @@
(byte~) main::$12 reg byte a 22.0
(byte~) main::$13 reg byte a 22.0
(byte~) main::$14 reg byte a 22.0
(byte~) main::$15 reg byte y 22.0
(byte~) main::$15 reg byte a 22.0
(byte~) main::$2 reg byte a 22.0
(byte~) main::$20 reg byte a 22.0
(byte~) main::$21 $21 zp ZP_BYTE:8 7.333333333333333
(byte~) main::$22 reg byte a 22.0
(byte~) main::$23 reg byte a 22.0
(byte~) main::$24 reg byte y 22.0
(byte~) main::$24 reg byte a 22.0
(byte~) main::$29 reg byte a 22.0
(byte~) main::$3 reg byte a 22.0
(byte~) main::$30 $30 zp ZP_BYTE:8 11.0
(byte~) main::$31 reg byte a 22.0
(byte~) main::$32 reg byte y 22.0
(byte~) main::$32 reg byte a 22.0
(byte~) main::$4 reg byte a 22.0
(byte~) main::$5 reg byte a 22.0
(byte~) main::$6 reg byte a 22.0
@ -94,15 +94,15 @@ reg byte a [ main::bits#0 ]
reg byte a [ main::$12 ]
reg byte a [ main::$13 ]
reg byte a [ main::$14 ]
reg byte y [ main::$15 ]
reg byte a [ main::$15 ]
reg byte a [ main::bits#1 ]
reg byte a [ main::$20 ]
reg byte a [ main::$22 ]
reg byte a [ main::$23 ]
reg byte y [ main::$24 ]
reg byte a [ main::$24 ]
reg byte a [ main::bits#2 ]
reg byte a [ main::$29 ]
reg byte a [ main::$31 ]
reg byte y [ main::$32 ]
reg byte a [ main::$32 ]
reg byte a [ main::bits#3 ]
reg byte a [ main::bits_gen#7 ]

View File

@ -257,13 +257,13 @@ main: {
//SEG14 main::@1
b1:
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda a
tax
sta SCREEN,x
ldy a
tya
sta SCREEN,y
//SEG16 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 80 + (byte) main::a#0) ← (byte) main::a#0 [ main::a#0 ] ( main:2 [ main::a#0 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda a
tax
sta SCREEN+$50,x
ldy a
tya
sta SCREEN+$50,y
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::a#0 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
inc i
//SEG18 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 40) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1

View File

@ -410,10 +410,10 @@ main: {
b2:
//SEG20 [7] (word) main::w#0 ← *((const byte[]) main::his#0 + (byte) main::h#4) w= (byte) main::l#2 [ main::h#4 main::l#2 main::w#0 ] ( main:2 [ main::h#4 main::l#2 main::w#0 ] ) -- vwuz1=pbuc1_derefidx_vbuz2_word_vbuz3
ldy h
ldx l
lda his,y
sta w+1
stx w
lda l
sta w
//SEG21 [8] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz2
lda w
sta sc
@ -447,11 +447,6 @@ main: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Potential register analysis [7] main::w#0 ← *(main::his#0 + main::h#4) w= main::l#2 missing fragment vwuz1=pbuc1_derefidx_vbuaa_word_vbuxx allocation: reg byte a [ main::h#4 main::h#1 ] reg byte x [ main::l#2 main::l#1 ] zp ZP_WORD:4 [ main::w#0 ]
Potential register analysis [7] main::w#0 ← *(main::his#0 + main::h#4) w= main::l#2 missing fragment vwuz1=pbuc1_derefidx_vbuaa_word_vbuyy allocation: reg byte a [ main::h#4 main::h#1 ] reg byte y [ main::l#2 main::l#1 ] zp ZP_WORD:4 [ main::w#0 ]
MISSING FRAGMENTS
vwuz1=pbuc1_derefidx_vbuaa_word_vbuxx(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuaa=(byte) main::h#4 vbuxx=(byte) main::l#2 )
vwuz1=pbuc1_derefidx_vbuaa_word_vbuyy(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuaa=(byte) main::h#4 vbuyy=(byte) main::l#2 )
Statement [7] (word) main::w#0 ← *((const byte[]) main::his#0 + (byte) main::h#4) w= (byte) main::l#2 [ main::h#4 main::l#2 main::w#0 ] ( main:2 [ main::h#4 main::l#2 main::w#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::h#4 main::h#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::l#2 main::l#1 ]

View File

@ -448,9 +448,9 @@ main: {
lda #'*'
sta screen,y
//SEG18 [7] *((const byte*) main::cols#0 + (byte) main::i#2) ← *((const byte[]) main::colseq#0 + (byte) main::j#3) [ main::i#2 main::j#3 ] ( main:2 [ main::i#2 main::j#3 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy j
lda colseq,y
ldy i
ldx j
lda colseq,x
sta cols,y
//SEG19 [8] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1=_inc_vbuz1
inc j

View File

@ -324,6 +324,12 @@ Complete equivalence classes
[ main::i#2 main::i#1 ]
Allocated zp ZP_BYTE:2 [ main::j#3 main::j#4 main::j#1 ]
Allocated zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
Fragment synthesis pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuaa - Sub clobber prevents synthesis from vbuaa=pbuc1_derefidx_vbuaa
Fragment synthesis pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 - Sub clobber prevents synthesis from vbuaa=pbuc1_derefidx_vbuz1
Fragment synthesis pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuaa - Sub clobber prevents synthesis from vbuaa=pbuc1_derefidx_vbuaa
Fragment synthesis pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 - Sub clobber prevents synthesis from vbuaa=pbuc1_derefidx_vbuz1
Fragment synthesis pbuc1_derefidx_vbuyy=pbuc2_derefidx_vbuz1 - Sub clobber prevents synthesis from vbuaa=pbuc1_derefidx_vbuz1
Fragment synthesis pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuz1 - Sub clobber prevents synthesis from vbuaa=pbuc1_derefidx_vbuz1
INITIAL ASM
//SEG0 Basic Upstart
@ -369,9 +375,9 @@ main: {
//SEG16 main::@1
b1:
//SEG17 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) TXT#0 + (byte) main::j#3) [ main::j#3 main::i#2 ] ( main:2 [ main::j#3 main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy j
lda TXT,y
ldy i
ldx j
lda TXT,x
sta SCREEN,y
//SEG18 [7] (byte) main::j#1 ← ++ (byte) main::j#3 [ main::i#2 main::j#1 ] ( main:2 [ main::i#2 main::j#1 ] ) -- vbuz1=_inc_vbuz1
inc j

View File

@ -344,9 +344,9 @@ main: {
//SEG14 main::@1
b1:
//SEG15 [6] *((const byte[256]) bs#0 + (byte) main::i#4) ← (byte) main::i#4 [ main::i#4 ] ( main:2 [ main::i#4 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
lda i
tax
sta bs,x
ldy i
tya
sta bs,y
//SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#4 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
inc i
//SEG17 [8] if((byte) main::i#1!=(byte/signed byte/word/signed word) 0) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_0_then_la1
@ -369,9 +369,9 @@ main: {
//SEG24 main::@2
b2:
//SEG25 [10] *((const byte[256]) main::cs#0 + (byte) main::i#5) ← *((const byte[256]) bs#0 + (byte) main::j#2) [ main::j#2 main::i#5 ] ( main:2 [ main::j#2 main::i#5 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy j
lda bs,y
ldy i_5
ldx j
lda bs,x
sta cs,y
//SEG26 [11] (byte) main::j#1 ← -- (byte) main::j#2 [ main::i#5 main::j#1 ] ( main:2 [ main::i#5 main::j#1 ] ) -- vbuz1=_dec_vbuz1
dec j

View File

@ -20,16 +20,15 @@ main: {
}
line: {
txa
tay
jsr plot
txa
clc
adc #$14
tay
jsr plot
rts
}
plot: {
tay
lda #'*'
sta SCREEN,y
rts

View File

@ -654,8 +654,8 @@ Uplift Scope []
Uplifting [main] best 475 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#2 main::j#1 ]
Uplifting [line] best 411 combination reg byte x [ line::l#2 line::l#0 line::l#1 ]
Uplifting [plot] best 408 combination reg byte y [ plot::x#2 plot::x#0 plot::x#1 ]
Uplifting [] best 408 combination
Uplifting [plot] best 406 combination reg byte a [ plot::x#2 plot::x#0 plot::x#1 ]
Uplifting [] best 406 combination
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
@ -742,9 +742,8 @@ main: {
}
//SEG36 line
line: {
//SEG37 [17] (byte) plot::x#0 ← (byte) line::l#2 [ line::l#2 plot::x#0 ] ( main:2::line:7 [ main::i#2 line::l#2 plot::x#0 ] main:2::line:12 [ main::j#2 line::l#2 plot::x#0 ] ) -- vbuyy=vbuxx
//SEG37 [17] (byte) plot::x#0 ← (byte) line::l#2 [ line::l#2 plot::x#0 ] ( main:2::line:7 [ main::i#2 line::l#2 plot::x#0 ] main:2::line:12 [ main::j#2 line::l#2 plot::x#0 ] ) -- vbuaa=vbuxx
txa
tay
//SEG38 [18] call plot param-assignment [ line::l#2 ] ( main:2::line:7 [ main::i#2 line::l#2 ] main:2::line:12 [ main::j#2 line::l#2 ] )
//SEG39 [22] phi from line to plot [phi:line->plot]
plot_from_line:
@ -753,11 +752,10 @@ line: {
jmp b1
//SEG41 line::@1
b1:
//SEG42 [19] (byte) plot::x#1 ← (byte) line::l#2 + (byte/signed byte/word/signed word) 20 [ plot::x#1 ] ( main:2::line:7 [ main::i#2 plot::x#1 ] main:2::line:12 [ main::j#2 plot::x#1 ] ) -- vbuyy=vbuxx_plus_vbuc1
//SEG42 [19] (byte) plot::x#1 ← (byte) line::l#2 + (byte/signed byte/word/signed word) 20 [ plot::x#1 ] ( main:2::line:7 [ main::i#2 plot::x#1 ] main:2::line:12 [ main::j#2 plot::x#1 ] ) -- vbuaa=vbuxx_plus_vbuc1
txa
clc
adc #$14
tay
//SEG43 [20] call plot param-assignment [ ] ( main:2::line:7 [ main::i#2 ] main:2::line:12 [ main::j#2 ] )
//SEG44 [22] phi from line::@1 to plot [phi:line::@1->plot]
plot_from_b1:
@ -771,7 +769,8 @@ line: {
}
//SEG48 plot
plot: {
//SEG49 [23] *((const byte*) SCREEN#0 + (byte) plot::x#2) ← (byte) '*' [ ] ( main:2::line:7::plot:18 [ main::i#2 line::l#2 ] main:2::line:12::plot:18 [ main::j#2 line::l#2 ] main:2::line:7::plot:20 [ main::i#2 ] main:2::line:12::plot:20 [ main::j#2 ] ) -- pbuc1_derefidx_vbuyy=vbuc2
//SEG49 [23] *((const byte*) SCREEN#0 + (byte) plot::x#2) ← (byte) '*' [ ] ( main:2::line:7::plot:18 [ main::i#2 line::l#2 ] main:2::line:12::plot:18 [ main::j#2 line::l#2 ] main:2::line:7::plot:20 [ main::i#2 ] main:2::line:12::plot:20 [ main::j#2 ] ) -- pbuc1_derefidx_vbuaa=vbuc2
tay
lda #'*'
sta SCREEN,y
jmp breturn
@ -849,18 +848,18 @@ FINAL SYMBOL TABLE
(void()) plot((byte) plot::x)
(label) plot::@return
(byte) plot::x
(byte) plot::x#0 reg byte y 4.0
(byte) plot::x#1 reg byte y 4.0
(byte) plot::x#2 reg byte y 6.0
(byte) plot::x#0 reg byte a 4.0
(byte) plot::x#1 reg byte a 4.0
(byte) plot::x#2 reg byte a 6.0
reg byte x [ main::i#2 main::i#1 ]
reg byte x [ main::j#2 main::j#1 ]
reg byte x [ line::l#2 line::l#0 line::l#1 ]
reg byte y [ plot::x#2 plot::x#0 plot::x#1 ]
reg byte a [ plot::x#2 plot::x#0 plot::x#1 ]
FINAL ASSEMBLER
Score: 237
Score: 235
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -922,19 +921,17 @@ main: {
}
//SEG36 line
line: {
//SEG37 [17] (byte) plot::x#0 ← (byte) line::l#2 [ line::l#2 plot::x#0 ] ( main:2::line:7 [ main::i#2 line::l#2 plot::x#0 ] main:2::line:12 [ main::j#2 line::l#2 plot::x#0 ] ) -- vbuyy=vbuxx
//SEG37 [17] (byte) plot::x#0 ← (byte) line::l#2 [ line::l#2 plot::x#0 ] ( main:2::line:7 [ main::i#2 line::l#2 plot::x#0 ] main:2::line:12 [ main::j#2 line::l#2 plot::x#0 ] ) -- vbuaa=vbuxx
txa
tay
//SEG38 [18] call plot param-assignment [ line::l#2 ] ( main:2::line:7 [ main::i#2 line::l#2 ] main:2::line:12 [ main::j#2 line::l#2 ] )
//SEG39 [22] phi from line to plot [phi:line->plot]
//SEG40 [22] phi (byte) plot::x#2 = (byte) plot::x#0 [phi:line->plot#0] -- register_copy
jsr plot
//SEG41 line::@1
//SEG42 [19] (byte) plot::x#1 ← (byte) line::l#2 + (byte/signed byte/word/signed word) 20 [ plot::x#1 ] ( main:2::line:7 [ main::i#2 plot::x#1 ] main:2::line:12 [ main::j#2 plot::x#1 ] ) -- vbuyy=vbuxx_plus_vbuc1
//SEG42 [19] (byte) plot::x#1 ← (byte) line::l#2 + (byte/signed byte/word/signed word) 20 [ plot::x#1 ] ( main:2::line:7 [ main::i#2 plot::x#1 ] main:2::line:12 [ main::j#2 plot::x#1 ] ) -- vbuaa=vbuxx_plus_vbuc1
txa
clc
adc #$14
tay
//SEG43 [20] call plot param-assignment [ ] ( main:2::line:7 [ main::i#2 ] main:2::line:12 [ main::j#2 ] )
//SEG44 [22] phi from line::@1 to plot [phi:line::@1->plot]
//SEG45 [22] phi (byte) plot::x#2 = (byte) plot::x#1 [phi:line::@1->plot#0] -- register_copy
@ -945,7 +942,8 @@ line: {
}
//SEG48 plot
plot: {
//SEG49 [23] *((const byte*) SCREEN#0 + (byte) plot::x#2) ← (byte) '*' [ ] ( main:2::line:7::plot:18 [ main::i#2 line::l#2 ] main:2::line:12::plot:18 [ main::j#2 line::l#2 ] main:2::line:7::plot:20 [ main::i#2 ] main:2::line:12::plot:20 [ main::j#2 ] ) -- pbuc1_derefidx_vbuyy=vbuc2
//SEG49 [23] *((const byte*) SCREEN#0 + (byte) plot::x#2) ← (byte) '*' [ ] ( main:2::line:7::plot:18 [ main::i#2 line::l#2 ] main:2::line:12::plot:18 [ main::j#2 line::l#2 ] main:2::line:7::plot:20 [ main::i#2 ] main:2::line:12::plot:20 [ main::j#2 ] ) -- pbuc1_derefidx_vbuaa=vbuc2
tay
lda #'*'
sta SCREEN,y
//SEG50 plot::@return

View File

@ -25,11 +25,11 @@
(void()) plot((byte) plot::x)
(label) plot::@return
(byte) plot::x
(byte) plot::x#0 reg byte y 4.0
(byte) plot::x#1 reg byte y 4.0
(byte) plot::x#2 reg byte y 6.0
(byte) plot::x#0 reg byte a 4.0
(byte) plot::x#1 reg byte a 4.0
(byte) plot::x#2 reg byte a 6.0
reg byte x [ main::i#2 main::i#1 ]
reg byte x [ main::j#2 main::j#1 ]
reg byte x [ line::l#2 line::l#0 line::l#1 ]
reg byte y [ plot::x#2 plot::x#0 plot::x#1 ]
reg byte a [ plot::x#2 plot::x#0 plot::x#1 ]

View File

@ -485,6 +485,8 @@ Allocated zp ZP_BYTE:3 [ main::j#2 main::j#1 ]
Allocated zp ZP_WORD:4 [ main::$2 ]
Allocated zp ZP_WORD:6 [ main::$9 ]
Allocated zp ZP_WORD:8 [ main::$11 ]
Fragment synthesis pbuc1_derefidx_vbuyy=_deref_pbuz1 - Sub clobber prevents synthesis from vbuaa=_deref_pbuz1
Fragment synthesis pbuc1_derefidx_vbuyy=_deref_pbuz1 - Sub clobber prevents synthesis from vbuaa=_deref_pbuz1
INITIAL ASM
//SEG0 Basic Upstart
@ -539,10 +541,10 @@ main: {
adc #0
sta _2+1
//SEG16 [7] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((byte*~) main::$2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=_deref_pbuz2
ldy i
ldx i
ldy #0
lda (_2),y
sta screen,y
sta screen,x
//SEG17 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_inc_vbuz1
inc i
//SEG18 [9] if((byte) main::i#1!=(byte/signed byte/word/signed word) 11) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1

View File

@ -3050,11 +3050,6 @@ Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto ma
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ scroll#18 scroll#10 scroll#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ]
Statement [8] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 255) goto main::@3 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ( main:2 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ) always clobbers reg byte a
Potential register analysis [27] scroll_bit::c#0 ← ((word)) scroll_bit::$3 missing fragment vwuz1=_word_vbuxx allocation: reg byte x [ scroll_bit::$3 ] zp ZP_WORD:18 [ scroll_bit::c#0 ]
Potential register analysis [27] scroll_bit::c#0 ← ((word)) scroll_bit::$3 missing fragment vwuz1=_word_vbuyy allocation: reg byte y [ scroll_bit::$3 ] zp ZP_WORD:18 [ scroll_bit::c#0 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(scroll_bit:: vwuz1=(word) scroll_bit::c#0 vbuxx=(byte~) scroll_bit::$3 )
vwuz1=_word_vbuyy(scroll_bit:: vwuz1=(word) scroll_bit::c#0 vbuyy=(byte~) scroll_bit::$3 )
Statement [27] (word) scroll_bit::c#0 ← ((word)) (byte~) scroll_bit::$3 [ scroll_bit::c#0 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ scroll_bit::c#0 nxt#19 ] ) always clobbers reg byte a
Statement [28] (word~) scroll_bit::$4 ← (word) scroll_bit::c#0 << (byte/signed byte/word/signed word) 3 [ scroll_bit::$4 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ scroll_bit::$4 nxt#19 ] ) always clobbers reg byte a
Statement [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) always clobbers reg byte a
@ -3081,11 +3076,6 @@ Statement [68] *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill
Statement [70] if((byte*) fillscreen::cursor#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto fillscreen::@1 [ fillscreen::cursor#1 ] ( main:2::fillscreen:5 [ fillscreen::cursor#1 ] ) always clobbers reg byte a
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@2 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ( main:2 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ) always clobbers reg byte a
Statement [8] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 255) goto main::@3 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ( main:2 [ scroll#18 current_bit#29 nxt#31 current_chargen#27 ] ) always clobbers reg byte a
Potential register analysis [27] scroll_bit::c#0 ← ((word)) scroll_bit::$3 missing fragment vwuz1=_word_vbuxx allocation: reg byte x [ scroll_bit::$3 ] zp ZP_WORD:18 [ scroll_bit::c#0 ]
Potential register analysis [27] scroll_bit::c#0 ← ((word)) scroll_bit::$3 missing fragment vwuz1=_word_vbuyy allocation: reg byte y [ scroll_bit::$3 ] zp ZP_WORD:18 [ scroll_bit::c#0 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(scroll_bit:: vwuz1=(word) scroll_bit::c#0 vbuxx=(byte~) scroll_bit::$3 )
vwuz1=_word_vbuyy(scroll_bit:: vwuz1=(word) scroll_bit::c#0 vbuyy=(byte~) scroll_bit::$3 )
Statement [27] (word) scroll_bit::c#0 ← ((word)) (byte~) scroll_bit::$3 [ scroll_bit::c#0 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ scroll_bit::c#0 nxt#19 ] ) always clobbers reg byte a
Statement [28] (word~) scroll_bit::$4 ← (word) scroll_bit::c#0 << (byte/signed byte/word/signed word) 3 [ scroll_bit::$4 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ scroll_bit::$4 nxt#19 ] ) always clobbers reg byte a
Statement [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) always clobbers reg byte a
@ -3139,9 +3129,6 @@ Uplifting [fillscreen] best 8831 combination zp ZP_WORD:14 [ fillscreen::cursor#
Uplifting [next_char] best 8813 combination reg byte a [ next_char::return#1 next_char::c#0 next_char::c#1 ] reg byte a [ next_char::return#0 ]
Uplifting [main] best 8813 combination
Uplifting [scroll_soft] best 8813 combination
MISSING FRAGMENTS
vwuz1=_word_vbuxx(scroll_bit:: vwuz1=(word) scroll_bit::c#0 vbuxx=(byte~) scroll_bit::$3 )
vwuz1=_word_vbuyy(scroll_bit:: vwuz1=(word) scroll_bit::c#0 vbuyy=(byte~) scroll_bit::$3 )
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ]
Uplifting [] best 8813 combination zp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ]
Coalescing zero page register [ zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 ] ] with [ zp ZP_WORD:14 [ fillscreen::cursor#2 fillscreen::cursor#1 ] ]

View File

@ -4,12 +4,10 @@
jsr main
main: {
.const screen = $400
.label i = 2
ldx #0
lda #-$7f
sta i
ldy #0
ldx #-$7f
b1:
lda i
txa
sec
sbc #$7f
bvc !+
@ -18,9 +16,9 @@ main: {
bmi b2
rts
b2:
lda i
sta screen,x
inc i
txa
sta screen,y
inx
iny
jmp b1
}

View File

@ -354,19 +354,9 @@ main: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Potential register analysis [6] if(main::i#2<127) goto main::@2 missing fragment vbsxx_lt_vbuc1_then_la1 allocation: reg byte x [ main::i#2 main::i#1 ]
Potential register analysis [6] if(main::i#2<127) goto main::@2 missing fragment vbsyy_lt_vbuc1_then_la1 allocation: reg byte y [ main::i#2 main::i#1 ]
MISSING FRAGMENTS
vbsxx_lt_vbuc1_then_la1(main:: vbsxx=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 )
vbsyy_lt_vbuc1_then_la1(main:: vbsyy=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 )
Statement [6] if((signed byte) main::i#2<(byte/signed byte/word/signed word) 127) 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 ]
Potential register analysis [6] if(main::i#2<127) goto main::@2 missing fragment vbsxx_lt_vbuc1_then_la1 allocation: reg byte x [ main::i#2 main::i#1 ]
Potential register analysis [6] if(main::i#2<127) goto main::@2 missing fragment vbsyy_lt_vbuc1_then_la1 allocation: reg byte y [ main::i#2 main::i#1 ]
MISSING FRAGMENTS
vbsxx_lt_vbuc1_then_la1(main:: vbsxx=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 )
vbsyy_lt_vbuc1_then_la1(main:: vbsyy=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 )
Statement [6] if((signed byte) main::i#2<(byte/signed byte/word/signed word) 127) goto main::@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 ,
@ -376,15 +366,8 @@ REGISTER UPLIFT SCOPES
Uplift Scope [main] 28.6: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 22: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:4 [ main::$2 ]
Uplift Scope []
Uplifting [main] best 468 combination reg byte x [ main::j#2 main::j#1 ] zp ZP_BYTE:2 [ main::i#2 main::i#1 ] reg byte a [ main::$2 ]
Uplifting [] best 468 combination
MISSING FRAGMENTS
vbsxx_lt_vbuc1_then_la1(main:: vbsxx=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 )
vbsyy_lt_vbuc1_then_la1(main:: vbsyy=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 )
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Uplifting [main] best 468 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
MISSING FRAGMENTS
vbsyy_lt_vbuc1_then_la1(main:: vbsyy=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 )
Uplifting [main] best 388 combination reg byte y [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$2 ]
Uplifting [] best 388 combination
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
@ -411,19 +394,17 @@ bend:
//SEG9 main
main: {
.const screen = $400
.label i = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (byte) main::j#2 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
ldx #0
//SEG12 [5] phi (signed byte) main::i#2 = -(byte/signed byte/word/signed word) 127 [phi:main->main::@1#1] -- vbsz1=vbsc1
lda #-$7f
sta i
//SEG11 [5] phi (byte) main::j#2 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1
ldy #0
//SEG12 [5] phi (signed byte) main::i#2 = -(byte/signed byte/word/signed word) 127 [phi:main->main::@1#1] -- vbsxx=vbsc1
ldx #-$7f
jmp b1
//SEG13 main::@1
b1:
//SEG14 [6] if((signed byte) main::i#2<(byte/signed byte/word/signed word) 127) goto main::@2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) -- vbsz1_lt_vbuc1_then_la1
lda i
//SEG14 [6] if((signed byte) main::i#2<(byte/signed byte/word/signed word) 127) goto main::@2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) -- vbsxx_lt_vbuc1_then_la1
txa
sec
sbc #$7f
bvc !+
@ -437,14 +418,14 @@ main: {
rts
//SEG17 main::@2
b2:
//SEG18 [8] (byte~) main::$2 ← ((byte)) (signed byte) main::i#2 [ main::i#2 main::j#2 main::$2 ] ( main:2 [ main::i#2 main::j#2 main::$2 ] ) -- vbuaa=_byte_vbsz1
lda i
//SEG19 [9] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte~) main::$2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
sta screen,x
//SEG20 [10] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 [ main::j#2 main::i#1 ] ( main:2 [ main::j#2 main::i#1 ] ) -- vbsz1=_inc_vbsz1
inc i
//SEG21 [11] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::i#1 main::j#1 ] ( main:2 [ main::i#1 main::j#1 ] ) -- vbuxx=_inc_vbuxx
//SEG18 [8] (byte~) main::$2 ← ((byte)) (signed byte) main::i#2 [ main::i#2 main::j#2 main::$2 ] ( main:2 [ main::i#2 main::j#2 main::$2 ] ) -- vbuaa=_byte_vbsxx
txa
//SEG19 [9] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte~) main::$2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) -- pbuc1_derefidx_vbuyy=vbuaa
sta screen,y
//SEG20 [10] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 [ main::j#2 main::i#1 ] ( main:2 [ main::j#2 main::i#1 ] ) -- vbsxx=_inc_vbsxx
inx
//SEG21 [11] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::i#1 main::j#1 ] ( main:2 [ main::i#1 main::j#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG22 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
b1_from_b2:
//SEG23 [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy
@ -480,21 +461,21 @@ FINAL SYMBOL TABLE
(label) main::@2
(label) main::@return
(signed byte) main::i
(signed byte) main::i#1 i zp ZP_BYTE:2 11.0
(signed byte) main::i#2 i zp ZP_BYTE:2 11.0
(signed byte) main::i#1 reg byte x 11.0
(signed byte) main::i#2 reg byte x 11.0
(byte) main::j
(byte) main::j#1 reg byte x 22.0
(byte) main::j#2 reg byte x 6.6000000000000005
(byte) main::j#1 reg byte y 22.0
(byte) main::j#2 reg byte y 6.6000000000000005
(byte*) main::screen
(const byte*) main::screen#0 screen = ((byte*))(word/signed word) 1024
zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
reg byte x [ main::j#2 main::j#1 ]
reg byte x [ main::i#2 main::i#1 ]
reg byte y [ main::j#2 main::j#1 ]
reg byte a [ main::$2 ]
FINAL ASSEMBLER
Score: 402
Score: 322
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -512,17 +493,15 @@ Score: 402
//SEG9 main
main: {
.const screen = $400
.label i = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
//SEG11 [5] phi (byte) main::j#2 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
ldx #0
//SEG12 [5] phi (signed byte) main::i#2 = -(byte/signed byte/word/signed word) 127 [phi:main->main::@1#1] -- vbsz1=vbsc1
lda #-$7f
sta i
//SEG11 [5] phi (byte) main::j#2 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1
ldy #0
//SEG12 [5] phi (signed byte) main::i#2 = -(byte/signed byte/word/signed word) 127 [phi:main->main::@1#1] -- vbsxx=vbsc1
ldx #-$7f
//SEG13 main::@1
b1:
//SEG14 [6] if((signed byte) main::i#2<(byte/signed byte/word/signed word) 127) goto main::@2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) -- vbsz1_lt_vbuc1_then_la1
lda i
//SEG14 [6] if((signed byte) main::i#2<(byte/signed byte/word/signed word) 127) goto main::@2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) -- vbsxx_lt_vbuc1_then_la1
txa
sec
sbc #$7f
bvc !+
@ -534,14 +513,14 @@ main: {
rts
//SEG17 main::@2
b2:
//SEG18 [8] (byte~) main::$2 ← ((byte)) (signed byte) main::i#2 [ main::i#2 main::j#2 main::$2 ] ( main:2 [ main::i#2 main::j#2 main::$2 ] ) -- vbuaa=_byte_vbsz1
lda i
//SEG19 [9] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte~) main::$2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
sta screen,x
//SEG20 [10] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 [ main::j#2 main::i#1 ] ( main:2 [ main::j#2 main::i#1 ] ) -- vbsz1=_inc_vbsz1
inc i
//SEG21 [11] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::i#1 main::j#1 ] ( main:2 [ main::i#1 main::j#1 ] ) -- vbuxx=_inc_vbuxx
//SEG18 [8] (byte~) main::$2 ← ((byte)) (signed byte) main::i#2 [ main::i#2 main::j#2 main::$2 ] ( main:2 [ main::i#2 main::j#2 main::$2 ] ) -- vbuaa=_byte_vbsxx
txa
//SEG19 [9] *((const byte*) main::screen#0 + (byte) main::j#2) ← (byte~) main::$2 [ main::i#2 main::j#2 ] ( main:2 [ main::i#2 main::j#2 ] ) -- pbuc1_derefidx_vbuyy=vbuaa
sta screen,y
//SEG20 [10] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 [ main::j#2 main::i#1 ] ( main:2 [ main::j#2 main::i#1 ] ) -- vbsxx=_inc_vbsxx
inx
//SEG21 [11] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::i#1 main::j#1 ] ( main:2 [ main::i#1 main::j#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG22 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
//SEG23 [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@2->main::@1#0] -- register_copy
//SEG24 [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@2->main::@1#1] -- register_copy

View File

@ -7,14 +7,14 @@
(label) main::@2
(label) main::@return
(signed byte) main::i
(signed byte) main::i#1 i zp ZP_BYTE:2 11.0
(signed byte) main::i#2 i zp ZP_BYTE:2 11.0
(signed byte) main::i#1 reg byte x 11.0
(signed byte) main::i#2 reg byte x 11.0
(byte) main::j
(byte) main::j#1 reg byte x 22.0
(byte) main::j#2 reg byte x 6.6000000000000005
(byte) main::j#1 reg byte y 22.0
(byte) main::j#2 reg byte y 6.6000000000000005
(byte*) main::screen
(const byte*) main::screen#0 screen = ((byte*))(word/signed word) 1024
zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
reg byte x [ main::j#2 main::j#1 ]
reg byte x [ main::i#2 main::i#1 ]
reg byte y [ main::j#2 main::j#1 ]
reg byte a [ main::$2 ]

View File

@ -116,8 +116,8 @@ print_byte: {
jsr print_char
txa
and #$f
tax
lda hextab,x
tay
lda hextab,y
jsr print_char
rts
hextab: .text "0123456789abcdef"

View File

@ -3178,11 +3178,6 @@ divFACby10: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Potential register analysis [11] setFAC::w#1 ← ((word)) main::i#10 missing fragment vwuz1=_word_vbuxx allocation: reg byte x [ main::i#10 main::i#1 ] zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ]
Potential register analysis [11] setFAC::w#1 ← ((word)) main::i#10 missing fragment vwuz1=_word_vbuyy allocation: reg byte y [ main::i#10 main::i#1 ] zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(main:: vwuz1=(word) setFAC::w#1 vbuxx=(byte) main::i#10 )
vwuz1=_word_vbuyy(main:: vwuz1=(word) setFAC::w#1 vbuyy=(byte) main::i#10 )
Statement [11] (word) setFAC::w#1 ← ((word)) (byte) main::i#10 [ main::i#10 char_cursor#32 line_cursor#13 setFAC::w#1 ] ( main:2 [ main::i#10 char_cursor#32 line_cursor#13 setFAC::w#1 ] ) 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 [29] (word) getFAC::return#2 ← (word) getFAC::return#0 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#2 ] ( main:2 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#2 ] ) always clobbers reg byte a
@ -3268,7 +3263,7 @@ Uplifting [] best 6314 combination zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 l
Uplifting [setFAC] best 6314 combination zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ]
Uplifting [getFAC] best 6314 combination zp ZP_WORD:17 [ getFAC::return#2 ] zp ZP_WORD:23 [ getFAC::return#0 ]
Uplifting [prepareMEM] best 6302 combination zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$1 ]
Uplifting [print_byte] best 6290 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte y [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [print_byte] best 6290 combination reg byte x [ 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 6281 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
Uplifting [main] best 6281 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
Uplifting [print_word] best 6281 combination zp ZP_WORD:19 [ print_word::w#0 ]
@ -3578,14 +3573,14 @@ print_word: {
}
//SEG105 print_byte
print_byte: {
//SEG106 [49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#31 print_byte::$0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_byte::$0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_byte::$0 ] ) -- vbuyy=vbuxx_ror_4
//SEG106 [49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#31 print_byte::$0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_byte::$0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_byte::$0 ] ) -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
//SEG107 [50] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG107 [50] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda hextab,y
//SEG108 [51] call print_char param-assignment [ char_cursor#10 print_byte::b#2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::b#2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::b#2 ] )
//SEG109 [56] phi from print_byte to print_char [phi:print_byte->print_char]
@ -3600,8 +3595,8 @@ print_byte: {
txa
and #$f
//SEG114 [53] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tax
lda hextab,x
tay
lda hextab,y
//SEG115 [54] call print_char param-assignment [ char_cursor#10 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 ] )
//SEG116 [56] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
print_char_from_b1:
@ -3997,7 +3992,7 @@ FINAL SYMBOL TABLE
(byte*) prepareMEM::mem#4 mem zp ZP_WORD:7 4.0
(byte*) prepareMEM::mem#5 mem zp ZP_WORD:7 3.333333333333333
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte y 4.0
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(label) print_byte::@1
(label) print_byte::@return
@ -4041,7 +4036,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:5 [ char_cursor#23 char_cursor#31 char_cursor#32 char_cursor#48 char_cursor#10 ]
zp ZP_WORD:7 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setFAC::w#3 setFAC::w#1 setMEMtoFAC::mem#2 getFAC::return#2 print_word::w#0 getFAC::return#0 ]
reg byte y [ print_byte::$0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
reg byte a [ prepareMEM::$0 ]
reg byte a [ prepareMEM::$1 ]
@ -4266,14 +4261,14 @@ print_word: {
}
//SEG105 print_byte
print_byte: {
//SEG106 [49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#31 print_byte::$0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_byte::$0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_byte::$0 ] ) -- vbuyy=vbuxx_ror_4
//SEG106 [49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#2 char_cursor#31 print_byte::$0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_byte::$0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_byte::$0 ] ) -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
//SEG107 [50] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG107 [50] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#2 char_cursor#31 print_char::ch#0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#31 print_char::ch#0 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#31 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda hextab,y
//SEG108 [51] call print_char param-assignment [ char_cursor#10 print_byte::b#2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::b#2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::b#2 ] )
//SEG109 [56] phi from print_byte to print_char [phi:print_byte->print_char]
@ -4285,8 +4280,8 @@ print_byte: {
txa
and #$f
//SEG114 [53] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#10 print_char::ch#1 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_char::ch#1 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tax
lda hextab,x
tay
lda hextab,y
//SEG115 [54] call print_char param-assignment [ char_cursor#10 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 ] )
//SEG116 [56] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
//SEG117 [56] phi (byte*) char_cursor#23 = (byte*) char_cursor#10 [phi:print_byte::@1->print_char#0] -- register_copy

View File

@ -72,7 +72,7 @@
(byte*) prepareMEM::mem#4 mem zp ZP_WORD:7 4.0
(byte*) prepareMEM::mem#5 mem zp ZP_WORD:7 3.333333333333333
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte y 4.0
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(label) print_byte::@1
(label) print_byte::@return
@ -116,7 +116,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:5 [ char_cursor#23 char_cursor#31 char_cursor#32 char_cursor#48 char_cursor#10 ]
zp ZP_WORD:7 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setFAC::w#3 setFAC::w#1 setMEMtoFAC::mem#2 getFAC::return#2 print_word::w#0 getFAC::return#0 ]
reg byte y [ print_byte::$0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
reg byte a [ prepareMEM::$0 ]
reg byte a [ prepareMEM::$1 ]

View File

@ -19,7 +19,7 @@
.const sinlen_x = $dd
.const sinlen_y = $c5
.const sprites = $2000
.label progress_idx = 3
.label progress_idx = 4
.label progress_cursor = $a
.label sin_idx_x = 2
.label sin_idx_y = 3
@ -142,8 +142,7 @@ init: {
sta gen_sintab.length
lda #0
sta gen_sintab.min
lda #$ff
sta gen_sintab.max
ldx #$ff
jsr gen_sintab
lda #<SCREEN+$28
sta progress_init.line
@ -158,8 +157,7 @@ init: {
sta gen_sintab.length
lda #$32
sta gen_sintab.min
lda #$d0
sta gen_sintab.max
ldx #$d0
jsr gen_sintab
jsr clear_screen
rts
@ -192,11 +190,10 @@ gen_sintab: {
.const f_2pi = $e2e5
.label _23 = $c
.label i = 2
.label max = 2
.label min = 3
.label length = 4
.label min = 2
.label length = 3
.label sintab = 8
lda max
txa
sta setFAC.w
lda #0
sta setFAC.w+1
@ -407,9 +404,8 @@ gen_sprites: {
lda #0
sta i
b1:
ldy i
lda cml,y
sta gen_chargen_sprite.ch
ldx i
ldy cml,x
lda spr
sta gen_chargen_sprite.sprite
lda spr+1
@ -432,7 +428,6 @@ gen_sprites: {
gen_chargen_sprite: {
.label _0 = $c
.label _1 = $c
.label ch = 3
.label sprite = $a
.label chargen = $c
.label bits = 4
@ -440,7 +435,7 @@ gen_chargen_sprite: {
.label x = 5
.label y = 3
.label c = 6
lda ch
tya
sta _0
lda #0
sta _0+1
@ -471,8 +466,8 @@ gen_chargen_sprite: {
tay
sta s_gen
b2:
lda bits
and #$80
lda #$80
and bits
cmp #0
beq b6
lda #1

View File

@ -6351,9 +6351,9 @@ anim: {
lda _5
sta SPRITES_XPOS,y
//SEG51 [22] *((const byte*) SPRITES_YPOS#0 + (byte) anim::j2#2) ← *((const byte[197]) sintab_y#0 + (byte) anim::yidx#3) [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy yidx
lda sintab_y,y
ldy j2
ldx yidx
lda sintab_y,x
sta SPRITES_YPOS,y
//SEG52 [23] (byte) anim::xidx#1 ← (byte) anim::xidx#3 + (byte/signed byte/word/signed word) 10 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#1 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::j2#2 anim::yidx#3 anim::j#2 anim::x_msb#1 anim::xidx#1 ] ) -- vbuz1=vbuz1_plus_vbuc1
lda xidx
@ -7643,11 +7643,6 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ in
Statement [49] *((const byte*) COLS#0+(byte/signed byte/word/signed word) 40 + (byte) init::i#2) ← (byte/signed byte/word/signed word) 11 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a
Statement [69] *((byte*) clear_screen::sc#2) ← (byte) ' ' [ clear_screen::sc#2 ] ( main:2::init:5::clear_screen:46 [ clear_screen::sc#2 ] main:2::init:5::clear_screen:65 [ clear_screen::sc#2 ] ) always clobbers reg byte a reg byte y
Statement [71] if((byte*) clear_screen::sc#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto clear_screen::@1 [ clear_screen::sc#1 ] ( main:2::init:5::clear_screen:46 [ clear_screen::sc#1 ] main:2::init:5::clear_screen:65 [ clear_screen::sc#1 ] ) always clobbers reg byte a
Potential register analysis [74] setFAC::w#0 ← ((word)) gen_sintab::max#2 missing fragment vwuz1=_word_vbuxx allocation: reg byte x [ gen_sintab::max#2 ] zp ZP_WORD:29 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ]
Potential register analysis [74] setFAC::w#0 ← ((word)) gen_sintab::max#2 missing fragment vwuz1=_word_vbuyy allocation: reg byte y [ gen_sintab::max#2 ] zp ZP_WORD:29 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(gen_sintab:: vwuz1=(word) setFAC::w#0 vbuxx=(byte) gen_sintab::max#2 )
vwuz1=_word_vbuyy(gen_sintab:: vwuz1=(word) setFAC::w#0 vbuyy=(byte) gen_sintab::max#2 )
Statement [74] (word) setFAC::w#0 ← ((word)) (byte) gen_sintab::max#2 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ gen_sintab::min#2 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ gen_sintab::length#10 ]
@ -7657,11 +7652,6 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ g
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:14 [ gen_sintab::length#10 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ gen_sintab::length#10 ]
Statement [79] (word) setFAC::w#1 ← ((word)) (byte) gen_sintab::min#2 [ gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#1 progress_init::line#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#1 progress_init::line#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#1 progress_init::line#2 ] ) always clobbers reg byte a
Potential register analysis [98] setFAC::w#3 ← ((word)) gen_sintab::i#10 missing fragment vwuz1=_word_vbuxx allocation: zp ZP_WORD:29 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] reg byte x [ gen_sintab::i#10 gen_sintab::i#1 ]
Potential register analysis [98] setFAC::w#3 ← ((word)) gen_sintab::i#10 missing fragment vwuz1=_word_vbuyy allocation: zp ZP_WORD:29 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] reg byte y [ gen_sintab::i#10 gen_sintab::i#1 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(gen_sintab:: vwuz1=(word) setFAC::w#3 vbuxx=(byte) gen_sintab::i#10 )
vwuz1=_word_vbuyy(gen_sintab:: vwuz1=(word) setFAC::w#3 vbuyy=(byte) gen_sintab::i#10 )
Statement [98] (word) setFAC::w#3 ← ((word)) (byte) gen_sintab::i#10 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 setFAC::w#3 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 setFAC::w#3 ] main:2::init:5::gen_sintab:63 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 setFAC::w#3 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ]
@ -7669,9 +7659,6 @@ Statement [104] (word) setFAC::w#4 ← ((word)) (byte) gen_sintab::length#10 [ g
Statement [116] (word) getFAC::return#2 ← (word) getFAC::return#0 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 getFAC::return#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 getFAC::return#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 getFAC::return#2 ] ) always clobbers reg byte a
Statement [117] (word~) gen_sintab::$23 ← (word) getFAC::return#2 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 gen_sintab::$23 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 gen_sintab::$23 ] main:2::init:5::gen_sintab:63 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 gen_sintab::$23 ] ) always clobbers reg byte a
Statement [118] (byte~) gen_sintab::$24 ← ((byte)) (word~) gen_sintab::$23 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 gen_sintab::$24 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 gen_sintab::$24 ] main:2::init:5::gen_sintab:63 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#34 progress_cursor#34 gen_sintab::$24 ] ) always clobbers reg byte a
Potential register analysis [119] *(gen_sintab::sintab#12 + gen_sintab::i#10) ← gen_sintab::$24 missing fragment pbuz1_derefidx_vbuxx=vbuyy allocation: zp ZP_WORD:15 [ gen_sintab::sintab#12 ] reg byte y [ gen_sintab::$24 ] reg byte x [ gen_sintab::i#10 gen_sintab::i#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuxx=vbuyy(gen_sintab:: pbuz1=(byte*) gen_sintab::sintab#12 vbuxx=(byte) gen_sintab::i#10 vbuyy=(byte~) gen_sintab::$24 )
Statement [126] *((byte*) progress_cursor#34) ← *((const byte[]) progress_inc::progress_chars#0+(byte/signed byte/word/signed word) 8) [ progress_cursor#34 ] ( main:2::init:5::gen_sintab:59::progress_inc:120 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_cursor#34 ] main:2::init:5::gen_sintab:63::progress_inc:120 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_cursor#34 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ]
Statement [129] *((byte*) progress_cursor#11) ← *((const byte[]) progress_inc::progress_chars#0 + (byte) progress_idx#12) [ progress_idx#12 progress_cursor#11 ] ( main:2::init:5::gen_sintab:59::progress_inc:120 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#12 progress_cursor#11 ] main:2::init:5::gen_sintab:63::progress_inc:120 [ gen_sintab::length#10 gen_sintab::sintab#12 gen_sintab::i#10 progress_idx#12 progress_cursor#11 ] ) always clobbers reg byte a reg byte y
@ -7695,11 +7682,6 @@ Statement [176] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::sp
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:64 [ gen_chargen_sprite::ch#0 ]
Statement [178] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte/signed byte/word/signed word) 64 [ gen_sprites::i#2 gen_sprites::spr#1 ] ( main:2::init:5::gen_sprites:55 [ gen_sprites::i#2 gen_sprites::spr#1 ] ) always clobbers reg byte a
Potential register analysis [182] gen_chargen_sprite::$0 ← ((word)) gen_chargen_sprite::ch#0 missing fragment vwuz1=_word_vbuxx allocation: reg byte x [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:65 [ gen_chargen_sprite::$0 ]
Potential register analysis [182] gen_chargen_sprite::$0 ← ((word)) gen_chargen_sprite::ch#0 missing fragment vwuz1=_word_vbuyy allocation: reg byte y [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:65 [ gen_chargen_sprite::$0 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(gen_chargen_sprite:: vwuz1=(word~) gen_chargen_sprite::$0 vbuxx=(byte) gen_chargen_sprite::ch#0 )
vwuz1=_word_vbuyy(gen_chargen_sprite:: vwuz1=(word~) gen_chargen_sprite::$0 vbuyy=(byte) gen_chargen_sprite::ch#0 )
Statement [182] (word~) gen_chargen_sprite::$0 ← ((word)) (byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) always clobbers reg byte a
Statement [183] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte/signed byte/word/signed word) 3 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ) always clobbers reg byte a
Statement [184] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a
@ -7715,11 +7697,6 @@ Statement [195] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:42 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ]
Statement [196] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a
Potential register analysis [199] *(gen_chargen_sprite::sprite#3 + 0) ← gen_chargen_sprite::s_gen#1 missing fragment pbuz1_derefidx_vbuc1=vbuxx allocation: zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte x [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
Potential register analysis [199] *(gen_chargen_sprite::sprite#3 + 0) ← gen_chargen_sprite::s_gen#1 missing fragment pbuz1_derefidx_vbuc1=vbuyy allocation: zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte y [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuc1=vbuxx(gen_chargen_sprite:: pbuz1=(byte*) gen_chargen_sprite::sprite#3 vbuc1=(byte/signed byte/word/signed word) 0 vbuxx=(byte) gen_chargen_sprite::s_gen#1 )
pbuz1_derefidx_vbuc1=vbuyy(gen_chargen_sprite:: pbuz1=(byte*) gen_chargen_sprite::sprite#3 vbuc1=(byte/signed byte/word/signed word) 0 vbuyy=(byte) gen_chargen_sprite::s_gen#1 )
Statement [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte/signed byte/word/signed word) 0) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ]
@ -7728,13 +7705,7 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:38 [ g
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:42 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
Potential register analysis [200] *(gen_chargen_sprite::sprite#3 + 3) ← gen_chargen_sprite::s_gen#1 missing fragment pbuz1_derefidx_vbuc1=vbuxx allocation: zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte x [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuc1=vbuxx(gen_chargen_sprite:: pbuz1=(byte*) gen_chargen_sprite::sprite#3 vbuc1=(byte/signed byte/word/signed word) 3 vbuxx=(byte) gen_chargen_sprite::s_gen#1 )
Statement [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte/signed byte/word/signed word) 3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y
Potential register analysis [201] *(gen_chargen_sprite::sprite#3 + 6) ← gen_chargen_sprite::s_gen#1 missing fragment pbuz1_derefidx_vbuc1=vbuxx allocation: zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte x [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuc1=vbuxx(gen_chargen_sprite:: pbuz1=(byte*) gen_chargen_sprite::sprite#3 vbuc1=(byte/signed byte/word/signed word) 6 vbuxx=(byte) gen_chargen_sprite::s_gen#1 )
Statement [201] *((byte*) gen_chargen_sprite::sprite#3 + (byte/signed byte/word/signed word) 6) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ) always clobbers reg byte a reg byte y
Statement [209] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte/signed byte/word/signed word) 6 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ) always clobbers reg byte a
Statement [212] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 ] ) always clobbers reg byte a
@ -7764,11 +7735,6 @@ Statement [48] *((const byte*) COLS#0 + (byte) init::i#2) ← (byte/signed byte/
Statement [49] *((const byte*) COLS#0+(byte/signed byte/word/signed word) 40 + (byte) init::i#2) ← (byte/signed byte/word/signed word) 11 [ init::i#2 ] ( main:2::init:5 [ init::i#2 ] ) always clobbers reg byte a
Statement [69] *((byte*) clear_screen::sc#2) ← (byte) ' ' [ clear_screen::sc#2 ] ( main:2::init:5::clear_screen:46 [ clear_screen::sc#2 ] main:2::init:5::clear_screen:65 [ clear_screen::sc#2 ] ) always clobbers reg byte a reg byte y
Statement [71] if((byte*) clear_screen::sc#1<(const byte*) SCREEN#0+(word/signed word) 1000) goto clear_screen::@1 [ clear_screen::sc#1 ] ( main:2::init:5::clear_screen:46 [ clear_screen::sc#1 ] main:2::init:5::clear_screen:65 [ clear_screen::sc#1 ] ) always clobbers reg byte a
Potential register analysis [74] setFAC::w#0 ← ((word)) gen_sintab::max#2 missing fragment vwuz1=_word_vbuxx allocation: reg byte x [ gen_sintab::max#2 ] zp ZP_WORD:29 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ]
Potential register analysis [74] setFAC::w#0 ← ((word)) gen_sintab::max#2 missing fragment vwuz1=_word_vbuyy allocation: reg byte y [ gen_sintab::max#2 ] zp ZP_WORD:29 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(gen_sintab:: vwuz1=(word) setFAC::w#0 vbuxx=(byte) gen_sintab::max#2 )
vwuz1=_word_vbuyy(gen_sintab:: vwuz1=(word) setFAC::w#0 vbuyy=(byte) gen_sintab::max#2 )
Statement [74] (word) setFAC::w#0 ← ((word)) (byte) gen_sintab::max#2 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ) always clobbers reg byte a
Statement asm { lda#0 ldx#0 ldy#0 } always clobbers reg byte a reg byte x reg byte y
Statement [79] (word) setFAC::w#1 ← ((word)) (byte) gen_sintab::min#2 [ gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#1 progress_init::line#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#1 progress_init::line#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#1 progress_init::line#2 ] ) always clobbers reg byte a
@ -7797,11 +7763,6 @@ Statement [163] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 [ prepa
Statement asm { ldx$fe ldy$ff jsr$bbd4 } always clobbers reg byte x reg byte y
Statement [176] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ( main:2::init:5::gen_sprites:55 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ) always clobbers reg byte a
Statement [178] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte/signed byte/word/signed word) 64 [ gen_sprites::i#2 gen_sprites::spr#1 ] ( main:2::init:5::gen_sprites:55 [ gen_sprites::i#2 gen_sprites::spr#1 ] ) always clobbers reg byte a
Potential register analysis [182] gen_chargen_sprite::$0 ← ((word)) gen_chargen_sprite::ch#0 missing fragment vwuz1=_word_vbuxx allocation: reg byte x [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:65 [ gen_chargen_sprite::$0 ]
Potential register analysis [182] gen_chargen_sprite::$0 ← ((word)) gen_chargen_sprite::ch#0 missing fragment vwuz1=_word_vbuyy allocation: reg byte y [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:65 [ gen_chargen_sprite::$0 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(gen_chargen_sprite:: vwuz1=(word~) gen_chargen_sprite::$0 vbuxx=(byte) gen_chargen_sprite::ch#0 )
vwuz1=_word_vbuyy(gen_chargen_sprite:: vwuz1=(word~) gen_chargen_sprite::$0 vbuyy=(byte) gen_chargen_sprite::ch#0 )
Statement [182] (word~) gen_chargen_sprite::$0 ← ((word)) (byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) always clobbers reg byte a
Statement [183] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte/signed byte/word/signed word) 3 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ) always clobbers reg byte a
Statement [184] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a
@ -7810,17 +7771,8 @@ Statement [188] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_spri
Statement [190] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte/word/signed word) 128 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ) always clobbers reg byte a
Statement [195] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte/signed byte/word/signed word) 1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ) always clobbers reg byte a
Statement [196] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a
Potential register analysis [199] *(gen_chargen_sprite::sprite#3 + 0) ← gen_chargen_sprite::s_gen#1 missing fragment pbuz1_derefidx_vbuc1=vbuxx allocation: zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte x [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuc1=vbuxx(gen_chargen_sprite:: pbuz1=(byte*) gen_chargen_sprite::sprite#3 vbuc1=(byte/signed byte/word/signed word) 0 vbuxx=(byte) gen_chargen_sprite::s_gen#1 )
Statement [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte/signed byte/word/signed word) 0) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y
Potential register analysis [200] *(gen_chargen_sprite::sprite#3 + 3) ← gen_chargen_sprite::s_gen#1 missing fragment pbuz1_derefidx_vbuc1=vbuxx allocation: zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte x [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuc1=vbuxx(gen_chargen_sprite:: pbuz1=(byte*) gen_chargen_sprite::sprite#3 vbuc1=(byte/signed byte/word/signed word) 3 vbuxx=(byte) gen_chargen_sprite::s_gen#1 )
Statement [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte/signed byte/word/signed word) 3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y
Potential register analysis [201] *(gen_chargen_sprite::sprite#3 + 6) ← gen_chargen_sprite::s_gen#1 missing fragment pbuz1_derefidx_vbuc1=vbuxx allocation: zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte x [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuc1=vbuxx(gen_chargen_sprite:: pbuz1=(byte*) gen_chargen_sprite::sprite#3 vbuc1=(byte/signed byte/word/signed word) 6 vbuxx=(byte) gen_chargen_sprite::s_gen#1 )
Statement [201] *((byte*) gen_chargen_sprite::sprite#3 + (byte/signed byte/word/signed word) 6) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ) always clobbers reg byte a reg byte y
Statement [209] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte/signed byte/word/signed word) 6 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ) always clobbers reg byte a
Statement [212] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 ] ) always clobbers reg byte a
@ -7911,94 +7863,77 @@ Uplift Scope [main]
Uplift Scope [progress_init]
Uplift Scope [progress_inc]
Uplifting [gen_chargen_sprite] best 1065282 combination zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] reg byte a [ gen_chargen_sprite::$3 ] zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] zp ZP_BYTE:64 [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:65 [ gen_chargen_sprite::$0 ] zp ZP_WORD:67 [ gen_chargen_sprite::$1 ] zp ZP_WORD:69 [ gen_chargen_sprite::chargen#0 ]
Uplifting [gen_chargen_sprite] best 1065251 combination zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] reg byte a [ gen_chargen_sprite::$3 ] zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] reg byte y [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:65 [ gen_chargen_sprite::$0 ] zp ZP_WORD:67 [ gen_chargen_sprite::$1 ] zp ZP_WORD:69 [ gen_chargen_sprite::chargen#0 ]
Uplift attempts [anim] 10000/19440 (limiting to 10000)
Uplifting [anim] best 1062382 combination zp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] reg byte alu [ anim::$3 ] reg byte a [ anim::$5 ] zp ZP_BYTE:8 [ anim::j#2 anim::j#1 ] zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] reg byte a [ anim::$2 ] reg byte x [ anim::j2#2 anim::j2#1 ] zp ZP_WORD:50 [ anim::x#0 ]
Uplifting [anim] best 1062351 combination zp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] reg byte alu [ anim::$3 ] reg byte a [ anim::$5 ] zp ZP_BYTE:8 [ anim::j#2 anim::j#1 ] zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] reg byte a [ anim::$2 ] reg byte x [ anim::j2#2 anim::j2#1 ] zp ZP_WORD:50 [ anim::x#0 ]
Limited combination testing to 10000 combinations of 19440 possible.
Uplifting [place_sprites] best 1061982 combination reg byte x [ place_sprites::j2#1 ] reg byte y [ place_sprites::j#2 place_sprites::j#1 ] zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] reg byte x [ place_sprites::j2#3 place_sprites::j2#2 ] zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ]
Uplifting [setFAC] best 1061982 combination zp ZP_WORD:29 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ]
Uplifting [gen_sintab] best 1061922 combination zp ZP_WORD:57 [ gen_sintab::$23 ] reg byte a [ gen_sintab::$24 ] zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] zp ZP_BYTE:12 [ gen_sintab::max#2 ] zp ZP_BYTE:14 [ gen_sintab::length#10 ] zp ZP_BYTE:13 [ gen_sintab::min#2 ] zp ZP_WORD:15 [ gen_sintab::sintab#12 ]
Uplifting [gen_sprites] best 1061922 combination zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] zp ZP_WORD:34 [ gen_sprites::spr#2 gen_sprites::spr#1 ]
Uplifting [clear_screen] best 1061922 combination zp ZP_WORD:10 [ clear_screen::sc#2 clear_screen::sc#1 ]
Uplifting [prepareMEM] best 1061910 combination zp ZP_WORD:23 [ prepareMEM::mem#5 prepareMEM::mem#2 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$1 ]
Uplifting [init] best 1061760 combination reg byte x [ init::i#2 init::i#1 ]
Uplifting [getFAC] best 1061760 combination zp ZP_WORD:55 [ getFAC::return#2 ] zp ZP_WORD:60 [ getFAC::return#0 ]
Uplifting [] best 1061760 combination zp ZP_WORD:19 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ]
Uplifting [setMEMtoFAC] best 1061760 combination zp ZP_WORD:31 [ setMEMtoFAC::mem#5 ]
Uplifting [addMEMtoFAC] best 1061760 combination zp ZP_WORD:21 [ addMEMtoFAC::mem#2 ]
Uplifting [divMEMbyFAC] best 1061760 combination zp ZP_WORD:27 [ divMEMbyFAC::mem#2 ]
Uplifting [mulFACbyMEM] best 1061760 combination zp ZP_WORD:25 [ mulFACbyMEM::mem#2 ]
Uplifting [setARGtoFAC] best 1061760 combination
Uplifting [subFACfromARG] best 1061760 combination
Uplifting [sinFAC] best 1061760 combination
Uplifting [main] best 1061760 combination
Uplifting [progress_init] best 1061760 combination
Uplifting [progress_inc] best 1061760 combination
MISSING FRAGMENTS
pbuz1_derefidx_vbuc1=vbuxx(gen_chargen_sprite:: pbuz1=(byte*) gen_chargen_sprite::sprite#3 vbuc1=(byte/signed byte/word/signed word) 0 vbuxx=(byte) gen_chargen_sprite::s_gen#1 )
vwuz1=_word_vbuxx(gen_chargen_sprite:: vwuz1=(word~) gen_chargen_sprite::$0 vbuxx=(byte) gen_chargen_sprite::ch#0 )
vwuz1=_word_vbuyy(gen_chargen_sprite:: vwuz1=(word~) gen_chargen_sprite::$0 vbuyy=(byte) gen_chargen_sprite::ch#0 )
vwuz1=_word_vbuxx(gen_sintab:: vwuz1=(word) setFAC::w#0 vbuxx=(byte) gen_sintab::max#2 )
vwuz1=_word_vbuyy(gen_sintab:: vwuz1=(word) setFAC::w#0 vbuyy=(byte) gen_sintab::max#2 )
Uplifting [place_sprites] best 1061951 combination reg byte x [ place_sprites::j2#1 ] reg byte y [ place_sprites::j#2 place_sprites::j#1 ] zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] reg byte x [ place_sprites::j2#3 place_sprites::j2#2 ] zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ]
Uplifting [setFAC] best 1061951 combination zp ZP_WORD:29 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ]
Uplifting [gen_sintab] best 1061884 combination zp ZP_WORD:57 [ gen_sintab::$23 ] reg byte a [ gen_sintab::$24 ] zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] reg byte x [ gen_sintab::max#2 ] zp ZP_BYTE:14 [ gen_sintab::length#10 ] zp ZP_BYTE:13 [ gen_sintab::min#2 ] zp ZP_WORD:15 [ gen_sintab::sintab#12 ]
Uplifting [gen_sprites] best 1061884 combination zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] zp ZP_WORD:34 [ gen_sprites::spr#2 gen_sprites::spr#1 ]
Uplifting [clear_screen] best 1061884 combination zp ZP_WORD:10 [ clear_screen::sc#2 clear_screen::sc#1 ]
Uplifting [prepareMEM] best 1061872 combination zp ZP_WORD:23 [ prepareMEM::mem#5 prepareMEM::mem#2 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$1 ]
Uplifting [init] best 1061722 combination reg byte x [ init::i#2 init::i#1 ]
Uplifting [getFAC] best 1061722 combination zp ZP_WORD:55 [ getFAC::return#2 ] zp ZP_WORD:60 [ getFAC::return#0 ]
Uplifting [] best 1061722 combination zp ZP_WORD:19 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ]
Uplifting [setMEMtoFAC] best 1061722 combination zp ZP_WORD:31 [ setMEMtoFAC::mem#5 ]
Uplifting [addMEMtoFAC] best 1061722 combination zp ZP_WORD:21 [ addMEMtoFAC::mem#2 ]
Uplifting [divMEMbyFAC] best 1061722 combination zp ZP_WORD:27 [ divMEMbyFAC::mem#2 ]
Uplifting [mulFACbyMEM] best 1061722 combination zp ZP_WORD:25 [ mulFACbyMEM::mem#2 ]
Uplifting [setARGtoFAC] best 1061722 combination
Uplifting [subFACfromARG] best 1061722 combination
Uplifting [sinFAC] best 1061722 combination
Uplifting [main] best 1061722 combination
Uplifting [progress_init] best 1061722 combination
Uplifting [progress_inc] best 1061722 combination
Attempting to uplift remaining variables inzp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
Uplifting [gen_chargen_sprite] best 1061760 combination zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
Uplifting [gen_chargen_sprite] best 1061722 combination zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ]
Uplifting [gen_chargen_sprite] best 1061760 combination zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ]
Uplifting [gen_chargen_sprite] best 1061722 combination zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ]
Uplifting [gen_chargen_sprite] best 1061760 combination zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ]
Uplifting [gen_chargen_sprite] best 1061722 combination zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ]
Uplifting [gen_chargen_sprite] best 1061760 combination zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ]
Uplifting [gen_chargen_sprite] best 1061722 combination zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ]
Uplifting [anim] best 1061760 combination zp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ]
Uplifting [anim] best 1061722 combination zp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ]
Uplifting [anim] best 1061760 combination zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ]
Uplifting [anim] best 1061722 combination zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ]
Uplifting [gen_chargen_sprite] best 1061760 combination zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ]
Uplifting [gen_chargen_sprite] best 1061722 combination zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ anim::j#2 anim::j#1 ]
Uplifting [anim] best 1061760 combination zp ZP_BYTE:8 [ anim::j#2 anim::j#1 ]
Uplifting [anim] best 1061722 combination zp ZP_BYTE:8 [ anim::j#2 anim::j#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ]
Uplifting [anim] best 1061760 combination zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ]
Uplifting [anim] best 1061722 combination zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ]
Uplifting [gen_sprites] best 1061760 combination zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ]
Uplifting [gen_sprites] best 1061722 combination zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ]
Uplifting [place_sprites] best 1061760 combination zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ]
Uplifting [place_sprites] best 1061722 combination zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ]
Uplifting [gen_sintab] best 1061760 combination zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ]
Uplifting [gen_sintab] best 1061722 combination zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ]
Uplifting [place_sprites] best 1061760 combination zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ]
Uplifting [place_sprites] best 1061722 combination zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ]
Uplifting [place_sprites] best 1061760 combination zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:64 [ gen_chargen_sprite::ch#0 ]
Uplifting [gen_chargen_sprite] best 1061760 combination zp ZP_BYTE:64 [ gen_chargen_sprite::ch#0 ]
Uplifting [place_sprites] best 1061722 combination zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ]
Uplifting [] best 1061760 combination zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ]
Uplifting [] best 1061722 combination zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ]
Uplifting [] best 1061760 combination zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ]
Uplifting [] best 1061722 combination zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ]
Uplifting [] best 1061760 combination zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:12 [ gen_sintab::max#2 ]
Uplifting [gen_sintab] best 1061760 combination zp ZP_BYTE:12 [ gen_sintab::max#2 ]
Uplifting [] best 1061722 combination zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ gen_sintab::length#10 ]
Uplifting [gen_sintab] best 1061760 combination zp ZP_BYTE:14 [ gen_sintab::length#10 ]
Uplifting [gen_sintab] best 1061722 combination zp ZP_BYTE:14 [ gen_sintab::length#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ gen_sintab::min#2 ]
Uplifting [gen_sintab] best 1061760 combination zp ZP_BYTE:13 [ gen_sintab::min#2 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(gen_chargen_sprite:: vwuz1=(word~) gen_chargen_sprite::$0 vbuxx=(byte) gen_chargen_sprite::ch#0 )
vwuz1=_word_vbuyy(gen_chargen_sprite:: vwuz1=(word~) gen_chargen_sprite::$0 vbuyy=(byte) gen_chargen_sprite::ch#0 )
vwuz1=_word_vbuxx(gen_sintab:: vwuz1=(word) setFAC::w#0 vbuxx=(byte) gen_sintab::max#2 )
vwuz1=_word_vbuyy(gen_sintab:: vwuz1=(word) setFAC::w#0 vbuyy=(byte) gen_sintab::max#2 )
Coalescing zero page register [ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] ] with [ zp ZP_BYTE:12 [ gen_sintab::max#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::max#2 ] ] with [ zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::max#2 gen_sintab::i#10 gen_sintab::i#1 ] ] with [ zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::max#2 gen_sintab::i#10 gen_sintab::i#1 gen_sprites::i#2 gen_sprites::i#1 ] ] with [ zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] ] with [ zp ZP_BYTE:13 [ gen_sintab::min#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::min#2 ] ] with [ zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::min#2 progress_idx#34 progress_idx#12 progress_idx#10 ] ] with [ zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::min#2 progress_idx#34 progress_idx#12 progress_idx#10 gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] ] with [ zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::min#2 progress_idx#34 progress_idx#12 progress_idx#10 gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 place_sprites::spr_x#2 place_sprites::spr_x#1 ] ] with [ zp ZP_BYTE:64 [ gen_chargen_sprite::ch#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] ] with [ zp ZP_BYTE:14 [ gen_sintab::length#10 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 gen_sintab::length#10 ] ] with [ zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 gen_sintab::length#10 gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] ] with [ zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] ]
Uplifting [gen_sintab] best 1061722 combination zp ZP_BYTE:13 [ gen_sintab::min#2 ]
Coalescing zero page register [ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] ] with [ zp ZP_BYTE:13 [ gen_sintab::min#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::min#2 ] ] with [ zp ZP_BYTE:17 [ gen_sintab::i#10 gen_sintab::i#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::min#2 gen_sintab::i#10 gen_sintab::i#1 ] ] with [ zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::min#2 gen_sintab::i#10 gen_sintab::i#1 gen_sprites::i#2 gen_sprites::i#1 ] ] with [ zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] ] with [ zp ZP_BYTE:14 [ gen_sintab::length#10 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::length#10 ] ] with [ zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::length#10 gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] ] with [ zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] ] with [ zp ZP_BYTE:18 [ progress_idx#34 progress_idx#12 progress_idx#10 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 progress_idx#34 progress_idx#12 progress_idx#10 ] ] with [ zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 progress_idx#34 progress_idx#12 progress_idx#10 gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] ] with [ zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] ] with [ zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:7 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] ] with [ zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] ]
Coalescing zero page register [ zp ZP_BYTE:8 [ anim::j#2 anim::j#1 ] ] with [ zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] ]
@ -8047,7 +7982,7 @@ ASSEMBLER BEFORE OPTIMIZATION
.const sinlen_x = $dd
.const sinlen_y = $c5
.const sprites = $2000
.label progress_idx = 3
.label progress_idx = 4
.label progress_cursor = $a
.label sin_idx_x = 2
.label sin_idx_y = 3
@ -8373,9 +8308,8 @@ init: {
//SEG122 [73] phi (byte) gen_sintab::min#2 = (byte/signed byte/word/signed word) 0 [phi:init::@6->gen_sintab#2] -- vbuz1=vbuc1
lda #0
sta gen_sintab.min
//SEG123 [73] phi (byte) gen_sintab::max#2 = (byte/word/signed word) 255 [phi:init::@6->gen_sintab#3] -- vbuz1=vbuc1
lda #$ff
sta gen_sintab.max
//SEG123 [73] phi (byte) gen_sintab::max#2 = (byte/word/signed word) 255 [phi:init::@6->gen_sintab#3] -- vbuxx=vbuc1
ldx #$ff
jsr gen_sintab
//SEG124 [60] phi from init::@6 to init::@7 [phi:init::@6->init::@7]
b7_from_b6:
@ -8410,9 +8344,8 @@ init: {
//SEG135 [73] phi (byte) gen_sintab::min#2 = (byte/signed byte/word/signed word) 50 [phi:init::@8->gen_sintab#2] -- vbuz1=vbuc1
lda #$32
sta gen_sintab.min
//SEG136 [73] phi (byte) gen_sintab::max#2 = (byte/word/signed word) 208 [phi:init::@8->gen_sintab#3] -- vbuz1=vbuc1
lda #$d0
sta gen_sintab.max
//SEG136 [73] phi (byte) gen_sintab::max#2 = (byte/word/signed word) 208 [phi:init::@8->gen_sintab#3] -- vbuxx=vbuc1
ldx #$d0
jsr gen_sintab
//SEG137 [64] phi from init::@8 to init::@9 [phi:init::@8->init::@9]
b9_from_b8:
@ -8475,12 +8408,11 @@ gen_sintab: {
.const f_2pi = $e2e5
.label _23 = $c
.label i = 2
.label max = 2
.label min = 3
.label length = 4
.label min = 2
.label length = 3
.label sintab = 8
//SEG155 [74] (word) setFAC::w#0 ← ((word)) (byte) gen_sintab::max#2 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ) -- vwuz1=_word_vbuz2
lda max
//SEG155 [74] (word) setFAC::w#0 ← ((word)) (byte) gen_sintab::max#2 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ) -- vwuz1=_word_vbuxx
txa
sta setFAC.w
lda #0
sta setFAC.w+1
@ -9031,10 +8963,9 @@ gen_sprites: {
jmp b1
//SEG361 gen_sprites::@1
b1:
//SEG362 [175] (byte) gen_chargen_sprite::ch#0 ← *((const string) gen_sprites::cml#0 + (byte) gen_sprites::i#2) [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 ] ( main:2::init:5::gen_sprites:55 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
ldy i
lda cml,y
sta gen_chargen_sprite.ch
//SEG362 [175] (byte) gen_chargen_sprite::ch#0 ← *((const string) gen_sprites::cml#0 + (byte) gen_sprites::i#2) [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 ] ( main:2::init:5::gen_sprites:55 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1
ldx i
ldy cml,x
//SEG363 [176] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ( main:2::init:5::gen_sprites:55 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ) -- pbuz1=pbuz2
lda spr
sta gen_chargen_sprite.sprite
@ -9070,7 +9001,6 @@ gen_sprites: {
gen_chargen_sprite: {
.label _0 = $c
.label _1 = $c
.label ch = 3
.label sprite = $a
.label chargen = $c
.label bits = 4
@ -9078,8 +9008,8 @@ gen_chargen_sprite: {
.label x = 5
.label y = 3
.label c = 6
//SEG372 [182] (word~) gen_chargen_sprite::$0 ← ((word)) (byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) -- vwuz1=_word_vbuz2
lda ch
//SEG372 [182] (word~) gen_chargen_sprite::$0 ← ((word)) (byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) -- vwuz1=_word_vbuyy
tya
sta _0
lda #0
sta _0+1
@ -9145,8 +9075,8 @@ gen_chargen_sprite: {
//SEG397 gen_chargen_sprite::@2
b2:
//SEG398 [190] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte/word/signed word) 128 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ) -- vbuaa=vbuz1_band_vbuc1
lda bits
and #$80
lda #$80
and bits
//SEG399 [191] if((byte~) gen_chargen_sprite::$3==(byte/signed byte/word/signed word) 0) goto gen_chargen_sprite::@3 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 ] ) -- vbuaa_eq_0_then_la1
cmp #0
beq b3_from_b2
@ -9791,7 +9721,7 @@ FINAL SYMBOL TABLE
(byte) gen_chargen_sprite::c
(byte) gen_chargen_sprite::c#3 c zp ZP_BYTE:6 769.3076923076923
(byte) gen_chargen_sprite::ch
(byte) gen_chargen_sprite::ch#0 ch zp ZP_BYTE:3 6.5
(byte) gen_chargen_sprite::ch#0 reg byte y 6.5
(byte*) gen_chargen_sprite::chargen
(byte*) gen_chargen_sprite::chargen#0 chargen zp ZP_WORD:12 3.678571428571429
(byte) gen_chargen_sprite::s_gen
@ -9855,11 +9785,11 @@ FINAL SYMBOL TABLE
(byte) gen_sintab::i#1 i zp ZP_BYTE:2 16.5
(byte) gen_sintab::i#10 i zp ZP_BYTE:2 1.8333333333333333
(byte) gen_sintab::length
(byte) gen_sintab::length#10 length zp ZP_BYTE:4 0.44
(byte) gen_sintab::length#10 length zp ZP_BYTE:3 0.44
(byte) gen_sintab::max
(byte) gen_sintab::max#2 max zp ZP_BYTE:2 2.0
(byte) gen_sintab::max#2 reg byte x 2.0
(byte) gen_sintab::min
(byte) gen_sintab::min#2 min zp ZP_BYTE:3 0.3333333333333333
(byte) gen_sintab::min#2 min zp ZP_BYTE:2 0.3333333333333333
(byte*) gen_sintab::sintab
(byte*) gen_sintab::sintab#12 sintab zp ZP_WORD:8 0.22
(void()) gen_sprites()
@ -9944,9 +9874,9 @@ FINAL SYMBOL TABLE
(byte*) progress_cursor#11 progress_cursor zp ZP_WORD:10 2.8333333333333335
(byte*) progress_cursor#34 progress_cursor zp ZP_WORD:10 0.7307692307692306
(byte) progress_idx
(byte) progress_idx#10 progress_idx zp ZP_BYTE:3 3.0
(byte) progress_idx#12 progress_idx zp ZP_BYTE:3 2.5
(byte) progress_idx#34 progress_idx zp ZP_BYTE:3 0.5652173913043479
(byte) progress_idx#10 progress_idx zp ZP_BYTE:4 3.0
(byte) progress_idx#12 progress_idx zp ZP_BYTE:4 2.5
(byte) progress_idx#34 progress_idx zp ZP_BYTE:4 0.5652173913043479
(void()) progress_inc()
(label) progress_inc::@1
(label) progress_inc::@2
@ -9996,15 +9926,16 @@ FINAL SYMBOL TABLE
(void()) subFACfromARG()
(label) subFACfromARG::@return
zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::max#2 gen_sintab::i#10 gen_sintab::i#1 gen_sprites::i#2 gen_sprites::i#1 place_sprites::spr_id#2 place_sprites::spr_id#1 ]
zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::min#2 progress_idx#34 progress_idx#12 progress_idx#10 gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::ch#0 ]
zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 gen_sintab::length#10 gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 place_sprites::col#2 place_sprites::col#1 ]
zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::min#2 gen_sintab::i#10 gen_sintab::i#1 gen_sprites::i#2 gen_sprites::i#1 place_sprites::spr_id#2 place_sprites::spr_id#1 ]
zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::length#10 gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 place_sprites::spr_x#2 place_sprites::spr_x#1 ]
zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 progress_idx#34 progress_idx#12 progress_idx#10 gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 place_sprites::col#2 place_sprites::col#1 ]
zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ]
reg byte x [ anim::j2#2 anim::j2#1 ]
zp ZP_BYTE:6 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 gen_chargen_sprite::c#3 ]
zp ZP_BYTE:7 [ anim::j#2 anim::j#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
reg byte x [ init::i#2 init::i#1 ]
zp ZP_WORD:8 [ clear_screen::sc#2 clear_screen::sc#1 gen_sintab::sintab#12 gen_sprites::spr#2 gen_sprites::spr#1 anim::x#0 ]
reg byte x [ gen_sintab::max#2 ]
zp ZP_WORD:10 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ]
zp ZP_WORD:12 [ addMEMtoFAC::mem#2 prepareMEM::mem#5 prepareMEM::mem#2 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 setMEMtoFAC::mem#5 getFAC::return#2 gen_sintab::$23 getFAC::return#0 gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 ]
reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ]
@ -10017,13 +9948,14 @@ reg byte a [ anim::$5 ]
reg byte a [ gen_sintab::$24 ]
reg byte a [ prepareMEM::$0 ]
reg byte a [ prepareMEM::$1 ]
reg byte y [ gen_chargen_sprite::ch#0 ]
reg byte a [ gen_chargen_sprite::$3 ]
reg byte a [ gen_chargen_sprite::$6 ]
reg byte x [ place_sprites::j2#1 ]
FINAL ASSEMBLER
Score: 767928
Score: 767890
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -10048,7 +9980,7 @@ Score: 767928
.const sinlen_x = $dd
.const sinlen_y = $c5
.const sprites = $2000
.label progress_idx = 3
.label progress_idx = 4
.label progress_cursor = $a
.label sin_idx_x = 2
.label sin_idx_y = 3
@ -10293,9 +10225,8 @@ init: {
//SEG122 [73] phi (byte) gen_sintab::min#2 = (byte/signed byte/word/signed word) 0 [phi:init::@6->gen_sintab#2] -- vbuz1=vbuc1
lda #0
sta gen_sintab.min
//SEG123 [73] phi (byte) gen_sintab::max#2 = (byte/word/signed word) 255 [phi:init::@6->gen_sintab#3] -- vbuz1=vbuc1
lda #$ff
sta gen_sintab.max
//SEG123 [73] phi (byte) gen_sintab::max#2 = (byte/word/signed word) 255 [phi:init::@6->gen_sintab#3] -- vbuxx=vbuc1
ldx #$ff
jsr gen_sintab
//SEG124 [60] phi from init::@6 to init::@7 [phi:init::@6->init::@7]
//SEG125 init::@7
@ -10322,9 +10253,8 @@ init: {
//SEG135 [73] phi (byte) gen_sintab::min#2 = (byte/signed byte/word/signed word) 50 [phi:init::@8->gen_sintab#2] -- vbuz1=vbuc1
lda #$32
sta gen_sintab.min
//SEG136 [73] phi (byte) gen_sintab::max#2 = (byte/word/signed word) 208 [phi:init::@8->gen_sintab#3] -- vbuz1=vbuc1
lda #$d0
sta gen_sintab.max
//SEG136 [73] phi (byte) gen_sintab::max#2 = (byte/word/signed word) 208 [phi:init::@8->gen_sintab#3] -- vbuxx=vbuc1
ldx #$d0
jsr gen_sintab
//SEG137 [64] phi from init::@8 to init::@9 [phi:init::@8->init::@9]
//SEG138 init::@9
@ -10375,12 +10305,11 @@ gen_sintab: {
.const f_2pi = $e2e5
.label _23 = $c
.label i = 2
.label max = 2
.label min = 3
.label length = 4
.label min = 2
.label length = 3
.label sintab = 8
//SEG155 [74] (word) setFAC::w#0 ← ((word)) (byte) gen_sintab::max#2 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ) -- vwuz1=_word_vbuz2
lda max
//SEG155 [74] (word) setFAC::w#0 ← ((word)) (byte) gen_sintab::max#2 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ( main:2::init:5::gen_sintab:59 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] main:2::init:5::gen_sintab:63 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#12 setFAC::w#0 progress_init::line#2 ] ) -- vwuz1=_word_vbuxx
txa
sta setFAC.w
lda #0
sta setFAC.w+1
@ -10803,10 +10732,9 @@ gen_sprites: {
//SEG360 [174] phi (byte) gen_sprites::i#2 = (byte) gen_sprites::i#1 [phi:gen_sprites::@3->gen_sprites::@1#1] -- register_copy
//SEG361 gen_sprites::@1
b1:
//SEG362 [175] (byte) gen_chargen_sprite::ch#0 ← *((const string) gen_sprites::cml#0 + (byte) gen_sprites::i#2) [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 ] ( main:2::init:5::gen_sprites:55 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
ldy i
lda cml,y
sta gen_chargen_sprite.ch
//SEG362 [175] (byte) gen_chargen_sprite::ch#0 ← *((const string) gen_sprites::cml#0 + (byte) gen_sprites::i#2) [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 ] ( main:2::init:5::gen_sprites:55 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1
ldx i
ldy cml,x
//SEG363 [176] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ( main:2::init:5::gen_sprites:55 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ) -- pbuz1=pbuz2
lda spr
sta gen_chargen_sprite.sprite
@ -10838,7 +10766,6 @@ gen_sprites: {
gen_chargen_sprite: {
.label _0 = $c
.label _1 = $c
.label ch = 3
.label sprite = $a
.label chargen = $c
.label bits = 4
@ -10846,8 +10773,8 @@ gen_chargen_sprite: {
.label x = 5
.label y = 3
.label c = 6
//SEG372 [182] (word~) gen_chargen_sprite::$0 ← ((word)) (byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) -- vwuz1=_word_vbuz2
lda ch
//SEG372 [182] (word~) gen_chargen_sprite::$0 ← ((word)) (byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) -- vwuz1=_word_vbuyy
tya
sta _0
lda #0
sta _0+1
@ -10904,8 +10831,8 @@ gen_chargen_sprite: {
//SEG397 gen_chargen_sprite::@2
b2:
//SEG398 [190] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte/word/signed word) 128 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ) -- vbuaa=vbuz1_band_vbuc1
lda bits
and #$80
lda #$80
and bits
//SEG399 [191] if((byte~) gen_chargen_sprite::$3==(byte/signed byte/word/signed word) 0) goto gen_chargen_sprite::@3 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 ] ( main:2::init:5::gen_sprites:55::gen_chargen_sprite:177 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 ] ) -- vbuaa_eq_0_then_la1
cmp #0
beq b6

View File

@ -107,7 +107,7 @@
(byte) gen_chargen_sprite::c
(byte) gen_chargen_sprite::c#3 c zp ZP_BYTE:6 769.3076923076923
(byte) gen_chargen_sprite::ch
(byte) gen_chargen_sprite::ch#0 ch zp ZP_BYTE:3 6.5
(byte) gen_chargen_sprite::ch#0 reg byte y 6.5
(byte*) gen_chargen_sprite::chargen
(byte*) gen_chargen_sprite::chargen#0 chargen zp ZP_WORD:12 3.678571428571429
(byte) gen_chargen_sprite::s_gen
@ -171,11 +171,11 @@
(byte) gen_sintab::i#1 i zp ZP_BYTE:2 16.5
(byte) gen_sintab::i#10 i zp ZP_BYTE:2 1.8333333333333333
(byte) gen_sintab::length
(byte) gen_sintab::length#10 length zp ZP_BYTE:4 0.44
(byte) gen_sintab::length#10 length zp ZP_BYTE:3 0.44
(byte) gen_sintab::max
(byte) gen_sintab::max#2 max zp ZP_BYTE:2 2.0
(byte) gen_sintab::max#2 reg byte x 2.0
(byte) gen_sintab::min
(byte) gen_sintab::min#2 min zp ZP_BYTE:3 0.3333333333333333
(byte) gen_sintab::min#2 min zp ZP_BYTE:2 0.3333333333333333
(byte*) gen_sintab::sintab
(byte*) gen_sintab::sintab#12 sintab zp ZP_WORD:8 0.22
(void()) gen_sprites()
@ -260,9 +260,9 @@
(byte*) progress_cursor#11 progress_cursor zp ZP_WORD:10 2.8333333333333335
(byte*) progress_cursor#34 progress_cursor zp ZP_WORD:10 0.7307692307692306
(byte) progress_idx
(byte) progress_idx#10 progress_idx zp ZP_BYTE:3 3.0
(byte) progress_idx#12 progress_idx zp ZP_BYTE:3 2.5
(byte) progress_idx#34 progress_idx zp ZP_BYTE:3 0.5652173913043479
(byte) progress_idx#10 progress_idx zp ZP_BYTE:4 3.0
(byte) progress_idx#12 progress_idx zp ZP_BYTE:4 2.5
(byte) progress_idx#34 progress_idx zp ZP_BYTE:4 0.5652173913043479
(void()) progress_inc()
(label) progress_inc::@1
(label) progress_inc::@2
@ -312,15 +312,16 @@
(void()) subFACfromARG()
(label) subFACfromARG::@return
zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::max#2 gen_sintab::i#10 gen_sintab::i#1 gen_sprites::i#2 gen_sprites::i#1 place_sprites::spr_id#2 place_sprites::spr_id#1 ]
zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::min#2 progress_idx#34 progress_idx#12 progress_idx#10 gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::ch#0 ]
zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 gen_sintab::length#10 gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 place_sprites::col#2 place_sprites::col#1 ]
zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::min#2 gen_sintab::i#10 gen_sintab::i#1 gen_sprites::i#2 gen_sprites::i#1 place_sprites::spr_id#2 place_sprites::spr_id#1 ]
zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 gen_sintab::length#10 gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 place_sprites::spr_x#2 place_sprites::spr_x#1 ]
zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 progress_idx#34 progress_idx#12 progress_idx#10 gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 place_sprites::col#2 place_sprites::col#1 ]
zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ]
reg byte x [ anim::j2#2 anim::j2#1 ]
zp ZP_BYTE:6 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 gen_chargen_sprite::c#3 ]
zp ZP_BYTE:7 [ anim::j#2 anim::j#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
reg byte x [ init::i#2 init::i#1 ]
zp ZP_WORD:8 [ clear_screen::sc#2 clear_screen::sc#1 gen_sintab::sintab#12 gen_sprites::spr#2 gen_sprites::spr#1 anim::x#0 ]
reg byte x [ gen_sintab::max#2 ]
zp ZP_WORD:10 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ]
zp ZP_WORD:12 [ addMEMtoFAC::mem#2 prepareMEM::mem#5 prepareMEM::mem#2 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 setMEMtoFAC::mem#5 getFAC::return#2 gen_sintab::$23 getFAC::return#0 gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 ]
reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ]
@ -333,6 +334,7 @@ reg byte a [ anim::$5 ]
reg byte a [ gen_sintab::$24 ]
reg byte a [ prepareMEM::$0 ]
reg byte a [ prepareMEM::$1 ]
reg byte y [ gen_chargen_sprite::ch#0 ]
reg byte a [ gen_chargen_sprite::$3 ]
reg byte a [ gen_chargen_sprite::$6 ]
reg byte x [ place_sprites::j2#1 ]

View File

@ -458,8 +458,8 @@ print_byte: {
tay
lda hextab,y
jsr print_char
lda b
and #$f
lda #$f
and b
tay
lda hextab,y
jsr print_char

File diff suppressed because one or more lines are too long

View File

@ -141,8 +141,8 @@
(byte) main::r#58 reg byte x 3.6666666666666665
(byte) main::r#59 reg byte x 3.6666666666666665
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte y 4.0
(byte~) print_byte::$2 reg byte y 4.0
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
@ -276,5 +276,5 @@ reg byte a [ print_char::ch#5 print_char::ch#0 print_char::ch#1 print_char::ch#4
zp ZP_WORD:9 [ char_cursor#51 char_cursor#89 char_cursor#90 char_cursor#138 char_cursor#52 char_cursor#142 char_cursor#146 char_cursor#114 char_cursor#137 char_cursor#154 char_cursor#2 char_cursor#1 ]
zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
zp ZP_BYTE:12 [ main::b#0 ]
reg byte y [ print_byte::$0 ]
reg byte y [ print_byte::$2 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]

View File

@ -209,8 +209,8 @@ print_byte: {
jsr print_char
txa
and #$f
tax
lda hextab,x
tay
lda hextab,y
jsr print_char
rts
hextab: .text "0123456789abcdef"

View File

@ -8142,16 +8142,10 @@ Removing always clobbered register reg byte x as potential for zp ZP_BYTE:25 [ m
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:26 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ]
Statement [136] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27::multiply:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::return#0 ] main:2::multiply_results_compare:13::multiply:160 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 ] ) always clobbers reg byte a
Potential register analysis [140] slow_signed_multiply::m#1 ← slow_signed_multiply::m#3 - slow_signed_multiply::b#0 missing fragment vwsz1=vwsz1_minus_vbsyy allocation: zp ZP_WORD:22 [ slow_signed_multiply::m#5 slow_signed_multiply::return#0 slow_signed_multiply::m#3 slow_signed_multiply::m#1 slow_signed_multiply::m#2 ] reg byte y [ slow_signed_multiply::b#0 ]
MISSING FRAGMENTS
vwsz1=vwsz1_minus_vbsyy(slow_signed_multiply:: vwsz1=(signed word) slow_signed_multiply::m#1 vbsyy=(signed byte) slow_signed_multiply::b#0 )
Statement [140] (signed word) slow_signed_multiply::m#1 ← (signed word) slow_signed_multiply::m#3 - (signed byte) slow_signed_multiply::b#0 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::i#2 slow_signed_multiply::m#1 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::i#2 slow_signed_multiply::m#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:50 [ slow_signed_multiply::a#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ slow_signed_multiply::b#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ slow_signed_multiply::i#2 slow_signed_multiply::i#1 ]
Potential register analysis [147] slow_signed_multiply::m#2 ← slow_signed_multiply::m#5 + slow_signed_multiply::b#0 missing fragment vwsz1=vwsz1_plus_vbsyy allocation: zp ZP_WORD:22 [ slow_signed_multiply::m#5 slow_signed_multiply::return#0 slow_signed_multiply::m#3 slow_signed_multiply::m#1 slow_signed_multiply::m#2 ] reg byte y [ slow_signed_multiply::b#0 ]
MISSING FRAGMENTS
vwsz1=vwsz1_plus_vbsyy(slow_signed_multiply:: vwsz1=(signed word) slow_signed_multiply::m#2 vbsyy=(signed byte) slow_signed_multiply::b#0 )
Statement [147] (signed word) slow_signed_multiply::m#2 ← (signed word) slow_signed_multiply::m#5 + (signed byte) slow_signed_multiply::b#0 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#2 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ slow_signed_multiply::j#2 slow_signed_multiply::j#1 ]
Statement [156] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#2 ] ) always clobbers reg byte a
@ -8236,13 +8230,7 @@ Statement [127] (byte/signed byte/word/signed word~) signed_multiply::$17 ← (b
Statement [130] (signed word) signed_multiply::return#0 ← ((signed word)) (word) signed_multiply::m#4 [ signed_multiply::return#0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::return#0 ] ) always clobbers reg byte a
Statement asm { ldamemA stasm1+1 stasm3+1 eor#$ff stasm2+1 stasm4+1 ldxmemB sec sm1: ldamul_sqr1_lo,x sm2: sbcmul_sqr2_lo,x stamemA sm3: ldamul_sqr1_hi,x sm4: sbcmul_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x
Statement [136] (word) multiply::return#0 ← *((const byte*) multiply::memB#0) w= *((const byte*) multiply::memA#0) [ multiply::return#0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply:27::multiply:115 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 line_cursor#1 signed_multiply::a#0 signed_multiply::b#0 multiply::return#0 ] main:2::multiply_results_compare:13::multiply:160 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::return#0 ] ) always clobbers reg byte a
Potential register analysis [140] slow_signed_multiply::m#1 ← slow_signed_multiply::m#3 - slow_signed_multiply::b#0 missing fragment vwsz1=vwsz1_minus_vbsyy allocation: zp ZP_WORD:22 [ slow_signed_multiply::m#5 slow_signed_multiply::return#0 slow_signed_multiply::m#3 slow_signed_multiply::m#1 slow_signed_multiply::m#2 ] reg byte y [ slow_signed_multiply::b#0 ]
MISSING FRAGMENTS
vwsz1=vwsz1_minus_vbsyy(slow_signed_multiply:: vwsz1=(signed word) slow_signed_multiply::m#1 vbsyy=(signed byte) slow_signed_multiply::b#0 )
Statement [140] (signed word) slow_signed_multiply::m#1 ← (signed word) slow_signed_multiply::m#3 - (signed byte) slow_signed_multiply::b#0 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::i#2 slow_signed_multiply::m#1 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::i#2 slow_signed_multiply::m#1 ] ) always clobbers reg byte a
Potential register analysis [147] slow_signed_multiply::m#2 ← slow_signed_multiply::m#5 + slow_signed_multiply::b#0 missing fragment vwsz1=vwsz1_plus_vbsyy allocation: zp ZP_WORD:22 [ slow_signed_multiply::m#5 slow_signed_multiply::return#0 slow_signed_multiply::m#3 slow_signed_multiply::m#1 slow_signed_multiply::m#2 ] reg byte y [ slow_signed_multiply::b#0 ]
MISSING FRAGMENTS
vwsz1=vwsz1_plus_vbsyy(slow_signed_multiply:: vwsz1=(signed word) slow_signed_multiply::m#2 vbsyy=(signed byte) slow_signed_multiply::b#0 )
Statement [147] (signed word) slow_signed_multiply::m#2 ← (signed word) slow_signed_multiply::m#5 + (signed byte) slow_signed_multiply::b#0 [ slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#2 ] ( main:2::signed_multiply_results_compare:15::slow_signed_multiply:22 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 line_cursor#1 slow_signed_multiply::a#0 slow_signed_multiply::b#0 slow_signed_multiply::m#2 slow_signed_multiply::j#2 ] ) always clobbers reg byte a
Statement [156] (word) slow_multiply::return#2 ← (word) slow_multiply::return#0 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#2 ] ( main:2::multiply_results_compare:13 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 slow_multiply::return#2 ] ) always clobbers reg byte a
Statement [157] (word) multiply_results_compare::ms#0 ← (word) slow_multiply::return#2 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ( main:2::multiply_results_compare:13 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 ] ) always clobbers reg byte a
@ -8386,7 +8374,7 @@ Uplifting [] best 202907 combination zp ZP_WORD:14 [ char_cursor#75 char_cursor#
Uplifting [multiply_tables_compare] best 202907 combination zp ZP_WORD:30 [ multiply_tables_compare::kc_sqr#2 multiply_tables_compare::kc_sqr#1 ] zp ZP_WORD:32 [ multiply_tables_compare::asm_sqr#2 multiply_tables_compare::asm_sqr#1 ]
Uplifting [print_str] best 202907 combination zp ZP_WORD:6 [ print_str::str#14 print_str::str#16 print_str::str#0 ]
Uplifting [print_cls] best 202907 combination zp ZP_WORD:48 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 202888 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 y [ print_byte::$0 ] reg byte a [ print_byte::$2 ]
Uplifting [print_byte] best 202888 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 a [ print_byte::$2 ]
Uplifting [print_word] best 202888 combination zp ZP_WORD:10 [ 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_sword] best 202888 combination zp ZP_WORD:8 [ print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 ]
Uplifting [print_sbyte] best 202872 combination reg byte x [ print_sbyte::b#4 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 print_sbyte::b#0 ]
@ -8396,8 +8384,6 @@ Uplifting [signed_multiply_error] best 202845 combination reg byte x [ signed_mu
Uplifting [print_ln] best 202845 combination
Uplifting [main] best 202845 combination
Uplifting [init_multiply_asm] best 202845 combination
MISSING FRAGMENTS
vwsz1=vwsz1_minus_vbsyy(slow_signed_multiply:: vwsz1=(signed word) slow_signed_multiply::m#1 vbsyy=(signed byte) slow_signed_multiply::b#0 )
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::b#1 ]
Uplifting [signed_multiply_results_compare] best 202845 combination zp ZP_BYTE:3 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::b#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:26 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ]
@ -8975,14 +8961,14 @@ print_word: {
}
//SEG191 print_byte
print_byte: {
//SEG192 [93] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#5 char_cursor#124 print_byte::$0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] ) -- vbuyy=vbuxx_ror_4
//SEG192 [93] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#5 char_cursor#124 print_byte::$0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] ) -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
//SEG193 [94] (byte) print_char::ch#2 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#5 char_cursor#124 print_char::ch#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG193 [94] (byte) print_char::ch#2 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#5 char_cursor#124 print_char::ch#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda hextab,y
//SEG194 [95] call print_char param-assignment [ char_cursor#17 print_byte::b#5 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 char_cursor#17 print_byte::b#5 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 char_cursor#17 print_byte::b#5 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 print_byte::b#5 ] )
//SEG195 [100] phi from print_byte to print_char [phi:print_byte->print_char]
@ -8997,8 +8983,8 @@ print_byte: {
txa
and #$f
//SEG200 [97] (byte) print_char::ch#3 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#17 print_char::ch#3 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 char_cursor#17 print_char::ch#3 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 char_cursor#17 print_char::ch#3 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 print_char::ch#3 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tax
lda hextab,x
tay
lda hextab,y
//SEG201 [98] call print_char param-assignment [ char_cursor#17 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 char_cursor#17 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 char_cursor#17 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 char_cursor#17 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 char_cursor#17 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 ] )
//SEG202 [100] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
print_char_from_b1:
@ -10642,7 +10628,7 @@ FINAL SYMBOL TABLE
(const string) multiply_tables_compare::str1 str1 = (string) " / @"
(const string) multiply_tables_compare::str2 str2 = (string) "multiply tables match!@"
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte y 4.0
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(label) print_byte::@1
(label) print_byte::@return
@ -10842,7 +10828,7 @@ reg byte x [ slow_signed_multiply::b#0 ]
reg byte y [ signed_multiply::a#0 ]
reg byte x [ signed_multiply_error::a#0 ]
zp ZP_WORD:12 [ signed_multiply_error::ma#0 multiply_error::ma#0 ]
reg byte y [ print_byte::$0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
zp ZP_BYTE:14 [ signed_multiply::$6 ]
reg byte a [ signed_multiply::$7 ]
@ -11259,14 +11245,14 @@ print_word: {
}
//SEG191 print_byte
print_byte: {
//SEG192 [93] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#5 char_cursor#124 print_byte::$0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] ) -- vbuyy=vbuxx_ror_4
//SEG192 [93] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte/signed byte/word/signed word) 4 [ print_byte::b#5 char_cursor#124 print_byte::$0 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_byte::$0 ] ) -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
//SEG193 [94] (byte) print_char::ch#2 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#5 char_cursor#124 print_char::ch#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay
//SEG193 [94] (byte) print_char::ch#2 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#5 char_cursor#124 print_char::ch#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 print_byte::b#5 char_cursor#124 print_char::ch#2 ] ) -- vbuaa=pbuc1_derefidx_vbuyy
lda hextab,y
//SEG194 [95] call print_char param-assignment [ char_cursor#17 print_byte::b#5 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 char_cursor#17 print_byte::b#5 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 char_cursor#17 print_byte::b#5 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_byte::b#5 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 print_byte::b#5 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 print_byte::b#5 ] )
//SEG195 [100] phi from print_byte to print_char [phi:print_byte->print_char]
@ -11278,8 +11264,8 @@ print_byte: {
txa
and #$f
//SEG200 [97] (byte) print_char::ch#3 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#17 print_char::ch#3 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 char_cursor#17 print_char::ch#3 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 char_cursor#17 print_char::ch#3 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_char::ch#3 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 print_char::ch#3 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 print_char::ch#3 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tax
lda hextab,x
tay
lda hextab,y
//SEG201 [98] call print_char param-assignment [ char_cursor#17 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:88 [ signed_multiply_error::ma#0 line_cursor#1 print_word::w#5 char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:88 [ line_cursor#1 print_word::w#5 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:88 [ line_cursor#27 multiply_error::ma#0 print_word::w#5 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:88 [ line_cursor#27 print_word::w#5 char_cursor#17 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:88 [ multiply_tables_compare::kc_sqr#2 print_word::w#5 char_cursor#17 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:88 [ print_word::w#5 char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:69::print_word:84::print_byte:90 [ signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sword:73::print_word:84::print_byte:90 [ line_cursor#1 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:190::print_byte:90 [ line_cursor#27 multiply_error::ma#0 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_word:194::print_byte:90 [ line_cursor#27 char_cursor#17 ] main:2::multiply_tables_compare:11::print_word:211::print_byte:90 [ multiply_tables_compare::kc_sqr#2 char_cursor#17 ] main:2::multiply_tables_compare:11::print_word:215::print_byte:90 [ char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:61::print_byte:111 [ signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] main:2::signed_multiply_results_compare:15::signed_multiply_error:36::print_sbyte:65::print_byte:111 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:182 [ line_cursor#27 multiply_error::b#0 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 ] main:2::multiply_results_compare:13::multiply_error:169::print_byte:186 [ line_cursor#27 multiply_error::ms#0 multiply_error::ma#0 char_cursor#17 ] )
//SEG202 [100] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
//SEG203 [100] phi (byte*) char_cursor#75 = (byte*) char_cursor#17 [phi:print_byte::@1->print_char#0] -- register_copy

View File

@ -174,7 +174,7 @@
(const string) multiply_tables_compare::str1 str1 = (string) " / @"
(const string) multiply_tables_compare::str2 str2 = (string) "multiply tables match!@"
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte y 4.0
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(label) print_byte::@1
(label) print_byte::@return
@ -374,7 +374,7 @@ reg byte x [ slow_signed_multiply::b#0 ]
reg byte y [ signed_multiply::a#0 ]
reg byte x [ signed_multiply_error::a#0 ]
zp ZP_WORD:12 [ signed_multiply_error::ma#0 multiply_error::ma#0 ]
reg byte y [ print_byte::$0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
zp ZP_BYTE:14 [ signed_multiply::$6 ]
reg byte a [ signed_multiply::$7 ]

View File

@ -2509,11 +2509,6 @@ Statement [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3)
Statement [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a
Statement [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 3)<(byte/signed byte/word/signed word) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [35] (byte/signed byte/word/signed word~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a
Potential register analysis [46] *(render::colline#5 + render::x#2) ← render::col#0 missing fragment pbuz1_derefidx_vbuaa=vbuyy allocation: reg byte y [ render::col#0 ] reg byte a [ render::x#2 render::x#1 ] zp ZP_WORD:3 [ render::colline#5 render::colline#1 ]
Potential register analysis [46] *(render::colline#5 + render::x#2) ← render::col#0 missing fragment pbuz1_derefidx_vbuxx=vbuyy allocation: reg byte y [ render::col#0 ] reg byte x [ render::x#2 render::x#1 ] zp ZP_WORD:3 [ render::colline#5 render::colline#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuaa=vbuyy(render:: pbuz1=(byte*) render::colline#5 vbuaa=(byte) render::x#2 vbuyy=(byte) render::col#0 )
pbuz1_derefidx_vbuxx=vbuyy(render:: pbuz1=(byte*) render::colline#5 vbuxx=(byte) render::x#2 vbuyy=(byte) render::col#0 )
Statement [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ render::y#4 render::y#1 ]
Statement [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a
@ -2550,9 +2545,6 @@ Statement [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word) 3)
Statement [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a
Statement [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 3)<(byte/signed byte/word/signed word) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a
Statement [35] (byte/signed byte/word/signed word~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a
Potential register analysis [46] *(render::colline#5 + render::x#2) ← render::col#0 missing fragment pbuz1_derefidx_vbuxx=vbuyy allocation: reg byte y [ render::col#0 ] reg byte x [ render::x#2 render::x#1 ] zp ZP_WORD:3 [ render::colline#5 render::colline#1 ]
MISSING FRAGMENTS
pbuz1_derefidx_vbuxx=vbuyy(render:: pbuz1=(byte*) render::colline#5 vbuxx=(byte) render::x#2 vbuyy=(byte) render::col#0 )
Statement [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) always clobbers reg byte a
Statement [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a
Statement [65] (byte/signed byte/word/signed word~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) always clobbers reg byte a

View File

@ -32,8 +32,8 @@ main: {
}
sum2: {
.label c = 2
tya
stx $ff
txa
sty $ff
clc
adc $ff
clc
@ -42,8 +42,8 @@ sum2: {
}
sum: {
.label c = 2
tya
stx $ff
txa
sty $ff
clc
adc $ff
clc

View File

@ -917,8 +917,8 @@ main: {
sum2: {
.label c = 2
//SEG36 [23] (byte/word~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuxx_plus_vbuyy
tya
stx $ff
txa
sty $ff
clc
adc $ff
//SEG37 [24] (byte) sum2::return#1 ← (byte/word~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuz1
@ -934,8 +934,8 @@ sum2: {
sum: {
.label c = 2
//SEG41 [26] (byte/word~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuxx_plus_vbuyy
tya
stx $ff
txa
sty $ff
clc
adc $ff
//SEG42 [27] (byte) sum::return#1 ← (byte/word~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuz1
@ -1116,8 +1116,8 @@ main: {
sum2: {
.label c = 2
//SEG36 [23] (byte/word~) sum2::$0 ← (byte) sum2::a#0 + (byte) sum2::b#0 [ sum2::c#0 sum2::$0 ] ( main:2::sum2:16 [ main::i#2 sum2::c#0 sum2::$0 ] ) -- vbuaa=vbuxx_plus_vbuyy
tya
stx $ff
txa
sty $ff
clc
adc $ff
//SEG37 [24] (byte) sum2::return#1 ← (byte/word~) sum2::$0 + (byte) sum2::c#0 [ sum2::return#1 ] ( main:2::sum2:16 [ main::i#2 sum2::return#1 ] ) -- vbuaa=vbuaa_plus_vbuz1
@ -1131,8 +1131,8 @@ sum2: {
sum: {
.label c = 2
//SEG41 [26] (byte/word~) sum::$0 ← (byte) sum::a#0 + (byte) sum::b#0 [ sum::c#0 sum::$0 ] ( main:2::sum:9 [ main::i#2 sum::c#0 sum::$0 ] ) -- vbuaa=vbuxx_plus_vbuyy
tya
stx $ff
txa
sty $ff
clc
adc $ff
//SEG42 [27] (byte) sum::return#1 ← (byte/word~) sum::$0 + (byte) sum::c#0 [ sum::return#1 ] ( main:2::sum:9 [ main::i#2 sum::return#1 ] ) -- vbuaa=vbuaa_plus_vbuz1

View File

@ -557,11 +557,6 @@ Statement [8] (byte*) main::zpptr2#0 ← (const byte*) main::zpptr#0 + (byte) ma
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::j#6 main::j#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#4 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::k#2 main::k#1 ]
Potential register analysis [9] main::w#0 ← ((word)) main::j#6 missing fragment vwuz1=_word_vbuxx allocation: reg byte x [ main::j#6 main::j#1 ] zp ZP_WORD:7 [ main::w#0 ]
Potential register analysis [9] main::w#0 ← ((word)) main::j#6 missing fragment vwuz1=_word_vbuyy allocation: reg byte y [ main::j#6 main::j#1 ] zp ZP_WORD:7 [ main::w#0 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(main:: vwuz1=(word) main::w#0 vbuxx=(byte) main::j#6 )
vwuz1=_word_vbuyy(main:: vwuz1=(word) main::w#0 vbuyy=(byte) main::j#6 )
Statement [9] (word) main::w#0 ← ((word)) (byte) main::j#6 [ main::j#6 main::i#4 main::k#2 main::zpptr2#0 main::w#0 ] ( main:2 [ main::j#6 main::i#4 main::k#2 main::zpptr2#0 main::w#0 ] ) always clobbers reg byte a
Statement [10] (byte*) main::zpptr2#1 ← (byte*) main::zpptr2#0 + (word) main::w#0 [ main::j#6 main::i#4 main::k#2 main::zpptr2#1 ] ( main:2 [ main::j#6 main::i#4 main::k#2 main::zpptr2#1 ] ) always clobbers reg byte a
Statement [11] *((byte*) main::zpptr2#1) ← (byte) main::k#2 [ main::j#6 main::i#4 main::k#2 ] ( main:2 [ main::j#6 main::i#4 main::k#2 ] ) always clobbers reg byte a reg byte y
@ -569,9 +564,6 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ ma
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::i#4 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ main::k#2 main::k#1 ]
Statement [8] (byte*) main::zpptr2#0 ← (const byte*) main::zpptr#0 + (byte) main::i#4 [ main::j#6 main::i#4 main::k#2 main::zpptr2#0 ] ( main:2 [ main::j#6 main::i#4 main::k#2 main::zpptr2#0 ] ) always clobbers reg byte a
Potential register analysis [9] main::w#0 ← ((word)) main::j#6 missing fragment vwuz1=_word_vbuxx allocation: reg byte x [ main::j#6 main::j#1 ] zp ZP_WORD:7 [ main::w#0 ]
MISSING FRAGMENTS
vwuz1=_word_vbuxx(main:: vwuz1=(word) main::w#0 vbuxx=(byte) main::j#6 )
Statement [9] (word) main::w#0 ← ((word)) (byte) main::j#6 [ main::j#6 main::i#4 main::k#2 main::zpptr2#0 main::w#0 ] ( main:2 [ main::j#6 main::i#4 main::k#2 main::zpptr2#0 main::w#0 ] ) always clobbers reg byte a
Statement [10] (byte*) main::zpptr2#1 ← (byte*) main::zpptr2#0 + (word) main::w#0 [ main::j#6 main::i#4 main::k#2 main::zpptr2#1 ] ( main:2 [ main::j#6 main::i#4 main::k#2 main::zpptr2#1 ] ) always clobbers reg byte a
Statement [11] *((byte*) main::zpptr2#1) ← (byte) main::k#2 [ main::j#6 main::i#4 main::k#2 ] ( main:2 [ main::j#6 main::i#4 main::k#2 ] ) always clobbers reg byte a reg byte y
@ -588,8 +580,6 @@ Uplift Scope []
Uplifting [main] best 78433 combination reg byte x [ main::k#2 main::k#1 ] zp ZP_WORD:7 [ main::w#0 ] zp ZP_WORD:9 [ main::zpptr2#1 ] zp ZP_WORD:5 [ main::zpptr2#0 ] zp ZP_BYTE:3 [ main::i#4 main::i#1 ] zp ZP_BYTE:2 [ main::j#6 main::j#1 ]
Uplifting [] best 78433 combination
MISSING FRAGMENTS
vwuz1=_word_vbuxx(main:: vwuz1=(word) main::w#0 vbuxx=(byte) main::j#6 )
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::i#4 main::i#1 ]
Uplifting [main] best 78433 combination zp ZP_BYTE:3 [ main::i#4 main::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::j#6 main::j#1 ]