diff --git a/src/main/fragment/pwuc1_derefidx_vbuaa=_word_vbuxx.asm b/src/main/fragment/pwuc1_derefidx_vbuaa=vbuxx.asm
similarity index 100%
rename from src/main/fragment/pwuc1_derefidx_vbuaa=_word_vbuxx.asm
rename to src/main/fragment/pwuc1_derefidx_vbuaa=vbuxx.asm
diff --git a/src/main/fragment/pwuc1_derefidx_vbuxx=_word_vbuaa.asm b/src/main/fragment/pwuc1_derefidx_vbuxx=vbuaa.asm
similarity index 100%
rename from src/main/fragment/pwuc1_derefidx_vbuxx=_word_vbuaa.asm
rename to src/main/fragment/pwuc1_derefidx_vbuxx=vbuaa.asm
diff --git a/src/main/fragment/pwuc1_derefidx_vbuyy=vbuaa.asm b/src/main/fragment/pwuc1_derefidx_vbuyy=vbuaa.asm
new file mode 100644
index 000000000..355a5914f
--- /dev/null
+++ b/src/main/fragment/pwuc1_derefidx_vbuyy=vbuaa.asm
@@ -0,0 +1,3 @@
+sta {c1},y
+lda #0
+sta {c1}+1,y
diff --git a/src/main/fragment/vduz1=vwuz2.asm b/src/main/fragment/vduz1=vwuz2.asm
new file mode 100644
index 000000000..7d25095ee
--- /dev/null
+++ b/src/main/fragment/vduz1=vwuz2.asm
@@ -0,0 +1,7 @@
+lda {z2}
+sta {z1}
+lda {z2}+1
+sta {z1}+1
+lda #0
+sta {z1}+2
+sta {z1}+3
\ No newline at end of file
diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java
index b5dd695b3..4dc3c79f5 100644
--- a/src/main/java/dk/camelot64/kickc/Compiler.java
+++ b/src/main/java/dk/camelot64/kickc/Compiler.java
@@ -252,16 +252,13 @@ public class Compiler {
optimizations.add(new Pass2ConstantValues(program));
optimizations.add(new PassNStatementIndices(program));
optimizations.add(new PassNVariableReferenceInfos(program));
- //optimizations.add(new Pass2ConstantAdditionElimination(program));
optimizations.add(new Pass2ConstantIfs(program));
optimizations.add(new Pass2ConstantStringConsolidation(program));
- //optimizations.add(new Pass2FixInlineConstructors(program));
optimizations.add(new Pass2FixInlineConstructorsNew(program));
optimizations.add(new PassNAddTypeConversionAssignment(program));
optimizations.add(new Pass2TypeInference(program));
optimizations.add(new PassNEliminateUnusedVars(program, true));
optimizations.add(new Pass2EliminateRedundantCasts(program));
- //optimizations.add(new Pass2NopCastElimination(program));
optimizations.add(new Pass2EliminateUnusedBlocks(program));
optimizations.add(new Pass2RangeResolving(program));
optimizations.add(new Pass2ComparisonOptimization(program));
@@ -386,7 +383,6 @@ public class Compiler {
new Pass3AssertConstants(program).check();
new Pass3AssertArrayLengths(program).check();
new Pass3AssertNoMulDivMod(program).check();
- new Pass3AddAssignmentCasts(program).execute();
new PassNCastSimplification(program).execute();
new PassNBlockSequencePlanner(program).step();
// Phi lifting ensures that all variables in phi-blocks are in different live range equivalence classes
diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeConversion.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeConversion.java
index df8ec8b90..02b96b28c 100644
--- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeConversion.java
+++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeConversion.java
@@ -202,7 +202,8 @@ public class SymbolTypeConversion {
return false;
else
return true;
-
}
+
+
}
diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2FixInlineConstructors.java b/src/main/java/dk/camelot64/kickc/passes/Pass2FixInlineConstructors.java
deleted file mode 100644
index e13b30941..000000000
--- a/src/main/java/dk/camelot64/kickc/passes/Pass2FixInlineConstructors.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package dk.camelot64.kickc.passes;
-
-import dk.camelot64.kickc.model.Comment;
-import dk.camelot64.kickc.model.ControlFlowBlock;
-import dk.camelot64.kickc.model.Program;
-import dk.camelot64.kickc.model.iterator.ProgramValue;
-import dk.camelot64.kickc.model.iterator.ProgramValueHandler;
-import dk.camelot64.kickc.model.iterator.ProgramValueIterator;
-import dk.camelot64.kickc.model.operators.Operator;
-import dk.camelot64.kickc.model.operators.Operators;
-import dk.camelot64.kickc.model.statements.Statement;
-import dk.camelot64.kickc.model.statements.StatementAssignment;
-import dk.camelot64.kickc.model.symbols.Scope;
-import dk.camelot64.kickc.model.symbols.VariableIntermediate;
-import dk.camelot64.kickc.model.types.SymbolType;
-import dk.camelot64.kickc.model.types.SymbolTypeArray;
-import dk.camelot64.kickc.model.types.SymbolTypeInference;
-import dk.camelot64.kickc.model.types.SymbolTypeIntegerFixed;
-import dk.camelot64.kickc.model.values.Value;
-import dk.camelot64.kickc.model.values.ValueList;
-
-import java.util.ListIterator;
-
-/**
- * Identifies word constructors { b1, b2 }
and replaces
- * them with a binary operator word w = b1 w= b2 ;
- */
-public class Pass2FixInlineConstructors extends Pass2SsaOptimization {
-
- public Pass2FixInlineConstructors(Program program) {
- super(program);
- }
-
- @Override
- public boolean step() {
- WordConstructor wordConstructor = new WordConstructor();
- ProgramValueIterator.execute(getGraph(), wordConstructor);
- DWordConstructor dwordConstructor = new DWordConstructor();
- ProgramValueIterator.execute(getGraph(), dwordConstructor);
- return wordConstructor.isOptimized() || dwordConstructor.isOptimized();
- }
-
- /** Replaces { b1, b2 } with a w= operator */
- private class WordConstructor extends InlineConstructor {
-
- public WordConstructor() {
- super(SymbolType.WORD, Operators.WORD);
- }
-
- @Override
- protected boolean isSubType(SymbolType elmType) {
- return SymbolType.BYTE.equals(elmType);
- }
- }
-
- /** Replaces { w1, w2 } with a dw= operator */
- private class DWordConstructor extends InlineConstructor {
-
- public DWordConstructor() {
- super(SymbolType.DWORD, Operators.DWORD);
- }
-
- @Override
- protected boolean isSubType(SymbolType elmType) {
- return SymbolType.WORD.equals(elmType);
- }
- }
-
-
- private abstract class InlineConstructor implements ProgramValueHandler {
- private SymbolTypeIntegerFixed constructType;
- private Operator constructOperator;
- private boolean optimized;
-
- public InlineConstructor(SymbolTypeIntegerFixed constructType, Operator constructOperator) {
- this.constructType = constructType;
- this.constructOperator = constructOperator;
- }
-
- protected abstract boolean isSubType(SymbolType elmType);
-
- public boolean isOptimized() {
- return optimized;
- }
-
- @Override
- public void execute(ProgramValue programValue, Statement currentStmt, ListIterator stmtIt, ControlFlowBlock currentBlock) {
- Value rValue = programValue.get();
- if(rValue instanceof ValueList) {
- ValueList list = (ValueList) rValue;
- if(list.getList().size() == 2) {
- // We have a simple assignment of a length 2 value list to a variable
- SymbolType elmType1 = SymbolTypeInference.inferType(Pass2FixInlineConstructors.this.getScope(), list.getList().get(0));
- SymbolType elmType2 = SymbolTypeInference.inferType(Pass2FixInlineConstructors.this.getScope(), list.getList().get(1));
- if(isSubType(elmType1) && isSubType(elmType2)) {
- // We have a 2-element list { byte, byte }
-
- // Check if we are assigning into a declared byte array
- if(currentStmt instanceof StatementAssignment) {
- StatementAssignment assignment = (StatementAssignment) currentStmt;
- if(assignment.getrValue1() == null && assignment.getOperator() == null && assignment.getrValue2().equals(rValue)) {
- SymbolType lType = SymbolTypeInference.inferType(Pass2FixInlineConstructors.this.getScope(), assignment.getlValue());
- if(lType instanceof SymbolTypeArray && isSubType(((SymbolTypeArray) lType).getElementType())) {
- // We are assigning into a declared byte array - do not convert!
- return;
- }
- }
- }
-
- // Convert list to a word constructor in a new tmp variable
- Scope currentScope = Pass2FixInlineConstructors.this.getScope().getScope(currentBlock.getScope());
- VariableIntermediate tmpVar = currentScope.addVariableIntermediate();
- tmpVar.setTypeInferred(constructType);
- // Move backward - to insert before the current statement
- stmtIt.previous();
- // Add assignment of the new tmpVar
- StatementAssignment assignment = new StatementAssignment(tmpVar.getRef(), list.getList().get(0), constructOperator, list.getList().get(1), currentStmt.getSource(), Comment.NO_COMMENTS);
- stmtIt.add(assignment);
- // Move back before the current statement
- stmtIt.next();
- // Replace current value with the reference
- programValue.set(tmpVar.getRef());
- Pass2FixInlineConstructors.this.getLog().append("Fixing inline constructor with " + assignment.toString());
- optimized = true;
- }
- }
- }
- }
- }
-
-
-}
diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java b/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java
deleted file mode 100644
index b66de4df4..000000000
--- a/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package dk.camelot64.kickc.passes;
-
-import dk.camelot64.kickc.model.*;
-import dk.camelot64.kickc.model.operators.OperatorCastPtr;
-import dk.camelot64.kickc.model.operators.Operators;
-import dk.camelot64.kickc.model.values.*;
-import dk.camelot64.kickc.model.statements.Statement;
-import dk.camelot64.kickc.model.statements.StatementAssignment;
-import dk.camelot64.kickc.model.types.SymbolType;
-import dk.camelot64.kickc.model.types.SymbolTypeInference;
-import dk.camelot64.kickc.model.types.SymbolTypePointer;
-
-import java.util.LinkedHashMap;
-import java.util.ListIterator;
-
-/**
- * Compiler Pass eliminating cast assignments that has no effect (byte to/from signed byte, word to/from signed word)
- */
-public class Pass2NopCastElimination extends Pass2SsaOptimization {
-
- public Pass2NopCastElimination(Program program) {
- super(program);
- }
-
- /**
- * Eliminate cast assignments that has no effect (byte to/from signed byte, word to/from signed word)
- */
- @Override
- public boolean step() {
- LinkedHashMap castAliasses = new LinkedHashMap<>();
-
- for(ControlFlowBlock block : getGraph().getAllBlocks()) {
- ListIterator stmtIt = block.getStatements().listIterator();
- while(stmtIt.hasNext()) {
- Statement stmt = stmtIt.next();
- if(stmt instanceof StatementAssignment) {
- StatementAssignment assignment = (StatementAssignment) stmt;
- if(assignment.getlValue() instanceof VariableRef && assignment.getrValue1()==null && assignment.getOperator()!=null ) {
- // It is a simple cast assignment - check if it is no-op
- SymbolType rValType = SymbolTypeInference.inferType(getScope(), assignment.getrValue2());
- boolean isNopCast = false;
- SymbolType toType = null;
- if(SymbolType.BYTE.equals(rValType) && Operators.CAST_SBYTE.equals(assignment.getOperator())) {
- isNopCast = true;
- toType = SymbolType.SBYTE;
- } else if(SymbolType.SBYTE.equals(rValType) && Operators.CAST_BYTE.equals(assignment.getOperator())) {
- isNopCast = true;
- toType = SymbolType.BYTE;
- } else if(SymbolType.WORD.equals(rValType) && Operators.CAST_SWORD.equals(assignment.getOperator())) {
- isNopCast = true;
- toType = SymbolType.SWORD;
- } else if(SymbolType.SWORD.equals(rValType) && Operators.CAST_WORD.equals(assignment.getOperator())) {
- isNopCast = true;
- toType = SymbolType.WORD;
- } else if(SymbolType.WORD.equals(rValType) && assignment.getOperator() instanceof OperatorCastPtr) {
- isNopCast = true;
- OperatorCastPtr castOperator = (OperatorCastPtr) (assignment.getOperator());
- toType = new SymbolTypePointer(castOperator.getElementType());
- } else if(rValType instanceof SymbolTypePointer && Operators.CAST_WORD.equals(assignment.getOperator())) {
- isNopCast = true;
- toType = SymbolType.WORD;
- } else if(rValType instanceof SymbolTypePointer && assignment.getOperator() instanceof OperatorCastPtr) {
- isNopCast = true;
- toType = new SymbolTypePointer(((OperatorCastPtr) assignment.getOperator()).getElementType());
- }
- if(isNopCast) {
- getLog().append("Eliminating Noop Cast "+assignment.toString(getProgram(), false));
- // Add the alias for replacement
- if(assignment.getrValue2() instanceof ConstantValue) {
- castAliasses.put((VariableRef) assignment.getlValue(), new ConstantCastValue(toType, (ConstantValue) assignment.getrValue2()));
- } else {
- castAliasses.put((VariableRef) assignment.getlValue(), new CastValue(toType, assignment.getrValue2()));
- }
- // Remove the assignment
- stmtIt.remove();
- }
- }
- }
- }
- }
- replaceVariables(castAliasses);
- deleteSymbols(getScope(), castAliasses.keySet());
- return (castAliasses.size() > 0);
- }
-
-
-}
diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass3AddAssignmentCasts.java b/src/main/java/dk/camelot64/kickc/passes/Pass3AddAssignmentCasts.java
deleted file mode 100644
index aee315662..000000000
--- a/src/main/java/dk/camelot64/kickc/passes/Pass3AddAssignmentCasts.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package dk.camelot64.kickc.passes;
-
-import dk.camelot64.kickc.model.Program;
-import dk.camelot64.kickc.model.iterator.ProgramExpressionBinary;
-import dk.camelot64.kickc.model.iterator.ProgramExpressionIterator;
-import dk.camelot64.kickc.model.operators.Operators;
-import dk.camelot64.kickc.model.types.SymbolType;
-import dk.camelot64.kickc.model.types.SymbolTypeConversion;
-import dk.camelot64.kickc.model.types.SymbolTypeInference;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
-/**
- * Add casts to assignments where the lvalue and rvalue have different matching types.
- */
-public class Pass3AddAssignmentCasts extends Pass2SsaOptimization {
-
- public Pass3AddAssignmentCasts(Program program) {
- super(program);
- }
-
- @Override
- public boolean step() {
- AtomicBoolean modified = new AtomicBoolean(false);
- ProgramExpressionIterator.execute(getProgram(), (programExpression, currentStmt, stmtIt, currentBlock) -> {
- if(programExpression instanceof ProgramExpressionBinary) {
- if(Operators.ASSIGNMENT.equals(programExpression.getOperator())) {
- ProgramExpressionBinary binary = (ProgramExpressionBinary) programExpression;
- SymbolType leftType = SymbolTypeInference.inferType(getScope(), binary.getLeft());
- SymbolType rightType = SymbolTypeInference.inferType(getScope(), binary.getRight());
- if(SymbolTypeConversion.assignmentTypeMatch(leftType, rightType) && SymbolTypeConversion.assignmentCastNeeded(leftType, rightType)) {
- binary.addRightCast(leftType, stmtIt, currentBlock.getScope(), getScope());
- getLog().append("Adding assignment cast to " + currentStmt.toString(getProgram(), false));
- modified.set(true);
- }
- }
- }
- });
- return modified.get();
- }
-}
diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass3PhiMemCoalesce.java b/src/main/java/dk/camelot64/kickc/passes/Pass3PhiMemCoalesce.java
index 65b5fae89..7a4876a5e 100644
--- a/src/main/java/dk/camelot64/kickc/passes/Pass3PhiMemCoalesce.java
+++ b/src/main/java/dk/camelot64/kickc/passes/Pass3PhiMemCoalesce.java
@@ -1,6 +1,8 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.*;
+import dk.camelot64.kickc.model.types.SymbolType;
+import dk.camelot64.kickc.model.types.SymbolTypeConversion;
import dk.camelot64.kickc.model.values.ConstantValue;
import dk.camelot64.kickc.model.values.VariableRef;
import dk.camelot64.kickc.model.statements.StatementAssignment;
@@ -49,9 +51,12 @@ public class Pass3PhiMemCoalesce extends Pass2SsaOptimization {
*/
public static class EquivalenceClassPhiInitializer extends ControlFlowGraphBaseVisitor {
+ private Program program;
+
private LiveRangeEquivalenceClassSet phiEquivalenceClasses;
public EquivalenceClassPhiInitializer(Program program) {
+ this.program = program;
this.phiEquivalenceClasses = new LiveRangeEquivalenceClassSet(program);
}
@@ -65,7 +70,13 @@ public class Pass3PhiMemCoalesce extends Pass2SsaOptimization {
VariableRef phiRVar = (VariableRef) phiRValue.getrValue();
LiveRangeEquivalenceClass rValEquivalenceClass = phiEquivalenceClasses.getOrCreateEquivalenceClass(phiRVar);
if(!rValEquivalenceClass.equals(equivalenceClass)) {
- phiEquivalenceClasses.consolidate(equivalenceClass, rValEquivalenceClass);
+ SymbolType varType = program.getScope().getVariable(variable).getType();
+ SymbolType rVarType = program.getScope().getVariable(phiRVar).getType();
+ if(varType.getSizeBytes()==rVarType.getSizeBytes()) {
+ phiEquivalenceClasses.consolidate(equivalenceClass, rValEquivalenceClass);
+ } else {
+ program.getLog().append("Not consolidating phi with different size "+variable.toString()+" "+phiRVar.toString());
+ }
}
}
}
diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
index 112535fab..e0d216b07 100644
--- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
+++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
@@ -63,6 +63,11 @@ public class TestPrograms {
*/
+ @Test
+ public void testMul8uMin() throws IOException, URISyntaxException {
+ compileAndCompare("mul8u-min");
+ }
+
@Test
public void testNumberInferenceSum() throws IOException, URISyntaxException {
compileAndCompare("number-inference-sum");
diff --git a/src/test/kc/mul8u-min.kc b/src/test/kc/mul8u-min.kc
new file mode 100644
index 000000000..83f0668cb
--- /dev/null
+++ b/src/test/kc/mul8u-min.kc
@@ -0,0 +1,14 @@
+// Minimal test of mul8u
+
+import "multiply"
+
+void main() {
+
+ const word* screen = 0x0400;
+ byte i = 0;
+
+ for(byte a: 0..5)
+ for (byte b: 0..5)
+ screen[i++] = mul8u(a,b);
+
+}
\ No newline at end of file
diff --git a/src/test/ref/bresenhamarr.asm b/src/test/ref/bresenhamarr.asm
index 6f5b47054..27134b6fd 100644
--- a/src/test/ref/bresenhamarr.asm
+++ b/src/test/ref/bresenhamarr.asm
@@ -19,7 +19,7 @@ main: {
ldx #yd/2
lda #x0
sta x
- lda #<0
+ lda #0
sta idx
sta idx+1
b1:
diff --git a/src/test/ref/c64dtv-8bppchunkystretch.asm b/src/test/ref/c64dtv-8bppchunkystretch.asm
index 350dbd2a5..5d6615f06 100644
--- a/src/test/ref/c64dtv-8bppchunkystretch.asm
+++ b/src/test/ref/c64dtv-8bppchunkystretch.asm
@@ -205,7 +205,7 @@ gfx_init_chunky: {
lda #>$4000
sta gfxb+1
b1:
- lda #<0
+ lda #0
sta x
sta x+1
b2:
diff --git a/src/test/ref/c64dtv-blittermin.asm b/src/test/ref/c64dtv-blittermin.asm
index b7e126dea..0628deace 100644
--- a/src/test/ref/c64dtv-blittermin.asm
+++ b/src/test/ref/c64dtv-blittermin.asm
@@ -85,9 +85,8 @@ main: {
sta DTV_BLITTER_SRCA_HI
sta DTV_BLITTER_SRCA_MOD_LO
sta DTV_BLITTER_SRCA_MOD_HI
- lda #<$80
sta DTV_BLITTER_SRCA_LIN_LO
- lda #0
+ lda #>$100
sta DTV_BLITTER_SRCA_LIN_HI
lda #$10
sta DTV_BLITTER_SRCA_STEP
diff --git a/src/test/ref/complex/tetris/tetris.asm b/src/test/ref/complex/tetris/tetris.asm
index 5787e8dbe..2ffbfb4d9 100644
--- a/src/test/ref/complex/tetris/tetris.asm
+++ b/src/test/ref/complex/tetris/tetris.asm
@@ -214,11 +214,8 @@ main: {
sta level
sta score_bcd
sta score_bcd+1
- lda #<0>>$10
sta score_bcd+2
- lda #>0>>$10
sta score_bcd+3
- lda #<0
sta lines_bcd
sta lines_bcd+1
sta current_movedown_counter
diff --git a/src/test/ref/derefidx-word-0.asm b/src/test/ref/derefidx-word-0.asm
index a893d8fe3..95ea7045b 100644
--- a/src/test/ref/derefidx-word-0.asm
+++ b/src/test/ref/derefidx-word-0.asm
@@ -6,7 +6,7 @@ main: {
.label screen = $400
.label i = 2
.label _1 = 4
- lda #<0
+ lda #0
sta i
sta i+1
b1:
diff --git a/src/test/ref/examples/3d/perspective.asm b/src/test/ref/examples/3d/perspective.asm
index db564e9c2..313e08cfb 100644
--- a/src/test/ref/examples/3d/perspective.asm
+++ b/src/test/ref/examples/3d/perspective.asm
@@ -240,9 +240,9 @@ mulf_init: {
.label val = 6
.label sqr = 2
.label add = 4
- lda #<1
+ lda #1
sta add
- lda #>1
+ lda #0
sta add+1
tax
sta sqr
diff --git a/src/test/ref/examples/chargen/chargen-analysis.asm b/src/test/ref/examples/chargen/chargen-analysis.asm
index 9a4f94c32..3acea7f3d 100644
--- a/src/test/ref/examples/chargen/chargen-analysis.asm
+++ b/src/test/ref/examples/chargen/chargen-analysis.asm
@@ -312,11 +312,10 @@ mul8u: {
.label mb = $b
.label res = 9
.label return = 9
- lda #b
+ lda #0
sta mb+1
- lda #<0
sta res
sta res+1
b1:
diff --git a/src/test/ref/examples/fire/fire.asm b/src/test/ref/examples/fire/fire.asm
index e6481db83..d14cf06e3 100644
--- a/src/test/ref/examples/fire/fire.asm
+++ b/src/test/ref/examples/fire/fire.asm
@@ -307,7 +307,7 @@ sid_rnd_init: {
fillscreen: {
.label screen = 2
.label i = 4
- lda #<0
+ lda #0
sta i
sta i+1
b1:
diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.asm b/src/test/ref/examples/multiplexer/simple-multiplexer.asm
index 0b59051e7..c581edf00 100644
--- a/src/test/ref/examples/multiplexer/simple-multiplexer.asm
+++ b/src/test/ref/examples/multiplexer/simple-multiplexer.asm
@@ -219,11 +219,11 @@ init: {
lda #VIC_DEN|VIC_RSEL|3
sta D011
jsr plexInit
- lda #<$20
+ lda #$20
sta xp
- lda #>$20
+ lda #0
sta xp+1
- ldx #0
+ tax
b1:
lda #SPRITE/$40
sta PLEX_PTR,x
diff --git a/src/test/ref/examples/plasma/plasma-unroll.asm b/src/test/ref/examples/plasma/plasma-unroll.asm
index 761f2a967..6ac675a5a 100644
--- a/src/test/ref/examples/plasma/plasma-unroll.asm
+++ b/src/test/ref/examples/plasma/plasma-unroll.asm
@@ -254,7 +254,7 @@ makecharset: {
sta print_char_cursor
lda #>print_line_cursor
sta print_char_cursor+1
- lda #<0
+ lda #0
sta c
sta c+1
b1:
diff --git a/src/test/ref/examples/plasma/plasma.asm b/src/test/ref/examples/plasma/plasma.asm
index f0b03b983..5bdbc6470 100644
--- a/src/test/ref/examples/plasma/plasma.asm
+++ b/src/test/ref/examples/plasma/plasma.asm
@@ -190,7 +190,7 @@ makecharset: {
sta print_char_cursor
lda #>print_line_cursor
sta print_char_cursor+1
- lda #<0
+ lda #0
sta c
sta c+1
b1:
diff --git a/src/test/ref/examples/rotate/rotate.asm b/src/test/ref/examples/rotate/rotate.asm
index 89dbfc313..21947b062 100644
--- a/src/test/ref/examples/rotate/rotate.asm
+++ b/src/test/ref/examples/rotate/rotate.asm
@@ -258,7 +258,7 @@ mulf_init: {
sta sqr1_lo
lda #>mulf_sqr1_lo+1
sta sqr1_lo+1
- lda #<0
+ lda #0
sta sqr
sta sqr+1
tax
diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.asm b/src/test/ref/examples/scrolllogo/scrolllogo.asm
index bd40df77b..46983d01e 100644
--- a/src/test/ref/examples/scrolllogo/scrolllogo.asm
+++ b/src/test/ref/examples/scrolllogo/scrolllogo.asm
@@ -68,7 +68,7 @@ loop: {
.label _1 = 9
.label _5 = 9
.label xpos = 9
- lda #<0
+ lda #0
sta xsin_idx
sta xsin_idx+1
b1:
@@ -109,7 +109,7 @@ loop: {
lda xsin_idx
cmp #xsin
sta sintab+1
- lda #<0
+ lda #0
sta x
sta x+1
- lda #<0>>$10
sta x+2
- lda #>0>>$10
sta x+3
// u[4.28]
b1:
@@ -332,13 +330,13 @@ sin16s_gen2: {
}
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
-// mul16s(signed word zeropage($15) a)
+// mul16s(signed word zeropage($f) a)
mul16s: {
.label _9 = $f
.label _16 = $f
.label m = $b
.label return = $b
- .label a = $15
+ .label a = $f
lda a
sta mul16u.a
lda a+1
@@ -373,19 +371,17 @@ mul16s: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
-// mul16u(word zeropage($f) a, word zeropage($17) b)
+// mul16u(word zeropage($11) a, word zeropage($f) b)
mul16u: {
- .label mb = $11
- .label a = $f
+ .label mb = $13
+ .label a = $11
.label res = $b
.label return = $b
- .label b = $17
- lda #<0
+ .label b = $f
+ lda #0
sta res
sta res+1
- lda #<0>>$10
sta res+2
- lda #>0>>$10
sta res+3
b1:
lda a
@@ -427,18 +423,18 @@ mul16u: {
// sin16s(dword zeropage($b) x)
sin16s: {
.label _4 = $b
- .label _20 = $15
+ .label _20 = $f
.label x = $b
- .label return = $15
+ .label return = $f
.label x1 = $1d
- .label x2 = $15
- .label x3 = $15
+ .label x2 = $17
+ .label x3 = $17
.label x3_6 = $f
.label usinx = $1f
- .label x4 = $15
+ .label x4 = $17
.label x5 = $f
.label x5_128 = $f
- .label sinx = $15
+ .label sinx = $f
.label isUpper = 4
lda x+3
cmp #>PI_u4f28>>$10
@@ -609,15 +605,15 @@ sin16s: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
-// mulu16_sel(word zeropage($15) v1, word zeropage($17) v2, byte register(X) select)
+// mulu16_sel(word zeropage($17) v1, word zeropage($f) v2, byte register(X) select)
mulu16_sel: {
.label _0 = $b
.label _1 = $b
- .label v1 = $15
- .label v2 = $17
+ .label v1 = $17
+ .label v2 = $f
.label return = $f
- .label return_1 = $15
- .label return_10 = $15
+ .label return_1 = $17
+ .label return_10 = $17
lda v1
sta mul16u.a
lda v1+1
@@ -649,14 +645,14 @@ mulu16_sel: {
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
- .label quotient_hi = $15
+ .label quotient_hi = $11
.label quotient_lo = $f
.label return = $19
lda #>$10
sta divr16u.dividend
lda #>PI2_u4f28>>$10
sta divr16u.dividend+1
- lda #<0
+ lda #0
sta divr16u.rem
sta divr16u.rem+1
jsr divr16u
diff --git a/src/test/ref/examples/sinplotter/sine-plotter.asm b/src/test/ref/examples/sinplotter/sine-plotter.asm
index 951d02189..341d95d20 100644
--- a/src/test/ref/examples/sinplotter/sine-plotter.asm
+++ b/src/test/ref/examples/sinplotter/sine-plotter.asm
@@ -73,7 +73,7 @@ render_sine: {
.label sin2_val = 6
.label xpos = 4
.label sin_idx = 2
- lda #<0
+ lda #0
sta xpos
sta xpos+1
sta sin_idx
@@ -149,7 +149,7 @@ render_sine: {
lda xpos
cmp #<$140
bne b2
- lda #<0
+ lda #0
sta xpos
sta xpos+1
b2:
@@ -174,9 +174,9 @@ render_sine: {
// Plot a single dot in the bitmap
// bitmap_plot(word zeropage(4) x, byte register(X) y)
bitmap_plot: {
- .label _1 = $15
+ .label _1 = $10
.label plotter = 6
- .label plotter_1 = $15
+ .label plotter_1 = $10
.label x = 4
.label _4 = 6
lda bitmap_plot_yhi,x
@@ -256,19 +256,17 @@ sin16s_gen2: {
.label x = 8
.label i = 4
jsr div32u16u
- lda #<0
+ lda #0
sta i
sta i+1
lda #sin
sta sintab+1
- lda #<0
+ lda #0
sta x
sta x+1
- lda #<0>>$10
sta x+2
- lda #>0>>$10
sta x+3
// u[4.28]
b1:
@@ -328,13 +326,13 @@ sin16s_gen2: {
}
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
-// mul16s(signed word zeropage($15) a)
+// mul16s(signed word zeropage(6) a)
mul16s: {
.label _9 = 6
.label _16 = 6
.label m = $c
.label return = $c
- .label a = $15
+ .label a = 6
lda a
sta mul16u.a
lda a+1
@@ -369,19 +367,17 @@ mul16s: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
-// mul16u(word zeropage(6) a, word zeropage($17) b)
+// mul16u(word zeropage($10) a, word zeropage(6) b)
mul16u: {
- .label mb = $10
- .label a = 6
+ .label mb = $12
+ .label a = $10
.label res = $c
.label return = $c
- .label b = $17
- lda #<0
+ .label b = 6
+ lda #0
sta res
sta res+1
- lda #<0>>$10
sta res+2
- lda #>0>>$10
sta res+3
b1:
lda a
@@ -423,19 +419,19 @@ mul16u: {
// sin16s(dword zeropage($c) x)
sin16s: {
.label _4 = $c
- .label _20 = $15
+ .label _20 = 6
.label x = $c
- .label return = $15
+ .label return = 6
.label x1 = $1d
- .label x2 = $15
- .label x3 = $15
+ .label x2 = $17
+ .label x3 = $17
.label x3_6 = 6
.label usinx = $1f
- .label x4 = $15
+ .label x4 = $17
.label x5 = 6
.label x5_128 = 6
- .label sinx = $15
- .label isUpper = $14
+ .label sinx = 6
+ .label isUpper = $16
lda x+3
cmp #>PI_u4f28>>$10
bcc b4
@@ -605,15 +601,15 @@ sin16s: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
-// mulu16_sel(word zeropage($15) v1, word zeropage($17) v2, byte register(X) select)
+// mulu16_sel(word zeropage($17) v1, word zeropage(6) v2, byte register(X) select)
mulu16_sel: {
.label _0 = $c
.label _1 = $c
- .label v1 = $15
- .label v2 = $17
+ .label v1 = $17
+ .label v2 = 6
.label return = 6
- .label return_1 = $15
- .label return_10 = $15
+ .label return_1 = $17
+ .label return_10 = $17
lda v1
sta mul16u.a
lda v1+1
@@ -645,14 +641,14 @@ mulu16_sel: {
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
- .label quotient_hi = $15
+ .label quotient_hi = $10
.label quotient_lo = 6
.label return = $19
lda #>$10
sta divr16u.dividend
lda #>PI2_u4f28>>$10
sta divr16u.dividend+1
- lda #<0
+ lda #0
sta divr16u.rem
sta divr16u.rem+1
jsr divr16u
@@ -732,7 +728,7 @@ divr16u: {
// Clear all graphics on the bitmap
bitmap_clear: {
.label bitmap = 2
- .label y = $14
+ .label y = $16
.label _4 = 2
lda bitmap_plot_ylo
sta _4
@@ -761,7 +757,7 @@ bitmap_clear: {
}
// Initialize bitmap plotting tables
bitmap_init: {
- .label _3 = $14
+ .label _3 = $16
.label yoffs = 2
ldx #0
lda #$80
diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.asm b/src/test/ref/examples/sinsprites/sinus-sprites.asm
index 81a9c2d21..eddb6422e 100644
--- a/src/test/ref/examples/sinsprites/sinus-sprites.asm
+++ b/src/test/ref/examples/sinsprites/sinus-sprites.asm
@@ -228,9 +228,9 @@ gen_sintab: {
lda #>f_amp
sta setMEMtoFAC.mem+1
jsr setMEMtoFAC
- lda #<2
+ lda #2
sta setFAC.w
- lda #>2
+ lda #0
sta setFAC.w+1
jsr setFAC
lda #$a
+ lda #0
sta mul16u.a+1
- lda #<$a
+ lda #$a
sta mul16u.mb
- lda #>$a
+ lda #0
sta mul16u.mb+1
- lda #<$a>>$10
sta mul16u.mb+2
- lda #>$a>>$10
sta mul16u.mb+3
jsr mul16u
lda _0
diff --git a/src/test/ref/linegen.asm b/src/test/ref/linegen.asm
index 825a7fc29..4cbd79681 100644
--- a/src/test/ref/linegen.asm
+++ b/src/test/ref/linegen.asm
@@ -38,7 +38,7 @@ main: {
sta lin16u_gen.lintab
lda #>lintab3
sta lin16u_gen.lintab+1
- lda #<0
+ lda #0
sta lin16u_gen.min
sta lin16u_gen.min+1
lda #<$6488
@@ -76,7 +76,7 @@ main: {
lda #>str1
sta print_str.str+1
jsr print_str
- lda #<0
+ lda #0
sta print_word.w
sta print_word.w+1
jsr print_word
@@ -309,11 +309,10 @@ lin16u_gen: {
lda ampl+1
sbc min+1
sta ampl+1
- lda #<$14-1
+ lda #$14-1
sta divr16u.divisor
- lda #>$14-1
+ lda #0
sta divr16u.divisor+1
- lda #<0
sta divr16u.rem
sta divr16u.rem+1
jsr divr16u
@@ -321,11 +320,10 @@ lin16u_gen: {
sta stepi
lda divr16u.return+1
sta stepi+1
- lda #<$14-1
+ lda #$14-1
sta divr16u.divisor
- lda #>$14-1
+ lda #0
sta divr16u.divisor+1
- lda #<0
sta divr16u.dividend
sta divr16u.dividend+1
jsr divr16u
@@ -344,7 +342,7 @@ lin16u_gen: {
sta val+2
lda min+1
sta val+3
- lda #<0
+ lda #0
sta i
sta i+1
b1:
diff --git a/src/test/ref/liverange-call-problem.asm b/src/test/ref/liverange-call-problem.asm
index 933c49ae1..ff5e1ea3d 100644
--- a/src/test/ref/liverange-call-problem.asm
+++ b/src/test/ref/liverange-call-problem.asm
@@ -8,11 +8,11 @@
.label w2 = 2
main: {
.label SCREEN = $400
- lda #<0
+ lda #0
sta w1
sta w1+1
jsr incw1
- lda #<0
+ lda #0
sta w2
sta w2+1
jsr incw2
diff --git a/src/test/ref/min-fmul-16.asm b/src/test/ref/min-fmul-16.asm
index ef4553748..dc431ade4 100644
--- a/src/test/ref/min-fmul-16.asm
+++ b/src/test/ref/min-fmul-16.asm
@@ -226,7 +226,7 @@ mulf_init: {
sta sqr1_lo
lda #>mulf_sqr1_lo+1
sta sqr1_lo+1
- lda #<0
+ lda #0
sta sqr
sta sqr+1
tax
diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm
index f9d6d5695..8b97b383b 100644
--- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm
+++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm
@@ -167,11 +167,11 @@ init: {
lda #VIC_DEN|VIC_RSEL|3
sta D011
jsr plexInit
- lda #<$20
+ lda #$20
sta xp
- lda #>$20
+ lda #0
sta xp+1
- ldx #0
+ tax
b1:
lda #SPRITE/$40
sta PLEX_PTR,x
diff --git a/src/test/ref/roll-sprite-msb.asm b/src/test/ref/roll-sprite-msb.asm
index 18ab37b56..80b22ddde 100644
--- a/src/test/ref/roll-sprite-msb.asm
+++ b/src/test/ref/roll-sprite-msb.asm
@@ -7,11 +7,11 @@
.label SPRITES_XMSB = $d010
main: {
.label xpos = 2
- lda #<$c8
+ lda #$c8
sta xpos
- lda #>$c8
+ lda #0
sta xpos+1
- ldx #0
+ tax
b1:
stx position_sprite.spriteno
jsr position_sprite
diff --git a/src/test/ref/scan-desire-problem.asm b/src/test/ref/scan-desire-problem.asm
index 377b83bf5..2cd3d41b5 100644
--- a/src/test/ref/scan-desire-problem.asm
+++ b/src/test/ref/scan-desire-problem.asm
@@ -76,6 +76,7 @@ draw_block: {
asl
sta x1
lda #0
+ rol
sta x1+1
txa
asl
@@ -172,11 +173,10 @@ mul8u: {
.label mb = 6
.label res = 4
.label return = 4
- lda #b
+ lda #0
sta mb+1
- lda #<0
sta res
sta res+1
b1:
diff --git a/src/test/ref/semi-struct-2.asm b/src/test/ref/semi-struct-2.asm
index d54d7ac9c..0429bcc2f 100644
--- a/src/test/ref/semi-struct-2.asm
+++ b/src/test/ref/semi-struct-2.asm
@@ -730,11 +730,10 @@ mul8u: {
.label mb = 2
.label res = 8
.label return = 8
- lda #SIZEOF_ENTRY
+ lda #0
sta mb+1
- lda #<0
sta res
sta res+1
b1:
diff --git a/src/test/ref/signed-words.asm b/src/test/ref/signed-words.asm
index 9a92c64eb..1f3826b81 100644
--- a/src/test/ref/signed-words.asm
+++ b/src/test/ref/signed-words.asm
@@ -25,22 +25,22 @@
.label yvel_22 = 6
main: {
jsr init
- lda #<$64
+ lda #$64
sta yvel_init
- lda #>$64
+ lda #0
sta yvel_init+1
lda #<$c8
sta xvel
lda #>$c8
sta xvel+1
- lda #<0
+ lda #0
sta ypos
sta ypos+1
sta xpos
sta xpos+1
- lda #<$64
+ lda #$64
sta yvel_12
- lda #>$64
+ lda #0
sta yvel_12+1
b1:
lda #$ff
@@ -96,7 +96,7 @@ anim: {
sta yvel_22
lda yvel+1
sta yvel_22+1
- lda #<0
+ lda #0
sta ypos
sta ypos+1
sta xpos
diff --git a/src/test/ref/sinus-basic.asm b/src/test/ref/sinus-basic.asm
index 9e8385227..bf19ef5b9 100644
--- a/src/test/ref/sinus-basic.asm
+++ b/src/test/ref/sinus-basic.asm
@@ -46,9 +46,9 @@ main: {
lda #>f_i
sta setMEMtoFAC.mem+1
jsr setMEMtoFAC
- lda #<$19
+ lda #$19
sta setFAC.w
- lda #>$19
+ lda #0
sta setFAC.w+1
jsr setFAC
jsr divMEMbyFAC
diff --git a/src/test/ref/sinusgen16.asm b/src/test/ref/sinusgen16.asm
index 380d92e7c..bdca50e5c 100644
--- a/src/test/ref/sinusgen16.asm
+++ b/src/test/ref/sinusgen16.asm
@@ -185,19 +185,17 @@ sin16s_gen: {
.label x = $a
.label i = 4
jsr div32u16u
- lda #<0
+ lda #0
sta i
sta i+1
lda #main.sintab1
sta sintab+1
- lda #<0
+ lda #0
sta x
sta x+1
- lda #<0>>$10
sta x+2
- lda #>0>>$10
sta x+3
// u[4.28]
b1:
@@ -485,9 +483,7 @@ mul16u: {
sta mb+3
sta res
sta res+1
- lda #<0>>$10
sta res+2
- lda #>0>>$10
sta res+3
b1:
lda a
@@ -533,7 +529,7 @@ div32u16u: {
sta divr16u.dividend
lda #>PI2_u4f28>>$10
sta divr16u.dividend+1
- lda #<0
+ lda #0
sta divr16u.rem
sta divr16u.rem+1
jsr divr16u
diff --git a/src/test/ref/sinusgen16b.asm b/src/test/ref/sinusgen16b.asm
index b5f324cfa..299b22494 100644
--- a/src/test/ref/sinusgen16b.asm
+++ b/src/test/ref/sinusgen16b.asm
@@ -204,19 +204,17 @@ sin16s_genb: {
.label x = $d
.label i = 4
jsr div32u16u
- lda #<0
+ lda #0
sta i
sta i+1
lda #main.sintab2
sta sintab+1
- lda #<0
+ lda #0
sta x
sta x+1
- lda #<0>>$10
sta x+2
- lda #>0>>$10
sta x+3
// u[4.28]
b1:
@@ -469,9 +467,7 @@ mul16u: {
sta mb+3
sta res
sta res+1
- lda #<0>>$10
sta res+2
- lda #>0>>$10
sta res+3
b1:
lda a
@@ -517,7 +513,7 @@ div32u16u: {
sta divr16u.dividend
lda #>PI2_u4f28>>$10
sta divr16u.dividend+1
- lda #<0
+ lda #0
sta divr16u.rem
sta divr16u.rem+1
jsr divr16u
@@ -605,19 +601,17 @@ sin16s_gen: {
.label x = $d
.label i = 4
jsr div32u16u
- lda #<0
+ lda #0
sta i
sta i+1
lda #main.sintab1
sta sintab+1
- lda #<0
+ lda #0
sta x
sta x+1
- lda #<0>>$10
sta x+2
- lda #>0>>$10
sta x+3
// u[4.28]
b1:
diff --git a/src/test/ref/sinusgen8.asm b/src/test/ref/sinusgen8.asm
index 0c037f3c0..5e117690a 100644
--- a/src/test/ref/sinusgen8.asm
+++ b/src/test/ref/sinusgen8.asm
@@ -158,14 +158,14 @@ sin8s_gen: {
.label x = 2
.label i = 7
jsr div16u
- lda #<0
+ lda #0
sta i
sta i+1
lda #main.sintab2
sta sintab+1
- lda #<0
+ lda #0
sta x
sta x+1
// u[4.12]
diff --git a/src/test/ref/sinusgen8b.asm b/src/test/ref/sinusgen8b.asm
index e9cafe49a..67172c57e 100644
--- a/src/test/ref/sinusgen8b.asm
+++ b/src/test/ref/sinusgen8b.asm
@@ -181,19 +181,17 @@ sin16s_gen: {
.label x = 7
.label i = 5
jsr div32u16u
- lda #<0
+ lda #0
sta i
sta i+1
lda #main.sintabw
sta sintab+1
- lda #<0
+ lda #0
sta x
sta x+1
- lda #<0>>$10
sta x+2
- lda #>0>>$10
sta x+3
// u[4.28]
b1:
@@ -481,9 +479,7 @@ mul16u: {
sta mb+3
sta res
sta res+1
- lda #<0>>$10
sta res+2
- lda #>0>>$10
sta res+3
b1:
lda a
@@ -529,7 +525,7 @@ div32u16u: {
sta divr16u.dividend
lda #>PI2_u4f28>>$10
sta divr16u.dividend+1
- lda #<0
+ lda #0
sta divr16u.rem
sta divr16u.rem+1
jsr divr16u
@@ -616,14 +612,14 @@ sin8s_gen: {
.label x = 2
.label i = $11
jsr div16u
- lda #<0
+ lda #0
sta i
sta i+1
lda #main.sintabb
sta sintab+1
- lda #<0
+ lda #0
sta x
sta x+1
// u[4.12]
@@ -839,7 +835,7 @@ div16u: {
sta divr16u.dividend
lda #>PI2_u4f12
sta divr16u.dividend+1
- lda #<0
+ lda #0
sta divr16u.rem
sta divr16u.rem+1
jsr divr16u
diff --git a/src/test/ref/sinusgenscale8.asm b/src/test/ref/sinusgenscale8.asm
index 792e19135..ba40b7df7 100644
--- a/src/test/ref/sinusgenscale8.asm
+++ b/src/test/ref/sinusgenscale8.asm
@@ -86,14 +86,14 @@ sin8u_table: {
lda #>$400
sta print_line_cursor+1
jsr print_ln
- lda #<0
+ lda #0
sta i
sta i+1
lda #main.sintab
sta sintab+1
- lda #<0
+ lda #0
sta x
sta x+1
// u[4.12]
@@ -326,9 +326,9 @@ mul8su: {
.label return = $f
tya
tax
- lda #b
+ lda #0
sta mul8u.mb+1
jsr mul8u
cpy #0
@@ -346,7 +346,7 @@ mul8u: {
.label mb = $b
.label res = $f
.label return = $f
- lda #<0
+ lda #0
sta res
sta res+1
b1:
diff --git a/src/test/ref/test-multiply-16bit.asm b/src/test/ref/test-multiply-16bit.asm
index e9858cdce..4b1b9e166 100644
--- a/src/test/ref/test-multiply-16bit.asm
+++ b/src/test/ref/test-multiply-16bit.asm
@@ -601,20 +601,18 @@ mul16s: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
-// mul16u(word zeropage(9) a, word zeropage($15) b)
+// mul16u(word zeropage($1d) a, word zeropage(9) b)
mul16u: {
.label mb = $11
- .label a = 9
+ .label a = $1d
.label res = $19
- .label b = $15
+ .label b = 9
.label return = $19
.label b_1 = $17
- lda #<0
+ lda #0
sta res
sta res+1
- lda #<0>>$10
sta res+2
- lda #>0>>$10
sta res+3
b1:
lda a
@@ -667,14 +665,12 @@ muls16s: {
lda a
beq b5
!:
- lda #<0
+ lda #0
sta j
sta j+1
sta m
sta m+1
- lda #<0>>$10
sta m+2
- lda #>0>>$10
sta m+3
b3:
lda b+1
@@ -708,23 +704,19 @@ muls16s: {
bne b3
rts
b5:
- lda #<0
+ lda #0
sta return
sta return+1
- lda #<0>>$10
sta return+2
- lda #>0>>$10
sta return+3
rts
b6:
- lda #<0
+ lda #0
sta i
sta i+1
sta m
sta m+1
- lda #<0>>$10
sta m+2
- lda #>0>>$10
sta m+3
b4:
lda b+1
@@ -965,14 +957,12 @@ muls16u: {
lda a+1
beq b3
!:
- lda #<0
+ lda #0
sta i
sta i+1
sta m
sta m+1
- lda #<0>>$10
sta m+2
- lda #>0>>$10
sta m+3
b2:
lda m
@@ -1000,12 +990,10 @@ muls16u: {
bne b2
rts
b3:
- lda #<0
+ lda #0
sta return
sta return+1
- lda #<0>>$10
sta return+2
- lda #>0>>$10
sta return+3
rts
}
@@ -1028,7 +1016,7 @@ mulf_init: {
sta sqr1_lo
lda #>mulf_sqr1_lo+1
sta sqr1_lo+1
- lda #<0
+ lda #0
sta sqr
sta sqr+1
tax
diff --git a/src/test/ref/test-multiply-8bit.asm b/src/test/ref/test-multiply-8bit.asm
index 5cf013274..195dda466 100644
--- a/src/test/ref/test-multiply-8bit.asm
+++ b/src/test/ref/test-multiply-8bit.asm
@@ -307,7 +307,7 @@ mul8u: {
.label mb = 6
.label res = $c
.label return = $c
- lda #<0
+ lda #0
sta res
sta res+1
b1:
@@ -451,7 +451,7 @@ muls8s: {
bne b3
rts
b5:
- lda #<0
+ lda #0
sta return
sta return+1
rts
@@ -634,7 +634,7 @@ muls8u: {
bne b2
rts
b3:
- lda #<0
+ lda #0
sta return
sta return+1
rts
@@ -796,7 +796,7 @@ mulf_init: {
sta sqr1_lo
lda #>mulf_sqr1_lo+1
sta sqr1_lo+1
- lda #<0
+ lda #0
sta sqr
sta sqr+1
tax
diff --git a/src/test/ref/test-scroll-up.asm b/src/test/ref/test-scroll-up.asm
index 3f11d2fd0..15c85f776 100644
--- a/src/test/ref/test-scroll-up.asm
+++ b/src/test/ref/test-scroll-up.asm
@@ -17,7 +17,7 @@ scrollup3: {
.label _4 = 7
.label _5 = 9
.label l2_4 = 4
- lda #<0
+ lda #0
sta l2
sta l2+1
b1:
@@ -111,7 +111,7 @@ scrollup1: {
.label line = 2
.label _6 = 7
.label _7 = 4
- lda #<0
+ lda #0
sta line
sta line+1
b1:
diff --git a/src/test/ref/test-word-size-arrays.asm b/src/test/ref/test-word-size-arrays.asm
index 7a768dfdd..34f29fa59 100644
--- a/src/test/ref/test-word-size-arrays.asm
+++ b/src/test/ref/test-word-size-arrays.asm
@@ -10,7 +10,7 @@ main: {
.label _8 = 6
.label _9 = 4
.label _10 = 4
- lda #<0
+ lda #0
sta line
sta line+1
b1: