1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-14 23:04:57 +00:00

Improved Fragment Synthesis - trying all possible combinations. Closes #71

This commit is contained in:
jespergravgaard 2017-12-30 17:24:30 +01:00
parent 66fdfb08a9
commit 174346d0f1
37 changed files with 3020 additions and 3003 deletions

View File

@ -1,6 +1,7 @@
package dk.camelot64.kickc.fragment;
import dk.camelot64.kickc.CompileLog;
import dk.camelot64.kickc.asm.AsmProgram;
import dk.camelot64.kickc.parser.KickCLexer;
import dk.camelot64.kickc.parser.KickCParser;
import org.antlr.v4.runtime.*;
@ -30,7 +31,7 @@ public class AsmFragmentManager {
private static KickCParser.AsmFileContext UNKNOWN = new KickCParser.AsmFileContext(null, 0);
public static AsmFragment getFragment(AsmFragmentSignature signature, CompileLog log) {
KickCParser.AsmFileContext fragmentFile = getFragmentFile(signature.getSignature(), log);
KickCParser.AsmFileContext fragmentFile = getFragmentFile(signature, log);
AsmFragment fragment = new AsmFragment(
signature.getProgram(),
signature.getSignature(),
@ -40,52 +41,261 @@ public class AsmFragmentManager {
return fragment;
}
private static KickCParser.AsmFileContext getFragmentFile(String signature, CompileLog log) {
KickCParser.AsmFileContext fragment = fragmentFileCache.get(signature);
if (fragment == UNKNOWN) {
if (verboseFragmentLog) {
log.append("Unknown fragment " + signature);
private static KickCParser.AsmFileContext getFragmentFile(AsmFragmentSignature signature, CompileLog log) {
KickCParser.AsmFileContext fragmentCtx = fragmentFileCache.get(signature.getSignature());
if(fragmentCtx == UNKNOWN) {
if(verboseFragmentLog) {
log.append("Unknown fragment " + signature.getSignature());
}
throw new UnknownFragmentException(signature);
throw new UnknownFragmentException(signature.toString());
}
if (fragment == null) {
CharStream fragmentCharStream = loadOrSynthesizeFragment(signature, log);
if (fragmentCharStream == null) {
if (verboseFragmentLog) {
log.append("Unknown fragment " + signature);
if(fragmentCtx == null) {
FragmentSynthesizer synthesizer = new FragmentSynthesizer(signature, log);
List<CharStream> candidates = synthesizer.loadOrSynthesizeFragment(signature.getSignature());
if(candidates.size() == 0) {
if(verboseFragmentLog) {
log.append("Unknown fragment " + signature.toString());
}
fragmentFileCache.put(signature, UNKNOWN);
throw new UnknownFragmentException(signature);
}
fragment = parseFragment(fragmentCharStream, signature);
fragmentFileCache.put(signature, fragment);
}
return fragment;
}
fragmentFileCache.put(signature.getSignature(), UNKNOWN);
throw new UnknownFragmentException(signature.toString());
private static CharStream loadOrSynthesizeFragment(String signature, CompileLog log) {
CharStream fragmentCharStream = loadFragment(signature);
if (fragmentCharStream == null) {
if (verboseFragmentLog) {
log.append("Attempting fragment synthesis " + signature);
}
fragmentCharStream = synthesizeFragment(signature, log);
} else {
if (verboseFragmentLog) {
log.append("Succesfully loaded fragment " + signature);
double minScore = Double.MAX_VALUE;
for(CharStream candidate : candidates) {
KickCParser.AsmFileContext candidateCtx = parseFragment(candidate, signature.getSignature());
AsmFragment fragment = new AsmFragment(
signature.getProgram(),
signature.getSignature(),
signature.getCodeScope(),
candidateCtx.asmLines(),
signature.getBindings());
AsmProgram asm = new AsmProgram();
asm.startSegment(null, signature.toString());
fragment.generate(asm);
double score = asm.getCycles();
if(score < minScore) {
minScore = score;
fragmentCtx = candidateCtx;
}
}
if(verboseFragmentLog) {
log.append("Found fragment " + signature + " score: " + minScore + " from " + candidates.size() + " candidates");
}
fragmentFileCache.put(signature.getSignature(), fragmentCtx);
}
return fragmentCharStream;
return fragmentCtx;
}
/**
* Attempt to synthesize a fragment from other fragments
*
* @param signature The signature of the fragment to synthesize
* @return The synthesized fragment file contents. Null if the fragment could not be synthesized.
* Capable of creating fragments from signatures by loading them or synthesizing them from other smaller fragments.
* <p>
* The synthesizer tries a lot of different combinations and keeps track of what has already been attempted.
*/
private static CharStream synthesizeFragment(String signature, CompileLog log) {
public static class FragmentSynthesizer {
/**
* Signature of the fragment being synthesized.
*/
private AsmFragmentSignature signature;
/**
* The log.
*/
private CompileLog log;
public FragmentSynthesizer(AsmFragmentSignature signature, CompileLog log) {
this.signature = signature;
this.log = log;
}
public List<CharStream> loadOrSynthesizeFragment(String signature) {
List<CharStream> candidates = new ArrayList<>();
// Load the fragment from disk
CharStream fragmentCharStream = loadFragment(signature);
if(fragmentCharStream != null) {
candidates.add(fragmentCharStream);
if(verboseFragmentLog) {
log.append("Finding fragment "+this.signature.getSignature()+" - Successfully loaded fragment " + signature);
}
}
// Synthesize the fragment from other fragments
List<FragmentSynthesis> synths = getFragmentSyntheses();
for(FragmentSynthesis synth : synths) {
List<CharStream> synthesized = synth.synthesize(signature, this);
if(synthesized != null) {
if(verboseFragmentLog && synthesized.size() > 0) {
log.append("Finding fragment "+this.signature.getSignature()+" - Successfully synthesized " + synthesized.size() + " fragments " + signature + " (from " + synth.getSubSignature() + ")");
}
candidates.addAll(synthesized);
}
}
return candidates;
}
}
/**
* AsmFragment synthesis based on matching fragment signature and reusing another fragment with added prefix/postfix and some bind-mappings
*/
private static class FragmentSynthesis {
private String sigMatch;
private String sigAvoid;
private String asmPrefix;
private String sigReplace;
private String asmPostfix;
private Map<String, String> bindMappings;
private boolean mapSignature;
private String subSignature;
public FragmentSynthesis(String sigMatch, String sigAvoid, String asmPrefix, String sigReplace, String asmPostfix, Map<String, String> bindMappings, boolean mapSignature) {
this.sigMatch = sigMatch;
this.sigAvoid = sigAvoid;
this.asmPrefix = asmPrefix;
this.sigReplace = sigReplace;
this.asmPostfix = asmPostfix;
this.bindMappings = bindMappings;
this.mapSignature = mapSignature;
}
public FragmentSynthesis(String sigMatch, String sigAvoid, String asmPrefix, String sigReplace, String asmPostfix, Map<String, String> bindMappings) {
this(sigMatch, sigAvoid, asmPrefix, sigReplace, asmPostfix, bindMappings, true);
}
public List<CharStream> synthesize(String signature, FragmentSynthesizer synthesizer) {
ArrayList<CharStream> candidates = new ArrayList<>();
if(signature.matches(sigMatch)) {
if(sigAvoid == null || !signature.matches(sigAvoid)) {
subSignature = regexpRewriteSignature(signature, sigMatch, sigReplace);
if(mapSignature && bindMappings != null) {
// When mapping the signature we do the map replacement in the signature
for(String bound : bindMappings.keySet()) {
subSignature = subSignature.replace(bound, bindMappings.get(bound));
}
}
List<CharStream> subCharStreams = synthesizer.loadOrSynthesizeFragment(subSignature);
for(CharStream subCharStream : subCharStreams) {
if(subCharStream != null) {
StringBuilder newFragment = new StringBuilder();
if(asmPrefix != null) {
newFragment.append(asmPrefix);
}
String subFragment = subCharStream.toString();
if(bindMappings != null) {
if(mapSignature) {
// When mapping the signature we do the reverse replacement in the ASM
List<String> reverse = new ArrayList<>(bindMappings.keySet());
Collections.reverse(reverse);
for(String bound : reverse) {
subFragment = subFragment.replace("{" + bindMappings.get(bound) + "}", "{" + bound + "}");
}
} else {
// When not mapping the signature we do the replacement directly in the ASM
for(String bound : bindMappings.keySet()) {
subFragment = subFragment.replace("{" + bound + "}", "{" + bindMappings.get(bound) + "}");
}
}
}
newFragment.append(subFragment);
if(asmPostfix != null) {
newFragment.append("\n");
newFragment.append(asmPostfix);
}
candidates.add(CharStreams.fromString(newFragment.toString()));
}
}
}
}
return candidates;
}
public String getSubSignature() {
return subSignature;
}
}
private static String regexpRewriteSignature(String signature, String match, String replace) {
Pattern p = Pattern.compile(match);
Matcher m = p.matcher(signature);
String output = signature;
if(m.find()) {
// getReplacement first number with "number" and second number with the first
output = m.replaceAll(replace);
}
return output;
}
/**
* Look for a fragment on the disk.
*
* @param signature The fragment signature
* @return The fragment file contents. Null if the fragment is not on the disk.
*/
private static CharStream loadFragment(String signature) {
ClassLoader classLoader = AsmFragmentManager.class.getClassLoader();
URL fragmentUrl = classLoader.getResource("dk/camelot64/kickc/fragment/asm/" + signature + ".asm");
if(fragmentUrl == null) {
return null;
}
try {
InputStream fragmentStream = fragmentUrl.openStream();
return CharStreams.fromStream(fragmentStream);
} catch(IOException e) {
throw new RuntimeException("Error loading fragment file " + fragmentUrl);
}
}
/**
* Parse an ASM fragment.
*
* @param fragmentCharStream The stream containing the fragment syntax
* @param fragmentFileName The filename (used in error messages)
* @return The parsed fragment ready for generating
* @throws IOException if the parsing/loading fails
*/
public static KickCParser.AsmFileContext parseFragment(CharStream fragmentCharStream, final String fragmentFileName) {
KickCLexer kickCLexer = new KickCLexer(fragmentCharStream);
KickCParser kickCParser = new KickCParser(new CommonTokenStream(kickCLexer));
kickCParser.addErrorListener(new BaseErrorListener() {
@Override
public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
throw new RuntimeException("Error parsing fragment " + fragmentFileName + "\n - Line: " + line + "\n - Message: " + msg);
}
});
kickCParser.setBuildParseTree(true);
KickCParser.AsmFileContext asmFileContext = kickCParser.asmFile();
return asmFileContext;
}
public static class UnknownFragmentException extends RuntimeException {
private String fragmentSignature;
public UnknownFragmentException(String signature) {
super("Fragment not found " + signature + ".asm");
this.fragmentSignature = signature;
}
public String getFragmentSignature() {
return fragmentSignature;
}
}
/**
* All the synthesize rules available.
*/
private static List<FragmentSynthesis> fragmentSyntheses;
private static List<FragmentSynthesis> getFragmentSyntheses() {
if(fragmentSyntheses == null) {
fragmentSyntheses = initFragmentSyntheses();
}
return fragmentSyntheses;
}
private static List<FragmentSynthesis> initFragmentSyntheses() {
Map<String, String> mapZ = new LinkedHashMap<>();
mapZ.put("z2", "z1");
mapZ.put("z3", "z2");
@ -130,13 +340,15 @@ public class AsmFragmentManager {
synths.add(new FragmentSynthesis("vbsyy=(.*)", null, null, "vbsaa=$1", "tay\n", null));
synths.add(new FragmentSynthesis("vbuz1=(.*)", ".*=.*vb.z1.*", null, "vbuaa=$1", "sta {z1}\n", mapZ));
synths.add(new FragmentSynthesis("vbsz1=(.*)", ".*=.*vb.z1.*", null, "vbsaa=$1", "sta {z1}\n", mapZ));
synths.add(new FragmentSynthesis("_deref_pb(.)c1=(.*)", null, null, "vb$1aa=$2", "sta {c1}\n", mapC));
synths.add(new FragmentSynthesis("_deref_pbuz1=(.*)", ".*=.*z1.*", null, "vbuaa=$1", "ldy #0\n" + "sta ({z1}),y\n", mapZ));
synths.add(new FragmentSynthesis("_deref_pb(.)c1=(.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "sta {c1}\n", mapC));
synths.add(new FragmentSynthesis("_deref_pb(.)c1=(.*c1.*)", null, null, "vb$1aa=$2", "sta {c1}\n", null));
synths.add(new FragmentSynthesis("_deref_pbuz1=(.*)", ".*z1.*z1.*", null, "vbuaa=$1", "ldy #0\n" + "sta ({z1}),y\n", mapZ));
synths.add(new FragmentSynthesis("_deref_pbuz1=(.*z1.*)", null, null, "vbuaa=$1", "ldy #0\n" + "sta ({z1}),y\n", null));
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuz1=(.*)", ".*z1.*z1.*|.*c1.*c1.*", null, "vb$1aa=$2", "ldx {z1}\n"+"sta {c1},x\n", mapZC));
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuz1=(.*)", ".*z1.*z1.*|.*c1.*c1.*", null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x\n", mapZC));
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuyy=(.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "sta {c1},y\n", mapC));
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuxx=(.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "sta {c1},x\n", mapC));
synths.add(new FragmentSynthesis("pb(.)z1_derefidx_vbuz2=(.*)", ".*z1.*z1.*|.*z2.*z2.*", null, "vb$1aa=$2", "ldy {z2}\n"+"sta ({z1}),y\n", mapZ2));
synths.add(new FragmentSynthesis("pb(.)z1_derefidx_vbuz2=(.*)", ".*z1.*z1.*|.*z2.*z2.*", null, "vb$1aa=$2", "ldy {z2}\n" + "sta ({z1}),y\n", mapZ2));
synths.add(new FragmentSynthesis("(.*)=_deref_pb(.)c1(.*)", ".*=.*aa.*", "lda {c1}\n", "$1=vb$2aa$3", null, mapC));
synths.add(new FragmentSynthesis("(.*)=_deref_pb(.)z1(.*)", ".*z1.*z1.*|.*=.*aa.*|.*=.*yy.*", "ldy #0\n" + "lda ({z1}),y\n", "$1=vb$2aa$3", null, mapZ));
@ -158,8 +370,8 @@ public class AsmFragmentManager {
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz1(.*)_derefidx_vbuz1(.*)", ".*z1.*z1.*z1.*|.*yy.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z1}\n", mapZ));
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*xx.*", null, "$1_derefidx_vbuxx$2_derefidx_vbuxx$3", "ldx {z2}\n", mapZ));
synths.add(new FragmentSynthesis("(.*)_derefidx_vbuz2(.*)_derefidx_vbuz2(.*)", ".*z2.*z2.*z2.*|.*yy.*", null, "$1_derefidx_vbuyy$2_derefidx_vbuyy$3", "ldy {z2}\n", mapZ));
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuz1=(.*c1.*)", ".*z1.*z1.*", null, "vb$1aa=$2", "ldx {z1}\n"+"sta {c1},x\n", mapZ));
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuz1=(.*z1.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "ldx {z1}\n"+"sta {c1},x\n", mapC));
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuz1=(.*c1.*)", ".*z1.*z1.*", null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x\n", mapZ));
synths.add(new FragmentSynthesis("pb(.)c1_derefidx_vbuz1=(.*z1.*)", ".*c1.*c1.*", null, "vb$1aa=$2", "ldx {z1}\n" + "sta {c1},x\n", mapC));
// Convert X/Y-based array indexing of a constant pointer into A-register by prefixing lda cn,x / lda cn,y ( ...pb.c1_derefidx_vbuxx... / ...pb.c1_derefidx_vbuyy... -> ...vb.aa... )
synths.add(new FragmentSynthesis("(.*)=(.*)pb(.)c1_derefidx_vbuxx(.*)", ".*=.*aa.*|.*c1.*c1.*", "lda {c1},x\n", "$1=$2vb$3aa$4", null, mapC));
@ -272,164 +484,7 @@ public class AsmFragmentManager {
synths.add(new FragmentSynthesis("(.*)=p..([cz].)_(plus|minus|bor|bxor)_(.*)", null, null, "$1=vwu$2_$3_$4", null, null));
synths.add(new FragmentSynthesis("p..([cz].)=(.*)_(sethi|setlo|plus|minus)_(.*)", null, null, "vwu$1=$2_$3_$4", null, null));
synths.add(new FragmentSynthesis("(.*)=p..([cz].)_(sethi|setlo|plus|minus)_(.*)", null, null, "$1=vwu$2_$3_$4", null, null));
for (FragmentSynthesis synth : synths) {
CharStream synthesized = synth.synthesize(signature, log);
if (synthesized != null) {
if (verboseFragmentLog) {
log.append("Succesfully synthesized fragment " + signature + " (from " + synth.getSubSignature() + ")");
}
return synthesized;
}
}
return null;
return synths;
}
/**
* AsmFragment synthesis based on matching fragment signature and reusing another fragment with added prefix/postfix and some bind-mappings
*/
private static class FragmentSynthesis {
private String sigMatch;
private String sigAvoid;
private String asmPrefix;
private String sigReplace;
private String asmPostfix;
private Map<String, String> bindMappings;
private String subSignature;
private boolean mapSignature;
public FragmentSynthesis(String sigMatch, String sigAvoid, String asmPrefix, String sigReplace, String asmPostfix, Map<String, String> bindMappings, boolean mapSignature) {
this.sigMatch = sigMatch;
this.sigAvoid = sigAvoid;
this.asmPrefix = asmPrefix;
this.sigReplace = sigReplace;
this.asmPostfix = asmPostfix;
this.bindMappings = bindMappings;
this.mapSignature = mapSignature;
}
public FragmentSynthesis(String sigMatch, String sigAvoid, String asmPrefix, String sigReplace, String asmPostfix, Map<String, String> bindMappings) {
this(sigMatch, sigAvoid, asmPrefix, sigReplace, asmPostfix, bindMappings, true);
}
public CharStream synthesize(String signature, CompileLog log) {
if (signature.matches(sigMatch)) {
if (sigAvoid == null || !signature.matches(sigAvoid)) {
subSignature = regexpRewriteSignature(signature, sigMatch, sigReplace);
if (mapSignature && bindMappings != null) {
// When mapping the signature we do the map replacement in the signature
for (String bound : bindMappings.keySet()) {
subSignature = subSignature.replace(bound, bindMappings.get(bound));
}
}
CharStream subCharStream = loadOrSynthesizeFragment(subSignature, log);
if (subCharStream != null) {
StringBuilder newFragment = new StringBuilder();
if (asmPrefix != null) {
newFragment.append(asmPrefix);
}
String subFragment = subCharStream.toString();
if (bindMappings != null) {
if(mapSignature) {
// When mapping the signature we do the reverse replacement in the ASM
List<String> reverse = new ArrayList<>(bindMappings.keySet());
Collections.reverse(reverse);
for (String bound : reverse) {
subFragment = subFragment.replace("{" + bindMappings.get(bound) + "}", "{" + bound + "}");
}
} else {
// When not mapping the signature we do the replacement directly in the ASM
for (String bound : bindMappings.keySet()) {
subFragment = subFragment.replace("{" + bound + "}", "{" + bindMappings.get(bound) + "}");
}
}
}
newFragment.append(subFragment);
if (asmPostfix != null) {
newFragment.append("\n");
newFragment.append(asmPostfix);
}
return CharStreams.fromString(newFragment.toString());
}
}
}
return null;
}
public String getSubSignature() {
return subSignature;
}
}
private static String regexpRewriteSignature(String signature, String match, String replace) {
Pattern p = Pattern.compile(match);
Matcher m = p.matcher(signature);
String output = signature;
if (m.find()) {
// getReplacement first number with "number" and second number with the first
output = m.replaceAll(replace);
}
return output;
}
/**
* Look for a fragment on the disk.
*
* @param signature The fragment signature
* @return The fragment file contents. Null if the fragment is not on the disk.
*/
private static CharStream loadFragment(String signature) {
ClassLoader classLoader = AsmFragmentManager.class.getClassLoader();
URL fragmentUrl = classLoader.getResource("dk/camelot64/kickc/fragment/asm/" + signature + ".asm");
if (fragmentUrl == null) {
return null;
}
try {
InputStream fragmentStream = fragmentUrl.openStream();
return CharStreams.fromStream(fragmentStream);
} catch (IOException e) {
throw new RuntimeException("Error loading fragment file " + fragmentUrl);
}
}
/**
* Parse an ASM fragment.
*
* @param fragmentCharStream The stream containing the fragment syntax
* @param fragmentFileName The filename (used in error messages)
* @return The parsed fragment ready for generating
* @throws IOException if the parsing/loading fails
*/
public static KickCParser.AsmFileContext parseFragment(CharStream fragmentCharStream, final String fragmentFileName) {
KickCLexer kickCLexer = new KickCLexer(fragmentCharStream);
KickCParser kickCParser = new KickCParser(new CommonTokenStream(kickCLexer));
kickCParser.addErrorListener(new BaseErrorListener() {
@Override
public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
throw new RuntimeException("Error parsing fragment " + fragmentFileName + "\n - Line: " + line + "\n - Message: " + msg);
}
});
kickCParser.setBuildParseTree(true);
KickCParser.AsmFileContext asmFileContext = kickCParser.asmFile();
return asmFileContext;
}
public static class UnknownFragmentException extends RuntimeException {
private String fragmentSignature;
public UnknownFragmentException(String signature) {
super("Fragment not found " + signature + ".asm");
this.fragmentSignature = signature;
}
public String getFragmentSignature() {
return fragmentSignature;
}
}
}

View File

@ -349,4 +349,16 @@ public class AsmFragmentSignature {
public Map<String, Value> getBindings() {
return bindings;
}
@Override
public String toString() {
StringBuilder str = new StringBuilder();
str.append(signature).append("(");
str.append(codeScopeRef).append(":: ");
for(String bound : bindings.keySet()) {
str.append(bound).append("=").append(bindings.get(bound).toString(getProgram())).append(" ");
}
str.append(") ");
return str.toString();
}
}

View File

@ -15,7 +15,13 @@ public class StatementAsm extends StatementBase {
@Override
public String toString(Program program, boolean aliveInfo) {
return "asm { "+asmLines.getText()+" }";
StringBuilder txt = new StringBuilder();
txt.append("asm { ");
for(KickCParser.AsmLineContext line : asmLines.asmLine()) {
txt.append(line.getText()).append(" ");
}
txt.append(" }");
return txt.toString();
}
public KickCParser.AsmLinesContext getAsmLines() {

View File

@ -28,7 +28,7 @@ main::@3: scope:[main] from main::@5 main::@7
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
[13] (byte) main::l#2 ← phi( main::@3/(byte/signed byte/word/signed word) 0 main::@4/(byte) main::l#1 ) [ main::k#4 main::l#2 ] ( main:2 [ main::k#4 main::l#2 ] )
asm { eor#$55tax }
asm { eor#$55 tax }
[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 ] )
[16] (byte) main::l#1 ← ++ (byte) main::l#2 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] )
[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 ] )

View File

@ -40,7 +40,7 @@ main::@2:
main::@3:
(byte) main::l ← (byte/signed byte/word/signed word) 0
main::@4:
asm { eor#$55tax }
asm { eor#$55 tax }
*((byte*) SCREEN + (byte) main::k) ← (byte) main::l
(byte) main::l ← ++ (byte) main::l
(boolean~) main::$2 ← (byte) main::l != (byte/signed byte/word/signed word) 101
@ -99,7 +99,7 @@ main::@3: scope:[main] from main::@6 main::@7
(byte) main::l ← (byte/signed byte/word/signed word) 0
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
asm { eor#$55tax }
asm { eor#$55 tax }
*((byte*) SCREEN + (byte) main::k) ← (byte) main::l
(byte) main::l ← ++ (byte) main::l
(boolean~) main::$2 ← (byte) main::l != (byte/signed byte/word/signed word) 101
@ -170,7 +170,7 @@ main::@4: scope:[main] from main::@3 main::@4
(byte) main::k#2 ← phi( main::@3/(byte) main::k#4 main::@4/(byte) main::k#2 )
(byte*) SCREEN#2 ← phi( main::@3/(byte*) SCREEN#4 main::@4/(byte*) SCREEN#2 )
(byte) main::l#2 ← phi( main::@3/(byte) main::l#0 main::@4/(byte) main::l#1 )
asm { eor#$55tax }
asm { eor#$55 tax }
*((byte*) SCREEN#2 + (byte) main::k#2) ← (byte) main::l#2
(byte) main::l#1 ← ++ (byte) main::l#2
(boolean~) main::$2 ← (byte) main::l#1 != (byte/signed byte/word/signed word) 101
@ -367,7 +367,7 @@ main::@3: scope:[main] from main::@5 main::@7
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
[13] (byte) main::l#2 ← phi( main::@3/(byte/signed byte/word/signed word) 0 main::@4/(byte) main::l#1 ) [ main::k#4 main::l#2 ] ( main:2 [ main::k#4 main::l#2 ] )
asm { eor#$55tax }
asm { eor#$55 tax }
[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 ] )
[16] (byte) main::l#1 ← ++ (byte) main::l#2 [ main::k#4 main::l#1 ] ( main:2 [ main::k#4 main::l#1 ] )
[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 ] )
@ -547,7 +547,7 @@ main: {
jmp b4
//SEG35 main::@4
b4:
//SEG36 asm { eor#$55tax }
//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=vbuz2
@ -577,13 +577,13 @@ main: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement asm { eor#$55tax } always clobbers reg byte a reg byte x
Statement asm { eor#$55 tax } always clobbers reg byte a reg byte x
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::k#4 main::k#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:4 [ main::k#4 main::k#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::l#2 main::l#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:5 [ main::l#2 main::l#1 ]
Statement [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 ] ) always clobbers reg byte a
Statement asm { eor#$55tax } always clobbers reg byte a reg byte x
Statement asm { eor#$55 tax } always clobbers reg byte a reg byte x
Statement [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 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ main::j#2 main::j#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
@ -687,7 +687,7 @@ main: {
jmp b4
//SEG35 main::@4
b4:
//SEG36 asm { eor#$55tax }
//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_vbuyy=vbuz1
@ -850,7 +850,7 @@ main: {
//SEG34 [13] phi (byte) main::l#2 = (byte) main::l#1 [phi:main::@4->main::@4#0] -- register_copy
//SEG35 main::@4
b4:
//SEG36 asm { eor#$55tax }
//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_vbuyy=vbuz1

View File

@ -37,9 +37,8 @@ lines: {
lda lines_x+1,x
sta line.x1
lda lines_y,x
tay
lda lines_y+1,x
sta line.y1
sta line.y0
ldy lines_y+1,x
jsr line
inc l
lda l
@ -50,7 +49,7 @@ lines: {
line: {
.label x0 = 3
.label x1 = 4
.label y1 = 5
.label y0 = 5
.label xd = 7
.label yd = $a
lda x0
@ -60,17 +59,17 @@ line: {
sec
sbc x0
sta xd
cpy y1
bcs b2
sty $ff
lda y1
cpy y0
bcc b2
tya
sec
sbc $ff
sbc y0
sta yd
cmp xd
bcs b3
ldx x0
sty line_xdyi.y
lda y0
sta line_xdyi.y
lda x1
sta line_xdyi.x1
lda xd
@ -81,8 +80,10 @@ line: {
breturn:
rts
b3:
sty line_ydxi.y
lda y0
sta line_ydxi.y
ldx x0
sty line_ydxi.y1
lda yd
sta line_ydxi.yd
lda xd
@ -91,13 +92,15 @@ line: {
jmp breturn
b2:
tya
eor #$ff
sec
sbc y1
adc y0
sta yd
cmp xd
bcs b6
ldx x0
sty line_xdyd.y
lda y0
sta line_xdyd.y
lda x1
sta line_xdyd.x1
lda xd
@ -107,10 +110,8 @@ line: {
jsr line_xdyd
jmp breturn
b6:
lda y1
sta line_ydxd.y
sty line_ydxd.y
ldx x1
sty line_ydxd.y1
lda yd
sta line_ydxd.yd
lda xd
@ -122,18 +123,16 @@ line: {
sec
sbc x1
sta xd
cpy y1
bcs b9
sty $ff
lda y1
cpy y0
bcc b9
tya
sec
sbc $ff
sbc y0
sta yd
cmp xd
bcs b10
ldx x1
lda y1
sta line_xdyd.y
sty line_xdyd.y
lda x0
sta line_xdyd.x1
lda xd
@ -143,8 +142,10 @@ line: {
jsr line_xdyd
jmp breturn
b10:
sty line_ydxd.y
lda y0
sta line_ydxd.y
ldx x0
sty line_ydxd.y1
lda yd
sta line_ydxd.yd
lda xd
@ -153,14 +154,14 @@ line: {
jmp breturn
b9:
tya
eor #$ff
sec
sbc y1
adc y0
sta yd
cmp xd
bcs b13
ldx x1
lda y1
sta line_xdyi.y
sty line_xdyi.y
lda x0
sta line_xdyi.x1
lda xd
@ -170,10 +171,8 @@ line: {
jsr line_xdyi
jmp breturn
b13:
lda y1
sta line_ydxi.y
sty line_ydxi.y
ldx x1
sty line_ydxi.y1
lda yd
sta line_ydxi.yd
lda xd

View File

@ -5563,78 +5563,78 @@ Uplifting [line_ydxi] best 13960 combination zp ZP_BYTE:8 [ line_ydxi::e#3 line_
Uplifting [line_ydxd] best 13834 combination zp ZP_BYTE:22 [ line_ydxd::e#3 line_ydxd::e#0 line_ydxd::e#6 line_ydxd::e#2 line_ydxd::e#1 ] reg byte x [ line_ydxd::x#3 line_ydxd::x#5 line_ydxd::x#1 line_ydxd::x#0 line_ydxd::x#6 line_ydxd::x#2 ] reg byte a [ line_ydxd::$8 ] zp ZP_BYTE:21 [ line_ydxd::y#3 line_ydxd::y#6 line_ydxd::y#1 line_ydxd::y#0 line_ydxd::y#2 ] zp ZP_BYTE:17 [ line_ydxd::xd#2 line_ydxd::xd#1 line_ydxd::xd#0 ] zp ZP_BYTE:18 [ line_ydxd::yd#5 line_ydxd::yd#1 line_ydxd::yd#0 ] zp ZP_BYTE:19 [ line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 ]
Uplifting [init_screen] best 13834 combination zp ZP_WORD:34 [ init_screen::b#2 init_screen::b#1 ] zp ZP_WORD:36 [ init_screen::c#2 init_screen::c#1 ]
Uplift attempts [line] 10000/186624 (limiting to 10000)
Uplifting [line] best 13714 combination zp ZP_BYTE:41 [ line::y1#0 ] reg byte y [ line::y0#0 ] zp ZP_BYTE:39 [ line::x1#0 ] zp ZP_BYTE:38 [ line::x0#0 ] zp ZP_BYTE:43 [ line::yd#1 ] zp ZP_BYTE:44 [ line::yd#0 ] zp ZP_BYTE:46 [ line::yd#3 ] zp ZP_BYTE:47 [ line::yd#10 ] zp ZP_BYTE:42 [ line::xd#1 ] zp ZP_BYTE:45 [ line::xd#0 ]
Uplifting [line] best 13510 combination reg byte y [ line::y1#0 ] zp ZP_BYTE:40 [ line::y0#0 ] zp ZP_BYTE:39 [ line::x1#0 ] zp ZP_BYTE:38 [ line::x0#0 ] zp ZP_BYTE:43 [ line::yd#1 ] zp ZP_BYTE:44 [ line::yd#0 ] zp ZP_BYTE:46 [ line::yd#3 ] zp ZP_BYTE:47 [ line::yd#10 ] zp ZP_BYTE:42 [ line::xd#1 ] zp ZP_BYTE:45 [ line::xd#0 ]
Limited combination testing to 10000 combinations of 186624 possible.
Uplifting [main] best 13714 combination
Uplifting [] best 13714 combination
Uplifting [main] best 13510 combination
Uplifting [] best 13510 combination
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ lines::l#2 lines::l#1 ]
Uplifting [lines] best 13714 combination zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ]
Uplifting [lines] best 13510 combination zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ line_ydxi::e#3 line_ydxi::e#0 line_ydxi::e#6 line_ydxi::e#2 line_ydxi::e#1 ]
Uplifting [line_ydxi] best 13714 combination zp ZP_BYTE:8 [ line_ydxi::e#3 line_ydxi::e#0 line_ydxi::e#6 line_ydxi::e#2 line_ydxi::e#1 ]
Uplifting [line_ydxi] best 13510 combination zp ZP_BYTE:8 [ line_ydxi::e#3 line_ydxi::e#0 line_ydxi::e#6 line_ydxi::e#2 line_ydxi::e#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:16 [ line_xdyi::e#3 line_xdyi::e#0 line_xdyi::e#6 line_xdyi::e#2 line_xdyi::e#1 ]
Uplifting [line_xdyi] best 13714 combination zp ZP_BYTE:16 [ line_xdyi::e#3 line_xdyi::e#0 line_xdyi::e#6 line_xdyi::e#2 line_xdyi::e#1 ]
Uplifting [line_xdyi] best 13510 combination zp ZP_BYTE:16 [ line_xdyi::e#3 line_xdyi::e#0 line_xdyi::e#6 line_xdyi::e#2 line_xdyi::e#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ line_ydxd::e#3 line_ydxd::e#0 line_ydxd::e#6 line_ydxd::e#2 line_ydxd::e#1 ]
Uplifting [line_ydxd] best 13714 combination zp ZP_BYTE:22 [ line_ydxd::e#3 line_ydxd::e#0 line_ydxd::e#6 line_ydxd::e#2 line_ydxd::e#1 ]
Uplifting [line_ydxd] best 13510 combination zp ZP_BYTE:22 [ line_ydxd::e#3 line_ydxd::e#0 line_ydxd::e#6 line_ydxd::e#2 line_ydxd::e#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ line_xdyd::e#3 line_xdyd::e#0 line_xdyd::e#6 line_xdyd::e#2 line_xdyd::e#1 ]
Uplifting [line_xdyd] best 13714 combination zp ZP_BYTE:28 [ line_xdyd::e#3 line_xdyd::e#0 line_xdyd::e#6 line_xdyd::e#2 line_xdyd::e#1 ]
Uplifting [line_xdyd] best 13510 combination zp ZP_BYTE:28 [ line_xdyd::e#3 line_xdyd::e#0 line_xdyd::e#6 line_xdyd::e#2 line_xdyd::e#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ line_xdyi::y#3 line_xdyi::y#5 line_xdyi::y#0 line_xdyi::y#1 line_xdyi::y#6 line_xdyi::y#2 ]
Uplifting [line_xdyi] best 13714 combination zp ZP_BYTE:15 [ line_xdyi::y#3 line_xdyi::y#5 line_xdyi::y#0 line_xdyi::y#1 line_xdyi::y#6 line_xdyi::y#2 ]
Uplifting [line_xdyi] best 13510 combination zp ZP_BYTE:15 [ line_xdyi::y#3 line_xdyi::y#5 line_xdyi::y#0 line_xdyi::y#1 line_xdyi::y#6 line_xdyi::y#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:27 [ line_xdyd::y#3 line_xdyd::y#5 line_xdyd::y#0 line_xdyd::y#1 line_xdyd::y#6 line_xdyd::y#2 ]
Uplifting [line_xdyd] best 13714 combination zp ZP_BYTE:27 [ line_xdyd::y#3 line_xdyd::y#5 line_xdyd::y#0 line_xdyd::y#1 line_xdyd::y#6 line_xdyd::y#2 ]
Uplifting [line_xdyd] best 13510 combination zp ZP_BYTE:27 [ line_xdyd::y#3 line_xdyd::y#5 line_xdyd::y#0 line_xdyd::y#1 line_xdyd::y#6 line_xdyd::y#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:58 [ line_xdyi::$8 ]
Uplifting [line_xdyi] best 13714 combination zp ZP_BYTE:58 [ line_xdyi::$8 ]
Uplifting [line_xdyi] best 13510 combination zp ZP_BYTE:58 [ line_xdyi::$8 ]
Attempting to uplift remaining variables inzp ZP_BYTE:60 [ line_xdyd::$8 ]
Uplifting [line_xdyd] best 13714 combination zp ZP_BYTE:60 [ line_xdyd::$8 ]
Uplifting [line_xdyd] best 13510 combination zp ZP_BYTE:60 [ line_xdyd::$8 ]
Attempting to uplift remaining variables inzp ZP_BYTE:66 [ init_plot_tables::$10 ]
Uplifting [init_plot_tables] best 13654 combination reg byte a [ init_plot_tables::$10 ]
Uplifting [init_plot_tables] best 13450 combination reg byte a [ init_plot_tables::$10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ line_ydxi::y#3 line_ydxi::y#6 line_ydxi::y#1 line_ydxi::y#0 line_ydxi::y#2 ]
Uplifting [line_ydxi] best 13654 combination zp ZP_BYTE:7 [ line_ydxi::y#3 line_ydxi::y#6 line_ydxi::y#1 line_ydxi::y#0 line_ydxi::y#2 ]
Uplifting [line_ydxi] best 13450 combination zp ZP_BYTE:7 [ line_ydxi::y#3 line_ydxi::y#6 line_ydxi::y#1 line_ydxi::y#0 line_ydxi::y#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ line_ydxd::y#3 line_ydxd::y#6 line_ydxd::y#1 line_ydxd::y#0 line_ydxd::y#2 ]
Uplifting [line_ydxd] best 13654 combination zp ZP_BYTE:21 [ line_ydxd::y#3 line_ydxd::y#6 line_ydxd::y#1 line_ydxd::y#0 line_ydxd::y#2 ]
Uplifting [line_ydxd] best 13450 combination zp ZP_BYTE:21 [ line_ydxd::y#3 line_ydxd::y#6 line_ydxd::y#1 line_ydxd::y#0 line_ydxd::y#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:62 [ init_plot_tables::$6 ]
Uplifting [init_plot_tables] best 13654 combination zp ZP_BYTE:62 [ init_plot_tables::$6 ]
Uplifting [init_plot_tables] best 13450 combination zp ZP_BYTE:62 [ init_plot_tables::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ line_ydxi::xd#2 line_ydxi::xd#1 line_ydxi::xd#0 ]
Uplifting [line_ydxi] best 13654 combination zp ZP_BYTE:3 [ line_ydxi::xd#2 line_ydxi::xd#1 line_ydxi::xd#0 ]
Uplifting [line_ydxi] best 13450 combination zp ZP_BYTE:3 [ line_ydxi::xd#2 line_ydxi::xd#1 line_ydxi::xd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:11 [ line_xdyi::yd#2 line_xdyi::yd#0 line_xdyi::yd#1 ]
Uplifting [line_xdyi] best 13654 combination zp ZP_BYTE:11 [ line_xdyi::yd#2 line_xdyi::yd#0 line_xdyi::yd#1 ]
Uplifting [line_xdyi] best 13450 combination zp ZP_BYTE:11 [ line_xdyi::yd#2 line_xdyi::yd#0 line_xdyi::yd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:17 [ line_ydxd::xd#2 line_ydxd::xd#1 line_ydxd::xd#0 ]
Uplifting [line_ydxd] best 13654 combination zp ZP_BYTE:17 [ line_ydxd::xd#2 line_ydxd::xd#1 line_ydxd::xd#0 ]
Uplifting [line_ydxd] best 13450 combination zp ZP_BYTE:17 [ line_ydxd::xd#2 line_ydxd::xd#1 line_ydxd::xd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:23 [ line_xdyd::yd#2 line_xdyd::yd#0 line_xdyd::yd#1 ]
Uplifting [line_xdyd] best 13654 combination zp ZP_BYTE:23 [ line_xdyd::yd#2 line_xdyd::yd#0 line_xdyd::yd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:41 [ line::y1#0 ]
Uplifting [line] best 13654 combination zp ZP_BYTE:41 [ line::y1#0 ]
Uplifting [line_xdyd] best 13450 combination zp ZP_BYTE:23 [ line_xdyd::yd#2 line_xdyd::yd#0 line_xdyd::yd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:40 [ line::y0#0 ]
Uplifting [line] best 13450 combination zp ZP_BYTE:40 [ line::y0#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ line_ydxi::yd#5 line_ydxi::yd#1 line_ydxi::yd#0 ]
Uplifting [line_ydxi] best 13654 combination zp ZP_BYTE:4 [ line_ydxi::yd#5 line_ydxi::yd#1 line_ydxi::yd#0 ]
Uplifting [line_ydxi] best 13450 combination zp ZP_BYTE:4 [ line_ydxi::yd#5 line_ydxi::yd#1 line_ydxi::yd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:12 [ line_xdyi::xd#5 line_xdyi::xd#0 line_xdyi::xd#1 ]
Uplifting [line_xdyi] best 13654 combination zp ZP_BYTE:12 [ line_xdyi::xd#5 line_xdyi::xd#0 line_xdyi::xd#1 ]
Uplifting [line_xdyi] best 13450 combination zp ZP_BYTE:12 [ line_xdyi::xd#5 line_xdyi::xd#0 line_xdyi::xd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:18 [ line_ydxd::yd#5 line_ydxd::yd#1 line_ydxd::yd#0 ]
Uplifting [line_ydxd] best 13654 combination zp ZP_BYTE:18 [ line_ydxd::yd#5 line_ydxd::yd#1 line_ydxd::yd#0 ]
Uplifting [line_ydxd] best 13450 combination zp ZP_BYTE:18 [ line_ydxd::yd#5 line_ydxd::yd#1 line_ydxd::yd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ line_xdyd::xd#5 line_xdyd::xd#0 line_xdyd::xd#1 ]
Uplifting [line_xdyd] best 13654 combination zp ZP_BYTE:24 [ line_xdyd::xd#5 line_xdyd::xd#0 line_xdyd::xd#1 ]
Uplifting [line_xdyd] best 13450 combination zp ZP_BYTE:24 [ line_xdyd::xd#5 line_xdyd::xd#0 line_xdyd::xd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:39 [ line::x1#0 ]
Uplifting [line] best 13654 combination zp ZP_BYTE:39 [ line::x1#0 ]
Uplifting [line] best 13450 combination zp ZP_BYTE:39 [ line::x1#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:38 [ line::x0#0 ]
Uplifting [line] best 13654 combination zp ZP_BYTE:38 [ line::x0#0 ]
Uplifting [line] best 13450 combination zp ZP_BYTE:38 [ line::x0#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 ]
Uplifting [line_ydxi] best 13654 combination zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 ]
Uplifting [line_ydxi] best 13450 combination zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 ]
Uplifting [line_xdyi] best 13654 combination zp ZP_BYTE:13 [ line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 ]
Uplifting [line_xdyi] best 13450 combination zp ZP_BYTE:13 [ line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:19 [ line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 ]
Uplifting [line_ydxd] best 13654 combination zp ZP_BYTE:19 [ line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 ]
Uplifting [line_ydxd] best 13450 combination zp ZP_BYTE:19 [ line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 ]
Uplifting [line_xdyd] best 13654 combination zp ZP_BYTE:25 [ line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 ]
Uplifting [line_xdyd] best 13450 combination zp ZP_BYTE:25 [ line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:43 [ line::yd#1 ]
Uplifting [line] best 13654 combination zp ZP_BYTE:43 [ line::yd#1 ]
Uplifting [line] best 13450 combination zp ZP_BYTE:43 [ line::yd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:44 [ line::yd#0 ]
Uplifting [line] best 13654 combination zp ZP_BYTE:44 [ line::yd#0 ]
Uplifting [line] best 13450 combination zp ZP_BYTE:44 [ line::yd#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:46 [ line::yd#3 ]
Uplifting [line] best 13654 combination zp ZP_BYTE:46 [ line::yd#3 ]
Uplifting [line] best 13450 combination zp ZP_BYTE:46 [ line::yd#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:47 [ line::yd#10 ]
Uplifting [line] best 13654 combination zp ZP_BYTE:47 [ line::yd#10 ]
Uplifting [line] best 13450 combination zp ZP_BYTE:47 [ line::yd#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:42 [ line::xd#1 ]
Uplifting [line] best 13654 combination zp ZP_BYTE:42 [ line::xd#1 ]
Uplifting [line] best 13450 combination zp ZP_BYTE:42 [ line::xd#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:45 [ line::xd#0 ]
Uplifting [line] best 13654 combination zp ZP_BYTE:45 [ line::xd#0 ]
Uplifting [line] best 13450 combination zp ZP_BYTE:45 [ line::xd#0 ]
Coalescing zero page register [ zp ZP_BYTE:2 [ lines::l#2 lines::l#1 ] ] with [ zp ZP_BYTE:62 [ init_plot_tables::$6 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ line_ydxi::xd#2 line_ydxi::xd#1 line_ydxi::xd#0 ] ] with [ zp ZP_BYTE:11 [ line_xdyi::yd#2 line_xdyi::yd#0 line_xdyi::yd#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:3 [ line_ydxi::xd#2 line_ydxi::xd#1 line_ydxi::xd#0 line_xdyi::yd#2 line_xdyi::yd#0 line_xdyi::yd#1 ] ] with [ zp ZP_BYTE:17 [ line_ydxd::xd#2 line_ydxd::xd#1 line_ydxd::xd#0 ] ]
@ -5647,7 +5647,7 @@ Coalescing zero page register [ zp ZP_BYTE:4 [ line_ydxi::yd#5 line_ydxi::yd#1 l
Coalescing zero page register [ zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 ] ] with [ zp ZP_BYTE:13 [ line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 ] ] with [ zp ZP_BYTE:19 [ line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 ] ] with [ zp ZP_BYTE:25 [ line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 ] ] with [ zp ZP_BYTE:41 [ line::y1#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 ] ] with [ zp ZP_BYTE:40 [ line::y0#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:7 [ line_ydxi::y#3 line_ydxi::y#6 line_ydxi::y#1 line_ydxi::y#0 line_ydxi::y#2 ] ] with [ zp ZP_BYTE:15 [ line_xdyi::y#3 line_xdyi::y#5 line_xdyi::y#0 line_xdyi::y#1 line_xdyi::y#6 line_xdyi::y#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:7 [ line_ydxi::y#3 line_ydxi::y#6 line_ydxi::y#1 line_ydxi::y#0 line_ydxi::y#2 line_xdyi::y#3 line_xdyi::y#5 line_xdyi::y#0 line_xdyi::y#1 line_xdyi::y#6 line_xdyi::y#2 ] ] with [ zp ZP_BYTE:21 [ line_ydxd::y#3 line_ydxd::y#6 line_ydxd::y#1 line_ydxd::y#0 line_ydxd::y#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:7 [ line_ydxi::y#3 line_ydxi::y#6 line_ydxi::y#1 line_ydxi::y#0 line_ydxi::y#2 line_xdyi::y#3 line_xdyi::y#5 line_xdyi::y#0 line_xdyi::y#1 line_xdyi::y#6 line_xdyi::y#2 line_ydxd::y#3 line_ydxd::y#6 line_ydxd::y#1 line_ydxd::y#0 line_ydxd::y#2 ] ] with [ zp ZP_BYTE:27 [ line_xdyd::y#3 line_xdyd::y#5 line_xdyd::y#0 line_xdyd::y#1 line_xdyd::y#6 line_xdyd::y#2 ] ]
@ -5773,14 +5773,13 @@ lines: {
ldx l
lda lines_x+1,x
sta line.x1
//SEG35 [19] (byte) line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1
//SEG35 [19] (byte) line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
ldx l
lda lines_y,x
tay
//SEG36 [20] (byte) line::y1#0 ← *((const byte[]) lines_y#0+(byte/signed byte/word/signed word) 1 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
sta line.y0
//SEG36 [20] (byte) line::y1#0 ← *((const byte[]) lines_y#0+(byte/signed byte/word/signed word) 1 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1
ldx l
lda lines_y+1,x
sta line.y1
ldy lines_y+1,x
//SEG37 [21] call line param-assignment [ lines::l#2 ] ( main:2::lines:12 [ lines::l#2 ] )
jsr line
jmp b3
@ -5802,7 +5801,7 @@ lines: {
line: {
.label x0 = 3
.label x1 = 4
.label y1 = 5
.label y0 = 5
.label xd = 7
.label yd = $a
//SEG44 [25] if((byte) line::x0#0>=(byte) line::x1#0) goto line::@1 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ) -- vbuz1_ge_vbuz2_then_la1
@ -5817,17 +5816,16 @@ line: {
sec
sbc x0
sta xd
//SEG47 [27] if((byte) line::y0#0>=(byte) line::y1#0) goto line::@2 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 ] ) -- vbuyy_ge_vbuz1_then_la1
cpy y1
bcs b2
//SEG47 [27] if((byte) line::y0#0>=(byte) line::y1#0) goto line::@2 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 ] ) -- vbuz1_ge_vbuyy_then_la1
cpy y0
bcc b2
jmp b16
//SEG48 line::@16
b16:
//SEG49 [28] (byte) line::yd#1 ← (byte) line::y1#0 - (byte) line::y0#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ) -- vbuz1=vbuz2_minus_vbuyy
sty $ff
lda y1
//SEG49 [28] (byte) line::yd#1 ← (byte) line::y1#0 - (byte) line::y0#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ) -- vbuz1=vbuyy_minus_vbuz2
tya
sec
sbc $ff
sbc y0
sta yd
//SEG50 [29] if((byte) line::yd#1>=(byte) line::xd#1) goto line::@3 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ) -- vbuz1_ge_vbuz2_then_la1
lda yd
@ -5838,8 +5836,9 @@ line: {
b17:
//SEG52 [30] (byte) line_xdyi::x#0 ← (byte) line::x0#0 [ line::x1#0 line::y0#0 line::xd#1 line::yd#1 line_xdyi::x#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#1 line::yd#1 line_xdyi::x#0 ] ) -- vbuxx=vbuz1
ldx x0
//SEG53 [31] (byte) line_xdyi::y#0 ← (byte) line::y0#0 [ line::x1#0 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 ] ) -- vbuz1=vbuyy
sty line_xdyi.y
//SEG53 [31] (byte) line_xdyi::y#0 ← (byte) line::y0#0 [ line::x1#0 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 ] ) -- vbuz1=vbuz2
lda y0
sta line_xdyi.y
//SEG54 [32] (byte) line_xdyi::x1#0 ← (byte) line::x1#0 [ line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 line_xdyi::x1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 line_xdyi::x1#0 ] ) -- vbuz1=vbuz2
lda x1
sta line_xdyi.x1
@ -5865,12 +5864,13 @@ line: {
rts
//SEG66 line::@3
b3:
//SEG67 [37] (byte) line_ydxi::y#0 ← (byte) line::y0#0 [ line::x0#0 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 ] ) -- vbuz1=vbuyy
sty line_ydxi.y
//SEG67 [37] (byte) line_ydxi::y#0 ← (byte) line::y0#0 [ line::x0#0 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 ] ) -- vbuz1=vbuz2
lda y0
sta line_ydxi.y
//SEG68 [38] (byte) line_ydxi::x#0 ← (byte) line::x0#0 [ line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 ] ) -- vbuxx=vbuz1
ldx x0
//SEG69 [39] (byte) line_ydxi::y1#0 ← (byte) line::y1#0 [ line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 ] )
// (byte) line_ydxi::y1#0 = (byte) line::y1#0 // register copy zp ZP_BYTE:5
//SEG69 [39] (byte) line_ydxi::y1#0 ← (byte) line::y1#0 [ line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 ] ) -- vbuz1=vbuyy
sty line_ydxi.y1
//SEG70 [40] (byte) line_ydxi::yd#0 ← (byte) line::yd#1 [ line::xd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 line_ydxi::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 line_ydxi::yd#0 ] ) -- vbuz1=vbuz2
lda yd
sta line_ydxi.yd
@ -5889,10 +5889,11 @@ line: {
jmp breturn
//SEG79 line::@2
b2:
//SEG80 [43] (byte) line::yd#0 ← (byte) line::y0#0 - (byte) line::y1#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ) -- vbuz1=vbuyy_minus_vbuz2
//SEG80 [43] (byte) line::yd#0 ← (byte) line::y0#0 - (byte) line::y1#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ) -- vbuz1=vbuz2_minus_vbuyy
tya
eor #$ff
sec
sbc y1
adc y0
sta yd
//SEG81 [44] if((byte) line::yd#0>=(byte) line::xd#1) goto line::@6 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ) -- vbuz1_ge_vbuz2_then_la1
lda yd
@ -5903,8 +5904,9 @@ line: {
b20:
//SEG83 [45] (byte) line_xdyd::x#0 ← (byte) line::x0#0 [ line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_xdyd::x#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_xdyd::x#0 ] ) -- vbuxx=vbuz1
ldx x0
//SEG84 [46] (byte) line_xdyd::y#0 ← (byte) line::y0#0 [ line::x1#0 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 ] ) -- vbuz1=vbuyy
sty line_xdyd.y
//SEG84 [46] (byte) line_xdyd::y#0 ← (byte) line::y0#0 [ line::x1#0 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 ] ) -- vbuz1=vbuz2
lda y0
sta line_xdyd.y
//SEG85 [47] (byte) line_xdyd::x1#0 ← (byte) line::x1#0 [ line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 line_xdyd::x1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 line_xdyd::x1#0 ] ) -- vbuz1=vbuz2
lda x1
sta line_xdyd.x1
@ -5926,13 +5928,12 @@ line: {
jmp breturn
//SEG95 line::@6
b6:
//SEG96 [51] (byte) line_ydxd::y#0 ← (byte) line::y1#0 [ line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 ] ) -- vbuz1=vbuz2
lda y1
sta line_ydxd.y
//SEG96 [51] (byte) line_ydxd::y#0 ← (byte) line::y1#0 [ line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 ] ) -- vbuz1=vbuyy
sty line_ydxd.y
//SEG97 [52] (byte) line_ydxd::x#0 ← (byte) line::x1#0 [ line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 ] ) -- vbuxx=vbuz1
ldx x1
//SEG98 [53] (byte) line_ydxd::y1#0 ← (byte) line::y0#0 [ line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 ] ) -- vbuz1=vbuyy
sty line_ydxd.y1
//SEG98 [53] (byte) line_ydxd::y1#0 ← (byte) line::y0#0 [ line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 ] )
// (byte) line_ydxd::y1#0 = (byte) line::y0#0 // register copy zp ZP_BYTE:5
//SEG99 [54] (byte) line_ydxd::yd#0 ← (byte) line::yd#0 [ line::xd#1 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 line_ydxd::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 line_ydxd::yd#0 ] ) -- vbuz1=vbuz2
lda yd
sta line_ydxd.yd
@ -5956,17 +5957,16 @@ line: {
sec
sbc x1
sta xd
//SEG110 [58] if((byte) line::y0#0>=(byte) line::y1#0) goto line::@9 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 ] ) -- vbuyy_ge_vbuz1_then_la1
cpy y1
bcs b9
//SEG110 [58] if((byte) line::y0#0>=(byte) line::y1#0) goto line::@9 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 ] ) -- vbuz1_ge_vbuyy_then_la1
cpy y0
bcc b9
jmp b23
//SEG111 line::@23
b23:
//SEG112 [59] (byte) line::yd#3 ← (byte) line::y1#0 - (byte) line::y0#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ) -- vbuz1=vbuz2_minus_vbuyy
sty $ff
lda y1
//SEG112 [59] (byte) line::yd#3 ← (byte) line::y1#0 - (byte) line::y0#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ) -- vbuz1=vbuyy_minus_vbuz2
tya
sec
sbc $ff
sbc y0
sta yd
//SEG113 [60] if((byte) line::yd#3>=(byte) line::xd#0) goto line::@10 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ) -- vbuz1_ge_vbuz2_then_la1
lda yd
@ -5977,9 +5977,8 @@ line: {
b24:
//SEG115 [61] (byte) line_xdyd::x#1 ← (byte) line::x1#0 [ line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_xdyd::x#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_xdyd::x#1 ] ) -- vbuxx=vbuz1
ldx x1
//SEG116 [62] (byte) line_xdyd::y#1 ← (byte) line::y1#0 [ line::x0#0 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 ] ) -- vbuz1=vbuz2
lda y1
sta line_xdyd.y
//SEG116 [62] (byte) line_xdyd::y#1 ← (byte) line::y1#0 [ line::x0#0 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 ] ) -- vbuz1=vbuyy
sty line_xdyd.y
//SEG117 [63] (byte) line_xdyd::x1#1 ← (byte) line::x0#0 [ line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 line_xdyd::x1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 line_xdyd::x1#1 ] ) -- vbuz1=vbuz2
lda x0
sta line_xdyd.x1
@ -6001,12 +6000,13 @@ line: {
jmp breturn
//SEG127 line::@10
b10:
//SEG128 [67] (byte) line_ydxd::y#1 ← (byte) line::y0#0 [ line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 ] ) -- vbuz1=vbuyy
sty line_ydxd.y
//SEG128 [67] (byte) line_ydxd::y#1 ← (byte) line::y0#0 [ line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 ] ) -- vbuz1=vbuz2
lda y0
sta line_ydxd.y
//SEG129 [68] (byte) line_ydxd::x#1 ← (byte) line::x0#0 [ line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 ] ) -- vbuxx=vbuz1
ldx x0
//SEG130 [69] (byte) line_ydxd::y1#1 ← (byte) line::y1#0 [ line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 ] )
// (byte) line_ydxd::y1#1 = (byte) line::y1#0 // register copy zp ZP_BYTE:5
//SEG130 [69] (byte) line_ydxd::y1#1 ← (byte) line::y1#0 [ line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 ] ) -- vbuz1=vbuyy
sty line_ydxd.y1
//SEG131 [70] (byte) line_ydxd::yd#1 ← (byte) line::yd#3 [ line::xd#0 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 line_ydxd::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 line_ydxd::yd#1 ] ) -- vbuz1=vbuz2
lda yd
sta line_ydxd.yd
@ -6025,10 +6025,11 @@ line: {
jmp breturn
//SEG140 line::@9
b9:
//SEG141 [73] (byte) line::yd#10 ← (byte) line::y0#0 - (byte) line::y1#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ) -- vbuz1=vbuyy_minus_vbuz2
//SEG141 [73] (byte) line::yd#10 ← (byte) line::y0#0 - (byte) line::y1#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ) -- vbuz1=vbuz2_minus_vbuyy
tya
eor #$ff
sec
sbc y1
adc y0
sta yd
//SEG142 [74] if((byte) line::yd#10>=(byte) line::xd#0) goto line::@13 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ) -- vbuz1_ge_vbuz2_then_la1
lda yd
@ -6039,9 +6040,8 @@ line: {
b27:
//SEG144 [75] (byte) line_xdyi::x#1 ← (byte) line::x1#0 [ line::x0#0 line::y1#0 line::xd#0 line::yd#10 line_xdyi::x#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#0 line::yd#10 line_xdyi::x#1 ] ) -- vbuxx=vbuz1
ldx x1
//SEG145 [76] (byte) line_xdyi::y#1 ← (byte) line::y1#0 [ line::x0#0 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 ] ) -- vbuz1=vbuz2
lda y1
sta line_xdyi.y
//SEG145 [76] (byte) line_xdyi::y#1 ← (byte) line::y1#0 [ line::x0#0 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 ] ) -- vbuz1=vbuyy
sty line_xdyi.y
//SEG146 [77] (byte) line_xdyi::x1#1 ← (byte) line::x0#0 [ line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 line_xdyi::x1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 line_xdyi::x1#1 ] ) -- vbuz1=vbuz2
lda x0
sta line_xdyi.x1
@ -6063,13 +6063,12 @@ line: {
jmp breturn
//SEG156 line::@13
b13:
//SEG157 [81] (byte) line_ydxi::y#1 ← (byte) line::y1#0 [ line::x1#0 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 ] ) -- vbuz1=vbuz2
lda y1
sta line_ydxi.y
//SEG157 [81] (byte) line_ydxi::y#1 ← (byte) line::y1#0 [ line::x1#0 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 ] ) -- vbuz1=vbuyy
sty line_ydxi.y
//SEG158 [82] (byte) line_ydxi::x#1 ← (byte) line::x1#0 [ line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 ] ) -- vbuxx=vbuz1
ldx x1
//SEG159 [83] (byte) line_ydxi::y1#1 ← (byte) line::y0#0 [ line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 ] ) -- vbuz1=vbuyy
sty line_ydxi.y1
//SEG159 [83] (byte) line_ydxi::y1#1 ← (byte) line::y0#0 [ line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 ] )
// (byte) line_ydxi::y1#1 = (byte) line::y0#0 // register copy zp ZP_BYTE:5
//SEG160 [84] (byte) line_ydxi::yd#1 ← (byte) line::yd#10 [ line::xd#0 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 line_ydxi::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 line_ydxi::yd#1 ] ) -- vbuz1=vbuz2
lda yd
sta line_ydxi.yd
@ -6894,9 +6893,9 @@ FINAL SYMBOL TABLE
(byte) line::xd#0 xd zp ZP_BYTE:7 0.7
(byte) line::xd#1 xd zp ZP_BYTE:7 0.7
(byte) line::y0
(byte) line::y0#0 reg byte y 5.952380952380948
(byte) line::y0#0 y0 zp ZP_BYTE:5 5.952380952380948
(byte) line::y1
(byte) line::y1#0 y1 zp ZP_BYTE:5 6.249999999999996
(byte) line::y1#0 reg byte y 6.249999999999996
(byte) line::yd
(byte) line::yd#0 yd zp ZP_BYTE:10 0.8888888888888888
(byte) line::yd#1 yd zp ZP_BYTE:10 0.8888888888888888
@ -7108,7 +7107,7 @@ FINAL SYMBOL TABLE
zp ZP_BYTE:2 [ lines::l#2 lines::l#1 init_plot_tables::$6 ]
zp ZP_BYTE:3 [ line_ydxi::xd#2 line_ydxi::xd#1 line_ydxi::xd#0 line_xdyi::yd#2 line_xdyi::yd#0 line_xdyi::yd#1 line_ydxd::xd#2 line_ydxd::xd#1 line_ydxd::xd#0 line_xdyd::yd#2 line_xdyd::yd#0 line_xdyd::yd#1 line::x0#0 ]
zp ZP_BYTE:4 [ line_ydxi::yd#5 line_ydxi::yd#1 line_ydxi::yd#0 line_xdyi::xd#5 line_xdyi::xd#0 line_xdyi::xd#1 line_ydxd::yd#5 line_ydxd::yd#1 line_ydxd::yd#0 line_xdyd::xd#5 line_xdyd::xd#0 line_xdyd::xd#1 line::x1#0 ]
zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 line::y1#0 ]
zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 line::y0#0 ]
reg byte x [ line_ydxi::x#3 line_ydxi::x#5 line_ydxi::x#1 line_ydxi::x#0 line_ydxi::x#6 line_ydxi::x#2 ]
zp ZP_BYTE:6 [ line_ydxi::y#3 line_ydxi::y#6 line_ydxi::y#1 line_ydxi::y#0 line_ydxi::y#2 line_xdyi::y#3 line_xdyi::y#5 line_xdyi::y#0 line_xdyi::y#1 line_xdyi::y#6 line_xdyi::y#2 line_ydxd::y#3 line_ydxd::y#6 line_ydxd::y#1 line_ydxd::y#0 line_ydxd::y#2 line_xdyd::y#3 line_xdyd::y#5 line_xdyd::y#0 line_xdyd::y#1 line_xdyd::y#6 line_xdyd::y#2 ]
zp ZP_BYTE:7 [ line_ydxi::e#3 line_ydxi::e#0 line_ydxi::e#6 line_ydxi::e#2 line_ydxi::e#1 line_xdyi::e#3 line_xdyi::e#0 line_xdyi::e#6 line_xdyi::e#2 line_xdyi::e#1 line_ydxd::e#3 line_ydxd::e#0 line_ydxd::e#6 line_ydxd::e#2 line_ydxd::e#1 line_xdyd::e#3 line_xdyd::e#0 line_xdyd::e#6 line_xdyd::e#2 line_xdyd::e#1 line::xd#1 line::xd#0 ]
@ -7121,7 +7120,7 @@ reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ]
reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ]
reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ]
zp ZP_WORD:8 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 init_screen::c#2 init_screen::c#1 plot::plotter_x#0 plot::$0 plot::plotter#0 ]
reg byte y [ line::y0#0 ]
reg byte y [ line::y1#0 ]
zp ZP_BYTE:10 [ line::yd#1 line::yd#0 line::yd#3 line::yd#10 line_xdyi::$8 line_xdyd::$8 ]
reg byte a [ line_ydxi::$8 ]
zp ZP_WORD:11 [ plot::plotter_y#0 ]
@ -7135,7 +7134,7 @@ reg byte a [ init_plot_tables::$10 ]
FINAL ASSEMBLER
Score: 10447
Score: 10243
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -7210,12 +7209,11 @@ lines: {
//SEG34 [18] (byte) line::x1#0 ← *((const byte[]) lines_x#0+(byte/signed byte/word/signed word) 1 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
lda lines_x+1,x
sta line.x1
//SEG35 [19] (byte) line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1
//SEG35 [19] (byte) line::y0#0 ← *((const byte[]) lines_y#0 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
lda lines_y,x
tay
//SEG36 [20] (byte) line::y1#0 ← *((const byte[]) lines_y#0+(byte/signed byte/word/signed word) 1 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
lda lines_y+1,x
sta line.y1
sta line.y0
//SEG36 [20] (byte) line::y1#0 ← *((const byte[]) lines_y#0+(byte/signed byte/word/signed word) 1 + (byte) lines::l#2) [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ( main:2::lines:12 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1
ldy lines_y+1,x
//SEG37 [21] call line param-assignment [ lines::l#2 ] ( main:2::lines:12 [ lines::l#2 ] )
jsr line
//SEG38 lines::@3
@ -7233,7 +7231,7 @@ lines: {
line: {
.label x0 = 3
.label x1 = 4
.label y1 = 5
.label y0 = 5
.label xd = 7
.label yd = $a
//SEG44 [25] if((byte) line::x0#0>=(byte) line::x1#0) goto line::@1 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 ] ) -- vbuz1_ge_vbuz2_then_la1
@ -7246,15 +7244,14 @@ line: {
sec
sbc x0
sta xd
//SEG47 [27] if((byte) line::y0#0>=(byte) line::y1#0) goto line::@2 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 ] ) -- vbuyy_ge_vbuz1_then_la1
cpy y1
bcs b2
//SEG47 [27] if((byte) line::y0#0>=(byte) line::y1#0) goto line::@2 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 ] ) -- vbuz1_ge_vbuyy_then_la1
cpy y0
bcc b2
//SEG48 line::@16
//SEG49 [28] (byte) line::yd#1 ← (byte) line::y1#0 - (byte) line::y0#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ) -- vbuz1=vbuz2_minus_vbuyy
sty $ff
lda y1
//SEG49 [28] (byte) line::yd#1 ← (byte) line::y1#0 - (byte) line::y0#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ) -- vbuz1=vbuyy_minus_vbuz2
tya
sec
sbc $ff
sbc y0
sta yd
//SEG50 [29] if((byte) line::yd#1>=(byte) line::xd#1) goto line::@3 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#1 ] ) -- vbuz1_ge_vbuz2_then_la1
cmp xd
@ -7262,8 +7259,9 @@ line: {
//SEG51 line::@17
//SEG52 [30] (byte) line_xdyi::x#0 ← (byte) line::x0#0 [ line::x1#0 line::y0#0 line::xd#1 line::yd#1 line_xdyi::x#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#1 line::yd#1 line_xdyi::x#0 ] ) -- vbuxx=vbuz1
ldx x0
//SEG53 [31] (byte) line_xdyi::y#0 ← (byte) line::y0#0 [ line::x1#0 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 ] ) -- vbuz1=vbuyy
sty line_xdyi.y
//SEG53 [31] (byte) line_xdyi::y#0 ← (byte) line::y0#0 [ line::x1#0 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 ] ) -- vbuz1=vbuz2
lda y0
sta line_xdyi.y
//SEG54 [32] (byte) line_xdyi::x1#0 ← (byte) line::x1#0 [ line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 line_xdyi::x1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#1 line_xdyi::x#0 line_xdyi::y#0 line_xdyi::x1#0 ] ) -- vbuz1=vbuz2
lda x1
sta line_xdyi.x1
@ -7287,12 +7285,13 @@ line: {
rts
//SEG66 line::@3
b3:
//SEG67 [37] (byte) line_ydxi::y#0 ← (byte) line::y0#0 [ line::x0#0 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 ] ) -- vbuz1=vbuyy
sty line_ydxi.y
//SEG67 [37] (byte) line_ydxi::y#0 ← (byte) line::y0#0 [ line::x0#0 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 ] ) -- vbuz1=vbuz2
lda y0
sta line_ydxi.y
//SEG68 [38] (byte) line_ydxi::x#0 ← (byte) line::x0#0 [ line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::y1#0 line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 ] ) -- vbuxx=vbuz1
ldx x0
//SEG69 [39] (byte) line_ydxi::y1#0 ← (byte) line::y1#0 [ line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 ] )
// (byte) line_ydxi::y1#0 = (byte) line::y1#0 // register copy zp ZP_BYTE:5
//SEG69 [39] (byte) line_ydxi::y1#0 ← (byte) line::y1#0 [ line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 ] ) -- vbuz1=vbuyy
sty line_ydxi.y1
//SEG70 [40] (byte) line_ydxi::yd#0 ← (byte) line::yd#1 [ line::xd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 line_ydxi::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line_ydxi::y#0 line_ydxi::x#0 line_ydxi::y1#0 line_ydxi::yd#0 ] ) -- vbuz1=vbuz2
lda yd
sta line_ydxi.yd
@ -7310,10 +7309,11 @@ line: {
jmp breturn
//SEG79 line::@2
b2:
//SEG80 [43] (byte) line::yd#0 ← (byte) line::y0#0 - (byte) line::y1#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ) -- vbuz1=vbuyy_minus_vbuz2
//SEG80 [43] (byte) line::yd#0 ← (byte) line::y0#0 - (byte) line::y1#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ) -- vbuz1=vbuz2_minus_vbuyy
tya
eor #$ff
sec
sbc y1
adc y0
sta yd
//SEG81 [44] if((byte) line::yd#0>=(byte) line::xd#1) goto line::@6 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#1 line::yd#0 ] ) -- vbuz1_ge_vbuz2_then_la1
cmp xd
@ -7321,8 +7321,9 @@ line: {
//SEG82 line::@20
//SEG83 [45] (byte) line_xdyd::x#0 ← (byte) line::x0#0 [ line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_xdyd::x#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_xdyd::x#0 ] ) -- vbuxx=vbuz1
ldx x0
//SEG84 [46] (byte) line_xdyd::y#0 ← (byte) line::y0#0 [ line::x1#0 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 ] ) -- vbuz1=vbuyy
sty line_xdyd.y
//SEG84 [46] (byte) line_xdyd::y#0 ← (byte) line::y0#0 [ line::x1#0 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 ] ) -- vbuz1=vbuz2
lda y0
sta line_xdyd.y
//SEG85 [47] (byte) line_xdyd::x1#0 ← (byte) line::x1#0 [ line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 line_xdyd::x1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#0 line_xdyd::x#0 line_xdyd::y#0 line_xdyd::x1#0 ] ) -- vbuz1=vbuz2
lda x1
sta line_xdyd.x1
@ -7343,13 +7344,12 @@ line: {
jmp breturn
//SEG95 line::@6
b6:
//SEG96 [51] (byte) line_ydxd::y#0 ← (byte) line::y1#0 [ line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 ] ) -- vbuz1=vbuz2
lda y1
sta line_ydxd.y
//SEG96 [51] (byte) line_ydxd::y#0 ← (byte) line::y1#0 [ line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 ] ) -- vbuz1=vbuyy
sty line_ydxd.y
//SEG97 [52] (byte) line_ydxd::x#0 ← (byte) line::x1#0 [ line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::y0#0 line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 ] ) -- vbuxx=vbuz1
ldx x1
//SEG98 [53] (byte) line_ydxd::y1#0 ← (byte) line::y0#0 [ line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 ] ) -- vbuz1=vbuyy
sty line_ydxd.y1
//SEG98 [53] (byte) line_ydxd::y1#0 ← (byte) line::y0#0 [ line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line::yd#0 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 ] )
// (byte) line_ydxd::y1#0 = (byte) line::y0#0 // register copy zp ZP_BYTE:5
//SEG99 [54] (byte) line_ydxd::yd#0 ← (byte) line::yd#0 [ line::xd#1 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 line_ydxd::yd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#1 line_ydxd::y#0 line_ydxd::x#0 line_ydxd::y1#0 line_ydxd::yd#0 ] ) -- vbuz1=vbuz2
lda yd
sta line_ydxd.yd
@ -7372,15 +7372,14 @@ line: {
sec
sbc x1
sta xd
//SEG110 [58] if((byte) line::y0#0>=(byte) line::y1#0) goto line::@9 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 ] ) -- vbuyy_ge_vbuz1_then_la1
cpy y1
bcs b9
//SEG110 [58] if((byte) line::y0#0>=(byte) line::y1#0) goto line::@9 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 ] ) -- vbuz1_ge_vbuyy_then_la1
cpy y0
bcc b9
//SEG111 line::@23
//SEG112 [59] (byte) line::yd#3 ← (byte) line::y1#0 - (byte) line::y0#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ) -- vbuz1=vbuz2_minus_vbuyy
sty $ff
lda y1
//SEG112 [59] (byte) line::yd#3 ← (byte) line::y1#0 - (byte) line::y0#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ) -- vbuz1=vbuyy_minus_vbuz2
tya
sec
sbc $ff
sbc y0
sta yd
//SEG113 [60] if((byte) line::yd#3>=(byte) line::xd#0) goto line::@10 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#3 ] ) -- vbuz1_ge_vbuz2_then_la1
cmp xd
@ -7388,9 +7387,8 @@ line: {
//SEG114 line::@24
//SEG115 [61] (byte) line_xdyd::x#1 ← (byte) line::x1#0 [ line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_xdyd::x#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_xdyd::x#1 ] ) -- vbuxx=vbuz1
ldx x1
//SEG116 [62] (byte) line_xdyd::y#1 ← (byte) line::y1#0 [ line::x0#0 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 ] ) -- vbuz1=vbuz2
lda y1
sta line_xdyd.y
//SEG116 [62] (byte) line_xdyd::y#1 ← (byte) line::y1#0 [ line::x0#0 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 ] ) -- vbuz1=vbuyy
sty line_xdyd.y
//SEG117 [63] (byte) line_xdyd::x1#1 ← (byte) line::x0#0 [ line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 line_xdyd::x1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#3 line_xdyd::x#1 line_xdyd::y#1 line_xdyd::x1#1 ] ) -- vbuz1=vbuz2
lda x0
sta line_xdyd.x1
@ -7411,12 +7409,13 @@ line: {
jmp breturn
//SEG127 line::@10
b10:
//SEG128 [67] (byte) line_ydxd::y#1 ← (byte) line::y0#0 [ line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 ] ) -- vbuz1=vbuyy
sty line_ydxd.y
//SEG128 [67] (byte) line_ydxd::y#1 ← (byte) line::y0#0 [ line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 ] ) -- vbuz1=vbuz2
lda y0
sta line_ydxd.y
//SEG129 [68] (byte) line_ydxd::x#1 ← (byte) line::x0#0 [ line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::y1#0 line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 ] ) -- vbuxx=vbuz1
ldx x0
//SEG130 [69] (byte) line_ydxd::y1#1 ← (byte) line::y1#0 [ line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 ] )
// (byte) line_ydxd::y1#1 = (byte) line::y1#0 // register copy zp ZP_BYTE:5
//SEG130 [69] (byte) line_ydxd::y1#1 ← (byte) line::y1#0 [ line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#3 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 ] ) -- vbuz1=vbuyy
sty line_ydxd.y1
//SEG131 [70] (byte) line_ydxd::yd#1 ← (byte) line::yd#3 [ line::xd#0 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 line_ydxd::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line_ydxd::y#1 line_ydxd::x#1 line_ydxd::y1#1 line_ydxd::yd#1 ] ) -- vbuz1=vbuz2
lda yd
sta line_ydxd.yd
@ -7434,10 +7433,11 @@ line: {
jmp breturn
//SEG140 line::@9
b9:
//SEG141 [73] (byte) line::yd#10 ← (byte) line::y0#0 - (byte) line::y1#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ) -- vbuz1=vbuyy_minus_vbuz2
//SEG141 [73] (byte) line::yd#10 ← (byte) line::y0#0 - (byte) line::y1#0 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ) -- vbuz1=vbuz2_minus_vbuyy
tya
eor #$ff
sec
sbc y1
adc y0
sta yd
//SEG142 [74] if((byte) line::yd#10>=(byte) line::xd#0) goto line::@13 [ line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::x1#0 line::y0#0 line::y1#0 line::xd#0 line::yd#10 ] ) -- vbuz1_ge_vbuz2_then_la1
cmp xd
@ -7445,9 +7445,8 @@ line: {
//SEG143 line::@27
//SEG144 [75] (byte) line_xdyi::x#1 ← (byte) line::x1#0 [ line::x0#0 line::y1#0 line::xd#0 line::yd#10 line_xdyi::x#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::y1#0 line::xd#0 line::yd#10 line_xdyi::x#1 ] ) -- vbuxx=vbuz1
ldx x1
//SEG145 [76] (byte) line_xdyi::y#1 ← (byte) line::y1#0 [ line::x0#0 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 ] ) -- vbuz1=vbuz2
lda y1
sta line_xdyi.y
//SEG145 [76] (byte) line_xdyi::y#1 ← (byte) line::y1#0 [ line::x0#0 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x0#0 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 ] ) -- vbuz1=vbuyy
sty line_xdyi.y
//SEG146 [77] (byte) line_xdyi::x1#1 ← (byte) line::x0#0 [ line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 line_xdyi::x1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#10 line_xdyi::x#1 line_xdyi::y#1 line_xdyi::x1#1 ] ) -- vbuz1=vbuz2
lda x0
sta line_xdyi.x1
@ -7468,13 +7467,12 @@ line: {
jmp breturn
//SEG156 line::@13
b13:
//SEG157 [81] (byte) line_ydxi::y#1 ← (byte) line::y1#0 [ line::x1#0 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 ] ) -- vbuz1=vbuz2
lda y1
sta line_ydxi.y
//SEG157 [81] (byte) line_ydxi::y#1 ← (byte) line::y1#0 [ line::x1#0 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::x1#0 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 ] ) -- vbuz1=vbuyy
sty line_ydxi.y
//SEG158 [82] (byte) line_ydxi::x#1 ← (byte) line::x1#0 [ line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::y0#0 line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 ] ) -- vbuxx=vbuz1
ldx x1
//SEG159 [83] (byte) line_ydxi::y1#1 ← (byte) line::y0#0 [ line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 ] ) -- vbuz1=vbuyy
sty line_ydxi.y1
//SEG159 [83] (byte) line_ydxi::y1#1 ← (byte) line::y0#0 [ line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line::yd#10 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 ] )
// (byte) line_ydxi::y1#1 = (byte) line::y0#0 // register copy zp ZP_BYTE:5
//SEG160 [84] (byte) line_ydxi::yd#1 ← (byte) line::yd#10 [ line::xd#0 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 line_ydxi::yd#1 ] ( main:2::lines:12::line:21 [ lines::l#2 line::xd#0 line_ydxi::y#1 line_ydxi::x#1 line_ydxi::y1#1 line_ydxi::yd#1 ] ) -- vbuz1=vbuz2
lda yd
sta line_ydxi.yd

View File

@ -81,9 +81,9 @@
(byte) line::xd#0 xd zp ZP_BYTE:7 0.7
(byte) line::xd#1 xd zp ZP_BYTE:7 0.7
(byte) line::y0
(byte) line::y0#0 reg byte y 5.952380952380948
(byte) line::y0#0 y0 zp ZP_BYTE:5 5.952380952380948
(byte) line::y1
(byte) line::y1#0 y1 zp ZP_BYTE:5 6.249999999999996
(byte) line::y1#0 reg byte y 6.249999999999996
(byte) line::yd
(byte) line::yd#0 yd zp ZP_BYTE:10 0.8888888888888888
(byte) line::yd#1 yd zp ZP_BYTE:10 0.8888888888888888
@ -295,7 +295,7 @@
zp ZP_BYTE:2 [ lines::l#2 lines::l#1 init_plot_tables::$6 ]
zp ZP_BYTE:3 [ line_ydxi::xd#2 line_ydxi::xd#1 line_ydxi::xd#0 line_xdyi::yd#2 line_xdyi::yd#0 line_xdyi::yd#1 line_ydxd::xd#2 line_ydxd::xd#1 line_ydxd::xd#0 line_xdyd::yd#2 line_xdyd::yd#0 line_xdyd::yd#1 line::x0#0 ]
zp ZP_BYTE:4 [ line_ydxi::yd#5 line_ydxi::yd#1 line_ydxi::yd#0 line_xdyi::xd#5 line_xdyi::xd#0 line_xdyi::xd#1 line_ydxd::yd#5 line_ydxd::yd#1 line_ydxd::yd#0 line_xdyd::xd#5 line_xdyd::xd#0 line_xdyd::xd#1 line::x1#0 ]
zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 line::y1#0 ]
zp ZP_BYTE:5 [ line_ydxi::y1#6 line_ydxi::y1#1 line_ydxi::y1#0 line_xdyi::x1#6 line_xdyi::x1#0 line_xdyi::x1#1 line_ydxd::y1#6 line_ydxd::y1#1 line_ydxd::y1#0 line_xdyd::x1#6 line_xdyd::x1#0 line_xdyd::x1#1 line::y0#0 ]
reg byte x [ line_ydxi::x#3 line_ydxi::x#5 line_ydxi::x#1 line_ydxi::x#0 line_ydxi::x#6 line_ydxi::x#2 ]
zp ZP_BYTE:6 [ line_ydxi::y#3 line_ydxi::y#6 line_ydxi::y#1 line_ydxi::y#0 line_ydxi::y#2 line_xdyi::y#3 line_xdyi::y#5 line_xdyi::y#0 line_xdyi::y#1 line_xdyi::y#6 line_xdyi::y#2 line_ydxd::y#3 line_ydxd::y#6 line_ydxd::y#1 line_ydxd::y#0 line_ydxd::y#2 line_xdyd::y#3 line_xdyd::y#5 line_xdyd::y#0 line_xdyd::y#1 line_xdyd::y#6 line_xdyd::y#2 ]
zp ZP_BYTE:7 [ line_ydxi::e#3 line_ydxi::e#0 line_ydxi::e#6 line_ydxi::e#2 line_ydxi::e#1 line_xdyi::e#3 line_xdyi::e#0 line_xdyi::e#6 line_xdyi::e#2 line_xdyi::e#1 line_ydxd::e#3 line_ydxd::e#0 line_ydxd::e#6 line_ydxd::e#2 line_ydxd::e#1 line_xdyd::e#3 line_xdyd::e#0 line_xdyd::e#6 line_xdyd::e#2 line_xdyd::e#1 line::xd#1 line::xd#0 ]
@ -308,7 +308,7 @@ reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ]
reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ]
reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ]
zp ZP_WORD:8 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 init_screen::c#2 init_screen::c#1 plot::plotter_x#0 plot::$0 plot::plotter#0 ]
reg byte y [ line::y0#0 ]
reg byte y [ line::y1#0 ]
zp ZP_BYTE:10 [ line::yd#1 line::yd#0 line::yd#3 line::yd#10 line_xdyi::$8 line_xdyd::$8 ]
reg byte a [ line_ydxi::$8 ]
zp ZP_WORD:11 [ plot::plotter_y#0 ]

View File

@ -38,8 +38,7 @@ plots: {
sta i
b1:
ldx i
lda plots_x,x
tay
ldy plots_x,x
lda plots_y,x
tax
jsr plot

View File

@ -2174,11 +2174,10 @@ Statement [5] *((const byte*) FGCOL#0) ← (byte/signed byte/word/signed word) 0
Statement [6] *((const byte*) D011#0) ← (const byte) BMM#0|(const byte) DEN#0|(const byte) RSEL#0|(byte/signed byte/word/signed word) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [7] *((const byte*) D018#0) ← ((byte))((word))(const byte*) SCREEN#0/(byte/signed byte/word/signed word) 64|((word))(const byte*) BITMAP#0/(word/signed word) 1024 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [11] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 255) goto main::@2 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [26] (byte*) plot::plotter_x#1 ← ((byte*))(byte/signed byte/word/signed word) 0 hi= (byte~) plot::$6 [ plot::x#0 plot::y#0 plot::plotter_x#1 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 ] ) always clobbers reg byte a
Statement [28] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ plots::i#2 plots::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ plot::x#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ plot::y#0 ]
Statement [28] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] ) always clobbers reg byte a
Statement [32] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ) always clobbers reg byte a
Statement [33] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2 [ plot::x#0 plot::plotter#0 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter#0 ] ) always clobbers reg byte a
Statement [34] (byte~) plot::$5 ← *((byte*) plot::plotter#0) | *((const byte[256]) plot_bit#0 + (byte) plot::x#0) [ plot::plotter#0 plot::$5 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::plotter#0 plot::$5 ] ) always clobbers reg byte a reg byte y
@ -2203,7 +2202,6 @@ Statement [5] *((const byte*) FGCOL#0) ← (byte/signed byte/word/signed word) 0
Statement [6] *((const byte*) D011#0) ← (const byte) BMM#0|(const byte) DEN#0|(const byte) RSEL#0|(byte/signed byte/word/signed word) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [7] *((const byte*) D018#0) ← ((byte))((word))(const byte*) SCREEN#0/(byte/signed byte/word/signed word) 64|((word))(const byte*) BITMAP#0/(word/signed word) 1024 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [11] if(*((const byte*) RASTER#0)!=(byte/word/signed word) 255) goto main::@2 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [26] (byte*) plot::plotter_x#1 ← ((byte*))(byte/signed byte/word/signed word) 0 hi= (byte~) plot::$6 [ plot::x#0 plot::y#0 plot::plotter_x#1 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#1 ] ) always clobbers reg byte a
Statement [28] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7 [ plot::x#0 plot::y#0 plot::plotter_x#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::y#0 plot::plotter_x#2 ] ) always clobbers reg byte a
Statement [32] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9 [ plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter_x#2 plot::plotter_y#2 ] ) always clobbers reg byte a
Statement [33] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2 [ plot::x#0 plot::plotter#0 ] ( main:2::plots:13::plot:21 [ plots::i#2 plot::x#0 plot::plotter#0 ] ) always clobbers reg byte a
@ -2259,15 +2257,15 @@ Uplift attempts [init_plot_tables] 10000/138240 (limiting to 10000)
Uplifting [init_plot_tables] best 9841 combination zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] reg byte y [ init_plot_tables::bits#3 init_plot_tables::bits#4 init_plot_tables::bits#1 ] reg byte x [ init_plot_tables::x#2 init_plot_tables::x#1 ] reg byte x [ init_plot_tables::y#2 init_plot_tables::y#1 ] reg byte a [ init_plot_tables::$0 ] reg byte a [ init_plot_tables::$7 ] reg byte a [ init_plot_tables::$8 ] reg byte a [ init_plot_tables::$9 ] zp ZP_BYTE:34 [ init_plot_tables::$10 ] zp ZP_BYTE:30 [ init_plot_tables::$6 ]
Limited combination testing to 10000 combinations of 138240 possible.
Uplifting [init_screen] best 9841 combination zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 ] zp ZP_WORD:10 [ init_screen::c#2 init_screen::c#1 ]
Uplifting [plot] best 9596 combination reg byte x [ plot::y#0 ] reg byte y [ plot::x#0 ] reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] reg byte a [ plot::$9 ] zp ZP_WORD:24 [ plot::plotter_y#2 ] reg byte a [ plot::$5 ] zp ZP_WORD:26 [ plot::plotter#0 ] zp ZP_WORD:15 [ plot::plotter_x#1 ] zp ZP_WORD:21 [ plot::plotter_y#1 ] zp ZP_WORD:18 [ plot::plotter_x#2 ]
Uplifting [main] best 9596 combination
Uplifting [] best 9596 combination
Uplifting [plot] best 9396 combination reg byte x [ plot::y#0 ] reg byte y [ plot::x#0 ] reg byte a [ plot::$6 ] reg byte a [ plot::$7 ] reg byte a [ plot::$8 ] reg byte a [ plot::$9 ] zp ZP_WORD:24 [ plot::plotter_y#2 ] reg byte a [ plot::$5 ] zp ZP_WORD:26 [ plot::plotter#0 ] zp ZP_WORD:15 [ plot::plotter_x#1 ] zp ZP_WORD:21 [ plot::plotter_y#1 ] zp ZP_WORD:18 [ plot::plotter_x#2 ]
Uplifting [main] best 9396 combination
Uplifting [] best 9396 combination
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ plots::i#2 plots::i#1 ]
Uplifting [plots] best 9596 combination zp ZP_BYTE:2 [ plots::i#2 plots::i#1 ]
Uplifting [plots] best 9396 combination zp ZP_BYTE:2 [ plots::i#2 plots::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:34 [ init_plot_tables::$10 ]
Uplifting [init_plot_tables] best 9536 combination reg byte a [ init_plot_tables::$10 ]
Uplifting [init_plot_tables] best 9336 combination reg byte a [ init_plot_tables::$10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_plot_tables::$6 ]
Uplifting [init_plot_tables] best 9536 combination zp ZP_BYTE:30 [ init_plot_tables::$6 ]
Uplifting [init_plot_tables] best 9336 combination zp ZP_BYTE:30 [ init_plot_tables::$6 ]
Coalescing zero page register [ zp ZP_BYTE:2 [ plots::i#2 plots::i#1 ] ] with [ zp ZP_BYTE:30 [ init_plot_tables::$6 ] ]
Coalescing zero page register [ zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 ] ] with [ zp ZP_WORD:8 [ init_screen::b#2 init_screen::b#1 ] ]
Coalescing zero page register [ zp ZP_WORD:6 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tables::yoffs#1 init_screen::b#2 init_screen::b#1 ] ] with [ zp ZP_WORD:10 [ init_screen::c#2 init_screen::c#1 ] ]
@ -2382,8 +2380,7 @@ plots: {
b1:
//SEG36 [19] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#2) [ plots::i#2 plot::x#0 ] ( main:2::plots:13 [ plots::i#2 plot::x#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1
ldx i
lda plots_x,x
tay
ldy plots_x,x
//SEG37 [20] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#2) [ plots::i#2 plot::x#0 plot::y#0 ] ( main:2::plots:13 [ plots::i#2 plot::x#0 plot::y#0 ] ) -- vbuxx=pbuc1_derefidx_vbuz1
ldx i
lda plots_y,x
@ -2874,7 +2871,7 @@ reg byte a [ init_plot_tables::$10 ]
FINAL ASSEMBLER
Score: 7196
Score: 6996
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -2953,8 +2950,7 @@ plots: {
b1:
//SEG36 [19] (byte) plot::x#0 ← *((const byte[]) plots_x#0 + (byte) plots::i#2) [ plots::i#2 plot::x#0 ] ( main:2::plots:13 [ plots::i#2 plot::x#0 ] ) -- vbuyy=pbuc1_derefidx_vbuz1
ldx i
lda plots_x,x
tay
ldy plots_x,x
//SEG37 [20] (byte) plot::y#0 ← *((const byte[]) plots_y#0 + (byte) plots::i#2) [ plots::i#2 plot::x#0 plot::y#0 ] ( main:2::plots:13 [ plots::i#2 plot::x#0 plot::y#0 ] ) -- vbuxx=pbuc1_derefidx_vbuz1
lda plots_y,x
tax

View File

@ -9,10 +9,10 @@
main: {
ldx #0
b1:
stx $ff
lda #$c8
sec
sbc $ff
txa
eor #$ff
clc
adc #$c8+1
sta SCREEN,x
txa
eor #$ff

View File

@ -652,10 +652,9 @@ main: {
//SEG14 main::@1
b1:
//SEG15 [6] (byte) main::b2#0 ← (byte/word/signed word) 200 - (byte) main::b#2 [ main::b#2 main::b2#0 ] ( main:2 [ main::b#2 main::b2#0 ] ) -- vbuz1=vbuc1_minus_vbuz2
lda b
eor #$ff
clc
adc #$c8+1
lda #$c8
sec
sbc b
sta b2
//SEG16 [7] *((const byte*) SCREEN#0 + (byte) main::b#2) ← (byte) main::b2#0 [ main::b#2 ] ( main:2 [ main::b#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
lda b2
@ -770,9 +769,9 @@ Uplift Scope [main] 25.93: zp ZP_BYTE:2 [ main::b#2 main::b#1 ] 22: zp ZP_BYTE:4
Uplift Scope [w] 30.25: zp ZP_BYTE:3 [ w::i#2 w::i#1 ] 11: zp ZP_BYTE:8 [ w::b2#0 ]
Uplift Scope []
Uplifting [main] best 1036 combination reg byte x [ main::b#2 main::b#1 ] reg byte a [ main::b2#0 ] reg byte a [ main::$1 ] reg byte a [ main::sb#0 ] reg byte a [ main::$3 ]
Uplifting [w] best 856 combination reg byte y [ w::i#2 w::i#1 ] reg byte x [ w::b2#0 ]
Uplifting [] best 856 combination
Uplifting [main] best 1016 combination reg byte x [ main::b#2 main::b#1 ] reg byte a [ main::b2#0 ] reg byte a [ main::$1 ] reg byte a [ main::sb#0 ] reg byte a [ main::$3 ]
Uplifting [w] best 836 combination reg byte y [ w::i#2 w::i#1 ] reg byte x [ w::b2#0 ]
Uplifting [] best 836 combination
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
@ -814,10 +813,10 @@ main: {
//SEG14 main::@1
b1:
//SEG15 [6] (byte) main::b2#0 ← (byte/word/signed word) 200 - (byte) main::b#2 [ main::b#2 main::b2#0 ] ( main:2 [ main::b#2 main::b2#0 ] ) -- vbuaa=vbuc1_minus_vbuxx
stx $ff
lda #$c8
sec
sbc $ff
txa
eor #$ff
clc
adc #$c8+1
//SEG16 [7] *((const byte*) SCREEN#0 + (byte) main::b#2) ← (byte) main::b2#0 [ main::b#2 ] ( main:2 [ main::b#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
sta SCREEN,x
//SEG17 [8] (signed byte~) main::$1 ← ((signed byte)) (byte) main::b#2 [ main::b#2 main::$1 ] ( main:2 [ main::b#2 main::$1 ] ) -- vbsaa=_sbyte_vbuxx
@ -970,7 +969,7 @@ reg byte x [ w::b2#0 ]
FINAL ASSEMBLER
Score: 694
Score: 674
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -999,10 +998,10 @@ main: {
//SEG14 main::@1
b1:
//SEG15 [6] (byte) main::b2#0 ← (byte/word/signed word) 200 - (byte) main::b#2 [ main::b#2 main::b2#0 ] ( main:2 [ main::b#2 main::b2#0 ] ) -- vbuaa=vbuc1_minus_vbuxx
stx $ff
lda #$c8
sec
sbc $ff
txa
eor #$ff
clc
adc #$c8+1
//SEG16 [7] *((const byte*) SCREEN#0 + (byte) main::b#2) ← (byte) main::b2#0 [ main::b#2 ] ( main:2 [ main::b#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
sta SCREEN,x
//SEG17 [8] (signed byte~) main::$1 ← ((signed byte)) (byte) main::b#2 [ main::b#2 main::$1 ] ( main:2 [ main::b#2 main::$1 ] ) -- vbsaa=_sbyte_vbuxx

View File

@ -8,7 +8,7 @@
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
asm { sei }
asm { sei }
[5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main main::@5
@ -41,7 +41,7 @@ main::@5: scope:[main] from main::@3
to:main::@6
main::@6: scope:[main] from main::@5
[21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] )
asm { cli }
asm { cli }
to:main::@return
main::@return: scope:[main] from main::@6
[23] return [ ] ( main:2 [ ] )

View File

@ -32,7 +32,7 @@ STATEMENTS
(byte*) CHARGEN ← (word) 53248
(byte*) SCREEN ← (word/signed word) 1024
proc (void()) main()
asm { sei }
asm { sei }
(byte*~) main::$0 ← (byte*) CHARGEN + (byte/signed byte/word/signed word) 8
(byte*) main::CHAR_A ← (byte*~) main::$0
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 50
@ -62,7 +62,7 @@ main::@3:
(boolean~) main::$7 ← (byte) main::y != (byte/signed byte/word/signed word) 8
if((boolean~) main::$7) goto main::@1
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
asm { cli }
asm { cli }
main::@return:
return
endproc // main()
@ -102,7 +102,7 @@ INITIAL CONTROL FLOW GRAPH
(byte*) SCREEN ← ((byte*)) (word/signed word) 1024
to:@1
main: scope:[main] from
asm { sei }
asm { sei }
(byte*~) main::$0 ← (byte*) CHARGEN + (byte/signed byte/word/signed word) 8
(byte*) main::CHAR_A ← (byte*~) main::$0
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 50
@ -141,7 +141,7 @@ main::@5: scope:[main] from main::@3
to:main::@6
main::@6: scope:[main] from main::@5
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
asm { cli }
asm { cli }
to:main::@return
main::@return: scope:[main] from main::@6
return
@ -169,7 +169,7 @@ main: scope:[main] from @1
(byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#2 )
(byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
(byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#2 )
asm { sei }
asm { sei }
(byte*~) main::$0 ← (byte*) CHARGEN#1 + (byte/signed byte/word/signed word) 8
(byte*) main::CHAR_A#0 ← (byte*~) main::$0
*((byte*) PROCPORT#1) ← (byte/signed byte/word/signed word) 50
@ -236,7 +236,7 @@ main::@5: scope:[main] from main::@3
main::@6: scope:[main] from main::@5
(byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
*((byte*) PROCPORT#2) ← (byte/signed byte/word/signed word) 55
asm { cli }
asm { cli }
to:main::@return
main::@return: scope:[main] from main::@6
return
@ -494,7 +494,7 @@ FINAL CONTROL FLOW GRAPH
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
asm { sei }
asm { sei }
[5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main main::@5
@ -527,7 +527,7 @@ main::@5: scope:[main] from main::@3
to:main::@6
main::@6: scope:[main] from main::@5
[21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] )
asm { cli }
asm { cli }
to:main::@return
main::@return: scope:[main] from main::@6
[23] return [ ] ( main:2 [ ] )
@ -641,7 +641,7 @@ main: {
.label x = 6
.label y = 2
.label c = 7
//SEG9 asm { sei }
//SEG9 asm { sei }
sei
//SEG10 [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$32
@ -750,7 +750,7 @@ main: {
//SEG47 [21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$37
sta PROCPORT
//SEG48 asm { cli }
//SEG48 asm { cli }
cli
jmp breturn
//SEG49 main::@return
@ -824,7 +824,7 @@ main: {
.label bits = 3
.label sc = 4
.label y = 2
//SEG9 asm { sei }
//SEG9 asm { sei }
sei
//SEG10 [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$32
@ -927,7 +927,7 @@ main: {
//SEG47 [21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$37
sta PROCPORT
//SEG48 asm { cli }
//SEG48 asm { cli }
cli
jmp breturn
//SEG49 main::@return
@ -1043,7 +1043,7 @@ main: {
.label bits = 3
.label sc = 4
.label y = 2
//SEG9 asm { sei }
//SEG9 asm { sei }
sei
//SEG10 [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$32
@ -1129,7 +1129,7 @@ main: {
//SEG47 [21] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$37
sta PROCPORT
//SEG48 asm { cli }
//SEG48 asm { cli }
cli
//SEG49 main::@return
//SEG50 [23] return [ ] ( main:2 [ ] )

View File

@ -23,8 +23,7 @@ test_sbytes: {
.const be = -bd
lda #0
sta assert_sbyte.c
lda #bb
tax
ldx #bb
lda #<msg
sta assert_sbyte.msg
lda #>msg
@ -32,8 +31,7 @@ test_sbytes: {
jsr assert_sbyte
lda #2
sta assert_sbyte.c
lda #bc
tax
ldx #bc
lda #<msg1
sta assert_sbyte.msg
lda #>msg1
@ -41,8 +39,7 @@ test_sbytes: {
jsr assert_sbyte
lda #-2
sta assert_sbyte.c
lda #bd
tax
ldx #bd
lda #<msg2
sta assert_sbyte.msg
lda #>msg2
@ -50,8 +47,7 @@ test_sbytes: {
jsr assert_sbyte
lda #2
sta assert_sbyte.c
lda #be
tax
ldx #be
lda #<msg3
sta assert_sbyte.msg
lda #>msg3
@ -59,8 +55,7 @@ test_sbytes: {
jsr assert_sbyte
lda #2
sta assert_sbyte.c
lda #bf
tax
ldx #bf
lda #<msg4
sta assert_sbyte.msg
lda #>msg4

View File

@ -2982,15 +2982,15 @@ Uplifting [] best 2205 combination zp ZP_WORD:6 [ char_cursor#75 char_cursor#65
Uplifting [print_str] best 2205 combination zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
Uplifting [print_cls] best 2205 combination zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [assert_byte] best 2193 combination zp ZP_WORD:12 [ assert_byte::msg#3 ] reg byte x [ assert_byte::b#3 ] zp ZP_BYTE:15 [ assert_byte::c#3 ]
Uplifting [assert_sbyte] best 2185 combination zp ZP_WORD:2 [ assert_sbyte::msg#5 ] reg byte x [ assert_sbyte::b#5 ] zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Uplifting [print_ln] best 2185 combination
Uplifting [main] best 2185 combination
Uplifting [test_bytes] best 2185 combination
Uplifting [test_sbytes] best 2185 combination
Uplifting [assert_sbyte] best 2175 combination zp ZP_WORD:2 [ assert_sbyte::msg#5 ] reg byte x [ assert_sbyte::b#5 ] zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Uplifting [print_ln] best 2175 combination
Uplifting [main] best 2175 combination
Uplifting [test_bytes] best 2175 combination
Uplifting [test_sbytes] best 2175 combination
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ assert_byte::c#3 ]
Uplifting [assert_byte] best 2185 combination zp ZP_BYTE:15 [ assert_byte::c#3 ]
Uplifting [assert_byte] best 2175 combination zp ZP_BYTE:15 [ assert_byte::c#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Uplifting [assert_sbyte] best 2185 combination zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Uplifting [assert_sbyte] best 2175 combination zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Coalescing zero page register [ zp ZP_WORD:2 [ assert_sbyte::msg#5 ] ] with [ zp ZP_WORD:6 [ char_cursor#75 char_cursor#65 char_cursor#2 char_cursor#82 char_cursor#1 char_cursor#88 char_cursor#89 ] ]
Coalescing zero page register [ zp ZP_WORD:2 [ assert_sbyte::msg#5 char_cursor#75 char_cursor#65 char_cursor#2 char_cursor#82 char_cursor#1 char_cursor#88 char_cursor#89 ] ] with [ zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ assert_sbyte::c#5 ] ] with [ zp ZP_BYTE:15 [ assert_byte::c#3 ] ]
@ -3071,8 +3071,7 @@ test_sbytes: {
lda #0
sta assert_sbyte.c
//SEG26 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1
lda #bb
tax
ldx #bb
//SEG27 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg
sta assert_sbyte.msg
@ -3091,8 +3090,7 @@ test_sbytes: {
lda #2
sta assert_sbyte.c
//SEG33 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1
lda #bc
tax
ldx #bc
//SEG34 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg1
sta assert_sbyte.msg
@ -3111,8 +3109,7 @@ test_sbytes: {
lda #-2
sta assert_sbyte.c
//SEG40 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1
lda #bd
tax
ldx #bd
//SEG41 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg2
sta assert_sbyte.msg
@ -3131,8 +3128,7 @@ test_sbytes: {
lda #2
sta assert_sbyte.c
//SEG47 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1
lda #be
tax
ldx #be
//SEG48 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg3
sta assert_sbyte.msg
@ -3151,8 +3147,7 @@ test_sbytes: {
lda #2
sta assert_sbyte.c
//SEG54 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bf#0 [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1
lda #bf
tax
ldx #bf
//SEG55 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg4
sta assert_sbyte.msg
@ -3785,7 +3780,7 @@ reg byte x [ assert_byte::b#3 ]
FINAL ASSEMBLER
Score: 1868
Score: 1858
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -3839,8 +3834,7 @@ test_sbytes: {
lda #0
sta assert_sbyte.c
//SEG26 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1
lda #bb
tax
ldx #bb
//SEG27 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg
sta assert_sbyte.msg
@ -3855,8 +3849,7 @@ test_sbytes: {
lda #2
sta assert_sbyte.c
//SEG33 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1
lda #bc
tax
ldx #bc
//SEG34 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg1
sta assert_sbyte.msg
@ -3871,8 +3864,7 @@ test_sbytes: {
lda #-2
sta assert_sbyte.c
//SEG40 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1
lda #bd
tax
ldx #bd
//SEG41 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg2
sta assert_sbyte.msg
@ -3887,8 +3879,7 @@ test_sbytes: {
lda #2
sta assert_sbyte.c
//SEG47 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1
lda #be
tax
ldx #be
//SEG48 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg3
sta assert_sbyte.msg
@ -3903,8 +3894,7 @@ test_sbytes: {
lda #2
sta assert_sbyte.c
//SEG54 [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bf#0 [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1
lda #bf
tax
ldx #bf
//SEG55 [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1
lda #<msg4
sta assert_sbyte.msg

View File

@ -8,7 +8,7 @@
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
asm { sei }
asm { sei }
[5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main main::@5
@ -78,7 +78,7 @@ main::@5: scope:[main] from main::@10 main::@4
to:main::@11
main::@11: scope:[main] from main::@5
[52] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] )
asm { cli }
asm { cli }
to:main::@6
main::@6: scope:[main] from main::@11 main::@6
[54] (byte) main::i#2 ← phi( main::@11/(byte/signed byte/word/signed word) 0 main::@6/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )

View File

@ -53,7 +53,7 @@ STATEMENTS
(byte*) CHARSET4 ← (word/signed word) 10240
(byte[]) bits_count ← { (byte/signed byte/word/signed word) 0, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4 }
proc (void()) main()
asm { sei }
asm { sei }
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 50
(byte*) main::chargen ← (byte*) CHARGEN
(byte*) main::charset4 ← (byte*) CHARSET4
@ -125,7 +125,7 @@ main::@5:
(boolean~) main::$39 ← (byte*) main::chargen < (byte*~) main::$38
if((boolean~) main::$39) goto main::@1
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
asm { cli }
asm { cli }
(byte) main::i ← (byte/signed byte/word/signed word) 0
main::@6:
*((byte*) SCREEN + (byte) main::i) ← (byte) main::i
@ -219,7 +219,7 @@ INITIAL CONTROL FLOW GRAPH
(byte[]) bits_count ← { (byte/signed byte/word/signed word) 0, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4 }
to:@1
main: scope:[main] from
asm { sei }
asm { sei }
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 50
(byte*) main::chargen ← (byte*) CHARGEN
(byte*) main::charset4 ← (byte*) CHARSET4
@ -306,7 +306,7 @@ main::@10: scope:[main] from main::@4
to:main::@5
main::@11: scope:[main] from main::@5
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
asm { cli }
asm { cli }
(byte) main::i ← (byte/signed byte/word/signed word) 0
to:main::@6
main::@6: scope:[main] from main::@11 main::@6
@ -355,7 +355,7 @@ main: scope:[main] from @1
(byte*) CHARSET4#1 ← phi( @1/(byte*) CHARSET4#2 )
(byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#3 )
(byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 )
asm { sei }
asm { sei }
*((byte*) PROCPORT#1) ← (byte/signed byte/word/signed word) 50
(byte*) main::chargen#0 ← (byte*) CHARGEN#1
(byte*) main::charset4#0 ← (byte*) CHARSET4#1
@ -513,7 +513,7 @@ main::@11: scope:[main] from main::@5
(byte*) SCREEN#2 ← phi( main::@5/(byte*) SCREEN#3 )
(byte*) PROCPORT#2 ← phi( main::@5/(byte*) PROCPORT#4 )
*((byte*) PROCPORT#2) ← (byte/signed byte/word/signed word) 55
asm { cli }
asm { cli }
(byte) main::i#0 ← (byte/signed byte/word/signed word) 0
to:main::@6
main::@6: scope:[main] from main::@11 main::@6
@ -1029,7 +1029,7 @@ FINAL CONTROL FLOW GRAPH
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
asm { sei }
asm { sei }
[5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main main::@5
@ -1099,7 +1099,7 @@ main::@5: scope:[main] from main::@10 main::@4
to:main::@11
main::@11: scope:[main] from main::@5
[52] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] )
asm { cli }
asm { cli }
to:main::@6
main::@6: scope:[main] from main::@11 main::@6
[54] (byte) main::i#2 ← phi( main::@11/(byte/signed byte/word/signed word) 0 main::@6/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
@ -1373,7 +1373,7 @@ main: {
.label bits_gen_14 = 8
.label bits_gen_15 = 9
.label bits_gen_16 = 9
//SEG9 asm { sei }
//SEG9 asm { sei }
sei
//SEG10 [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$32
@ -1633,7 +1633,7 @@ main: {
//SEG78 [52] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$37
sta PROCPORT
//SEG79 asm { cli }
//SEG79 asm { cli }
cli
//SEG80 [54] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
b6_from_b11:
@ -1872,7 +1872,7 @@ main: {
.label bits_gen = 6
.label charset4 = 4
.label chargen = 2
//SEG9 asm { sei }
//SEG9 asm { sei }
sei
//SEG10 [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$32
@ -2087,7 +2087,7 @@ main: {
//SEG78 [52] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$37
sta PROCPORT
//SEG79 asm { cli }
//SEG79 asm { cli }
cli
//SEG80 [54] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
b6_from_b11:
@ -2321,7 +2321,7 @@ main: {
.label bits_gen = 6
.label charset4 = 4
.label chargen = 2
//SEG9 asm { sei }
//SEG9 asm { sei }
sei
//SEG10 [5] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$32
@ -2506,7 +2506,7 @@ main: {
//SEG78 [52] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #$37
sta PROCPORT
//SEG79 asm { cli }
//SEG79 asm { cli }
cli
//SEG80 [54] phi from main::@11 to main::@6 [phi:main::@11->main::@6]
//SEG81 [54] phi (byte) main::i#2 = (byte/signed byte/word/signed word) 0 [phi:main::@11->main::@6#0] -- vbuxx=vbuc1

View File

@ -8,7 +8,7 @@
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- }
to:main::@return
main::@return: scope:[main] from main
[5] return [ ] ( main:2 [ ] )

View File

@ -17,7 +17,7 @@ void main() {
STATEMENTS
proc (void()) main()
asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- }
main::@return:
return
endproc // main()
@ -31,7 +31,7 @@ INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from
to:@1
main: scope:[main] from
asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- }
to:main::@return
main::@return: scope:[main] from main
return
@ -49,7 +49,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from
to:@1
main: scope:[main] from @1
asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- }
to:main::@return
main::@return: scope:[main] from main
return
@ -101,7 +101,7 @@ FINAL CONTROL FLOW GRAPH
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- }
to:main::@return
main::@return: scope:[main] from main
[5] return [ ] ( main:2 [ ] )
@ -149,7 +149,7 @@ bend_from_b1:
bend:
//SEG8 main
main: {
//SEG9 asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
//SEG9 asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- }
lda #'a'
ldx #$ff
!:
@ -167,7 +167,7 @@ main: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- } always clobbers reg byte a reg byte x
Statement asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- } always clobbers reg byte a reg byte x
REGISTER UPLIFT SCOPES
Uplift Scope [main]
@ -198,7 +198,7 @@ bend_from_b1:
bend:
//SEG8 main
main: {
//SEG9 asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
//SEG9 asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- }
lda #'a'
ldx #$ff
!:
@ -255,7 +255,7 @@ Score: 40
//SEG7 @end
//SEG8 main
main: {
//SEG9 asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
//SEG9 asm { lda#'a' ldx#$ff !: sta$0400,x sta$0500,x sta$0600,x sta$0700,x dex bne!- }
lda #'a'
ldx #$ff
!:

View File

@ -447,15 +447,15 @@ 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_vbuz2_word_vbuaa allocation: zp ZP_BYTE:2 [ main::h#4 main::h#1 ] reg byte a [ 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_vbuaa allocation: reg byte a [ main::h#4 main::h#1 ] reg byte a [ 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_vbuxx_word_vbuaa allocation: reg byte x [ main::h#4 main::h#1 ] reg byte a [ 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_vbuyy_word_vbuaa allocation: reg byte y [ main::h#4 main::h#1 ] reg byte a [ 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_vbuz2_word_vbuaa(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuz2=(byte) main::h#4 vbuaa=(byte) main::l#2 ) allocation: zp ZP_BYTE:2 [ main::h#4 main::h#1 ] reg byte a [ 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_vbuaa(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuaa=(byte) main::h#4 ) allocation: reg byte a [ main::h#4 main::h#1 ] reg byte a [ 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_vbuxx_word_vbuaa(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuxx=(byte) main::h#4 vbuaa=(byte) main::l#2 ) allocation: reg byte x [ main::h#4 main::h#1 ] reg byte a [ 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_vbuyy_word_vbuaa(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuyy=(byte) main::h#4 vbuaa=(byte) main::l#2 ) allocation: reg byte y [ main::h#4 main::h#1 ] reg byte a [ main::l#2 main::l#1 ] zp ZP_WORD:4 [ main::w#0 ]
MISSING FRAGMENTS
vwuz1=pbuc1_derefidx_vbuz2_word_vbuaa
vwuz1=pbuc1_derefidx_vbuaa_word_vbuaa
vwuz1=pbuc1_derefidx_vbuxx_word_vbuaa
vwuz1=pbuc1_derefidx_vbuyy_word_vbuaa
vwuz1=pbuc1_derefidx_vbuz2_word_vbuaa(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuz2=(byte) main::h#4 vbuaa=(byte) main::l#2 )
vwuz1=pbuc1_derefidx_vbuaa_word_vbuaa(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuaa=(byte) main::h#4 )
vwuz1=pbuc1_derefidx_vbuxx_word_vbuaa(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuxx=(byte) main::h#4 vbuaa=(byte) main::l#2 )
vwuz1=pbuc1_derefidx_vbuyy_word_vbuaa(main:: vwuz1=(word) main::w#0 pbuc1=(const byte[]) main::his#0 vbuyy=(byte) main::h#4 vbuaa=(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

@ -301,9 +301,9 @@ main: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Potential register analysis [6] if(*(main::msg#0 + main::i#2)!='@') goto main::@2 missing fragment pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1 allocation: reg byte a [ main::i#2 main::i#1 ]
Potential register analysis [6] if(*(main::msg#0 + main::i#2)!='@') goto main::@2 missing fragment pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1(main:: pbuc1=(const string) main::msg#0 vbuaa=(byte) main::i#2 vbuc2=(byte) '@' la1=(label) main::@2 ) allocation: reg byte a [ main::i#2 main::i#1 ]
MISSING FRAGMENTS
pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1
pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1(main:: pbuc1=(const string) main::msg#0 vbuaa=(byte) main::i#2 vbuc2=(byte) '@' la1=(label) main::@2 )
Statement [6] if(*((const string) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [8] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const string) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a

View File

@ -586,8 +586,9 @@ main: {
sta SCREEN+0
//SEG19 [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 cnt2#11 cnt3#11 ] ( main:2 [ cnt#2 cnt2#11 cnt3#11 ] ) -- vbuz1=_inc_vbuz2
lda cnt_12
clc
adc #1
sta cnt
inc cnt
//SEG20 [10] call inccnt param-assignment [ inccnt::return#2 ] ( main:2 [ inccnt::return#2 ] )
//SEG21 [15] phi from main::@1 to inccnt [phi:main::@1->inccnt]
inccnt_from_b1:
@ -620,8 +621,9 @@ inccnt: {
.label return_2 = $a
//SEG32 [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#12 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#12 cnt2#10 cnt3#10 ] ) -- vbuz1=_inc_vbuz2
lda cnt
clc
adc #1
sta cnt_12
inc cnt_12
//SEG33 [17] (byte) cnt2#11 ← ++ (byte) cnt2#10 [ cnt#12 cnt3#10 cnt2#11 ] ( main:2::inccnt:5 [ cnt#12 cnt3#10 cnt2#11 ] main:2::inccnt:10 [ cnt#12 cnt3#10 cnt2#11 ] ) -- vbuz1=_inc_vbuz1
inc cnt2
//SEG34 [18] (byte) cnt3#11 ← ++ (byte) cnt3#10 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ cnt#12 cnt2#11 cnt3#11 ] ) -- vbuz1=_inc_vbuz1

View File

@ -349,8 +349,9 @@ main: {
sta SCREEN+0
//SEG15 [7] (byte) cnt#2 ← ++ (byte) cnt#13 [ cnt#2 ] ( main:2 [ cnt#2 ] ) -- vbuz1=_inc_vbuz2
lda cnt_13
clc
adc #1
sta cnt
inc cnt
//SEG16 [8] call inccnt param-assignment [ cnt#13 ] ( main:2 [ cnt#13 ] )
//SEG17 [12] phi from main::@1 to inccnt [phi:main::@1->inccnt]
inccnt_from_b1:
@ -361,8 +362,9 @@ main: {
b2:
//SEG20 [9] (byte) cnt#11 ← ++ (byte) cnt#13 [ cnt#11 ] ( main:2 [ cnt#11 ] ) -- vbuz1=_inc_vbuz2
lda cnt_13
clc
adc #1
sta cnt_11
inc cnt_11
//SEG21 [10] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word) 1) ← (byte) cnt#11 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuz1
lda cnt_11
sta SCREEN+1
@ -376,8 +378,9 @@ main: {
inccnt: {
//SEG25 [13] (byte) cnt#13 ← ++ (byte) cnt#12 [ cnt#13 ] ( main:2::inccnt:5 [ cnt#13 ] main:2::inccnt:8 [ cnt#13 ] ) -- vbuz1=_inc_vbuz2
lda cnt
clc
adc #1
sta cnt_13
inc cnt_13
jmp breturn
//SEG26 inccnt::@return
breturn:

View File

@ -72,7 +72,7 @@ scroll_bit::@1: scope:[scroll_bit] from scroll_bit scroll_bit::@8
[31] call scroll_hard param-assignment [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] )
to:scroll_bit::@7
scroll_bit::@7: scope:[scroll_bit] from scroll_bit::@1
asm { sei }
asm { sei }
[33] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] )
to:scroll_bit::@2
scroll_bit::@2: scope:[scroll_bit] from scroll_bit::@3 scroll_bit::@7
@ -94,7 +94,7 @@ scroll_bit::@3: scope:[scroll_bit] from scroll_bit::@2 scroll_bit::@5
to:scroll_bit::@6
scroll_bit::@6: scope:[scroll_bit] from scroll_bit::@3
[44] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] )
asm { cli }
asm { cli }
to:scroll_bit::@return
scroll_bit::@return: scope:[scroll_bit] from scroll_bit::@6
[46] return [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] )

View File

@ -159,7 +159,7 @@ proc (void()) scroll_bit()
(byte) current_bit ← (byte/word/signed word) 128
scroll_bit::@1:
(void~) scroll_bit::$6 ← call scroll_hard
asm { sei }
asm { sei }
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 50
(byte*~) scroll_bit::$7 ← (byte*) SCREEN + (byte/signed byte/word/signed word) 40
(byte*~) scroll_bit::$8 ← (byte*~) scroll_bit::$7 + (byte/signed byte/word/signed word) 39
@ -182,7 +182,7 @@ scroll_bit::@3:
(boolean~) scroll_bit::$14 ← (byte) scroll_bit::r != (byte/signed byte/word/signed word) 8
if((boolean~) scroll_bit::$14) goto scroll_bit::@2
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
asm { cli }
asm { cli }
scroll_bit::@return:
return
endproc // scroll_bit()
@ -444,7 +444,7 @@ scroll_bit: scope:[scroll_bit] from
to:scroll_bit::@4
scroll_bit::@1: scope:[scroll_bit] from scroll_bit scroll_bit::@4
(void~) scroll_bit::$6 ← call scroll_hard
asm { sei }
asm { sei }
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 50
(byte*~) scroll_bit::$7 ← (byte*) SCREEN + (byte/signed byte/word/signed word) 40
(byte*~) scroll_bit::$8 ← (byte*~) scroll_bit::$7 + (byte/signed byte/word/signed word) 39
@ -481,7 +481,7 @@ scroll_bit::@5: scope:[scroll_bit] from scroll_bit::@2
to:scroll_bit::@3
scroll_bit::@6: scope:[scroll_bit] from scroll_bit::@3
*((byte*) PROCPORT) ← (byte/signed byte/word/signed word) 55
asm { cli }
asm { cli }
to:scroll_bit::@return
scroll_bit::@return: scope:[scroll_bit] from scroll_bit::@6
return
@ -860,7 +860,7 @@ scroll_bit::@7: scope:[scroll_bit] from scroll_bit::@1
(byte*) current_chargen#19 ← phi( scroll_bit::@1/(byte*) current_chargen#24 )
(byte*) SCREEN#2 ← phi( scroll_bit::@1/(byte*) SCREEN#5 )
(byte*) PROCPORT#1 ← phi( scroll_bit::@1/(byte*) PROCPORT#3 )
asm { sei }
asm { sei }
*((byte*) PROCPORT#1) ← (byte/signed byte/word/signed word) 50
(byte*~) scroll_bit::$7 ← (byte*) SCREEN#2 + (byte/signed byte/word/signed word) 40
(byte*~) scroll_bit::$8 ← (byte*~) scroll_bit::$7 + (byte/signed byte/word/signed word) 39
@ -935,7 +935,7 @@ scroll_bit::@6: scope:[scroll_bit] from scroll_bit::@3
(byte) current_bit#22 ← phi( scroll_bit::@3/(byte) current_bit#20 )
(byte*) PROCPORT#2 ← phi( scroll_bit::@3/(byte*) PROCPORT#4 )
*((byte*) PROCPORT#2) ← (byte/signed byte/word/signed word) 55
asm { cli }
asm { cli }
to:scroll_bit::@return
scroll_bit::@return: scope:[scroll_bit] from scroll_bit::@6
(byte*) current_chargen#13 ← phi( scroll_bit::@6/(byte*) current_chargen#20 )
@ -2301,7 +2301,7 @@ scroll_bit::@1: scope:[scroll_bit] from scroll_bit scroll_bit::@8
[31] call scroll_hard param-assignment [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] )
to:scroll_bit::@7
scroll_bit::@7: scope:[scroll_bit] from scroll_bit::@1
asm { sei }
asm { sei }
[33] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] )
to:scroll_bit::@2
scroll_bit::@2: scope:[scroll_bit] from scroll_bit::@3 scroll_bit::@7
@ -2323,7 +2323,7 @@ scroll_bit::@3: scope:[scroll_bit] from scroll_bit::@2 scroll_bit::@5
to:scroll_bit::@6
scroll_bit::@6: scope:[scroll_bit] from scroll_bit::@3
[44] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] )
asm { cli }
asm { cli }
to:scroll_bit::@return
scroll_bit::@return: scope:[scroll_bit] from scroll_bit::@6
[46] return [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] )
@ -2803,7 +2803,7 @@ scroll_bit: {
jmp b7
//SEG78 scroll_bit::@7
b7:
//SEG79 asm { sei }
//SEG79 asm { sei }
sei
//SEG80 [33] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] ) -- _deref_pbuc1=vbuc2
lda #$32
@ -2880,7 +2880,7 @@ scroll_bit: {
//SEG103 [44] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] ) -- _deref_pbuc1=vbuc2
lda #$37
sta PROCPORT
//SEG104 asm { cli }
//SEG104 asm { cli }
cli
jmp breturn
//SEG105 scroll_bit::@return
@ -3342,7 +3342,7 @@ scroll_bit: {
jmp b7
//SEG78 scroll_bit::@7
b7:
//SEG79 asm { sei }
//SEG79 asm { sei }
sei
//SEG80 [33] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] ) -- _deref_pbuc1=vbuc2
lda #$32
@ -3412,7 +3412,7 @@ scroll_bit: {
//SEG103 [44] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] ) -- _deref_pbuc1=vbuc2
lda #$37
sta PROCPORT
//SEG104 asm { cli }
//SEG104 asm { cli }
cli
jmp breturn
//SEG105 scroll_bit::@return
@ -3950,7 +3950,7 @@ scroll_bit: {
//SEG77 [47] phi from scroll_bit::@1 to scroll_hard [phi:scroll_bit::@1->scroll_hard]
jsr scroll_hard
//SEG78 scroll_bit::@7
//SEG79 asm { sei }
//SEG79 asm { sei }
sei
//SEG80 [33] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 50 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] ) -- _deref_pbuc1=vbuc2
lda #$32
@ -4009,7 +4009,7 @@ scroll_bit: {
//SEG103 [44] *((const byte*) PROCPORT#0) ← (byte/signed byte/word/signed word) 55 [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] ) -- _deref_pbuc1=vbuc2
lda #$37
sta PROCPORT
//SEG104 asm { cli }
//SEG104 asm { cli }
cli
//SEG105 scroll_bit::@return
//SEG106 [46] return [ current_bit#21 nxt#36 current_chargen#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_bit#21 nxt#36 current_chargen#19 ] )

View File

@ -354,19 +354,19 @@ 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 ]
Potential register analysis [6] if(main::i#2<127) goto main::@2 missing fragment vbsxx_lt_vbuc1_then_la1(main:: vbsxx=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 ) 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(main:: vbsyy=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 ) allocation: reg byte y [ main::i#2 main::i#1 ]
MISSING FRAGMENTS
vbsxx_lt_vbuc1_then_la1
vbsyy_lt_vbuc1_then_la1
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 ]
Potential register analysis [6] if(main::i#2<127) goto main::@2 missing fragment vbsxx_lt_vbuc1_then_la1(main:: vbsxx=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 ) 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(main:: vbsyy=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 ) allocation: reg byte y [ main::i#2 main::i#1 ]
MISSING FRAGMENTS
vbsxx_lt_vbuc1_then_la1
vbsyy_lt_vbuc1_then_la1
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 ,
@ -379,12 +379,12 @@ 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
vbsyy_lt_vbuc1_then_la1
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
vbsyy_lt_vbuc1_then_la1(main:: vbsyy=(signed byte) main::i#2 vbuc1=(byte/signed byte/word/signed word) 127 la1=(label) main::@2 )
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart

View File

@ -124,7 +124,7 @@ print_char::@return: scope:[print_char] from print_char
[59] return [ char_cursor#10 ] ( main:2::print_word:31::print_byte:44::print_char:51 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#10 ] main:2::print_word:31::print_byte:46::print_char:51 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#10 ] main:2::print_word:31::print_byte:44::print_char:54 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 ] main:2::print_word:31::print_byte:46::print_char:54 [ main::i#10 line_cursor#13 char_cursor#10 ] )
to:@return
getFAC: scope:[getFAC] from main::@13
asm { jsr$b1aasty$festa$ff }
asm { jsr$b1aa sty$fe sta$ff }
[61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#0 ] )
to:getFAC::@return
getFAC::@return: scope:[getFAC] from getFAC
@ -135,7 +135,7 @@ addMEMtoFAC: scope:[addMEMtoFAC] from main::@12
[64] call prepareMEM param-assignment [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:addMEMtoFAC::@1
addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC
asm { lda$feldy$ffjsr$b867 }
asm { lda$fe ldy$ff jsr$b867 }
to:addMEMtoFAC::@return
addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1
[66] return [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
@ -156,13 +156,13 @@ mulFACbyMEM: scope:[mulFACbyMEM] from main::@11 main::@6
[75] call prepareMEM param-assignment [ ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:mulFACbyMEM::@1
mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM
asm { lda$feldy$ffjsr$ba28 }
asm { lda$fe ldy$ff jsr$ba28 }
to:mulFACbyMEM::@return
mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1
[77] return [ ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
sinFAC: scope:[sinFAC] from main::@10
asm { jsr$e26b }
asm { jsr$e26b }
to:sinFAC::@return
sinFAC::@return: scope:[sinFAC] from sinFAC
[79] return [ ] ( main:2::sinFAC:22 [ main::i#10 char_cursor#32 line_cursor#13 ] )
@ -172,7 +172,7 @@ divMEMbyFAC: scope:[divMEMbyFAC] from main::@9
[81] call prepareMEM param-assignment [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:divMEMbyFAC::@1
divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC
asm { lda$feldy$ffjsr$bb0f }
asm { lda$fe ldy$ff jsr$bb0f }
to:divMEMbyFAC::@return
divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1
[83] return [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
@ -183,7 +183,7 @@ setFAC: scope:[setFAC] from main main::@1 main::@8
[86] call prepareMEM param-assignment [ ] ( main:2::setFAC:5 [ ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:setFAC::@1
setFAC::@1: scope:[setFAC] from setFAC
asm { ldy$felda$ffjsr$b391 }
asm { ldy$fe lda$ff jsr$b391 }
to:setFAC::@return
setFAC::@return: scope:[setFAC] from setFAC::@1
[88] return [ ] ( main:2::setFAC:5 [ ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 ] )
@ -194,13 +194,13 @@ setMEMtoFAC: scope:[setMEMtoFAC] from main::@4 main::@7
[91] call prepareMEM param-assignment [ ] ( main:2::setMEMtoFAC:9 [ ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:setMEMtoFAC::@1
setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC
asm { ldx$feldy$ffjsr$bbd4 }
asm { ldx$fe ldy$ff jsr$bbd4 }
to:setMEMtoFAC::@return
setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1
[93] return [ ] ( main:2::setMEMtoFAC:9 [ ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
divFACby10: scope:[divFACby10] from main::@3
asm { jsr$bafe }
asm { jsr$bafe }
to:divFACby10::@return
divFACby10::@return: scope:[divFACby10] from divFACby10
[95] return [ ] ( main:2::divFACby10:7 [ ] )

View File

@ -474,12 +474,12 @@ endproc // prepareMEM()
proc (void()) setFAC((word) setFAC::w)
(byte*~) setFAC::$0 ← ((byte*)) (word) setFAC::w
(void~) setFAC::$1 ← call prepareMEM (byte*~) setFAC::$0
asm { ldy$felda$ffjsr$b391 }
asm { ldy$fe lda$ff jsr$b391 }
setFAC::@return:
return
endproc // setFAC()
proc (word()) getFAC()
asm { jsr$b1aasty$festa$ff }
asm { jsr$b1aa sty$fe sta$ff }
(word) getFAC::w ← { *((byte*) memHi), *((byte*) memLo) }
(word) getFAC::return ← (word) getFAC::w
goto getFAC::@return
@ -488,130 +488,130 @@ getFAC::@return:
return (word) getFAC::return
endproc // getFAC()
proc (void()) setARGtoFAC()
asm { jsr$bc0f }
asm { jsr$bc0f }
setARGtoFAC::@return:
return
endproc // setARGtoFAC()
proc (void()) setFACtoARG()
asm { jsr$bbfc }
asm { jsr$bbfc }
setFACtoARG::@return:
return
endproc // setFACtoARG()
proc (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem)
(void~) setMEMtoFAC::$0 ← call prepareMEM (byte*) setMEMtoFAC::mem
asm { ldx$feldy$ffjsr$bbd4 }
asm { ldx$fe ldy$ff jsr$bbd4 }
setMEMtoFAC::@return:
return
endproc // setMEMtoFAC()
proc (void()) setFACtoMEM((byte*) setFACtoMEM::mem)
(void~) setFACtoMEM::$0 ← call prepareMEM (byte*) setFACtoMEM::mem
asm { lda$feldy$ffjsr$bba2 }
asm { lda$fe ldy$ff jsr$bba2 }
setFACtoMEM::@return:
return
endproc // setFACtoMEM()
proc (void()) setFACtoPIhalf()
asm { lda#$e0ldy#$e2jsr$bba2 }
asm { lda#$e0 ldy#$e2 jsr$bba2 }
setFACtoPIhalf::@return:
return
endproc // setFACtoPIhalf()
proc (void()) setFACto2PI()
asm { lda#$e5ldy#$e2jsr$bba2 }
asm { lda#$e5 ldy#$e2 jsr$bba2 }
setFACto2PI::@return:
return
endproc // setFACto2PI()
proc (void()) setARGtoMEM((byte*) setARGtoMEM::mem)
(void~) setARGtoMEM::$0 ← call prepareMEM (byte*) setARGtoMEM::mem
asm { lda$feldy$ffjsr$ba8c }
asm { lda$fe ldy$ff jsr$ba8c }
setARGtoMEM::@return:
return
endproc // setARGtoMEM()
proc (void()) addMEMtoFAC((byte*) addMEMtoFAC::mem)
(void~) addMEMtoFAC::$0 ← call prepareMEM (byte*) addMEMtoFAC::mem
asm { lda$feldy$ffjsr$b867 }
asm { lda$fe ldy$ff jsr$b867 }
addMEMtoFAC::@return:
return
endproc // addMEMtoFAC()
proc (void()) addARGtoFAC()
asm { jsr$b86a }
asm { jsr$b86a }
addARGtoFAC::@return:
return
endproc // addARGtoFAC()
proc (void()) subFACfromMEM((byte*) subFACfromMEM::mem)
(void~) subFACfromMEM::$0 ← call prepareMEM (byte*) subFACfromMEM::mem
asm { lda$feldy$ffjsr$b850 }
asm { lda$fe ldy$ff jsr$b850 }
subFACfromMEM::@return:
return
endproc // subFACfromMEM()
proc (void()) subFACfromARG()
asm { jsr$b853 }
asm { jsr$b853 }
subFACfromARG::@return:
return
endproc // subFACfromARG()
proc (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem)
(void~) divMEMbyFAC::$0 ← call prepareMEM (byte*) divMEMbyFAC::mem
asm { lda$feldy$ffjsr$bb0f }
asm { lda$fe ldy$ff jsr$bb0f }
divMEMbyFAC::@return:
return
endproc // divMEMbyFAC()
proc (void()) mulFACbyMEM((byte*) mulFACbyMEM::mem)
(void~) mulFACbyMEM::$0 ← call prepareMEM (byte*) mulFACbyMEM::mem
asm { lda$feldy$ffjsr$ba28 }
asm { lda$fe ldy$ff jsr$ba28 }
mulFACbyMEM::@return:
return
endproc // mulFACbyMEM()
proc (void()) pwrMEMbyFAC((byte*) pwrMEMbyFAC::mem)
(void~) pwrMEMbyFAC::$0 ← call prepareMEM (byte*) pwrMEMbyFAC::mem
asm { lda$feldy$ffjsr$bf78 }
asm { lda$fe ldy$ff jsr$bf78 }
pwrMEMbyFAC::@return:
return
endproc // pwrMEMbyFAC()
proc (void()) intFAC()
asm { jsr$bccc }
asm { jsr$bccc }
intFAC::@return:
return
endproc // intFAC()
proc (void()) sinFAC()
asm { jsr$e26b }
asm { jsr$e26b }
sinFAC::@return:
return
endproc // sinFAC()
proc (void()) cosFAC()
asm { jsr$e264 }
asm { jsr$e264 }
cosFAC::@return:
return
endproc // cosFAC()
proc (void()) tanFAC()
asm { jsr$e2b4 }
asm { jsr$e2b4 }
tanFAC::@return:
return
endproc // tanFAC()
proc (void()) atnFAC()
asm { jsr$e303 }
asm { jsr$e303 }
atnFAC::@return:
return
endproc // atnFAC()
proc (void()) sqrFAC()
asm { jsr$bf71 }
asm { jsr$bf71 }
sqrFAC::@return:
return
endproc // sqrFAC()
proc (void()) expFAC()
asm { jsr$bfed }
asm { jsr$bfed }
expFAC::@return:
return
endproc // expFAC()
proc (void()) logFAC()
asm { jsr$b9ea }
asm { jsr$b9ea }
logFAC::@return:
return
endproc // logFAC()
proc (void()) divFACby10()
asm { jsr$bafe }
asm { jsr$bafe }
divFACby10::@return:
return
endproc // divFACby10()
proc (void()) mulFACby10()
asm { jsr$bae2 }
asm { jsr$bae2 }
mulFACby10::@return:
return
endproc // mulFACby10()
@ -960,7 +960,7 @@ prepareMEM::@return: scope:[prepareMEM] from prepareMEM
setFAC: scope:[setFAC] from
(byte*~) setFAC::$0 ← ((byte*)) (word) setFAC::w
(void~) setFAC::$1 ← call prepareMEM (byte*~) setFAC::$0
asm { ldy$felda$ffjsr$b391 }
asm { ldy$fe lda$ff jsr$b391 }
to:setFAC::@return
setFAC::@return: scope:[setFAC] from setFAC
return
@ -968,7 +968,7 @@ setFAC::@return: scope:[setFAC] from setFAC
@10: scope:[] from @9
to:@11
getFAC: scope:[getFAC] from
asm { jsr$b1aasty$festa$ff }
asm { jsr$b1aa sty$fe sta$ff }
(word) getFAC::w ← { *((byte*) memHi), *((byte*) memLo) }
(word) getFAC::return ← (word) getFAC::w
to:getFAC::@return
@ -981,7 +981,7 @@ getFAC::@1: scope:[getFAC] from
@11: scope:[] from @10
to:@12
setARGtoFAC: scope:[setARGtoFAC] from
asm { jsr$bc0f }
asm { jsr$bc0f }
to:setARGtoFAC::@return
setARGtoFAC::@return: scope:[setARGtoFAC] from setARGtoFAC
return
@ -989,7 +989,7 @@ setARGtoFAC::@return: scope:[setARGtoFAC] from setARGtoFAC
@12: scope:[] from @11
to:@13
setFACtoARG: scope:[setFACtoARG] from
asm { jsr$bbfc }
asm { jsr$bbfc }
to:setFACtoARG::@return
setFACtoARG::@return: scope:[setFACtoARG] from setFACtoARG
return
@ -998,7 +998,7 @@ setFACtoARG::@return: scope:[setFACtoARG] from setFACtoARG
to:@14
setMEMtoFAC: scope:[setMEMtoFAC] from
(void~) setMEMtoFAC::$0 ← call prepareMEM (byte*) setMEMtoFAC::mem
asm { ldx$feldy$ffjsr$bbd4 }
asm { ldx$fe ldy$ff jsr$bbd4 }
to:setMEMtoFAC::@return
setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC
return
@ -1007,7 +1007,7 @@ setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC
to:@15
setFACtoMEM: scope:[setFACtoMEM] from
(void~) setFACtoMEM::$0 ← call prepareMEM (byte*) setFACtoMEM::mem
asm { lda$feldy$ffjsr$bba2 }
asm { lda$fe ldy$ff jsr$bba2 }
to:setFACtoMEM::@return
setFACtoMEM::@return: scope:[setFACtoMEM] from setFACtoMEM
return
@ -1015,7 +1015,7 @@ setFACtoMEM::@return: scope:[setFACtoMEM] from setFACtoMEM
@15: scope:[] from @14
to:@16
setFACtoPIhalf: scope:[setFACtoPIhalf] from
asm { lda#$e0ldy#$e2jsr$bba2 }
asm { lda#$e0 ldy#$e2 jsr$bba2 }
to:setFACtoPIhalf::@return
setFACtoPIhalf::@return: scope:[setFACtoPIhalf] from setFACtoPIhalf
return
@ -1023,7 +1023,7 @@ setFACtoPIhalf::@return: scope:[setFACtoPIhalf] from setFACtoPIhalf
@16: scope:[] from @15
to:@17
setFACto2PI: scope:[setFACto2PI] from
asm { lda#$e5ldy#$e2jsr$bba2 }
asm { lda#$e5 ldy#$e2 jsr$bba2 }
to:setFACto2PI::@return
setFACto2PI::@return: scope:[setFACto2PI] from setFACto2PI
return
@ -1032,7 +1032,7 @@ setFACto2PI::@return: scope:[setFACto2PI] from setFACto2PI
to:@18
setARGtoMEM: scope:[setARGtoMEM] from
(void~) setARGtoMEM::$0 ← call prepareMEM (byte*) setARGtoMEM::mem
asm { lda$feldy$ffjsr$ba8c }
asm { lda$fe ldy$ff jsr$ba8c }
to:setARGtoMEM::@return
setARGtoMEM::@return: scope:[setARGtoMEM] from setARGtoMEM
return
@ -1041,7 +1041,7 @@ setARGtoMEM::@return: scope:[setARGtoMEM] from setARGtoMEM
to:@19
addMEMtoFAC: scope:[addMEMtoFAC] from
(void~) addMEMtoFAC::$0 ← call prepareMEM (byte*) addMEMtoFAC::mem
asm { lda$feldy$ffjsr$b867 }
asm { lda$fe ldy$ff jsr$b867 }
to:addMEMtoFAC::@return
addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC
return
@ -1049,7 +1049,7 @@ addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC
@19: scope:[] from @18
to:@20
addARGtoFAC: scope:[addARGtoFAC] from
asm { jsr$b86a }
asm { jsr$b86a }
to:addARGtoFAC::@return
addARGtoFAC::@return: scope:[addARGtoFAC] from addARGtoFAC
return
@ -1058,7 +1058,7 @@ addARGtoFAC::@return: scope:[addARGtoFAC] from addARGtoFAC
to:@21
subFACfromMEM: scope:[subFACfromMEM] from
(void~) subFACfromMEM::$0 ← call prepareMEM (byte*) subFACfromMEM::mem
asm { lda$feldy$ffjsr$b850 }
asm { lda$fe ldy$ff jsr$b850 }
to:subFACfromMEM::@return
subFACfromMEM::@return: scope:[subFACfromMEM] from subFACfromMEM
return
@ -1066,7 +1066,7 @@ subFACfromMEM::@return: scope:[subFACfromMEM] from subFACfromMEM
@21: scope:[] from @20
to:@22
subFACfromARG: scope:[subFACfromARG] from
asm { jsr$b853 }
asm { jsr$b853 }
to:subFACfromARG::@return
subFACfromARG::@return: scope:[subFACfromARG] from subFACfromARG
return
@ -1075,7 +1075,7 @@ subFACfromARG::@return: scope:[subFACfromARG] from subFACfromARG
to:@23
divMEMbyFAC: scope:[divMEMbyFAC] from
(void~) divMEMbyFAC::$0 ← call prepareMEM (byte*) divMEMbyFAC::mem
asm { lda$feldy$ffjsr$bb0f }
asm { lda$fe ldy$ff jsr$bb0f }
to:divMEMbyFAC::@return
divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC
return
@ -1084,7 +1084,7 @@ divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC
to:@24
mulFACbyMEM: scope:[mulFACbyMEM] from
(void~) mulFACbyMEM::$0 ← call prepareMEM (byte*) mulFACbyMEM::mem
asm { lda$feldy$ffjsr$ba28 }
asm { lda$fe ldy$ff jsr$ba28 }
to:mulFACbyMEM::@return
mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM
return
@ -1093,7 +1093,7 @@ mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM
to:@25
pwrMEMbyFAC: scope:[pwrMEMbyFAC] from
(void~) pwrMEMbyFAC::$0 ← call prepareMEM (byte*) pwrMEMbyFAC::mem
asm { lda$feldy$ffjsr$bf78 }
asm { lda$fe ldy$ff jsr$bf78 }
to:pwrMEMbyFAC::@return
pwrMEMbyFAC::@return: scope:[pwrMEMbyFAC] from pwrMEMbyFAC
return
@ -1101,7 +1101,7 @@ pwrMEMbyFAC::@return: scope:[pwrMEMbyFAC] from pwrMEMbyFAC
@25: scope:[] from @24
to:@26
intFAC: scope:[intFAC] from
asm { jsr$bccc }
asm { jsr$bccc }
to:intFAC::@return
intFAC::@return: scope:[intFAC] from intFAC
return
@ -1109,7 +1109,7 @@ intFAC::@return: scope:[intFAC] from intFAC
@26: scope:[] from @25
to:@27
sinFAC: scope:[sinFAC] from
asm { jsr$e26b }
asm { jsr$e26b }
to:sinFAC::@return
sinFAC::@return: scope:[sinFAC] from sinFAC
return
@ -1117,7 +1117,7 @@ sinFAC::@return: scope:[sinFAC] from sinFAC
@27: scope:[] from @26
to:@28
cosFAC: scope:[cosFAC] from
asm { jsr$e264 }
asm { jsr$e264 }
to:cosFAC::@return
cosFAC::@return: scope:[cosFAC] from cosFAC
return
@ -1125,7 +1125,7 @@ cosFAC::@return: scope:[cosFAC] from cosFAC
@28: scope:[] from @27
to:@29
tanFAC: scope:[tanFAC] from
asm { jsr$e2b4 }
asm { jsr$e2b4 }
to:tanFAC::@return
tanFAC::@return: scope:[tanFAC] from tanFAC
return
@ -1133,7 +1133,7 @@ tanFAC::@return: scope:[tanFAC] from tanFAC
@29: scope:[] from @28
to:@30
atnFAC: scope:[atnFAC] from
asm { jsr$e303 }
asm { jsr$e303 }
to:atnFAC::@return
atnFAC::@return: scope:[atnFAC] from atnFAC
return
@ -1141,7 +1141,7 @@ atnFAC::@return: scope:[atnFAC] from atnFAC
@30: scope:[] from @29
to:@31
sqrFAC: scope:[sqrFAC] from
asm { jsr$bf71 }
asm { jsr$bf71 }
to:sqrFAC::@return
sqrFAC::@return: scope:[sqrFAC] from sqrFAC
return
@ -1149,7 +1149,7 @@ sqrFAC::@return: scope:[sqrFAC] from sqrFAC
@31: scope:[] from @30
to:@32
expFAC: scope:[expFAC] from
asm { jsr$bfed }
asm { jsr$bfed }
to:expFAC::@return
expFAC::@return: scope:[expFAC] from expFAC
return
@ -1157,7 +1157,7 @@ expFAC::@return: scope:[expFAC] from expFAC
@32: scope:[] from @31
to:@33
logFAC: scope:[logFAC] from
asm { jsr$b9ea }
asm { jsr$b9ea }
to:logFAC::@return
logFAC::@return: scope:[logFAC] from logFAC
return
@ -1165,7 +1165,7 @@ logFAC::@return: scope:[logFAC] from logFAC
@33: scope:[] from @32
to:@34
divFACby10: scope:[divFACby10] from
asm { jsr$bafe }
asm { jsr$bafe }
to:divFACby10::@return
divFACby10::@return: scope:[divFACby10] from divFACby10
return
@ -1173,7 +1173,7 @@ divFACby10::@return: scope:[divFACby10] from divFACby10
@34: scope:[] from @33
to:@35
mulFACby10: scope:[mulFACby10] from
asm { jsr$bae2 }
asm { jsr$bae2 }
to:mulFACby10::@return
mulFACby10::@return: scope:[mulFACby10] from mulFACby10
return
@ -1434,13 +1434,13 @@ setFAC: scope:[setFAC] from main main::@1 main::@8
call prepareMEM param-assignment
to:setFAC::@1
setFAC::@1: scope:[setFAC] from setFAC
asm { ldy$felda$ffjsr$b391 }
asm { ldy$fe lda$ff jsr$b391 }
to:setFAC::@return
setFAC::@return: scope:[setFAC] from setFAC::@1
return
to:@return
getFAC: scope:[getFAC] from main::@13
asm { jsr$b1aasty$festa$ff }
asm { jsr$b1aa sty$fe sta$ff }
(word) getFAC::w#0 ← { *((byte*) memHi#0), *((byte*) memLo#0) }
(word) getFAC::return#0 ← (word) getFAC::w#0
to:getFAC::@return
@ -1455,7 +1455,7 @@ setMEMtoFAC: scope:[setMEMtoFAC] from main::@4 main::@7
call prepareMEM param-assignment
to:setMEMtoFAC::@1
setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC
asm { ldx$feldy$ffjsr$bbd4 }
asm { ldx$fe ldy$ff jsr$bbd4 }
to:setMEMtoFAC::@return
setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1
return
@ -1466,7 +1466,7 @@ addMEMtoFAC: scope:[addMEMtoFAC] from main::@12
call prepareMEM param-assignment
to:addMEMtoFAC::@1
addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC
asm { lda$feldy$ffjsr$b867 }
asm { lda$fe ldy$ff jsr$b867 }
to:addMEMtoFAC::@return
addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1
return
@ -1477,7 +1477,7 @@ divMEMbyFAC: scope:[divMEMbyFAC] from main::@9
call prepareMEM param-assignment
to:divMEMbyFAC::@1
divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC
asm { lda$feldy$ffjsr$bb0f }
asm { lda$fe ldy$ff jsr$bb0f }
to:divMEMbyFAC::@return
divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1
return
@ -1488,19 +1488,19 @@ mulFACbyMEM: scope:[mulFACbyMEM] from main::@11 main::@6
call prepareMEM param-assignment
to:mulFACbyMEM::@1
mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM
asm { lda$feldy$ffjsr$ba28 }
asm { lda$fe ldy$ff jsr$ba28 }
to:mulFACbyMEM::@return
mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1
return
to:@return
sinFAC: scope:[sinFAC] from main::@10
asm { jsr$e26b }
asm { jsr$e26b }
to:sinFAC::@return
sinFAC::@return: scope:[sinFAC] from sinFAC
return
to:@return
divFACby10: scope:[divFACby10] from main::@3
asm { jsr$bafe }
asm { jsr$bafe }
to:divFACby10::@return
divFACby10::@return: scope:[divFACby10] from divFACby10
return
@ -2346,7 +2346,7 @@ print_char::@return: scope:[print_char] from print_char
[59] return [ char_cursor#10 ] ( main:2::print_word:31::print_byte:44::print_char:51 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#10 ] main:2::print_word:31::print_byte:46::print_char:51 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#10 ] main:2::print_word:31::print_byte:44::print_char:54 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 ] main:2::print_word:31::print_byte:46::print_char:54 [ main::i#10 line_cursor#13 char_cursor#10 ] )
to:@return
getFAC: scope:[getFAC] from main::@13
asm { jsr$b1aasty$festa$ff }
asm { jsr$b1aa sty$fe sta$ff }
[61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#0 ] )
to:getFAC::@return
getFAC::@return: scope:[getFAC] from getFAC
@ -2357,7 +2357,7 @@ addMEMtoFAC: scope:[addMEMtoFAC] from main::@12
[64] call prepareMEM param-assignment [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:addMEMtoFAC::@1
addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC
asm { lda$feldy$ffjsr$b867 }
asm { lda$fe ldy$ff jsr$b867 }
to:addMEMtoFAC::@return
addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1
[66] return [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
@ -2378,13 +2378,13 @@ mulFACbyMEM: scope:[mulFACbyMEM] from main::@11 main::@6
[75] call prepareMEM param-assignment [ ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:mulFACbyMEM::@1
mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM
asm { lda$feldy$ffjsr$ba28 }
asm { lda$fe ldy$ff jsr$ba28 }
to:mulFACbyMEM::@return
mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1
[77] return [ ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
sinFAC: scope:[sinFAC] from main::@10
asm { jsr$e26b }
asm { jsr$e26b }
to:sinFAC::@return
sinFAC::@return: scope:[sinFAC] from sinFAC
[79] return [ ] ( main:2::sinFAC:22 [ main::i#10 char_cursor#32 line_cursor#13 ] )
@ -2394,7 +2394,7 @@ divMEMbyFAC: scope:[divMEMbyFAC] from main::@9
[81] call prepareMEM param-assignment [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:divMEMbyFAC::@1
divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC
asm { lda$feldy$ffjsr$bb0f }
asm { lda$fe ldy$ff jsr$bb0f }
to:divMEMbyFAC::@return
divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1
[83] return [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
@ -2405,7 +2405,7 @@ setFAC: scope:[setFAC] from main main::@1 main::@8
[86] call prepareMEM param-assignment [ ] ( main:2::setFAC:5 [ ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:setFAC::@1
setFAC::@1: scope:[setFAC] from setFAC
asm { ldy$felda$ffjsr$b391 }
asm { ldy$fe lda$ff jsr$b391 }
to:setFAC::@return
setFAC::@return: scope:[setFAC] from setFAC::@1
[88] return [ ] ( main:2::setFAC:5 [ ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 ] )
@ -2416,13 +2416,13 @@ setMEMtoFAC: scope:[setMEMtoFAC] from main::@4 main::@7
[91] call prepareMEM param-assignment [ ] ( main:2::setMEMtoFAC:9 [ ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:setMEMtoFAC::@1
setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC
asm { ldx$feldy$ffjsr$bbd4 }
asm { ldx$fe ldy$ff jsr$bbd4 }
to:setMEMtoFAC::@return
setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1
[93] return [ ] ( main:2::setMEMtoFAC:9 [ ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
divFACby10: scope:[divFACby10] from main::@3
asm { jsr$bafe }
asm { jsr$bafe }
to:divFACby10::@return
divFACby10::@return: scope:[divFACby10] from divFACby10
[95] return [ ] ( main:2::divFACby10:7 [ ] )
@ -2992,7 +2992,7 @@ print_char: {
getFAC: {
.label return = $17
.label return_2 = $11
//SEG127 asm { jsr$b1aasty$festa$ff }
//SEG127 asm { jsr$b1aa sty$fe sta$ff }
jsr $b1aa
sty $fe
sta $ff
@ -3021,7 +3021,7 @@ addMEMtoFAC: {
jmp b1
//SEG135 addMEMtoFAC::@1
b1:
//SEG136 asm { lda$feldy$ffjsr$b867 }
//SEG136 asm { lda$fe ldy$ff jsr$b867 }
lda $fe
ldy $ff
jsr $b867
@ -3070,7 +3070,7 @@ mulFACbyMEM: {
jmp b1
//SEG151 mulFACbyMEM::@1
b1:
//SEG152 asm { lda$feldy$ffjsr$ba28 }
//SEG152 asm { lda$fe ldy$ff jsr$ba28 }
lda $fe
ldy $ff
jsr $ba28
@ -3082,7 +3082,7 @@ mulFACbyMEM: {
}
//SEG155 sinFAC
sinFAC: {
//SEG156 asm { jsr$e26b }
//SEG156 asm { jsr$e26b }
jsr $e26b
jmp breturn
//SEG157 sinFAC::@return
@ -3104,7 +3104,7 @@ divMEMbyFAC: {
jmp b1
//SEG163 divMEMbyFAC::@1
b1:
//SEG164 asm { lda$feldy$ffjsr$bb0f }
//SEG164 asm { lda$fe ldy$ff jsr$bb0f }
lda $fe
ldy $ff
jsr $bb0f
@ -3130,7 +3130,7 @@ setFAC: {
jmp b1
//SEG172 setFAC::@1
b1:
//SEG173 asm { ldy$felda$ffjsr$b391 }
//SEG173 asm { ldy$fe lda$ff jsr$b391 }
ldy $fe
lda $ff
jsr $b391
@ -3156,7 +3156,7 @@ setMEMtoFAC: {
jmp b1
//SEG181 setMEMtoFAC::@1
b1:
//SEG182 asm { ldx$feldy$ffjsr$bbd4 }
//SEG182 asm { ldx$fe ldy$ff jsr$bbd4 }
ldx $fe
ldy $ff
jsr $bbd4
@ -3168,7 +3168,7 @@ setMEMtoFAC: {
}
//SEG185 divFACby10
divFACby10: {
//SEG186 asm { jsr$bafe }
//SEG186 asm { jsr$bafe }
jsr $bafe
jmp breturn
//SEG187 divFACby10::@return
@ -3192,16 +3192,16 @@ Statement [57] *((byte*) char_cursor#23) ← (byte) print_char::ch#2 [ char_curs
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Statement [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#0 ] ) always clobbers reg byte a
Statement asm { lda$feldy$ffjsr$b867 } always clobbers reg byte a reg byte y
Statement asm { lda$fe ldy$ff jsr$b867 } always clobbers reg byte a reg byte y
Statement [68] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 [ prepareMEM::mem#5 prepareMEM::$0 ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:5::prepareMEM:86 [ prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ prepareMEM::mem#5 prepareMEM::$0 ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] ) always clobbers reg byte a
Statement [70] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 [ prepareMEM::$1 ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setFAC:5::prepareMEM:86 [ prepareMEM::$1 ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ prepareMEM::$1 ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] ) always clobbers reg byte a
Statement [74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 [ prepareMEM::mem#4 ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#4 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#4 ] ) always clobbers reg byte a
Statement asm { lda$feldy$ffjsr$ba28 } always clobbers reg byte a reg byte y
Statement asm { lda$feldy$ffjsr$bb0f } always clobbers reg byte a reg byte y
Statement asm { lda$fe ldy$ff jsr$ba28 } always clobbers reg byte a reg byte y
Statement asm { lda$fe ldy$ff jsr$bb0f } always clobbers reg byte a reg byte y
Statement [85] (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#3 [ prepareMEM::mem#0 ] ( main:2::setFAC:5 [ prepareMEM::mem#0 ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#0 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#0 ] ) always clobbers reg byte a
Statement asm { ldy$felda$ffjsr$b391 } always clobbers reg byte a reg byte y
Statement asm { ldy$fe lda$ff jsr$b391 } always clobbers reg byte a reg byte y
Statement [90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 [ prepareMEM::mem#1 ] ( main:2::setMEMtoFAC:9 [ prepareMEM::mem#1 ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#1 ] ) always clobbers reg byte a
Statement asm { ldx$feldy$ffjsr$bbd4 } always clobbers reg byte x reg byte y
Statement asm { ldx$fe ldy$ff jsr$bbd4 } always clobbers reg byte x reg byte y
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ]
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
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
@ -3215,16 +3215,16 @@ Statement [45] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ char_cursor
Statement [52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word) 15 [ char_cursor#10 print_byte::$2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#10 print_byte::$2 ] main:2::print_word:31::print_byte:46 [ main::i#10 line_cursor#13 char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a
Statement [57] *((byte*) char_cursor#23) ← (byte) print_char::ch#2 [ char_cursor#23 ] ( main:2::print_word:31::print_byte:44::print_char:51 [ main::i#10 line_cursor#13 print_word::w#0 print_byte::b#2 char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:51 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#23 ] main:2::print_word:31::print_byte:44::print_char:54 [ main::i#10 line_cursor#13 print_word::w#0 char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:54 [ main::i#10 line_cursor#13 char_cursor#23 ] ) always clobbers reg byte y
Statement [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#0 ] ) always clobbers reg byte a
Statement asm { lda$feldy$ffjsr$b867 } always clobbers reg byte a reg byte y
Statement asm { lda$fe ldy$ff jsr$b867 } always clobbers reg byte a reg byte y
Statement [68] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 [ prepareMEM::mem#5 prepareMEM::$0 ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:5::prepareMEM:86 [ prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ prepareMEM::mem#5 prepareMEM::$0 ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] ) always clobbers reg byte a
Statement [70] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 [ prepareMEM::$1 ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setFAC:5::prepareMEM:86 [ prepareMEM::$1 ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ prepareMEM::$1 ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] ) always clobbers reg byte a
Statement [74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 [ prepareMEM::mem#4 ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#4 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#4 ] ) always clobbers reg byte a
Statement asm { lda$feldy$ffjsr$ba28 } always clobbers reg byte a reg byte y
Statement asm { lda$feldy$ffjsr$bb0f } always clobbers reg byte a reg byte y
Statement asm { lda$fe ldy$ff jsr$ba28 } always clobbers reg byte a reg byte y
Statement asm { lda$fe ldy$ff jsr$bb0f } always clobbers reg byte a reg byte y
Statement [85] (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#3 [ prepareMEM::mem#0 ] ( main:2::setFAC:5 [ prepareMEM::mem#0 ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#0 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#0 ] ) always clobbers reg byte a
Statement asm { ldy$felda$ffjsr$b391 } always clobbers reg byte a reg byte y
Statement asm { ldy$fe lda$ff jsr$b391 } always clobbers reg byte a reg byte y
Statement [90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 [ prepareMEM::mem#1 ] ( main:2::setMEMtoFAC:9 [ prepareMEM::mem#1 ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#1 ] ) always clobbers reg byte a
Statement asm { ldx$feldy$ffjsr$bbd4 } always clobbers reg byte x reg byte y
Statement asm { ldx$fe ldy$ff jsr$bbd4 } always clobbers reg byte x reg byte y
Potential registers zp ZP_BYTE:2 [ main::i#10 main::i#1 ] : zp ZP_BYTE:2 ,
Potential registers zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 ] : zp ZP_WORD:3 ,
Potential registers zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x ,
@ -3629,7 +3629,7 @@ print_char: {
//SEG126 getFAC
getFAC: {
.label return = 7
//SEG127 asm { jsr$b1aasty$festa$ff }
//SEG127 asm { jsr$b1aa sty$fe sta$ff }
jsr $b1aa
sty $fe
sta $ff
@ -3658,7 +3658,7 @@ addMEMtoFAC: {
jmp b1
//SEG135 addMEMtoFAC::@1
b1:
//SEG136 asm { lda$feldy$ffjsr$b867 }
//SEG136 asm { lda$fe ldy$ff jsr$b867 }
lda $fe
ldy $ff
jsr $b867
@ -3698,7 +3698,7 @@ mulFACbyMEM: {
jmp b1
//SEG151 mulFACbyMEM::@1
b1:
//SEG152 asm { lda$feldy$ffjsr$ba28 }
//SEG152 asm { lda$fe ldy$ff jsr$ba28 }
lda $fe
ldy $ff
jsr $ba28
@ -3710,7 +3710,7 @@ mulFACbyMEM: {
}
//SEG155 sinFAC
sinFAC: {
//SEG156 asm { jsr$e26b }
//SEG156 asm { jsr$e26b }
jsr $e26b
jmp breturn
//SEG157 sinFAC::@return
@ -3732,7 +3732,7 @@ divMEMbyFAC: {
jmp b1
//SEG163 divMEMbyFAC::@1
b1:
//SEG164 asm { lda$feldy$ffjsr$bb0f }
//SEG164 asm { lda$fe ldy$ff jsr$bb0f }
lda $fe
ldy $ff
jsr $bb0f
@ -3754,7 +3754,7 @@ setFAC: {
jmp b1
//SEG172 setFAC::@1
b1:
//SEG173 asm { ldy$felda$ffjsr$b391 }
//SEG173 asm { ldy$fe lda$ff jsr$b391 }
ldy $fe
lda $ff
jsr $b391
@ -3777,7 +3777,7 @@ setMEMtoFAC: {
jmp b1
//SEG181 setMEMtoFAC::@1
b1:
//SEG182 asm { ldx$feldy$ffjsr$bbd4 }
//SEG182 asm { ldx$fe ldy$ff jsr$bbd4 }
ldx $fe
ldy $ff
jsr $bbd4
@ -3789,7 +3789,7 @@ setMEMtoFAC: {
}
//SEG185 divFACby10
divFACby10: {
//SEG186 asm { jsr$bafe }
//SEG186 asm { jsr$bafe }
jsr $bafe
jmp breturn
//SEG187 divFACby10::@return
@ -4309,7 +4309,7 @@ print_char: {
//SEG126 getFAC
getFAC: {
.label return = 7
//SEG127 asm { jsr$b1aasty$festa$ff }
//SEG127 asm { jsr$b1aa sty$fe sta$ff }
jsr $b1aa
sty $fe
sta $ff
@ -4333,7 +4333,7 @@ addMEMtoFAC: {
sta prepareMEM.mem+1
jsr prepareMEM
//SEG135 addMEMtoFAC::@1
//SEG136 asm { lda$feldy$ffjsr$b867 }
//SEG136 asm { lda$fe ldy$ff jsr$b867 }
lda $fe
ldy $ff
jsr $b867
@ -4366,7 +4366,7 @@ mulFACbyMEM: {
//SEG150 [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#4 [phi:mulFACbyMEM->prepareMEM#0] -- register_copy
jsr prepareMEM
//SEG151 mulFACbyMEM::@1
//SEG152 asm { lda$feldy$ffjsr$ba28 }
//SEG152 asm { lda$fe ldy$ff jsr$ba28 }
lda $fe
ldy $ff
jsr $ba28
@ -4376,7 +4376,7 @@ mulFACbyMEM: {
}
//SEG155 sinFAC
sinFAC: {
//SEG156 asm { jsr$e26b }
//SEG156 asm { jsr$e26b }
jsr $e26b
//SEG157 sinFAC::@return
//SEG158 [79] return [ ] ( main:2::sinFAC:22 [ main::i#10 char_cursor#32 line_cursor#13 ] )
@ -4393,7 +4393,7 @@ divMEMbyFAC: {
sta prepareMEM.mem+1
jsr prepareMEM
//SEG163 divMEMbyFAC::@1
//SEG164 asm { lda$feldy$ffjsr$bb0f }
//SEG164 asm { lda$fe ldy$ff jsr$bb0f }
lda $fe
ldy $ff
jsr $bb0f
@ -4410,7 +4410,7 @@ setFAC: {
//SEG171 [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#0 [phi:setFAC->prepareMEM#0] -- register_copy
jsr prepareMEM
//SEG172 setFAC::@1
//SEG173 asm { ldy$felda$ffjsr$b391 }
//SEG173 asm { ldy$fe lda$ff jsr$b391 }
ldy $fe
lda $ff
jsr $b391
@ -4428,7 +4428,7 @@ setMEMtoFAC: {
//SEG180 [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#1 [phi:setMEMtoFAC->prepareMEM#0] -- register_copy
jsr prepareMEM
//SEG181 setMEMtoFAC::@1
//SEG182 asm { ldx$feldy$ffjsr$bbd4 }
//SEG182 asm { ldx$fe ldy$ff jsr$bbd4 }
ldx $fe
ldy $ff
jsr $bbd4
@ -4438,7 +4438,7 @@ setMEMtoFAC: {
}
//SEG185 divFACby10
divFACby10: {
//SEG186 asm { jsr$bafe }
//SEG186 asm { jsr$bafe }
jsr $bafe
//SEG187 divFACby10::@return
//SEG188 [95] return [ ] ( main:2::divFACby10:7 [ ] )

View File

@ -93,9 +93,8 @@ anim: {
b3:
lda j2
sec
sbc #1
sbc #2
sta j2
dec j2
inc j
lda j
cmp #7
@ -408,8 +407,7 @@ gen_sprites: {
sta i
b1:
ldx i
lda cml,x
tax
ldy cml,x
lda spr
sta gen_chargen_sprite.sprite
lda spr+1
@ -439,7 +437,7 @@ gen_chargen_sprite: {
.label x = 5
.label y = 3
.label c = 6
txa
tya
sta _0
lda #0
sta _0+1

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -49,28 +49,27 @@
(label) anim::@return
(byte) anim::j
(byte) anim::j#1 j zp ZP_BYTE:7 151.5
(byte) anim::j#2 j zp ZP_BYTE:7 11.222222222222221
(byte) anim::j#2 j zp ZP_BYTE:7 11.882352941176471
(byte) anim::j2
(byte) anim::j2#1 reg byte a 202.0
(byte) anim::j2#2 j2 zp ZP_BYTE:6 67.33333333333333
(byte) anim::j2#3 j2 zp ZP_BYTE:6 25.25
(byte) anim::j2#1 j2 zp ZP_BYTE:6 67.33333333333333
(byte) anim::j2#2 j2 zp ZP_BYTE:6 25.25
(word) anim::x
(word) anim::x#0 x zp ZP_WORD:8 75.75
(byte) anim::x_msb
(byte) anim::x_msb#1 x_msb zp ZP_BYTE:5 12.75
(byte) anim::x_msb#1 x_msb zp ZP_BYTE:5 13.6
(byte) anim::x_msb#2 x_msb zp ZP_BYTE:5 101.0
(byte) anim::xidx
(byte) anim::xidx#0 xidx zp ZP_BYTE:4 2.0
(byte) anim::xidx#1 xidx zp ZP_BYTE:4 202.0
(byte) anim::xidx#2 xidx zp ZP_BYTE:4 202.0
(byte) anim::xidx#3 xidx zp ZP_BYTE:4 38.125
(byte) anim::xidx#5 xidx zp ZP_BYTE:4 33.666666666666664
(byte) anim::xidx#5 xidx zp ZP_BYTE:4 37.875
(byte) anim::yidx
(byte) anim::yidx#0 reg byte y 4.0
(byte) anim::yidx#1 reg byte y 202.0
(byte) anim::yidx#2 reg byte y 202.0
(byte) anim::yidx#3 reg byte y 25.416666666666664
(byte) anim::yidx#6 reg byte y 60.599999999999994
(byte) anim::yidx#6 reg byte y 75.75
(void()) clear_screen()
(label) clear_screen::@1
(label) clear_screen::@return
@ -108,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 reg byte x 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
@ -294,11 +293,11 @@
(label) sinFAC::@return
(byte) sin_idx_x
(byte) sin_idx_x#11 sin_idx_x zp ZP_BYTE:2 1.4444444444444446
(byte) sin_idx_x#13 sin_idx_x zp ZP_BYTE:2 0.5555555555555556
(byte) sin_idx_x#13 sin_idx_x zp ZP_BYTE:2 0.5769230769230769
(byte) sin_idx_x#3 sin_idx_x zp ZP_BYTE:2 2.0
(byte) sin_idx_y
(byte) sin_idx_y#11 sin_idx_y zp ZP_BYTE:3 2.6
(byte) sin_idx_y#13 sin_idx_y zp ZP_BYTE:3 0.4838709677419355
(byte) sin_idx_y#13 sin_idx_y zp ZP_BYTE:3 0.49999999999999994
(byte) sin_idx_y#3 sin_idx_y zp ZP_BYTE:3 2.0
(byte) sinlen_x
(const byte) sinlen_x#0 sinlen_x = (byte/word/signed word) 221
@ -317,7 +316,7 @@ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 gen_sintab::min#2 gen_sinta
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 ]
zp ZP_BYTE:6 [ anim::j2#3 anim::j2#2 gen_chargen_sprite::c#3 ]
zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 gen_chargen_sprite::c#3 ]
reg byte y [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ]
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 ]
@ -332,11 +331,10 @@ reg byte x [ place_sprites::j2#3 place_sprites::j2#2 ]
reg byte a [ anim::$2 ]
reg byte alu [ anim::$3 ]
reg byte a [ anim::$5 ]
reg byte a [ anim::j2#1 ]
reg byte a [ gen_sintab::$24 ]
reg byte a [ prepareMEM::$0 ]
reg byte a [ prepareMEM::$1 ]
reg byte x [ gen_chargen_sprite::ch#0 ]
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

@ -27,15 +27,13 @@ signed_multiply_results_compare: {
lda #-$80
sta b
b2:
lda b
tax
ldx b
jsr slow_signed_multiply
lda slow_signed_multiply.return
sta ms
lda slow_signed_multiply.return+1
sta ms+1
lda a
tay
ldy a
jsr signed_multiply
lda ms
cmp ma
@ -46,8 +44,7 @@ signed_multiply_results_compare: {
!:
lda #2
sta BGCOL
lda a
tax
ldx a
lda b
sta signed_multiply_error.b
lda ms
@ -143,8 +140,7 @@ signed_multiply_error: {
lda #>str1
sta print_str.str+1
jsr print_str
lda b
tax
ldx b
jsr print_sbyte
lda #<str2
sta print_str.str
@ -247,8 +243,8 @@ signed_multiply: {
.label m = 6
.label return = 6
.label b = 3
sty $ff
ldx $ff
tya
tax
lda b
jsr multiply
cpy #0

View File

@ -268,7 +268,7 @@ multiply: scope:[multiply] from multiply_results_compare::@8 signed_multiply
[132] (byte) multiply::a#2 ← phi( multiply_results_compare::@8/(byte) multiply::a#1 signed_multiply/(byte) multiply::a#0 ) [ multiply::a#2 multiply::b#2 ] ( 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::a#2 multiply::b#2 ] 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::a#2 multiply::b#2 ] )
[133] *((const byte*) multiply::memA#0) ← (byte) multiply::a#2 [ multiply::b#2 ] ( 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::b#2 ] 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::b#2 ] )
[134] *((const byte*) multiply::memB#0) ← (byte) multiply::b#2 [ ] ( 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 ] 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 ] )
asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB }
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 }
[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 ] )
to:multiply::@return
multiply::@return: scope:[multiply] from multiply
@ -450,7 +450,7 @@ multiply_tables_compare::@10: scope:[multiply_tables_compare] from multiply_tab
[225] (byte*~) char_cursor#197 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#197 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#197 ] )
to:multiply_tables_compare::@return
init_multiply_asm: scope:[init_multiply_asm] from main::@2
asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- }
asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- }
[227] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] )
[228] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] )
[229] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] )

View File

@ -513,7 +513,7 @@ proc (word()) multiply((byte) multiply::a , (byte) multiply::b)
(byte*) multiply::memB ← (byte/word/signed word) 255
*((byte*) multiply::memA) ← (byte) multiply::a
*((byte*) multiply::memB) ← (byte) multiply::b
asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB }
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 }
(word) multiply::return ← { *((byte*) multiply::memB), *((byte*) multiply::memA) }
goto multiply::@return
multiply::@return:
@ -618,7 +618,7 @@ endproc // slow_signed_multiply()
(byte[512]) asm_mul_sqr2_lo ← { fill( 512, 0) }
(byte[512]) asm_mul_sqr2_hi ← { fill( 512, 0) }
proc (void()) init_multiply_asm()
asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- }
asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- }
(byte*) init_multiply_asm::mem ← (byte/word/signed word) 255
*((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr1_lo)
*((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr1_hi)
@ -1232,7 +1232,7 @@ multiply: scope:[multiply] from
(byte*) multiply::memB ← ((byte*)) (byte/word/signed word) 255
*((byte*) multiply::memA) ← (byte) multiply::a
*((byte*) multiply::memB) ← (byte) multiply::b
asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB }
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 }
(word) multiply::return ← { *((byte*) multiply::memB), *((byte*) multiply::memA) }
to:multiply::@return
multiply::@return: scope:[multiply] from multiply multiply::@1
@ -1384,7 +1384,7 @@ slow_signed_multiply::@11: scope:[slow_signed_multiply] from
(byte[512]) asm_mul_sqr2_hi ← { fill( 512, 0) }
to:@15
init_multiply_asm: scope:[init_multiply_asm] from
asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- }
asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- }
(byte*) init_multiply_asm::mem ← ((byte*)) (byte/word/signed word) 255
*((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr1_lo)
*((byte*) init_multiply_asm::mem) ← *((byte[512]) asm_mul_sqr1_hi)
@ -1985,7 +1985,7 @@ multiply: scope:[multiply] from multiply_results_compare::@8 signed_multiply
(byte*) multiply::memB#0 ← ((byte*)) (byte/word/signed word) 255
*((byte*) multiply::memA#0) ← (byte) multiply::a#2
*((byte*) multiply::memB#0) ← (byte) multiply::b#2
asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB }
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 }
(word) multiply::return#0 ← { *((byte*) multiply::memB#0), *((byte*) multiply::memA#0) }
to:multiply::@return
multiply::@return: scope:[multiply] from multiply
@ -2215,7 +2215,7 @@ slow_signed_multiply::@return: scope:[slow_signed_multiply] from slow_signed_mu
(byte[512]) asm_mul_sqr2_hi#0 ← { fill( 512, 0) }
to:@20
init_multiply_asm: scope:[init_multiply_asm] from main::@2
asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- }
asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- }
(byte*) init_multiply_asm::mem#0 ← ((byte*)) (byte/word/signed word) 255
*((byte*) init_multiply_asm::mem#0) ← *((byte[512]) asm_mul_sqr1_lo#0)
*((byte*) init_multiply_asm::mem#0) ← *((byte[512]) asm_mul_sqr1_hi#0)
@ -5401,7 +5401,7 @@ multiply: scope:[multiply] from multiply_results_compare::@8 signed_multiply
[132] (byte) multiply::a#2 ← phi( multiply_results_compare::@8/(byte) multiply::a#1 signed_multiply/(byte) multiply::a#0 ) [ multiply::a#2 multiply::b#2 ] ( 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::a#2 multiply::b#2 ] 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::a#2 multiply::b#2 ] )
[133] *((const byte*) multiply::memA#0) ← (byte) multiply::a#2 [ multiply::b#2 ] ( 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::b#2 ] 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::b#2 ] )
[134] *((const byte*) multiply::memB#0) ← (byte) multiply::b#2 [ ] ( 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 ] 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 ] )
asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB }
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 }
[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 ] )
to:multiply::@return
multiply::@return: scope:[multiply] from multiply
@ -5583,7 +5583,7 @@ multiply_tables_compare::@10: scope:[multiply_tables_compare] from multiply_tab
[225] (byte*~) char_cursor#197 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#197 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#197 ] )
to:multiply_tables_compare::@return
init_multiply_asm: scope:[init_multiply_asm] from main::@2
asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- }
asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- }
[227] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] )
[228] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] )
[229] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] )
@ -7080,7 +7080,7 @@ multiply: {
//SEG266 [134] *((const byte*) multiply::memB#0) ← (byte) multiply::b#2 [ ] ( 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 ] 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 ] ) -- _deref_pbuc1=vbuz1
lda b
sta memB
//SEG267 asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB }
//SEG267 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 }
lda memA
sta sm1+1
sta sm3+1
@ -7763,7 +7763,7 @@ multiply_tables_compare: {
//SEG489 init_multiply_asm
init_multiply_asm: {
.const mem = $ff
//SEG490 asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- }
//SEG490 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- }
ldx #0
txa
.byte $c9
@ -8132,7 +8132,7 @@ Statement [121] (byte/signed byte/word/signed word~) signed_multiply::$16 ← (b
Statement [125] (byte~) signed_multiply::$12 ← > (word) signed_multiply::m#5 [ signed_multiply::a#0 signed_multiply::m#5 signed_multiply::$12 ] ( 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::a#0 signed_multiply::m#5 signed_multiply::$12 ] ) always clobbers reg byte a
Statement [127] (byte/signed byte/word/signed word~) signed_multiply::$17 ← (byte~) signed_multiply::$12 - (byte~) signed_multiply::$13 [ signed_multiply::m#5 signed_multiply::$17 ] ( 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::m#5 signed_multiply::$17 ] ) always clobbers reg byte a
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 { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } always clobbers reg byte a reg byte x
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
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::b#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:56 [ signed_multiply::a#0 ]
@ -8168,7 +8168,7 @@ Statement [210] (word) print_word::w#1 ← ((word)) (byte*) multiply_tables_comp
Statement [214] (word) print_word::w#2 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#2 [ char_cursor#117 print_word::w#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#117 print_word::w#2 ] ) always clobbers reg byte a
Statement [220] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto multiply_tables_compare::@1 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) always clobbers reg byte a
Statement [225] (byte*~) char_cursor#197 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#197 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#197 ] ) always clobbers reg byte a
Statement asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } always clobbers reg byte a reg byte x reg byte y
Statement asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- } always clobbers reg byte a reg byte x reg byte y
Statement [227] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a
Statement [228] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a
Statement [229] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a
@ -8203,8 +8203,6 @@ Statement [28] (signed word) signed_multiply::return#2 ← (signed word) signed_
Statement [29] (signed word) signed_multiply_results_compare::ma#0 ← (signed word) signed_multiply::return#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] ) always clobbers reg byte a
Statement [30] if((signed word) signed_multiply_results_compare::ms#0==(signed word) signed_multiply_results_compare::ma#0) goto signed_multiply_results_compare::@3 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] ) always clobbers reg byte a
Statement [31] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word) 2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 line_cursor#1 ] ) always clobbers reg byte a
Statement [32] (signed byte) signed_multiply_error::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 line_cursor#1 ] ) always clobbers reg byte a
Statement [33] (signed byte) signed_multiply_error::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 signed_multiply_error::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 signed_multiply_error::b#0 line_cursor#1 ] ) always clobbers reg byte a
Statement [34] (signed word) signed_multiply_error::ms#0 ← (signed word) signed_multiply_results_compare::ms#0 [ signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 signed_multiply_error::b#0 signed_multiply_error::ms#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 signed_multiply_error::b#0 signed_multiply_error::ms#0 line_cursor#1 ] ) always clobbers reg byte a
Statement [35] (signed word) signed_multiply_error::ma#0 ← (signed word) signed_multiply_results_compare::ma#0 [ signed_multiply_error::a#0 signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_error::a#0 signed_multiply_error::b#0 signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 ] ) always clobbers reg byte a
Statement [42] (byte*~) char_cursor#176 ← (byte*) line_cursor#1 [ char_cursor#176 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ char_cursor#176 line_cursor#1 ] ) always clobbers reg byte a
@ -8230,7 +8228,7 @@ Statement [121] (byte/signed byte/word/signed word~) signed_multiply::$16 ← (b
Statement [125] (byte~) signed_multiply::$12 ← > (word) signed_multiply::m#5 [ signed_multiply::a#0 signed_multiply::m#5 signed_multiply::$12 ] ( 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::a#0 signed_multiply::m#5 signed_multiply::$12 ] ) always clobbers reg byte a
Statement [127] (byte/signed byte/word/signed word~) signed_multiply::$17 ← (byte~) signed_multiply::$12 - (byte~) signed_multiply::$13 [ signed_multiply::m#5 signed_multiply::$17 ] ( 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::m#5 signed_multiply::$17 ] ) always clobbers reg byte a
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 { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB } always clobbers reg byte a reg byte x
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
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
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
@ -8251,7 +8249,7 @@ Statement [210] (word) print_word::w#1 ← ((word)) (byte*) multiply_tables_comp
Statement [214] (word) print_word::w#2 ← ((word)) (byte*) multiply_tables_compare::kc_sqr#2 [ char_cursor#117 print_word::w#2 ] ( main:2::multiply_tables_compare:11 [ char_cursor#117 print_word::w#2 ] ) always clobbers reg byte a
Statement [220] if((byte*) multiply_tables_compare::kc_sqr#1<(const byte[512]) mul_sqr1_lo#0+(word/signed word) 512*(byte/signed byte/word/signed word) 4) goto multiply_tables_compare::@1 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ( main:2::multiply_tables_compare:11 [ multiply_tables_compare::kc_sqr#1 multiply_tables_compare::asm_sqr#1 ] ) always clobbers reg byte a
Statement [225] (byte*~) char_cursor#197 ← (byte*) line_cursor#1 [ line_cursor#1 char_cursor#197 ] ( main:2::multiply_tables_compare:11 [ line_cursor#1 char_cursor#197 ] ) always clobbers reg byte a
Statement asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- } always clobbers reg byte a reg byte x reg byte y
Statement asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- } always clobbers reg byte a reg byte x reg byte y
Statement [227] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a
Statement [228] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr1_hi#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a
Statement [229] *((const byte*) init_multiply_asm::mem#0) ← *((const byte[512]) asm_mul_sqr2_lo#0) [ ] ( main:2::init_multiply_asm:9 [ ] ) always clobbers reg byte a
@ -8363,53 +8361,53 @@ Uplift Scope [print_ln]
Uplift Scope [main]
Uplift Scope [init_multiply_asm]
Uplifting [slow_signed_multiply] best 214696 combination 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::i#2 slow_signed_multiply::i#1 ] reg byte y [ slow_signed_multiply::j#2 slow_signed_multiply::j#1 ] zp ZP_WORD:52 [ slow_signed_multiply::return#2 ] reg byte x [ slow_signed_multiply::b#0 ] zp ZP_BYTE:50 [ slow_signed_multiply::a#0 ]
Uplifting [slow_multiply] best 204396 combination zp ZP_WORD:28 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] reg byte y [ slow_multiply::i#2 slow_multiply::i#1 ] zp ZP_WORD:84 [ slow_multiply::return#2 ] reg byte x [ slow_multiply::b#0 ] zp ZP_BYTE:82 [ slow_multiply::a#0 ]
Uplifting [multiply] best 203786 combination reg byte a [ multiply::b#2 multiply::b#1 multiply::b#0 ] reg byte x [ multiply::a#2 multiply::a#1 multiply::a#0 ] zp ZP_WORD:88 [ multiply::return#3 ] zp ZP_WORD:80 [ multiply::return#0 ] zp ZP_WORD:70 [ multiply::return#2 ]
Uplifting [slow_signed_multiply] best 214496 combination 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::i#2 slow_signed_multiply::i#1 ] reg byte y [ slow_signed_multiply::j#2 slow_signed_multiply::j#1 ] zp ZP_WORD:52 [ slow_signed_multiply::return#2 ] reg byte x [ slow_signed_multiply::b#0 ] zp ZP_BYTE:50 [ slow_signed_multiply::a#0 ]
Uplifting [slow_multiply] best 204196 combination zp ZP_WORD:28 [ slow_multiply::return#0 slow_multiply::m#3 slow_multiply::m#1 ] reg byte y [ slow_multiply::i#2 slow_multiply::i#1 ] zp ZP_WORD:84 [ slow_multiply::return#2 ] reg byte x [ slow_multiply::b#0 ] zp ZP_BYTE:82 [ slow_multiply::a#0 ]
Uplifting [multiply] best 203586 combination reg byte a [ multiply::b#2 multiply::b#1 multiply::b#0 ] reg byte x [ multiply::a#2 multiply::a#1 multiply::a#0 ] zp ZP_WORD:88 [ multiply::return#3 ] zp ZP_WORD:80 [ multiply::return#0 ] zp ZP_WORD:70 [ multiply::return#2 ]
Uplift attempts [signed_multiply] 10000/16384 (limiting to 10000)
Uplifting [signed_multiply] best 203659 combination zp ZP_WORD:58 [ signed_multiply::return#2 ] zp ZP_WORD:78 [ signed_multiply::return#0 ] zp ZP_WORD:17 [ signed_multiply::m#4 signed_multiply::m#5 signed_multiply::m#1 signed_multiply::m#0 signed_multiply::m#2 ] zp ZP_BYTE:57 [ signed_multiply::b#0 ] reg byte y [ signed_multiply::a#0 ] reg byte a [ signed_multiply::$7 ] reg byte a [ signed_multiply::$16 ] reg byte y [ signed_multiply::$13 ] reg byte a [ signed_multiply::$17 ] zp ZP_BYTE:72 [ signed_multiply::$6 ] reg byte a [ signed_multiply::$12 ]
Uplifting [signed_multiply] best 203257 combination zp ZP_WORD:58 [ signed_multiply::return#2 ] zp ZP_WORD:78 [ signed_multiply::return#0 ] zp ZP_WORD:17 [ signed_multiply::m#4 signed_multiply::m#5 signed_multiply::m#1 signed_multiply::m#0 signed_multiply::m#2 ] zp ZP_BYTE:57 [ signed_multiply::b#0 ] reg byte y [ signed_multiply::a#0 ] reg byte a [ signed_multiply::$7 ] reg byte a [ signed_multiply::$16 ] reg byte y [ signed_multiply::$13 ] reg byte a [ signed_multiply::$17 ] zp ZP_BYTE:72 [ signed_multiply::$6 ] reg byte a [ signed_multiply::$12 ]
Limited combination testing to 10000 combinations of 16384 possible.
Uplifting [multiply_results_compare] best 203659 combination zp ZP_BYTE:26 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] zp ZP_WORD:90 [ multiply_results_compare::ma#0 ] zp ZP_BYTE:25 [ multiply_results_compare::a#6 multiply_results_compare::a#1 ] zp ZP_WORD:86 [ multiply_results_compare::ms#0 ]
Uplifting [signed_multiply_results_compare] best 203659 combination zp ZP_BYTE:3 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::b#1 ] zp ZP_WORD:60 [ signed_multiply_results_compare::ma#0 ] zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 ] zp ZP_WORD:54 [ signed_multiply_results_compare::ms#0 ]
Uplifting [init_multiply] best 203309 combination zp ZP_WORD:40 [ init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] reg byte x [ init_multiply::c#2 init_multiply::c#1 ] zp ZP_BYTE:39 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] reg byte a [ init_multiply::$2 ] reg byte a [ init_multiply::$5 ] reg byte a [ init_multiply::$6 ] zp ZP_WORD:43 [ init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] zp ZP_WORD:35 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] reg byte x [ init_multiply::x_255#2 init_multiply::x_255#1 ] zp ZP_WORD:45 [ init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] zp ZP_BYTE:47 [ init_multiply::dir#2 init_multiply::dir#3 ] zp ZP_WORD:37 [ init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ]
Uplifting [] best 203309 combination zp ZP_WORD:14 [ char_cursor#75 char_cursor#124 char_cursor#123 char_cursor#119 char_cursor#135 char_cursor#27 char_cursor#118 char_cursor#17 char_cursor#117 char_cursor#172 char_cursor#176 char_cursor#1 char_cursor#121 char_cursor#197 ] zp ZP_WORD:4 [ line_cursor#20 line_cursor#40 line_cursor#27 line_cursor#1 ]
Uplifting [multiply_tables_compare] best 203309 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 203309 combination zp ZP_WORD:6 [ print_str::str#14 print_str::str#16 print_str::str#0 ]
Uplifting [print_cls] best 203309 combination zp ZP_WORD:48 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 203290 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_word] best 203290 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 203290 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 203278 combination reg byte x [ print_sbyte::b#4 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 print_sbyte::b#0 ]
Uplifting [print_char] best 203263 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
Uplifting [multiply_error] best 203257 combination reg byte x [ multiply_error::a#0 ] zp ZP_BYTE:93 [ multiply_error::b#0 ] zp ZP_WORD:94 [ multiply_error::ms#0 ] zp ZP_WORD:96 [ multiply_error::ma#0 ]
Uplifting [signed_multiply_error] best 203251 combination reg byte x [ signed_multiply_error::a#0 ] zp ZP_BYTE:63 [ signed_multiply_error::b#0 ] zp ZP_WORD:64 [ signed_multiply_error::ms#0 ] zp ZP_WORD:66 [ signed_multiply_error::ma#0 ]
Uplifting [print_ln] best 203251 combination
Uplifting [main] best 203251 combination
Uplifting [init_multiply_asm] best 203251 combination
Uplifting [multiply_results_compare] best 203257 combination zp ZP_BYTE:26 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ] zp ZP_WORD:90 [ multiply_results_compare::ma#0 ] zp ZP_BYTE:25 [ multiply_results_compare::a#6 multiply_results_compare::a#1 ] zp ZP_WORD:86 [ multiply_results_compare::ms#0 ]
Uplifting [signed_multiply_results_compare] best 203257 combination zp ZP_BYTE:3 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::b#1 ] zp ZP_WORD:60 [ signed_multiply_results_compare::ma#0 ] zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 ] zp ZP_WORD:54 [ signed_multiply_results_compare::ms#0 ]
Uplifting [init_multiply] best 202907 combination zp ZP_WORD:40 [ init_multiply::sqr#3 init_multiply::sqr#4 init_multiply::sqr#1 init_multiply::sqr#2 ] reg byte x [ init_multiply::c#2 init_multiply::c#1 ] zp ZP_BYTE:39 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] reg byte a [ init_multiply::$2 ] reg byte a [ init_multiply::$5 ] reg byte a [ init_multiply::$6 ] zp ZP_WORD:43 [ init_multiply::sqr2_lo#2 init_multiply::sqr2_lo#1 ] zp ZP_WORD:35 [ init_multiply::sqr1_lo#2 init_multiply::sqr1_lo#1 ] reg byte x [ init_multiply::x_255#2 init_multiply::x_255#1 ] zp ZP_WORD:45 [ init_multiply::sqr2_hi#2 init_multiply::sqr2_hi#1 ] zp ZP_BYTE:47 [ init_multiply::dir#2 init_multiply::dir#3 ] zp ZP_WORD:37 [ init_multiply::sqr1_hi#2 init_multiply::sqr1_hi#1 ]
Uplifting [] best 202907 combination zp ZP_WORD:14 [ char_cursor#75 char_cursor#124 char_cursor#123 char_cursor#119 char_cursor#135 char_cursor#27 char_cursor#118 char_cursor#17 char_cursor#117 char_cursor#172 char_cursor#176 char_cursor#1 char_cursor#121 char_cursor#197 ] zp ZP_WORD:4 [ line_cursor#20 line_cursor#40 line_cursor#27 line_cursor#1 ]
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_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 ]
Uplifting [print_char] best 202857 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
Uplifting [multiply_error] best 202851 combination reg byte x [ multiply_error::a#0 ] zp ZP_BYTE:93 [ multiply_error::b#0 ] zp ZP_WORD:94 [ multiply_error::ms#0 ] zp ZP_WORD:96 [ multiply_error::ma#0 ]
Uplifting [signed_multiply_error] best 202845 combination reg byte x [ signed_multiply_error::a#0 ] zp ZP_BYTE:63 [ signed_multiply_error::b#0 ] zp ZP_WORD:64 [ signed_multiply_error::ms#0 ] zp ZP_WORD:66 [ signed_multiply_error::ma#0 ]
Uplifting [print_ln] best 202845 combination
Uplifting [main] best 202845 combination
Uplifting [init_multiply_asm] best 202845 combination
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 203251 combination zp 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 ]
Uplifting [multiply_results_compare] best 203251 combination zp ZP_BYTE:26 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ]
Uplifting [multiply_results_compare] best 202845 combination zp ZP_BYTE:26 [ multiply_results_compare::b#2 multiply_results_compare::b#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:50 [ slow_signed_multiply::a#0 ]
Uplifting [slow_signed_multiply] best 203251 combination zp ZP_BYTE:50 [ slow_signed_multiply::a#0 ]
Uplifting [slow_signed_multiply] best 202845 combination zp ZP_BYTE:50 [ slow_signed_multiply::a#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:82 [ slow_multiply::a#0 ]
Uplifting [slow_multiply] best 203251 combination zp ZP_BYTE:82 [ slow_multiply::a#0 ]
Uplifting [slow_multiply] best 202845 combination zp ZP_BYTE:82 [ slow_multiply::a#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 ]
Uplifting [signed_multiply_results_compare] best 203251 combination zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 ]
Uplifting [signed_multiply_results_compare] best 202845 combination zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ multiply_results_compare::a#6 multiply_results_compare::a#1 ]
Uplifting [multiply_results_compare] best 203251 combination zp ZP_BYTE:25 [ multiply_results_compare::a#6 multiply_results_compare::a#1 ]
Uplifting [multiply_results_compare] best 202845 combination zp ZP_BYTE:25 [ multiply_results_compare::a#6 multiply_results_compare::a#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:39 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ]
Uplifting [init_multiply] best 203251 combination zp ZP_BYTE:39 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ]
Uplifting [init_multiply] best 202845 combination zp ZP_BYTE:39 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:47 [ init_multiply::dir#2 init_multiply::dir#3 ]
Uplifting [init_multiply] best 203251 combination zp ZP_BYTE:47 [ init_multiply::dir#2 init_multiply::dir#3 ]
Uplifting [init_multiply] best 202845 combination zp ZP_BYTE:47 [ init_multiply::dir#2 init_multiply::dir#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:57 [ signed_multiply::b#0 ]
Uplifting [signed_multiply] best 203251 combination zp ZP_BYTE:57 [ signed_multiply::b#0 ]
Uplifting [signed_multiply] best 202845 combination zp ZP_BYTE:57 [ signed_multiply::b#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:72 [ signed_multiply::$6 ]
Uplifting [signed_multiply] best 203251 combination zp ZP_BYTE:72 [ signed_multiply::$6 ]
Uplifting [signed_multiply] best 202845 combination zp ZP_BYTE:72 [ signed_multiply::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:63 [ signed_multiply_error::b#0 ]
Uplifting [signed_multiply_error] best 203251 combination zp ZP_BYTE:63 [ signed_multiply_error::b#0 ]
Uplifting [signed_multiply_error] best 202845 combination zp ZP_BYTE:63 [ signed_multiply_error::b#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:93 [ multiply_error::b#0 ]
Uplifting [multiply_error] best 203251 combination zp ZP_BYTE:93 [ multiply_error::b#0 ]
Uplifting [multiply_error] best 202845 combination zp ZP_BYTE:93 [ multiply_error::b#0 ]
Coalescing zero page register [ zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 ] ] with [ zp ZP_BYTE:25 [ multiply_results_compare::a#6 multiply_results_compare::a#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 multiply_results_compare::a#6 multiply_results_compare::a#1 ] ] with [ zp ZP_BYTE:39 [ init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::a#1 multiply_results_compare::a#6 multiply_results_compare::a#1 init_multiply::x_2#3 init_multiply::x_2#2 init_multiply::x_2#1 ] ] with [ zp ZP_BYTE:47 [ init_multiply::dir#2 init_multiply::dir#3 ] ]
@ -8564,8 +8562,7 @@ signed_multiply_results_compare: {
//SEG44 [20] (signed byte) slow_signed_multiply::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 line_cursor#1 ] )
// (signed byte) slow_signed_multiply::a#0 = (signed byte) signed_multiply_results_compare::a#6 // register copy zp ZP_BYTE:2
//SEG45 [21] (signed byte) slow_signed_multiply::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 slow_signed_multiply::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 slow_signed_multiply::b#0 line_cursor#1 ] ) -- vbsxx=vbsz1
lda b
tax
ldx b
//SEG46 [22] call slow_signed_multiply param-assignment [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#0 line_cursor#1 ] )
jsr slow_signed_multiply
//SEG47 [23] (signed word) slow_signed_multiply::return#2 ← (signed word) slow_signed_multiply::return#0 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#2 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#2 line_cursor#1 ] )
@ -8579,8 +8576,7 @@ signed_multiply_results_compare: {
lda slow_signed_multiply.return+1
sta ms+1
//SEG50 [25] (signed byte) signed_multiply::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 line_cursor#1 ] ) -- vbsyy=vbsz1
lda a
tay
ldy a
//SEG51 [26] (signed byte) signed_multiply::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 signed_multiply::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 signed_multiply::b#0 line_cursor#1 ] )
// (signed byte) signed_multiply::b#0 = (signed byte) signed_multiply_results_compare::b#2 // register copy zp ZP_BYTE:3
//SEG52 [27] call signed_multiply param-assignment [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::return#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::return#0 line_cursor#1 ] )
@ -8607,8 +8603,7 @@ signed_multiply_results_compare: {
lda #2
sta BGCOL
//SEG59 [32] (signed byte) signed_multiply_error::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 line_cursor#1 ] ) -- vbsxx=vbsz1
lda a
tax
ldx a
//SEG60 [33] (signed byte) signed_multiply_error::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 signed_multiply_error::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 signed_multiply_error::b#0 line_cursor#1 ] ) -- vbsz1=vbsz2
lda b
sta signed_multiply_error.b
@ -8799,8 +8794,7 @@ signed_multiply_error: {
//SEG121 signed_multiply_error::@3
b3:
//SEG122 [64] (signed byte) print_sbyte::b#2 ← (signed byte) signed_multiply_error::b#0 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#117 print_sbyte::b#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#117 print_sbyte::b#2 ] ) -- vbsxx=vbsz1
lda b
tax
ldx b
//SEG123 [65] call print_sbyte param-assignment [ 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 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] )
//SEG124 [104] phi from signed_multiply_error::@3 to print_sbyte [phi:signed_multiply_error::@3->print_sbyte]
print_sbyte_from_b3:
@ -9074,8 +9068,8 @@ signed_multiply: {
.label return = 6
.label b = 3
//SEG234 [113] (byte) multiply::a#0 ← ((byte)) (signed byte) signed_multiply::a#0 [ signed_multiply::a#0 signed_multiply::b#0 multiply::a#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::a#0 signed_multiply::b#0 multiply::a#0 ] ) -- vbuxx=_byte_vbsyy
sty $ff
ldx $ff
tya
tax
//SEG235 [114] (byte) multiply::b#0 ← ((byte)) (signed byte) signed_multiply::b#0 [ signed_multiply::a#0 signed_multiply::b#0 multiply::a#0 multiply::b#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::a#0 signed_multiply::b#0 multiply::a#0 multiply::b#0 ] ) -- vbuaa=_byte_vbsz1
lda b
//SEG236 [115] call multiply param-assignment [ signed_multiply::a#0 signed_multiply::b#0 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::a#0 signed_multiply::b#0 multiply::return#0 ] )
@ -9154,7 +9148,7 @@ multiply: {
stx memA
//SEG266 [134] *((const byte*) multiply::memB#0) ← (byte) multiply::b#2 [ ] ( 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 ] 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 ] ) -- _deref_pbuc1=vbuaa
sta memB
//SEG267 asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB }
//SEG267 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 }
lda memA
sta sm1+1
sta sm3+1
@ -9806,7 +9800,7 @@ multiply_tables_compare: {
//SEG489 init_multiply_asm
init_multiply_asm: {
.const mem = $ff
//SEG490 asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- }
//SEG490 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- }
ldx #0
txa
.byte $c9
@ -10850,7 +10844,7 @@ reg byte a [ init_multiply::$6 ]
FINAL ASSEMBLER
Score: 161492
Score: 161086
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -10928,8 +10922,7 @@ signed_multiply_results_compare: {
//SEG44 [20] (signed byte) slow_signed_multiply::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 line_cursor#1 ] )
// (signed byte) slow_signed_multiply::a#0 = (signed byte) signed_multiply_results_compare::a#6 // register copy zp ZP_BYTE:2
//SEG45 [21] (signed byte) slow_signed_multiply::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 slow_signed_multiply::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::a#0 slow_signed_multiply::b#0 line_cursor#1 ] ) -- vbsxx=vbsz1
lda b
tax
ldx b
//SEG46 [22] call slow_signed_multiply param-assignment [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#0 line_cursor#1 ] )
jsr slow_signed_multiply
//SEG47 [23] (signed word) slow_signed_multiply::return#2 ← (signed word) slow_signed_multiply::return#0 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#2 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 slow_signed_multiply::return#2 line_cursor#1 ] )
@ -10941,8 +10934,7 @@ signed_multiply_results_compare: {
lda slow_signed_multiply.return+1
sta ms+1
//SEG50 [25] (signed byte) signed_multiply::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 line_cursor#1 ] ) -- vbsyy=vbsz1
lda a
tay
ldy a
//SEG51 [26] (signed byte) signed_multiply::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 signed_multiply::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::a#0 signed_multiply::b#0 line_cursor#1 ] )
// (signed byte) signed_multiply::b#0 = (signed byte) signed_multiply_results_compare::b#2 // register copy zp ZP_BYTE:3
//SEG52 [27] call signed_multiply param-assignment [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::return#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::a#6 signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply::return#0 line_cursor#1 ] )
@ -10965,8 +10957,7 @@ signed_multiply_results_compare: {
lda #2
sta BGCOL
//SEG59 [32] (signed byte) signed_multiply_error::a#0 ← (signed byte) signed_multiply_results_compare::a#6 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::b#2 signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 line_cursor#1 ] ) -- vbsxx=vbsz1
lda a
tax
ldx a
//SEG60 [33] (signed byte) signed_multiply_error::b#0 ← (signed byte) signed_multiply_results_compare::b#2 [ signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 signed_multiply_error::b#0 line_cursor#1 ] ( main:2::signed_multiply_results_compare:15 [ signed_multiply_results_compare::ms#0 signed_multiply_results_compare::ma#0 signed_multiply_error::a#0 signed_multiply_error::b#0 line_cursor#1 ] ) -- vbsz1=vbsz2
lda b
sta signed_multiply_error.b
@ -11126,8 +11117,7 @@ signed_multiply_error: {
jsr print_str
//SEG121 signed_multiply_error::@3
//SEG122 [64] (signed byte) print_sbyte::b#2 ← (signed byte) signed_multiply_error::b#0 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#117 print_sbyte::b#2 ] ( main:2::signed_multiply_results_compare:15::signed_multiply_error:36 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#117 print_sbyte::b#2 ] ) -- vbsxx=vbsz1
lda b
tax
ldx b
//SEG123 [65] call print_sbyte param-assignment [ 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 [ signed_multiply_error::ms#0 signed_multiply_error::ma#0 line_cursor#1 char_cursor#17 ] )
//SEG124 [104] phi from signed_multiply_error::@3 to print_sbyte [phi:signed_multiply_error::@3->print_sbyte]
//SEG125 [104] phi (signed byte) print_sbyte::b#3 = (signed byte) print_sbyte::b#2 [phi:signed_multiply_error::@3->print_sbyte#0] -- register_copy
@ -11342,8 +11332,8 @@ signed_multiply: {
.label return = 6
.label b = 3
//SEG234 [113] (byte) multiply::a#0 ← ((byte)) (signed byte) signed_multiply::a#0 [ signed_multiply::a#0 signed_multiply::b#0 multiply::a#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::a#0 signed_multiply::b#0 multiply::a#0 ] ) -- vbuxx=_byte_vbsyy
sty $ff
ldx $ff
tya
tax
//SEG235 [114] (byte) multiply::b#0 ← ((byte)) (signed byte) signed_multiply::b#0 [ signed_multiply::a#0 signed_multiply::b#0 multiply::a#0 multiply::b#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::a#0 signed_multiply::b#0 multiply::a#0 multiply::b#0 ] ) -- vbuaa=_byte_vbsz1
lda b
//SEG236 [115] call multiply param-assignment [ signed_multiply::a#0 signed_multiply::b#0 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::a#0 signed_multiply::b#0 multiply::return#0 ] )
@ -11407,7 +11397,7 @@ multiply: {
stx memA
//SEG266 [134] *((const byte*) multiply::memB#0) ← (byte) multiply::b#2 [ ] ( 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 ] 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 ] ) -- _deref_pbuc1=vbuaa
sta memB
//SEG267 asm { ldamemAstasm1+1stasm3+1eor#$ffstasm2+1stasm4+1ldxmemBsecsm1:ldamul_sqr1_lo,xsm2:sbcmul_sqr2_lo,xstamemAsm3:ldamul_sqr1_hi,xsm4:sbcmul_sqr2_hi,xstamemB }
//SEG267 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 }
txa
sta sm1+1
sta sm3+1
@ -11942,7 +11932,7 @@ multiply_tables_compare: {
//SEG489 init_multiply_asm
init_multiply_asm: {
.const mem = $ff
//SEG490 asm { ldx#$00txa.byte$c9lb1:tyaadc#$00ml1:staasm_mul_sqr1_hi,xtaycmp#$40txarorml9:adc#$00staml9+1inxml0:staasm_mul_sqr1_lo,xbnelb1incml0+2incml1+2clcinybnelb1ldx#$00ldy#$ff!:ldaasm_mul_sqr1_hi+1,xstaasm_mul_sqr2_hi+$100,xldaasm_mul_sqr1_hi,xstaasm_mul_sqr2_hi,yldaasm_mul_sqr1_lo+1,xstaasm_mul_sqr2_lo+$100,xldaasm_mul_sqr1_lo,xstaasm_mul_sqr2_lo,ydeyinxbne!- }
//SEG490 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: staasm_mul_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: staasm_mul_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldaasm_mul_sqr1_hi+1,x staasm_mul_sqr2_hi+$100,x ldaasm_mul_sqr1_hi,x staasm_mul_sqr2_hi,y ldaasm_mul_sqr1_lo+1,x staasm_mul_sqr2_lo+$100,x ldaasm_mul_sqr1_lo,x staasm_mul_sqr2_lo,y dey inx bne!- }
ldx #0
txa
.byte $c9

View File

@ -86,8 +86,7 @@ void anim() {
if(yidx>=sinlen_y) {
yidx = yidx-sinlen_y;
}
j2--;
j2--;
j2 = j2-2;
}
*SPRITES_XMSB = x_msb;