From e0124ee65487bf29cb4432420c6f30d1669f8c1c Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Wed, 31 Jan 2018 21:27:22 +0100 Subject: [PATCH] Added 8bit unsigned division. Ensured that pointers are generated into ASM labels. --- .../dk/camelot64/kickc/asm/AsmLabelDecl.java | 10 +- .../dk/camelot64/kickc/asm/AsmProgram.java | 8 +- .../kickc/passes/Pass4CodeGeneration.java | 9 +- .../dk/camelot64/kickc/test/TestPrograms.java | 6 + .../dk/camelot64/kickc/test/kc/division.kc | 48 + .../camelot64/kickc/test/ref/arrays-init.asm | 2 +- .../camelot64/kickc/test/ref/arrays-init.log | 6 +- .../camelot64/kickc/test/ref/asm-clobber.asm | 2 +- .../camelot64/kickc/test/ref/asm-clobber.log | 6 +- .../kickc/test/ref/bitmap-bresenham.asm | 12 +- .../kickc/test/ref/bitmap-bresenham.log | 36 +- .../kickc/test/ref/bitmap-plotter.asm | 14 +- .../kickc/test/ref/bitmap-plotter.log | 42 +- .../dk/camelot64/kickc/test/ref/bresenham.asm | 2 +- .../dk/camelot64/kickc/test/ref/bresenham.log | 6 +- .../camelot64/kickc/test/ref/bresenhamarr.asm | 2 +- .../camelot64/kickc/test/ref/bresenhamarr.log | 6 +- .../camelot64/kickc/test/ref/cast-deref.asm | 2 +- .../camelot64/kickc/test/ref/cast-deref.log | 6 +- .../dk/camelot64/kickc/test/ref/casting.asm | 8 +- .../dk/camelot64/kickc/test/ref/casting.log | 24 +- .../dk/camelot64/kickc/test/ref/chargen.asm | 8 +- .../dk/camelot64/kickc/test/ref/chargen.log | 24 +- .../kickc/test/ref/const-identification.asm | 4 +- .../kickc/test/ref/const-identification.log | 12 +- .../camelot64/kickc/test/ref/constabsmin.asm | 2 +- .../camelot64/kickc/test/ref/constabsmin.log | 6 +- .../kickc/test/ref/constant-string-concat.asm | 2 +- .../kickc/test/ref/constant-string-concat.log | 6 +- .../camelot64/kickc/test/ref/constantmin.asm | 6 +- .../camelot64/kickc/test/ref/constantmin.log | 18 +- .../dk/camelot64/kickc/test/ref/constants.asm | 2 +- .../dk/camelot64/kickc/test/ref/constants.log | 6 +- .../dk/camelot64/kickc/test/ref/division.asm | 199 + .../dk/camelot64/kickc/test/ref/division.cfg | 167 + .../dk/camelot64/kickc/test/ref/division.log | 3711 +++++++++++++++++ .../dk/camelot64/kickc/test/ref/division.sym | 132 + .../kickc/test/ref/double-import.asm | 2 +- .../kickc/test/ref/double-import.log | 6 +- .../dk/camelot64/kickc/test/ref/dword.asm | 2 +- .../dk/camelot64/kickc/test/ref/dword.log | 6 +- .../dk/camelot64/kickc/test/ref/fibmem.asm | 2 +- .../dk/camelot64/kickc/test/ref/fibmem.log | 6 +- .../camelot64/kickc/test/ref/fillscreen.asm | 8 +- .../camelot64/kickc/test/ref/fillscreen.log | 24 +- .../camelot64/kickc/test/ref/flipper-rex2.asm | 4 +- .../camelot64/kickc/test/ref/flipper-rex2.log | 12 +- .../kickc/test/ref/forclassicmin.asm | 2 +- .../kickc/test/ref/forclassicmin.log | 6 +- .../kickc/test/ref/forincrementassign.asm | 2 +- .../kickc/test/ref/forincrementassign.log | 6 +- .../camelot64/kickc/test/ref/forrangemin.asm | 4 +- .../camelot64/kickc/test/ref/forrangemin.log | 12 +- .../dk/camelot64/kickc/test/ref/halfscii.asm | 10 +- .../dk/camelot64/kickc/test/ref/halfscii.log | 30 +- .../dk/camelot64/kickc/test/ref/ifmin.asm | 2 +- .../dk/camelot64/kickc/test/ref/ifmin.log | 6 +- .../dk/camelot64/kickc/test/ref/importing.asm | 4 +- .../dk/camelot64/kickc/test/ref/importing.log | 12 +- .../dk/camelot64/kickc/test/ref/incd020.asm | 2 +- .../dk/camelot64/kickc/test/ref/incd020.log | 6 +- .../kickc/test/ref/inline-assignment.asm | 2 +- .../kickc/test/ref/inline-assignment.log | 6 +- .../camelot64/kickc/test/ref/inline-word.asm | 2 +- .../camelot64/kickc/test/ref/inline-word.log | 6 +- .../kickc/test/ref/inlinearrayproblem.asm | 4 +- .../kickc/test/ref/inlinearrayproblem.log | 12 +- .../kickc/test/ref/inmem-const-array.asm | 4 +- .../kickc/test/ref/inmem-const-array.log | 12 +- .../camelot64/kickc/test/ref/inmemarray.asm | 2 +- .../camelot64/kickc/test/ref/inmemarray.log | 6 +- .../camelot64/kickc/test/ref/inmemstring.asm | 2 +- .../camelot64/kickc/test/ref/inmemstring.log | 6 +- .../dk/camelot64/kickc/test/ref/iterarray.asm | 2 +- .../dk/camelot64/kickc/test/ref/iterarray.log | 6 +- .../dk/camelot64/kickc/test/ref/literals.asm | 2 +- .../dk/camelot64/kickc/test/ref/literals.log | 6 +- .../dk/camelot64/kickc/test/ref/liverange.asm | 2 +- .../dk/camelot64/kickc/test/ref/liverange.log | 6 +- .../camelot64/kickc/test/ref/local-string.asm | 2 +- .../camelot64/kickc/test/ref/local-string.log | 6 +- .../dk/camelot64/kickc/test/ref/loopnest.asm | 2 +- .../dk/camelot64/kickc/test/ref/loopnest.log | 6 +- .../dk/camelot64/kickc/test/ref/loopnest2.asm | 2 +- .../dk/camelot64/kickc/test/ref/loopnest2.log | 6 +- .../dk/camelot64/kickc/test/ref/loopnest3.asm | 2 +- .../dk/camelot64/kickc/test/ref/loopnest3.log | 6 +- .../dk/camelot64/kickc/test/ref/modglobal.asm | 2 +- .../dk/camelot64/kickc/test/ref/modglobal.log | 6 +- .../camelot64/kickc/test/ref/modglobalmin.asm | 2 +- .../camelot64/kickc/test/ref/modglobalmin.log | 6 +- .../kickc/test/ref/overlap-allocation-2.asm | 2 +- .../kickc/test/ref/overlap-allocation-2.log | 6 +- .../kickc/test/ref/overlap-allocation.asm | 2 +- .../kickc/test/ref/overlap-allocation.log | 6 +- .../kickc/test/ref/print-problem.asm | 2 +- .../kickc/test/ref/print-problem.log | 6 +- .../camelot64/kickc/test/ref/ptr-complex.asm | 6 +- .../camelot64/kickc/test/ref/ptr-complex.log | 18 +- .../dk/camelot64/kickc/test/ref/ptrtest.asm | 2 +- .../dk/camelot64/kickc/test/ref/ptrtest.log | 6 +- .../camelot64/kickc/test/ref/raster-bars.asm | 6 +- .../camelot64/kickc/test/ref/raster-bars.log | 18 +- .../kickc/test/ref/scroll-clobber.asm | 2 +- .../kickc/test/ref/scroll-clobber.log | 6 +- .../dk/camelot64/kickc/test/ref/scroll.asm | 10 +- .../dk/camelot64/kickc/test/ref/scroll.log | 30 +- .../dk/camelot64/kickc/test/ref/scrollbig.asm | 12 +- .../dk/camelot64/kickc/test/ref/scrollbig.log | 36 +- .../camelot64/kickc/test/ref/signed-bytes.asm | 2 +- .../camelot64/kickc/test/ref/signed-bytes.log | 6 +- .../camelot64/kickc/test/ref/signed-words.asm | 22 +- .../camelot64/kickc/test/ref/signed-words.log | 66 +- .../camelot64/kickc/test/ref/sinus-basic.asm | 6 +- .../camelot64/kickc/test/ref/sinus-basic.log | 18 +- .../kickc/test/ref/sinus-sprites.asm | 36 +- .../kickc/test/ref/sinus-sprites.log | 108 +- .../dk/camelot64/kickc/test/ref/summin.asm | 2 +- .../dk/camelot64/kickc/test/ref/summin.log | 6 +- .../kickc/test/ref/test-multiply.asm | 8 +- .../kickc/test/ref/test-multiply.log | 24 +- .../kickc/test/ref/true-inline-words.asm | 4 +- .../kickc/test/ref/true-inline-words.log | 12 +- .../kickc/test/ref/unused-method.asm | 2 +- .../kickc/test/ref/unused-method.log | 6 +- .../camelot64/kickc/test/ref/unused-vars.asm | 4 +- .../camelot64/kickc/test/ref/unused-vars.log | 12 +- .../dk/camelot64/kickc/test/ref/useglobal.asm | 2 +- .../dk/camelot64/kickc/test/ref/useglobal.log | 6 +- .../camelot64/kickc/test/ref/var-register.asm | 2 +- .../camelot64/kickc/test/ref/var-register.log | 6 +- .../dk/camelot64/kickc/test/ref/voronoi.asm | 4 +- .../dk/camelot64/kickc/test/ref/voronoi.log | 12 +- .../camelot64/kickc/test/ref/zpparammin.asm | 4 +- .../camelot64/kickc/test/ref/zpparammin.log | 12 +- .../dk/camelot64/kickc/test/ref/zpptr.asm | 2 +- .../dk/camelot64/kickc/test/ref/zpptr.log | 6 +- 137 files changed, 4862 insertions(+), 588 deletions(-) create mode 100644 src/test/java/dk/camelot64/kickc/test/kc/division.kc create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/division.asm create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/division.cfg create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/division.log create mode 100644 src/test/java/dk/camelot64/kickc/test/ref/division.sym diff --git a/src/main/java/dk/camelot64/kickc/asm/AsmLabelDecl.java b/src/main/java/dk/camelot64/kickc/asm/AsmLabelDecl.java index 53f4222a1..fa10eb2a6 100644 --- a/src/main/java/dk/camelot64/kickc/asm/AsmLabelDecl.java +++ b/src/main/java/dk/camelot64/kickc/asm/AsmLabelDecl.java @@ -1,17 +1,15 @@ package dk.camelot64.kickc.asm; -import dk.camelot64.kickc.fragment.AsmFormat; - /** A label declaration .label lbl = val */ public class AsmLabelDecl implements AsmLine { private final String name; - private final int address; + private final String value; private int index; - public AsmLabelDecl(String name, int address) { + public AsmLabelDecl(String name, String value) { this.name = name; - this.address = address; + this.value = value; } @Override @@ -26,7 +24,7 @@ public class AsmLabelDecl implements AsmLine { @Override public String getAsm() { - return ".label " + name + " = " + AsmFormat.getAsmNumber(address); + return ".label " + name + " = " + value; } @Override diff --git a/src/main/java/dk/camelot64/kickc/asm/AsmProgram.java b/src/main/java/dk/camelot64/kickc/asm/AsmProgram.java index b3d5a12bd..dc0ade84a 100644 --- a/src/main/java/dk/camelot64/kickc/asm/AsmProgram.java +++ b/src/main/java/dk/camelot64/kickc/asm/AsmProgram.java @@ -1,5 +1,7 @@ package dk.camelot64.kickc.asm; +import dk.camelot64.kickc.fragment.AsmFormat; + import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -71,7 +73,11 @@ public class AsmProgram { } public void addLabelDecl(String name, int address) { - addLine(new AsmLabelDecl(name, address)); + addLabelDecl(name, AsmFormat.getAsmNumber(address)); + } + + public void addLabelDecl(String name, String value) { + addLine(new AsmLabelDecl(name, value)); } /** diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 0ee64aae3..a1384d519 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -110,8 +110,15 @@ public class Pass4CodeGeneration { if(!(constantVar.getValue() instanceof ConstantArrayList || constantVar.getValue() instanceof ConstantArrayFilled || constantVar.getType().equals(SymbolType.STRING))) { String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName(); if(asmName != null && !added.contains(asmName)) { - asm.addConstant(asmName.replace("#", "_").replace("$", "_"), AsmFormat.getAsmConstant(program, constantVar.getValue(), 99, scopeRef)); added.add(asmName); + String asmConstant = AsmFormat.getAsmConstant(program, constantVar.getValue(), 99, scopeRef); + if(constantVar.getType() instanceof SymbolTypePointer) { + // Must use a label for pointers + asm.addLabelDecl(asmName.replace("#", "_").replace("$", "_"), asmConstant); + } else { + // Use constant for non-pointers + asm.addConstant(asmName.replace("#", "_").replace("$", "_"), asmConstant); + } } } } diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 6cea982ab..4e4d6db3e 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -42,6 +42,12 @@ public class TestPrograms { AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false); } + @Test + public void testDivision() throws IOException, URISyntaxException { + compileAndCompare("division"); + } + + @Test public void testVarRegister() throws IOException, URISyntaxException { compileAndCompare("var-register"); diff --git a/src/test/java/dk/camelot64/kickc/test/kc/division.kc b/src/test/java/dk/camelot64/kickc/test/kc/division.kc new file mode 100644 index 000000000..53657f2ef --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/kc/division.kc @@ -0,0 +1,48 @@ +import "print.kc" + +const byte* NULL = 0; + +void main() { + byte* rem = $ff; + + byte[] dividends = { 255, 255, 255, 255, 255, 255}; + byte[] divisors = { 5, 7, 11, 13, 17, 19 }; + + print_cls(); + for( byte i: 0..5 ) { + byte dividend = dividends[i]; + byte divisor = divisors[i]; + byte res = div8u(dividend, divisor, rem); + print_byte(dividend); + print_str(" / @"); + print_byte(divisor); + print_str(" = @"); + print_byte(res); + print_str(" @"); + print_byte(*rem); + print_ln(); + } +} + +// Performs division on two 8 bit unsigned bytes +// Returns dividend/divisor. +// If remainder is non-null it will be set to the remainder. +// Implemented using simple binary division +byte div8u(byte dividend, byte divisor, byte* remainder) { + byte rem = 0; + byte quotient = 0; + for( byte i : 0..7) { + rem = rem << 1; + if( (dividend & $80) != 0 ) { + rem++; + } + dividend = dividend << 1; + quotient = quotient << 1; + if(rem>=divisor) { + quotient++; + rem = rem - divisor; + } + } + *remainder = rem; + return quotient; +} \ No newline at end of file diff --git a/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.asm b/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.asm index 09d3e580e..5fd5aa4e8 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { lda #'c' diff --git a/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.log b/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.log index d1e9b0be8..3141f7691 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.log @@ -212,7 +212,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -270,7 +270,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -350,7 +350,7 @@ Score: 38 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.asm b/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.asm index 69344a6a5..abaf65c13 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { .label l = 2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.log b/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.log index 8ed0ae28c..184284272 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.log @@ -457,7 +457,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -606,7 +606,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -795,7 +795,7 @@ Score: 4682 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.asm b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.asm index 8578c57a9..8728cd236 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.asm @@ -1,15 +1,15 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const BGCOL = $d020 - .const FGCOL = $d021 - .const D018 = $d018 - .const D011 = $d011 + .label BGCOL = $d020 + .label FGCOL = $d021 + .label D018 = $d018 + .label D011 = $d011 .const BMM = $20 .const DEN = $10 .const RSEL = 8 - .const SCREEN = $400 - .const BITMAP = $2000 + .label SCREEN = $400 + .label BITMAP = $2000 .const lines_cnt = 8 jsr main main: { diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log index 1f3cae58c..3a2aa16eb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log @@ -4252,15 +4252,15 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d020 - .const FGCOL = $d021 - .const D018 = $d018 - .const D011 = $d011 + .label BGCOL = $d020 + .label FGCOL = $d021 + .label D018 = $d018 + .label D011 = $d011 .const BMM = $20 .const DEN = $10 .const RSEL = 8 - .const SCREEN = $400 - .const BITMAP = $2000 + .label SCREEN = $400 + .label BITMAP = $2000 .const lines_cnt = 8 //SEG2 @begin bbegin: @@ -5603,15 +5603,15 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d020 - .const FGCOL = $d021 - .const D018 = $d018 - .const D011 = $d011 + .label BGCOL = $d020 + .label FGCOL = $d021 + .label D018 = $d018 + .label D011 = $d011 .const BMM = $20 .const DEN = $10 .const RSEL = 8 - .const SCREEN = $400 - .const BITMAP = $2000 + .label SCREEN = $400 + .label BITMAP = $2000 .const lines_cnt = 8 //SEG2 @begin bbegin: @@ -7062,15 +7062,15 @@ Score: 218375 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d020 - .const FGCOL = $d021 - .const D018 = $d018 - .const D011 = $d011 + .label BGCOL = $d020 + .label FGCOL = $d021 + .label D018 = $d018 + .label D011 = $d011 .const BMM = $20 .const DEN = $10 .const RSEL = 8 - .const SCREEN = $400 - .const BITMAP = $2000 + .label SCREEN = $400 + .label BITMAP = $2000 .const lines_cnt = 8 //SEG2 @begin //SEG3 [1] phi from @begin to @10 [phi:@begin->@10] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.asm b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.asm index a62c21df4..d28b0a426 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.asm @@ -1,16 +1,16 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const D011 = $d011 + .label D011 = $d011 .const BMM = $20 .const DEN = $10 .const RSEL = 8 - .const RASTER = $d012 - .const D018 = $d018 - .const BGCOL = $d020 - .const FGCOL = $d021 - .const SCREEN = $400 - .const BITMAP = $2000 + .label RASTER = $d012 + .label D018 = $d018 + .label BGCOL = $d020 + .label FGCOL = $d021 + .label SCREEN = $400 + .label BITMAP = $2000 .const plots_cnt = 8 jsr main main: { diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log index db73d7ed0..67f1302e5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log @@ -1746,16 +1746,16 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const D011 = $d011 + .label D011 = $d011 .const BMM = $20 .const DEN = $10 .const RSEL = 8 - .const RASTER = $d012 - .const D018 = $d018 - .const BGCOL = $d020 - .const FGCOL = $d021 - .const SCREEN = $400 - .const BITMAP = $2000 + .label RASTER = $d012 + .label D018 = $d018 + .label BGCOL = $d020 + .label FGCOL = $d021 + .label SCREEN = $400 + .label BITMAP = $2000 .const plots_cnt = 8 //SEG2 @begin bbegin: @@ -2284,16 +2284,16 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const D011 = $d011 + .label D011 = $d011 .const BMM = $20 .const DEN = $10 .const RSEL = 8 - .const RASTER = $d012 - .const D018 = $d018 - .const BGCOL = $d020 - .const FGCOL = $d021 - .const SCREEN = $400 - .const BITMAP = $2000 + .label RASTER = $d012 + .label D018 = $d018 + .label BGCOL = $d020 + .label FGCOL = $d021 + .label SCREEN = $400 + .label BITMAP = $2000 .const plots_cnt = 8 //SEG2 @begin bbegin: @@ -2883,16 +2883,16 @@ Score: 6207 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const D011 = $d011 + .label D011 = $d011 .const BMM = $20 .const DEN = $10 .const RSEL = 8 - .const RASTER = $d012 - .const D018 = $d018 - .const BGCOL = $d020 - .const FGCOL = $d021 - .const SCREEN = $400 - .const BITMAP = $2000 + .label RASTER = $d012 + .label D018 = $d018 + .label BGCOL = $d020 + .label FGCOL = $d021 + .label SCREEN = $400 + .label BITMAP = $2000 .const plots_cnt = 8 //SEG2 @begin //SEG3 [1] phi from @begin to @5 [phi:@begin->@5] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bresenham.asm b/src/test/java/dk/camelot64/kickc/test/ref/bresenham.asm index 13a9c3add..468591c7a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bresenham.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/bresenham.asm @@ -2,7 +2,7 @@ :BasicUpstart(main) .pc = $80d "Program" .const STAR = $51 - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { .const x1 = $27 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log b/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log index d7c02ecaf..f582962dd 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log @@ -586,7 +586,7 @@ INITIAL ASM .pc = $80d "Program" //SEG1 Global Constants & labels .const STAR = $51 - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -736,7 +736,7 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" //SEG1 Global Constants & labels .const STAR = $51 - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -929,7 +929,7 @@ Score: 992 .pc = $80d "Program" //SEG1 Global Constants & labels .const STAR = $51 - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.asm b/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.asm index 31861d80f..6622d2e61 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.asm @@ -4,7 +4,7 @@ jsr main main: { .const STAR = $51 - .const screen = $400 + .label screen = $400 .const x1 = $27 .const y1 = $18 .const xd = x1-0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log b/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log index 34a66a850..37a80a053 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log @@ -587,7 +587,7 @@ bend: //SEG9 main main: { .const STAR = $51 - .const screen = $400 + .label screen = $400 .const x1 = $27 .const y1 = $18 .const xd = x1-0 @@ -739,7 +739,7 @@ bend: //SEG9 main main: { .const STAR = $51 - .const screen = $400 + .label screen = $400 .const x1 = $27 .const y1 = $18 .const xd = x1-0 @@ -930,7 +930,7 @@ Score: 1112 //SEG9 main main: { .const STAR = $51 - .const screen = $400 + .label screen = $400 .const x1 = $27 .const y1 = $18 .const xd = x1-0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.asm b/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.asm index 3a1f56f38..7d85f559e 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.asm @@ -3,7 +3,7 @@ .pc = $80d "Program" jsr main main: { - .const SCREEN = $400 + .label SCREEN = $400 ldx #0 b1: lda sbs,x diff --git a/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.log b/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.log index 43aa155a3..c21697ecb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.log @@ -267,7 +267,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const SCREEN = $400 + .label SCREEN = $400 .label i = 2 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: @@ -336,7 +336,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const SCREEN = $400 + .label SCREEN = $400 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -421,7 +421,7 @@ Score: 192 //SEG8 @end //SEG9 main main: { - .const SCREEN = $400 + .label SCREEN = $400 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/casting.asm b/src/test/java/dk/camelot64/kickc/test/ref/casting.asm index 3227c96b7..d76001af8 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/casting.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/casting.asm @@ -1,10 +1,10 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 - .const SCREEN2 = SCREEN+$28*3 - .const SCREEN3 = SCREEN+$28*6 - .const SCREEN4 = SCREEN+$28*9 + .label SCREEN = $400 + .label SCREEN2 = SCREEN+$28*3 + .label SCREEN3 = SCREEN+$28*6 + .label SCREEN4 = SCREEN+$28*9 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/casting.log b/src/test/java/dk/camelot64/kickc/test/ref/casting.log index 9a2fef192..1c3dccd60 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/casting.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/casting.log @@ -603,10 +603,10 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const SCREEN2 = SCREEN+$28*3 - .const SCREEN3 = SCREEN+$28*6 - .const SCREEN4 = SCREEN+$28*9 + .label SCREEN = $400 + .label SCREEN2 = SCREEN+$28*3 + .label SCREEN3 = SCREEN+$28*6 + .label SCREEN4 = SCREEN+$28*9 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -760,10 +760,10 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const SCREEN2 = SCREEN+$28*3 - .const SCREEN3 = SCREEN+$28*6 - .const SCREEN4 = SCREEN+$28*9 + .label SCREEN = $400 + .label SCREEN2 = SCREEN+$28*3 + .label SCREEN3 = SCREEN+$28*6 + .label SCREEN4 = SCREEN+$28*9 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -951,10 +951,10 @@ Score: 674 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const SCREEN2 = SCREEN+$28*3 - .const SCREEN3 = SCREEN+$28*6 - .const SCREEN4 = SCREEN+$28*9 + .label SCREEN = $400 + .label SCREEN2 = SCREEN+$28*3 + .label SCREEN3 = SCREEN+$28*6 + .label SCREEN4 = SCREEN+$28*9 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chargen.asm b/src/test/java/dk/camelot64/kickc/test/ref/chargen.asm index d6ed2bfdd..7239224bc 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/chargen.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/chargen.asm @@ -1,12 +1,12 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SCREEN = $400 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SCREEN = $400 jsr main main: { - .const CHAR_A = CHARGEN+8 + .label CHAR_A = CHARGEN+8 .label bits = 3 .label sc = 4 .label y = 2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chargen.log b/src/test/java/dk/camelot64/kickc/test/ref/chargen.log index 4201a11de..b6eedc21b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/chargen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/chargen.log @@ -615,9 +615,9 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SCREEN = $400 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -634,7 +634,7 @@ bend_from_b1: bend: //SEG8 main main: { - .const CHAR_A = CHARGEN+8 + .label CHAR_A = CHARGEN+8 .label _1 = 8 .label bits = 3 .label sc = 4 @@ -801,9 +801,9 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SCREEN = $400 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -820,7 +820,7 @@ bend_from_b1: bend: //SEG8 main main: { - .const CHAR_A = CHARGEN+8 + .label CHAR_A = CHARGEN+8 .label bits = 3 .label sc = 4 .label y = 2 @@ -1027,9 +1027,9 @@ Score: 5633 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SCREEN = $400 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 @@ -1039,7 +1039,7 @@ Score: 5633 //SEG7 @end //SEG8 main main: { - .const CHAR_A = CHARGEN+8 + .label CHAR_A = CHARGEN+8 .label bits = 3 .label sc = 4 .label y = 2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.asm b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.asm index dfff1b89f..b0872cba4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.asm @@ -1,8 +1,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const plots = $1000 - .const SCREEN = $400 + .label plots = $1000 + .label SCREEN = $400 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log index d99e053c3..121ed73f3 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log @@ -560,8 +560,8 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const plots = $1000 - .const SCREEN = $400 + .label plots = $1000 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -746,8 +746,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const plots = $1000 - .const SCREEN = $400 + .label plots = $1000 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -977,8 +977,8 @@ Score: 2223 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const plots = $1000 - .const SCREEN = $400 + .label plots = $1000 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] //SEG4 @3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.asm b/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.asm index f8e44613c..d6ac1c173 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { lda #1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.log b/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.log index d53f3306a..9132876ac 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.log @@ -133,7 +133,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -176,7 +176,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -236,7 +236,7 @@ Score: 18 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.asm b/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.asm index a987e220d..1a2e7e8f7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.asm @@ -3,7 +3,7 @@ .pc = $80d "Program" jsr main main: { - .const SCREEN = $400 + .label SCREEN = $400 ldx #0 b1: lda s5,x diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.log b/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.log index af207fc31..1db6179c7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.log @@ -334,7 +334,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const SCREEN = $400 + .label SCREEN = $400 .label i = 2 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: @@ -403,7 +403,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const SCREEN = $400 + .label SCREEN = $400 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -493,7 +493,7 @@ Score: 192 //SEG8 @end //SEG9 main main: { - .const SCREEN = $400 + .label SCREEN = $400 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constantmin.asm b/src/test/java/dk/camelot64/kickc/test/ref/constantmin.asm index a84fd5ebf..dcb7e8634 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constantmin.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/constantmin.asm @@ -1,11 +1,11 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 .const STAR = $51 - .const VIC = $d000 + .label VIC = $d000 .const RED = 2 - .const BGCOL = VIC+$10*2+1 + .label BGCOL = VIC+$10*2+1 jsr main main: { lda #STAR diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log b/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log index f4dd545cb..9ad6961ef 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log @@ -289,11 +289,11 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .const STAR = $51 - .const VIC = $d000 + .label VIC = $d000 .const RED = 2 - .const BGCOL = VIC+$10*2+1 + .label BGCOL = VIC+$10*2+1 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -369,11 +369,11 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .const STAR = $51 - .const VIC = $d000 + .label VIC = $d000 .const RED = 2 - .const BGCOL = VIC+$10*2+1 + .label BGCOL = VIC+$10*2+1 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -474,11 +474,11 @@ Score: 179 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .const STAR = $51 - .const VIC = $d000 + .label VIC = $d000 .const RED = 2 - .const BGCOL = VIC+$10*2+1 + .label BGCOL = VIC+$10*2+1 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constants.asm b/src/test/java/dk/camelot64/kickc/test/ref/constants.asm index e48b40bbd..51dd6bb4e 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constants.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/constants.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const BGCOL = $d021 + .label BGCOL = $d021 .const GREEN = 5 .const RED = 2 .label char_cursor = 2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constants.log b/src/test/java/dk/camelot64/kickc/test/ref/constants.log index 26dd85d0d..1c659a601 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constants.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constants.log @@ -2368,7 +2368,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .const GREEN = 5 .const RED = 2 .label char_cursor = 6 @@ -3005,7 +3005,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .const GREEN = 5 .const RED = 2 .label char_cursor = 2 @@ -3787,7 +3787,7 @@ Score: 1858 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .const GREEN = 5 .const RED = 2 .label char_cursor = 2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/division.asm b/src/test/java/dk/camelot64/kickc/test/ref/division.asm new file mode 100644 index 000000000..65c0128d6 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/division.asm @@ -0,0 +1,199 @@ +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label char_cursor = 5 + .label line_cursor = 3 + jsr main +main: { + .label rem = $ff + .label dividend = $b + .label divisor = $c + .label res = 9 + .label i = 2 + jsr print_cls + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + lda #0 + sta i + b1: + ldy i + lda dividends,y + sta dividend + lda divisors,y + sta divisor + lda dividend + sta div8u.dividend + jsr div8u + lda div8u.return + sta res + ldx dividend + jsr print_byte + lda #str + sta print_str.str+1 + jsr print_str + ldx divisor + jsr print_byte + lda #str1 + sta print_str.str+1 + jsr print_str + ldx res + jsr print_byte + lda #str2 + sta print_str.str+1 + jsr print_str + ldx rem + jsr print_byte + jsr print_ln + inc i + lda i + cmp #6 + bne b13 + rts + b13: + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + jmp b1 + str: .text " / @" + str1: .text " = @" + str2: .text " @" + dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff + divisors: .byte 5, 7, $b, $d, $11, $13 +} +print_ln: { + b1: + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + lda line_cursor+1 + cmp char_cursor+1 + bcc b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1 + !: + rts +} +print_byte: { + txa + lsr + lsr + lsr + lsr + tay + lda hextab,y + jsr print_char + txa + and #$f + tay + lda hextab,y + jsr print_char + rts + hextab: .text "0123456789abcdef" +} +print_char: { + ldy #0 + sta (char_cursor),y + inc char_cursor + bne !+ + inc char_cursor+1 + !: + rts +} +print_str: { + .label str = 7 + b1: + ldy #0 + lda (str),y + cmp #'@' + bne b2 + rts + b2: + ldy #0 + lda (str),y + sta (char_cursor),y + inc char_cursor + bne !+ + inc char_cursor+1 + !: + inc str + bne !+ + inc str+1 + !: + jmp b1 +} +div8u: { + .label dividend = 9 + .label divisor = $c + .label quotient = $a + .label return = $a + ldx #0 + txa + sta quotient + tay + b1: + tya + asl + tay + lda #$80 + and dividend + cmp #0 + beq b2 + iny + b2: + asl dividend + asl quotient + cpy divisor + bcc b3 + inc quotient + tya + sec + sbc divisor + tay + b3: + inx + cpx #8 + bne b1 + sty main.rem + rts +} +print_cls: { + .label sc = 3 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + b1: + lda #' ' + ldy #0 + sta (sc),y + inc sc + bne !+ + inc sc+1 + !: + lda sc+1 + cmp #>$400+$3e8 + bne b1 + lda sc + cmp #<$400+$3e8 + bne b1 + rts +} diff --git a/src/test/java/dk/camelot64/kickc/test/ref/division.cfg b/src/test/java/dk/camelot64/kickc/test/ref/division.cfg new file mode 100644 index 000000000..480a53502 --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/division.cfg @@ -0,0 +1,167 @@ +@begin: scope:[] from + [0] phi() [ ] ( ) + to:@10 +@10: scope:[] from @begin + [1] phi() [ ] ( ) + [2] call main param-assignment [ ] ( ) + to:@end +@end: scope:[] from @10 + [3] phi() [ ] ( ) +main: scope:[main] from @10 + [4] phi() [ ] ( main:2 [ ] ) + [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + to:main::@1 +main::@1: scope:[main] from main main::@13 + [6] (byte*) line_cursor#13 ← phi( main::@13/(byte*) line_cursor#1 main/((byte*))(word/signed word/dword/signed dword) 1024 ) [ main::i#10 char_cursor#42 line_cursor#13 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 ] ) + [6] (byte*) char_cursor#42 ← phi( main::@13/(byte*~) char_cursor#48 main/((byte*))(word/signed word/dword/signed dword) 1024 ) [ main::i#10 char_cursor#42 line_cursor#13 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 ] ) + [6] (byte) main::i#10 ← phi( main::@13/(byte) main::i#1 main/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ main::i#10 char_cursor#42 line_cursor#13 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 ] ) + [7] (byte) main::dividend#0 ← *((const byte[]) main::dividends#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ) + [8] (byte) main::divisor#0 ← *((const byte[]) main::divisors#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ) + [9] (byte) div8u::dividend#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ) + [10] (byte) div8u::divisor#0 ← (byte) main::divisor#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + [11] call div8u param-assignment [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + [12] (byte) div8u::return#0 ← (byte) div8u::return#1 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ) + to:main::@4 +main::@4: scope:[main] from main::@1 + [13] (byte) main::res#0 ← (byte) div8u::return#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ) + [14] (byte) print_byte::b#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ) + [15] call print_byte param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ) + to:main::@5 +main::@5: scope:[main] from main::@4 + [16] phi() [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ) + [17] call print_str param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ) + to:main::@6 +main::@6: scope:[main] from main::@5 + [18] (byte) print_byte::b#1 ← (byte) main::divisor#0 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ) + [19] call print_byte param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ) + to:main::@7 +main::@7: scope:[main] from main::@6 + [20] phi() [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ) + [21] call print_str param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ) + to:main::@8 +main::@8: scope:[main] from main::@7 + [22] (byte) print_byte::b#2 ← (byte) main::res#0 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ) + [23] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:main::@9 +main::@9: scope:[main] from main::@8 + [24] phi() [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + [25] call print_str param-assignment [ main::i#10 line_cursor#13 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + to:main::@10 +main::@10: scope:[main] from main::@9 + [26] (byte) print_byte::b#3 ← *((const byte*) main::rem#0) [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ) + [27] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:main::@11 +main::@11: scope:[main] from main::@10 + [28] phi() [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + [29] call print_ln param-assignment [ main::i#10 line_cursor#1 ] ( main:2 [ main::i#10 line_cursor#1 ] ) + to:main::@12 +main::@12: scope:[main] from main::@11 + [30] (byte) main::i#1 ← ++ (byte) main::i#10 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) + [31] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@13 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) + to:main::@return +main::@return: scope:[main] from main::@12 + [32] return [ ] ( main:2 [ ] ) + to:@return +main::@13: scope:[main] from main::@12 + [33] (byte*~) char_cursor#48 ← (byte*) line_cursor#1 [ main::i#1 char_cursor#48 line_cursor#1 ] ( main:2 [ main::i#1 char_cursor#48 line_cursor#1 ] ) + to:main::@1 +print_ln: scope:[print_ln] from main::@11 + [34] phi() [ line_cursor#13 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + [35] (byte*) line_cursor#6 ← phi( print_ln/(byte*) line_cursor#13 print_ln::@1/(byte*) line_cursor#1 ) [ line_cursor#6 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#6 char_cursor#28 ] ) + [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) + [37] if((byte*) line_cursor#1<(byte*) char_cursor#28) goto print_ln::@1 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@1 + [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 ] ) + to:@return +print_byte: scope:[print_byte] from main::@10 main::@4 main::@6 main::@8 + [39] (byte*) char_cursor#41 ← phi( main::@10/(byte*) char_cursor#2 main::@4/(byte*) char_cursor#42 main::@6/(byte*) char_cursor#2 main::@8/(byte*) char_cursor#2 ) [ print_byte::b#4 char_cursor#41 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 ] ) + [39] (byte) print_byte::b#4 ← phi( main::@10/(byte) print_byte::b#3 main::@4/(byte) print_byte::b#0 main::@6/(byte) print_byte::b#1 main::@8/(byte) print_byte::b#2 ) [ print_byte::b#4 char_cursor#41 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 ] ) + [40] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#4 char_cursor#41 print_byte::$0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] ) + [41] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#4 char_cursor#41 print_char::ch#0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] ) + [42] call print_char param-assignment [ char_cursor#28 print_byte::b#4 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] ) + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [43] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ char_cursor#28 print_byte::$2 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] ) + [44] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#28 print_char::ch#1 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] ) + [45] call print_char param-assignment [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [46] return [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 + [47] (byte*) char_cursor#27 ← phi( print_byte/(byte*) char_cursor#41 print_byte::@1/(byte*) char_cursor#28 ) [ print_char::ch#2 char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_char::ch#2 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 print_char::ch#2 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 print_char::ch#2 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 print_char::ch#2 char_cursor#27 ] ) + [47] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) [ print_char::ch#2 char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_char::ch#2 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 print_char::ch#2 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 print_char::ch#2 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 print_char::ch#2 char_cursor#27 ] ) + [48] *((byte*) char_cursor#27) ← (byte) print_char::ch#2 [ char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] ) + [49] (byte*) char_cursor#28 ← ++ (byte*) char_cursor#27 [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [50] return [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:@return +print_str: scope:[print_str] from main::@5 main::@7 main::@9 + [51] (byte*) print_str::str#6 ← phi( main::@5/(const string) main::str main::@7/(const string) main::str1 main::@9/(const string) main::str2 ) [ char_cursor#28 print_str::str#6 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_str::str#6 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_str::str#6 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#28 print_str::str#6 ] ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + [52] (byte*) char_cursor#2 ← phi( print_str/(byte*) char_cursor#28 print_str::@2/(byte*) char_cursor#1 ) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) + [52] (byte*) print_str::str#4 ← phi( print_str/(byte*) print_str::str#6 print_str::@2/(byte*) print_str::str#0 ) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) + [53] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) + to:print_str::@return +print_str::@return: scope:[print_str] from print_str::@1 + [54] return [ char_cursor#2 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + to:@return +print_str::@2: scope:[print_str] from print_str::@1 + [55] *((byte*) char_cursor#2) ← *((byte*) print_str::str#4) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) + [56] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#4 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#4 char_cursor#1 ] ) + [57] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#4 [ print_str::str#0 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#0 char_cursor#1 ] ) + to:print_str::@1 +div8u: scope:[div8u] from main::@1 + [58] phi() [ div8u::dividend#0 div8u::divisor#0 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + to:div8u::@1 +div8u::@1: scope:[div8u] from div8u div8u::@3 + [59] (byte) div8u::i#2 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::i#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [59] (byte) div8u::quotient#3 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::return#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [59] (byte) div8u::dividend#2 ← phi( div8u/(byte) div8u::dividend#0 div8u::@3/(byte) div8u::dividend#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [59] (byte) div8u::rem#4 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::rem#8 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [60] (byte) div8u::rem#1 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) + [61] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) + [62] if((byte~) div8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8u::@2 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) + to:div8u::@4 +div8u::@4: scope:[div8u] from div8u::@1 + [63] (byte) div8u::rem#2 ← ++ (byte) div8u::rem#1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ) + to:div8u::@2 +div8u::@2: scope:[div8u] from div8u::@1 div8u::@4 + [64] (byte) div8u::rem#5 ← phi( div8u::@1/(byte) div8u::rem#1 div8u::@4/(byte) div8u::rem#2 ) [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#5 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#5 ] ) + [65] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) + [66] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) + [67] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) + to:div8u::@5 +div8u::@5: scope:[div8u] from div8u::@2 + [68] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) + [69] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) + to:div8u::@3 +div8u::@3: scope:[div8u] from div8u::@2 div8u::@5 + [70] (byte) div8u::return#1 ← phi( div8u::@2/(byte) div8u::quotient#1 div8u::@5/(byte) div8u::quotient#2 ) [ div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ) + [70] (byte) div8u::rem#8 ← phi( div8u::@2/(byte) div8u::rem#5 div8u::@5/(byte) div8u::rem#3 ) [ div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ) + [71] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) + [72] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) + to:div8u::@6 +div8u::@6: scope:[div8u] from div8u::@3 + [73] *((const byte*) main::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + to:div8u::@return +div8u::@return: scope:[div8u] from div8u::@6 + [74] return [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + to:@return +print_cls: scope:[print_cls] from main + [75] phi() [ ] ( main:2::print_cls:5 [ ] ) + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + [76] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [77] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [78] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + [79] if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + [80] return [ ] ( main:2::print_cls:5 [ ] ) + to:@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/division.log b/src/test/java/dk/camelot64/kickc/test/ref/division.log new file mode 100644 index 000000000..4c4c1b0cd --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/division.log @@ -0,0 +1,3711 @@ +PARSING src/test/java/dk/camelot64/kickc/test/kc/division.kc +import "print.kc" + +const byte* NULL = 0; + +void main() { + byte* rem = $ff; + + byte[] dividends = { 255, 255, 255, 255, 255, 255}; + byte[] divisors = { 5, 7, 11, 13, 17, 19 }; + + print_cls(); + for( byte i: 0..5 ) { + byte dividend = dividends[i]; + byte divisor = divisors[i]; + byte res = div8u(dividend, divisor, rem); + print_byte(dividend); + print_str(" / @"); + print_byte(divisor); + print_str(" = @"); + print_byte(res); + print_str(" @"); + print_byte(*rem); + print_ln(); + } +} + +// Performs division on two 8 bit unsigned bytes +// Returns dividend/divisor. +// If remainder is non-null it will be set to the remainder. +// Implemented using simple binary division +byte div8u(byte dividend, byte divisor, byte* remainder) { + byte rem = 0; + byte quotient = 0; + for( byte i : 0..7) { + rem = rem << 1; + if( (dividend & $80) != 0 ) { + rem++; + } + dividend = dividend << 1; + quotient = quotient << 1; + if(rem>=divisor) { + quotient++; + rem = rem - divisor; + } + } + *remainder = rem; + return quotient; +} +Importing print.kc +PARSING src/test/java/dk/camelot64/kickc/test/kc/print.kc + +byte* line_cursor = $0400; +byte* char_cursor = line_cursor; + +// Print a zero-terminated string +void print_str(byte* str) { + while(*str!='@') { + *(char_cursor++) = *(str++); + } +} + +// Print a newline +void print_ln() { + do { + line_cursor = line_cursor + $28; + } while (line_cursorw); + print_byte(>4]); + print_char(hextab[b&$f]); +} + +// Print a single char +void print_char(byte ch) { + *(char_cursor++) = ch; +} + +// Clear the screen +void print_cls() { + for(byte* sc=$0400; sc!=$0400+1000; sc++) { + *sc = ' '; + } +} + + + +Adding pre/post-modifier (byte*) char_cursor ← ++ (byte*) char_cursor +Adding pre/post-modifier (byte*) print_str::str ← ++ (byte*) print_str::str +Adding pre/post-modifier (byte*) char_cursor ← ++ (byte*) char_cursor +Adding pre/post-modifier (byte*) print_cls::sc ← ++ (byte*) print_cls::sc +Adding pre/post-modifier (byte) div8u::rem ← ++ (byte) div8u::rem +Adding pre/post-modifier (byte) div8u::quotient ← ++ (byte) div8u::quotient + +STATEMENTS + (byte*) line_cursor ← (word/signed word/dword/signed dword) 1024 + (byte*) char_cursor ← (byte*) line_cursor +proc (void()) print_str((byte*) print_str::str) +print_str::@1: + (boolean~) print_str::$0 ← *((byte*) print_str::str) != (byte) '@' + if((boolean~) print_str::$0) goto print_str::@2 + goto print_str::@3 +print_str::@2: + *((byte*) char_cursor) ← *((byte*) print_str::str) + (byte*) char_cursor ← ++ (byte*) char_cursor + (byte*) print_str::str ← ++ (byte*) print_str::str + goto print_str::@1 +print_str::@3: +print_str::@return: + return +endproc // print_str() +proc (void()) print_ln() +print_ln::@1: + (byte*~) print_ln::$0 ← (byte*) line_cursor + (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte*) line_cursor ← (byte*~) print_ln::$0 + (boolean~) print_ln::$1 ← (byte*) line_cursor < (byte*) char_cursor + if((boolean~) print_ln::$1) goto print_ln::@1 + (byte*) char_cursor ← (byte*) line_cursor +print_ln::@return: + return +endproc // print_ln() +proc (void()) print_sword((signed word) print_sword::w) + (boolean~) print_sword::$0 ← (signed word) print_sword::w < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) print_sword::$1 ← ! (boolean~) print_sword::$0 + if((boolean~) print_sword::$1) goto print_sword::@1 + (void~) print_sword::$2 ← call print_char (byte) '-' + (signed word~) print_sword::$3 ← - (signed word) print_sword::w + (signed word) print_sword::w ← (signed word~) print_sword::$3 +print_sword::@1: + (word~) print_sword::$4 ← ((word)) (signed word) print_sword::w + (void~) print_sword::$5 ← call print_word (word~) print_sword::$4 +print_sword::@return: + return +endproc // print_sword() +proc (void()) print_sbyte((signed byte) print_sbyte::b) + (boolean~) print_sbyte::$0 ← (signed byte) print_sbyte::b < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) print_sbyte::$1 ← ! (boolean~) print_sbyte::$0 + if((boolean~) print_sbyte::$1) goto print_sbyte::@1 + (void~) print_sbyte::$2 ← call print_char (byte) '-' + (signed byte~) print_sbyte::$3 ← - (signed byte) print_sbyte::b + (signed byte) print_sbyte::b ← (signed byte~) print_sbyte::$3 +print_sbyte::@1: + (byte~) print_sbyte::$4 ← ((byte)) (signed byte) print_sbyte::b + (void~) print_sbyte::$5 ← call print_byte (byte~) print_sbyte::$4 +print_sbyte::@return: + return +endproc // print_sbyte() +proc (void()) print_word((word) print_word::w) + (byte~) print_word::$0 ← > (word) print_word::w + (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 + (byte~) print_word::$2 ← < (word) print_word::w + (void~) print_word::$3 ← call print_byte (byte~) print_word::$2 +print_word::@return: + return +endproc // print_word() +proc (void()) print_byte((byte) print_byte::b) + (byte[]) print_byte::hextab ← (string) "0123456789abcdef" + (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4 + (void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0) + (byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word/dword/signed dword) 15 + (void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2) +print_byte::@return: + return +endproc // print_byte() +proc (void()) print_char((byte) print_char::ch) + *((byte*) char_cursor) ← (byte) print_char::ch + (byte*) char_cursor ← ++ (byte*) char_cursor +print_char::@return: + return +endproc // print_char() +proc (void()) print_cls() + (byte*) print_cls::sc ← (word/signed word/dword/signed dword) 1024 +print_cls::@1: + *((byte*) print_cls::sc) ← (byte) ' ' + (byte*) print_cls::sc ← ++ (byte*) print_cls::sc + (word/signed word/dword/signed dword~) print_cls::$0 ← (word/signed word/dword/signed dword) 1024 + (word/signed word/dword/signed dword) 1000 + (boolean~) print_cls::$1 ← (byte*) print_cls::sc != (word/signed word/dword/signed dword~) print_cls::$0 + if((boolean~) print_cls::$1) goto print_cls::@1 +print_cls::@return: + return +endproc // print_cls() + (byte*) NULL ← (byte/signed byte/word/signed word/dword/signed dword) 0 +proc (void()) main() + (byte*) main::rem ← (byte/word/signed word/dword/signed dword) 255 + (byte[]) main::dividends ← { (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255 } + (byte[]) main::divisors ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 } + (void~) main::$0 ← call print_cls + (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 +main::@1: + (byte) main::dividend ← *((byte[]) main::dividends + (byte) main::i) + (byte) main::divisor ← *((byte[]) main::divisors + (byte) main::i) + (byte~) main::$1 ← call div8u (byte) main::dividend (byte) main::divisor (byte*) main::rem + (byte) main::res ← (byte~) main::$1 + (void~) main::$2 ← call print_byte (byte) main::dividend + (void~) main::$3 ← call print_str (string) " / @" + (void~) main::$4 ← call print_byte (byte) main::divisor + (void~) main::$5 ← call print_str (string) " = @" + (void~) main::$6 ← call print_byte (byte) main::res + (void~) main::$7 ← call print_str (string) " @" + (void~) main::$8 ← call print_byte *((byte*) main::rem) + (void~) main::$9 ← call print_ln + (byte) main::i ← ++ (byte) main::i + (boolean~) main::$10 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 6 + if((boolean~) main::$10) goto main::@1 +main::@return: + return +endproc // main() +proc (byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) + (byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 +div8u::@1: + (byte~) div8u::$0 ← (byte) div8u::rem << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::rem ← (byte~) div8u::$0 + (byte~) div8u::$1 ← (byte) div8u::dividend & (byte/word/signed word/dword/signed dword) 128 + (boolean~) div8u::$2 ← (byte~) div8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) div8u::$3 ← ! (boolean~) div8u::$2 + if((boolean~) div8u::$3) goto div8u::@2 + (byte) div8u::rem ← ++ (byte) div8u::rem +div8u::@2: + (byte~) div8u::$4 ← (byte) div8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::dividend ← (byte~) div8u::$4 + (byte~) div8u::$5 ← (byte) div8u::quotient << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::quotient ← (byte~) div8u::$5 + (boolean~) div8u::$6 ← (byte) div8u::rem >= (byte) div8u::divisor + (boolean~) div8u::$7 ← ! (boolean~) div8u::$6 + if((boolean~) div8u::$7) goto div8u::@3 + (byte) div8u::quotient ← ++ (byte) div8u::quotient + (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 ← (byte) div8u::rem - (byte) div8u::divisor + (byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 +div8u::@3: + (byte) div8u::i ← ++ (byte) div8u::i + (boolean~) div8u::$9 ← (byte) div8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) div8u::$9) goto div8u::@1 + *((byte*) div8u::remainder) ← (byte) div8u::rem + (byte) div8u::return ← (byte) div8u::quotient + goto div8u::@return +div8u::@return: + (byte) div8u::return ← (byte) div8u::return + return (byte) div8u::return +endproc // div8u() + call main + +SYMBOLS +(byte*) NULL +(byte*) char_cursor +(byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) +(byte~) div8u::$0 +(byte~) div8u::$1 +(boolean~) div8u::$2 +(boolean~) div8u::$3 +(byte~) div8u::$4 +(byte~) div8u::$5 +(boolean~) div8u::$6 +(boolean~) div8u::$7 +(byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 +(boolean~) div8u::$9 +(label) div8u::@1 +(label) div8u::@2 +(label) div8u::@3 +(label) div8u::@return +(byte) div8u::dividend +(byte) div8u::divisor +(byte) div8u::i +(byte) div8u::quotient +(byte) div8u::rem +(byte*) div8u::remainder +(byte) div8u::return +(byte*) line_cursor +(void()) main() +(void~) main::$0 +(byte~) main::$1 +(boolean~) main::$10 +(void~) main::$2 +(void~) main::$3 +(void~) main::$4 +(void~) main::$5 +(void~) main::$6 +(void~) main::$7 +(void~) main::$8 +(void~) main::$9 +(label) main::@1 +(label) main::@return +(byte) main::dividend +(byte[]) main::dividends +(byte) main::divisor +(byte[]) main::divisors +(byte) main::i +(byte*) main::rem +(byte) main::res +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 +(void~) print_byte::$1 +(byte~) print_byte::$2 +(void~) print_byte::$3 +(label) print_byte::@return +(byte) print_byte::b +(byte[]) print_byte::hextab +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(void()) print_cls() +(word/signed word/dword/signed dword~) print_cls::$0 +(boolean~) print_cls::$1 +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(void()) print_ln() +(byte*~) print_ln::$0 +(boolean~) print_ln::$1 +(label) print_ln::@1 +(label) print_ln::@return +(void()) print_sbyte((signed byte) print_sbyte::b) +(boolean~) print_sbyte::$0 +(boolean~) print_sbyte::$1 +(void~) print_sbyte::$2 +(signed byte~) print_sbyte::$3 +(byte~) print_sbyte::$4 +(void~) print_sbyte::$5 +(label) print_sbyte::@1 +(label) print_sbyte::@return +(signed byte) print_sbyte::b +(void()) print_str((byte*) print_str::str) +(boolean~) print_str::$0 +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@3 +(label) print_str::@return +(byte*) print_str::str +(void()) print_sword((signed word) print_sword::w) +(boolean~) print_sword::$0 +(boolean~) print_sword::$1 +(void~) print_sword::$2 +(signed word~) print_sword::$3 +(word~) print_sword::$4 +(void~) print_sword::$5 +(label) print_sword::@1 +(label) print_sword::@return +(signed word) print_sword::w +(void()) print_word((word) print_word::w) +(byte~) print_word::$0 +(void~) print_word::$1 +(byte~) print_word::$2 +(void~) print_word::$3 +(label) print_word::@return +(word) print_word::w + +Promoting word/signed word/dword/signed dword to byte* in line_cursor ← ((byte*)) 1024 +Promoting word/signed word/dword/signed dword to byte* in print_cls::sc ← ((byte*)) 1024 +Promoting byte/signed byte/word/signed word/dword/signed dword to byte* in NULL ← ((byte*)) 0 +Promoting byte/word/signed word/dword/signed dword to byte* in main::rem ← ((byte*)) 255 +INITIAL CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) line_cursor ← ((byte*)) (word/signed word/dword/signed dword) 1024 + (byte*) char_cursor ← (byte*) line_cursor + to:@1 +print_str: scope:[print_str] from + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + (boolean~) print_str::$0 ← *((byte*) print_str::str) != (byte) '@' + if((boolean~) print_str::$0) goto print_str::@2 + to:print_str::@4 +print_str::@2: scope:[print_str] from print_str::@1 print_str::@5 + *((byte*) char_cursor) ← *((byte*) print_str::str) + (byte*) char_cursor ← ++ (byte*) char_cursor + (byte*) print_str::str ← ++ (byte*) print_str::str + to:print_str::@1 +print_str::@4: scope:[print_str] from print_str::@1 + to:print_str::@3 +print_str::@3: scope:[print_str] from print_str::@4 print_str::@6 + to:print_str::@return +print_str::@5: scope:[print_str] from + to:print_str::@2 +print_str::@6: scope:[print_str] from + to:print_str::@3 +print_str::@return: scope:[print_str] from print_str::@3 + return + to:@return +@1: scope:[] from @begin + to:@2 +print_ln: scope:[print_ln] from + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + (byte*~) print_ln::$0 ← (byte*) line_cursor + (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte*) line_cursor ← (byte*~) print_ln::$0 + (boolean~) print_ln::$1 ← (byte*) line_cursor < (byte*) char_cursor + if((boolean~) print_ln::$1) goto print_ln::@1 + to:print_ln::@2 +print_ln::@2: scope:[print_ln] from print_ln::@1 + (byte*) char_cursor ← (byte*) line_cursor + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@2 + return + to:@return +@2: scope:[] from @1 + to:@3 +print_sword: scope:[print_sword] from + (boolean~) print_sword::$0 ← (signed word) print_sword::w < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) print_sword::$1 ← ! (boolean~) print_sword::$0 + if((boolean~) print_sword::$1) goto print_sword::@1 + to:print_sword::@2 +print_sword::@1: scope:[print_sword] from print_sword print_sword::@2 + (word~) print_sword::$4 ← ((word)) (signed word) print_sword::w + (void~) print_sword::$5 ← call print_word (word~) print_sword::$4 + to:print_sword::@return +print_sword::@2: scope:[print_sword] from print_sword + (void~) print_sword::$2 ← call print_char (byte) '-' + (signed word~) print_sword::$3 ← - (signed word) print_sword::w + (signed word) print_sword::w ← (signed word~) print_sword::$3 + to:print_sword::@1 +print_sword::@return: scope:[print_sword] from print_sword::@1 + return + to:@return +@3: scope:[] from @2 + to:@4 +print_sbyte: scope:[print_sbyte] from + (boolean~) print_sbyte::$0 ← (signed byte) print_sbyte::b < (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) print_sbyte::$1 ← ! (boolean~) print_sbyte::$0 + if((boolean~) print_sbyte::$1) goto print_sbyte::@1 + to:print_sbyte::@2 +print_sbyte::@1: scope:[print_sbyte] from print_sbyte print_sbyte::@2 + (byte~) print_sbyte::$4 ← ((byte)) (signed byte) print_sbyte::b + (void~) print_sbyte::$5 ← call print_byte (byte~) print_sbyte::$4 + to:print_sbyte::@return +print_sbyte::@2: scope:[print_sbyte] from print_sbyte + (void~) print_sbyte::$2 ← call print_char (byte) '-' + (signed byte~) print_sbyte::$3 ← - (signed byte) print_sbyte::b + (signed byte) print_sbyte::b ← (signed byte~) print_sbyte::$3 + to:print_sbyte::@1 +print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@1 + return + to:@return +@4: scope:[] from @3 + to:@5 +print_word: scope:[print_word] from + (byte~) print_word::$0 ← > (word) print_word::w + (void~) print_word::$1 ← call print_byte (byte~) print_word::$0 + (byte~) print_word::$2 ← < (word) print_word::w + (void~) print_word::$3 ← call print_byte (byte~) print_word::$2 + to:print_word::@return +print_word::@return: scope:[print_word] from print_word + return + to:@return +@5: scope:[] from @4 + to:@6 +print_byte: scope:[print_byte] from + (byte[]) print_byte::hextab ← (string) "0123456789abcdef" + (byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4 + (void~) print_byte::$1 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$0) + (byte~) print_byte::$2 ← (byte) print_byte::b & (byte/signed byte/word/signed word/dword/signed dword) 15 + (void~) print_byte::$3 ← call print_char *((byte[]) print_byte::hextab + (byte~) print_byte::$2) + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte + return + to:@return +@6: scope:[] from @5 + to:@7 +print_char: scope:[print_char] from + *((byte*) char_cursor) ← (byte) print_char::ch + (byte*) char_cursor ← ++ (byte*) char_cursor + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + return + to:@return +@7: scope:[] from @6 + to:@8 +print_cls: scope:[print_cls] from + (byte*) print_cls::sc ← ((byte*)) (word/signed word/dword/signed dword) 1024 + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + *((byte*) print_cls::sc) ← (byte) ' ' + (byte*) print_cls::sc ← ++ (byte*) print_cls::sc + (word/signed word/dword/signed dword~) print_cls::$0 ← (word/signed word/dword/signed dword) 1024 + (word/signed word/dword/signed dword) 1000 + (boolean~) print_cls::$1 ← (byte*) print_cls::sc != (word/signed word/dword/signed dword~) print_cls::$0 + if((boolean~) print_cls::$1) goto print_cls::@1 + to:print_cls::@2 +print_cls::@2: scope:[print_cls] from print_cls::@1 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@2 + return + to:@return +@8: scope:[] from @7 + (byte*) NULL ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0 + to:@9 +main: scope:[main] from + (byte*) main::rem ← ((byte*)) (byte/word/signed word/dword/signed dword) 255 + (byte[]) main::dividends ← { (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255 } + (byte[]) main::divisors ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 } + (void~) main::$0 ← call print_cls + (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte) main::dividend ← *((byte[]) main::dividends + (byte) main::i) + (byte) main::divisor ← *((byte[]) main::divisors + (byte) main::i) + (byte~) main::$1 ← call div8u (byte) main::dividend (byte) main::divisor (byte*) main::rem + (byte) main::res ← (byte~) main::$1 + (void~) main::$2 ← call print_byte (byte) main::dividend + (void~) main::$3 ← call print_str (string) " / @" + (void~) main::$4 ← call print_byte (byte) main::divisor + (void~) main::$5 ← call print_str (string) " = @" + (void~) main::$6 ← call print_byte (byte) main::res + (void~) main::$7 ← call print_str (string) " @" + (void~) main::$8 ← call print_byte *((byte*) main::rem) + (void~) main::$9 ← call print_ln + (byte) main::i ← ++ (byte) main::i + (boolean~) main::$10 ← (byte) main::i != (byte/signed byte/word/signed word/dword/signed dword) 6 + if((boolean~) main::$10) goto main::@1 + to:main::@2 +main::@2: scope:[main] from main::@1 + to:main::@return +main::@return: scope:[main] from main::@2 + return + to:@return +@9: scope:[] from @8 + to:@10 +div8u: scope:[div8u] from + (byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:div8u::@1 +div8u::@1: scope:[div8u] from div8u div8u::@3 + (byte~) div8u::$0 ← (byte) div8u::rem << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::rem ← (byte~) div8u::$0 + (byte~) div8u::$1 ← (byte) div8u::dividend & (byte/word/signed word/dword/signed dword) 128 + (boolean~) div8u::$2 ← (byte~) div8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) div8u::$3 ← ! (boolean~) div8u::$2 + if((boolean~) div8u::$3) goto div8u::@2 + to:div8u::@4 +div8u::@2: scope:[div8u] from div8u::@1 div8u::@4 + (byte~) div8u::$4 ← (byte) div8u::dividend << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::dividend ← (byte~) div8u::$4 + (byte~) div8u::$5 ← (byte) div8u::quotient << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::quotient ← (byte~) div8u::$5 + (boolean~) div8u::$6 ← (byte) div8u::rem >= (byte) div8u::divisor + (boolean~) div8u::$7 ← ! (boolean~) div8u::$6 + if((boolean~) div8u::$7) goto div8u::@3 + to:div8u::@5 +div8u::@4: scope:[div8u] from div8u::@1 + (byte) div8u::rem ← ++ (byte) div8u::rem + to:div8u::@2 +div8u::@3: scope:[div8u] from div8u::@2 div8u::@5 + (byte) div8u::i ← ++ (byte) div8u::i + (boolean~) div8u::$9 ← (byte) div8u::i != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) div8u::$9) goto div8u::@1 + to:div8u::@6 +div8u::@5: scope:[div8u] from div8u::@2 + (byte) div8u::quotient ← ++ (byte) div8u::quotient + (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 ← (byte) div8u::rem - (byte) div8u::divisor + (byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 + to:div8u::@3 +div8u::@6: scope:[div8u] from div8u::@3 + *((byte*) div8u::remainder) ← (byte) div8u::rem + (byte) div8u::return ← (byte) div8u::quotient + to:div8u::@return +div8u::@return: scope:[div8u] from div8u::@6 div8u::@7 + (byte) div8u::return ← (byte) div8u::return + return (byte) div8u::return + to:@return +div8u::@7: scope:[div8u] from + to:div8u::@return +@10: scope:[] from @9 + call main + to:@end +@end: scope:[] from @10 + +Removing unused procedure print_sword +Removing unused procedure print_sbyte +Removing unused procedure print_word +Eliminating unused variable - keeping the call (void~) print_byte::$1 +Eliminating unused variable - keeping the call (void~) print_byte::$3 +Eliminating unused variable (byte*) NULL and assignment [30] (byte*) NULL ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable - keeping the call (void~) main::$0 +Eliminating unused variable - keeping the call (void~) main::$2 +Eliminating unused variable - keeping the call (void~) main::$3 +Eliminating unused variable - keeping the call (void~) main::$4 +Eliminating unused variable - keeping the call (void~) main::$5 +Eliminating unused variable - keeping the call (void~) main::$6 +Eliminating unused variable - keeping the call (void~) main::$7 +Eliminating unused variable - keeping the call (void~) main::$8 +Eliminating unused variable - keeping the call (void~) main::$9 +Creating constant string variable for inline (const string) print_byte::$4 "0123456789abcdef" +Creating constant string variable for inline (const string) main::str " / @" +Creating constant string variable for inline (const string) main::str1 " = @" +Creating constant string variable for inline (const string) main::str2 " @" +Removing empty block print_str::@4 +Removing empty block print_str::@3 +Removing empty block print_str::@5 +Removing empty block print_str::@6 +Removing empty block @1 +Removing empty block @2 +Removing empty block @3 +Removing empty block @4 +Removing empty block @5 +Removing empty block @6 +Removing empty block @7 +Removing empty block print_cls::@2 +Removing empty block @8 +Removing empty block main::@2 +Removing empty block @9 +Removing empty block div8u::@7 +PROCEDURE MODIFY VARIABLE ANALYSIS +print_str modifies char_cursor +print_ln modifies line_cursor +print_ln modifies char_cursor +print_byte modifies char_cursor +print_char modifies char_cursor +main modifies char_cursor +main modifies line_cursor + +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... +Completing Phi functions... + +CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN +@begin: scope:[] from + (byte*) line_cursor#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 + (byte*) char_cursor#0 ← (byte*) line_cursor#0 + to:@10 +print_str: scope:[print_str] from main::@5 main::@7 main::@9 + (byte*) char_cursor#44 ← phi( main::@5/(byte*) char_cursor#10 main::@7/(byte*) char_cursor#12 main::@9/(byte*) char_cursor#14 ) + (byte*) print_str::str#6 ← phi( main::@5/(byte*) print_str::str#1 main::@7/(byte*) print_str::str#2 main::@9/(byte*) print_str::str#3 ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + (byte*) char_cursor#39 ← phi( print_str/(byte*) char_cursor#44 print_str::@2/(byte*) char_cursor#1 ) + (byte*) print_str::str#4 ← phi( print_str/(byte*) print_str::str#6 print_str::@2/(byte*) print_str::str#0 ) + (boolean~) print_str::$0 ← *((byte*) print_str::str#4) != (byte) '@' + if((boolean~) print_str::$0) goto print_str::@2 + to:print_str::@return +print_str::@2: scope:[print_str] from print_str::@1 + (byte*) char_cursor#20 ← phi( print_str::@1/(byte*) char_cursor#39 ) + (byte*) print_str::str#5 ← phi( print_str::@1/(byte*) print_str::str#4 ) + *((byte*) char_cursor#20) ← *((byte*) print_str::str#5) + (byte*) char_cursor#1 ← ++ (byte*) char_cursor#20 + (byte*) print_str::str#0 ← ++ (byte*) print_str::str#5 + to:print_str::@1 +print_str::@return: scope:[print_str] from print_str::@1 + (byte*) char_cursor#21 ← phi( print_str::@1/(byte*) char_cursor#39 ) + (byte*) char_cursor#2 ← (byte*) char_cursor#21 + return + to:@return +print_ln: scope:[print_ln] from main::@11 + (byte*) char_cursor#40 ← phi( main::@11/(byte*) char_cursor#16 ) + (byte*) line_cursor#12 ← phi( main::@11/(byte*) line_cursor#13 ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + (byte*) char_cursor#22 ← phi( print_ln/(byte*) char_cursor#40 print_ln::@1/(byte*) char_cursor#22 ) + (byte*) line_cursor#6 ← phi( print_ln/(byte*) line_cursor#12 print_ln::@1/(byte*) line_cursor#1 ) + (byte*~) print_ln::$0 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 + (byte*) line_cursor#1 ← (byte*~) print_ln::$0 + (boolean~) print_ln::$1 ← (byte*) line_cursor#1 < (byte*) char_cursor#22 + if((boolean~) print_ln::$1) goto print_ln::@1 + to:print_ln::@2 +print_ln::@2: scope:[print_ln] from print_ln::@1 + (byte*) line_cursor#7 ← phi( print_ln::@1/(byte*) line_cursor#1 ) + (byte*) char_cursor#3 ← (byte*) line_cursor#7 + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@2 + (byte*) char_cursor#23 ← phi( print_ln::@2/(byte*) char_cursor#3 ) + (byte*) line_cursor#8 ← phi( print_ln::@2/(byte*) line_cursor#7 ) + (byte*) line_cursor#2 ← (byte*) line_cursor#8 + (byte*) char_cursor#4 ← (byte*) char_cursor#23 + return + to:@return +print_byte: scope:[print_byte] from main::@10 main::@4 main::@6 main::@8 + (byte*) char_cursor#41 ← phi( main::@10/(byte*) char_cursor#15 main::@4/(byte*) char_cursor#42 main::@6/(byte*) char_cursor#11 main::@8/(byte*) char_cursor#13 ) + (byte) print_byte::b#4 ← phi( main::@10/(byte) print_byte::b#3 main::@4/(byte) print_byte::b#0 main::@6/(byte) print_byte::b#1 main::@8/(byte) print_byte::b#2 ) + (byte[]) print_byte::hextab#0 ← (const string) print_byte::$4 + (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) print_char::ch#0 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$0) + call print_char param-assignment + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + (byte) print_byte::b#5 ← phi( print_byte/(byte) print_byte::b#4 ) + (byte*) char_cursor#24 ← phi( print_byte/(byte*) char_cursor#9 ) + (byte*) char_cursor#5 ← (byte*) char_cursor#24 + (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte/signed byte/word/signed word/dword/signed dword) 15 + (byte) print_char::ch#1 ← *((byte[]) print_byte::hextab#0 + (byte~) print_byte::$2) + call print_char param-assignment + to:print_byte::@2 +print_byte::@2: scope:[print_byte] from print_byte::@1 + (byte*) char_cursor#25 ← phi( print_byte::@1/(byte*) char_cursor#9 ) + (byte*) char_cursor#6 ← (byte*) char_cursor#25 + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@2 + (byte*) char_cursor#26 ← phi( print_byte::@2/(byte*) char_cursor#6 ) + (byte*) char_cursor#7 ← (byte*) char_cursor#26 + return + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 + (byte*) char_cursor#27 ← phi( print_byte/(byte*) char_cursor#41 print_byte::@1/(byte*) char_cursor#5 ) + (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) + *((byte*) char_cursor#27) ← (byte) print_char::ch#2 + (byte*) char_cursor#8 ← ++ (byte*) char_cursor#27 + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + (byte*) char_cursor#28 ← phi( print_char/(byte*) char_cursor#8 ) + (byte*) char_cursor#9 ← (byte*) char_cursor#28 + return + to:@return +print_cls: scope:[print_cls] from main + (byte*) print_cls::sc#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 ) + *((byte*) print_cls::sc#2) ← (byte) ' ' + (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 + (word/signed word/dword/signed dword~) print_cls::$0 ← (word/signed word/dword/signed dword) 1024 + (word/signed word/dword/signed dword) 1000 + (boolean~) print_cls::$1 ← (byte*) print_cls::sc#1 != (word/signed word/dword/signed dword~) print_cls::$0 + if((boolean~) print_cls::$1) goto print_cls::@1 + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + return + to:@return +main: scope:[main] from @10 + (byte*) line_cursor#24 ← phi( @10/(byte*) line_cursor#14 ) + (byte*) char_cursor#47 ← phi( @10/(byte*) char_cursor#43 ) + (byte*) main::rem#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 255 + (byte[]) main::dividends#0 ← { (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255 } + (byte[]) main::divisors#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 } + call print_cls param-assignment + to:main::@3 +main::@3: scope:[main] from main + (byte*) line_cursor#23 ← phi( main/(byte*) line_cursor#24 ) + (byte*) char_cursor#46 ← phi( main/(byte*) char_cursor#47 ) + (byte*) main::rem#4 ← phi( main/(byte*) main::rem#0 ) + (byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:main::@1 +main::@1: scope:[main] from main::@12 main::@3 + (byte*) line_cursor#22 ← phi( main::@12/(byte*) line_cursor#3 main::@3/(byte*) line_cursor#23 ) + (byte*) char_cursor#45 ← phi( main::@12/(byte*) char_cursor#17 main::@3/(byte*) char_cursor#46 ) + (byte*) main::rem#1 ← phi( main::@12/(byte*) main::rem#3 main::@3/(byte*) main::rem#4 ) + (byte) main::i#2 ← phi( main::@12/(byte) main::i#1 main::@3/(byte) main::i#0 ) + (byte) main::dividend#0 ← *((byte[]) main::dividends#0 + (byte) main::i#2) + (byte) main::divisor#0 ← *((byte[]) main::divisors#0 + (byte) main::i#2) + (byte) div8u::dividend#0 ← (byte) main::dividend#0 + (byte) div8u::divisor#0 ← (byte) main::divisor#0 + (byte*) div8u::remainder#0 ← (byte*) main::rem#1 + call div8u param-assignment + (byte) div8u::return#0 ← (byte) div8u::return#2 + to:main::@4 +main::@4: scope:[main] from main::@1 + (byte) main::i#11 ← phi( main::@1/(byte) main::i#2 ) + (byte*) line_cursor#21 ← phi( main::@1/(byte*) line_cursor#22 ) + (byte*) main::rem#11 ← phi( main::@1/(byte*) main::rem#1 ) + (byte) main::divisor#3 ← phi( main::@1/(byte) main::divisor#0 ) + (byte*) char_cursor#42 ← phi( main::@1/(byte*) char_cursor#45 ) + (byte) main::dividend#1 ← phi( main::@1/(byte) main::dividend#0 ) + (byte) div8u::return#3 ← phi( main::@1/(byte) div8u::return#0 ) + (byte~) main::$1 ← (byte) div8u::return#3 + (byte) main::res#0 ← (byte~) main::$1 + (byte) print_byte::b#0 ← (byte) main::dividend#1 + call print_byte param-assignment + to:main::@5 +main::@5: scope:[main] from main::@4 + (byte) main::i#10 ← phi( main::@4/(byte) main::i#11 ) + (byte*) line_cursor#20 ← phi( main::@4/(byte*) line_cursor#21 ) + (byte*) main::rem#10 ← phi( main::@4/(byte*) main::rem#11 ) + (byte) main::res#4 ← phi( main::@4/(byte) main::res#0 ) + (byte) main::divisor#2 ← phi( main::@4/(byte) main::divisor#3 ) + (byte*) char_cursor#29 ← phi( main::@4/(byte*) char_cursor#7 ) + (byte*) char_cursor#10 ← (byte*) char_cursor#29 + (byte*) print_str::str#1 ← (const string) main::str + call print_str param-assignment + to:main::@6 +main::@6: scope:[main] from main::@5 + (byte) main::i#9 ← phi( main::@5/(byte) main::i#10 ) + (byte*) line_cursor#19 ← phi( main::@5/(byte*) line_cursor#20 ) + (byte*) main::rem#9 ← phi( main::@5/(byte*) main::rem#10 ) + (byte) main::res#3 ← phi( main::@5/(byte) main::res#4 ) + (byte) main::divisor#1 ← phi( main::@5/(byte) main::divisor#2 ) + (byte*) char_cursor#30 ← phi( main::@5/(byte*) char_cursor#2 ) + (byte*) char_cursor#11 ← (byte*) char_cursor#30 + (byte) print_byte::b#1 ← (byte) main::divisor#1 + call print_byte param-assignment + to:main::@7 +main::@7: scope:[main] from main::@6 + (byte) main::i#8 ← phi( main::@6/(byte) main::i#9 ) + (byte*) line_cursor#18 ← phi( main::@6/(byte*) line_cursor#19 ) + (byte*) main::rem#8 ← phi( main::@6/(byte*) main::rem#9 ) + (byte) main::res#2 ← phi( main::@6/(byte) main::res#3 ) + (byte*) char_cursor#31 ← phi( main::@6/(byte*) char_cursor#7 ) + (byte*) char_cursor#12 ← (byte*) char_cursor#31 + (byte*) print_str::str#2 ← (const string) main::str1 + call print_str param-assignment + to:main::@8 +main::@8: scope:[main] from main::@7 + (byte) main::i#7 ← phi( main::@7/(byte) main::i#8 ) + (byte*) line_cursor#17 ← phi( main::@7/(byte*) line_cursor#18 ) + (byte*) main::rem#6 ← phi( main::@7/(byte*) main::rem#8 ) + (byte) main::res#1 ← phi( main::@7/(byte) main::res#2 ) + (byte*) char_cursor#32 ← phi( main::@7/(byte*) char_cursor#2 ) + (byte*) char_cursor#13 ← (byte*) char_cursor#32 + (byte) print_byte::b#2 ← (byte) main::res#1 + call print_byte param-assignment + to:main::@9 +main::@9: scope:[main] from main::@8 + (byte) main::i#6 ← phi( main::@8/(byte) main::i#7 ) + (byte*) line_cursor#16 ← phi( main::@8/(byte*) line_cursor#17 ) + (byte*) main::rem#5 ← phi( main::@8/(byte*) main::rem#6 ) + (byte*) char_cursor#33 ← phi( main::@8/(byte*) char_cursor#7 ) + (byte*) char_cursor#14 ← (byte*) char_cursor#33 + (byte*) print_str::str#3 ← (const string) main::str2 + call print_str param-assignment + to:main::@10 +main::@10: scope:[main] from main::@9 + (byte) main::i#5 ← phi( main::@9/(byte) main::i#6 ) + (byte*) line_cursor#15 ← phi( main::@9/(byte*) line_cursor#16 ) + (byte*) main::rem#2 ← phi( main::@9/(byte*) main::rem#5 ) + (byte*) char_cursor#34 ← phi( main::@9/(byte*) char_cursor#2 ) + (byte*) char_cursor#15 ← (byte*) char_cursor#34 + (byte) print_byte::b#3 ← *((byte*) main::rem#2) + call print_byte param-assignment + to:main::@11 +main::@11: scope:[main] from main::@10 + (byte*) main::rem#7 ← phi( main::@10/(byte*) main::rem#2 ) + (byte) main::i#4 ← phi( main::@10/(byte) main::i#5 ) + (byte*) line_cursor#13 ← phi( main::@10/(byte*) line_cursor#15 ) + (byte*) char_cursor#35 ← phi( main::@10/(byte*) char_cursor#7 ) + (byte*) char_cursor#16 ← (byte*) char_cursor#35 + call print_ln param-assignment + to:main::@12 +main::@12: scope:[main] from main::@11 + (byte*) main::rem#3 ← phi( main::@11/(byte*) main::rem#7 ) + (byte) main::i#3 ← phi( main::@11/(byte) main::i#4 ) + (byte*) char_cursor#36 ← phi( main::@11/(byte*) char_cursor#4 ) + (byte*) line_cursor#9 ← phi( main::@11/(byte*) line_cursor#2 ) + (byte*) line_cursor#3 ← (byte*) line_cursor#9 + (byte*) char_cursor#17 ← (byte*) char_cursor#36 + (byte) main::i#1 ← ++ (byte) main::i#3 + (boolean~) main::$10 ← (byte) main::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 6 + if((boolean~) main::$10) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@12 + (byte*) line_cursor#10 ← phi( main::@12/(byte*) line_cursor#3 ) + (byte*) char_cursor#37 ← phi( main::@12/(byte*) char_cursor#17 ) + (byte*) char_cursor#18 ← (byte*) char_cursor#37 + (byte*) line_cursor#4 ← (byte*) line_cursor#10 + return + to:@return +div8u: scope:[div8u] from main::@1 + (byte*) div8u::remainder#7 ← phi( main::@1/(byte*) div8u::remainder#0 ) + (byte) div8u::divisor#5 ← phi( main::@1/(byte) div8u::divisor#0 ) + (byte) div8u::dividend#4 ← phi( main::@1/(byte) div8u::dividend#0 ) + (byte) div8u::rem#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte) div8u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + to:div8u::@1 +div8u::@1: scope:[div8u] from div8u div8u::@3 + (byte*) div8u::remainder#5 ← phi( div8u/(byte*) div8u::remainder#7 div8u::@3/(byte*) div8u::remainder#2 ) + (byte) div8u::i#5 ← phi( div8u/(byte) div8u::i#0 div8u::@3/(byte) div8u::i#1 ) + (byte) div8u::divisor#3 ← phi( div8u/(byte) div8u::divisor#5 div8u::@3/(byte) div8u::divisor#6 ) + (byte) div8u::quotient#6 ← phi( div8u/(byte) div8u::quotient#0 div8u::@3/(byte) div8u::quotient#8 ) + (byte) div8u::dividend#2 ← phi( div8u/(byte) div8u::dividend#4 div8u::@3/(byte) div8u::dividend#5 ) + (byte) div8u::rem#4 ← phi( div8u/(byte) div8u::rem#0 div8u::@3/(byte) div8u::rem#9 ) + (byte~) div8u::$0 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::rem#1 ← (byte~) div8u::$0 + (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 + (boolean~) div8u::$2 ← (byte~) div8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 + (boolean~) div8u::$3 ← ! (boolean~) div8u::$2 + if((boolean~) div8u::$3) goto div8u::@2 + to:div8u::@4 +div8u::@2: scope:[div8u] from div8u::@1 div8u::@4 + (byte*) div8u::remainder#3 ← phi( div8u::@1/(byte*) div8u::remainder#5 div8u::@4/(byte*) div8u::remainder#6 ) + (byte) div8u::i#3 ← phi( div8u::@1/(byte) div8u::i#5 div8u::@4/(byte) div8u::i#6 ) + (byte) div8u::divisor#1 ← phi( div8u::@1/(byte) div8u::divisor#3 div8u::@4/(byte) div8u::divisor#4 ) + (byte) div8u::rem#5 ← phi( div8u::@1/(byte) div8u::rem#1 div8u::@4/(byte) div8u::rem#2 ) + (byte) div8u::quotient#3 ← phi( div8u::@1/(byte) div8u::quotient#6 div8u::@4/(byte) div8u::quotient#7 ) + (byte) div8u::dividend#3 ← phi( div8u::@1/(byte) div8u::dividend#2 div8u::@4/(byte) div8u::dividend#6 ) + (byte~) div8u::$4 ← (byte) div8u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::dividend#1 ← (byte~) div8u::$4 + (byte~) div8u::$5 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) div8u::quotient#1 ← (byte~) div8u::$5 + (boolean~) div8u::$6 ← (byte) div8u::rem#5 >= (byte) div8u::divisor#1 + (boolean~) div8u::$7 ← ! (boolean~) div8u::$6 + if((boolean~) div8u::$7) goto div8u::@3 + to:div8u::@5 +div8u::@4: scope:[div8u] from div8u::@1 + (byte*) div8u::remainder#6 ← phi( div8u::@1/(byte*) div8u::remainder#5 ) + (byte) div8u::i#6 ← phi( div8u::@1/(byte) div8u::i#5 ) + (byte) div8u::divisor#4 ← phi( div8u::@1/(byte) div8u::divisor#3 ) + (byte) div8u::quotient#7 ← phi( div8u::@1/(byte) div8u::quotient#6 ) + (byte) div8u::dividend#6 ← phi( div8u::@1/(byte) div8u::dividend#2 ) + (byte) div8u::rem#6 ← phi( div8u::@1/(byte) div8u::rem#1 ) + (byte) div8u::rem#2 ← ++ (byte) div8u::rem#6 + to:div8u::@2 +div8u::@3: scope:[div8u] from div8u::@2 div8u::@5 + (byte) div8u::divisor#6 ← phi( div8u::@2/(byte) div8u::divisor#1 div8u::@5/(byte) div8u::divisor#2 ) + (byte) div8u::quotient#8 ← phi( div8u::@2/(byte) div8u::quotient#1 div8u::@5/(byte) div8u::quotient#2 ) + (byte*) div8u::remainder#2 ← phi( div8u::@2/(byte*) div8u::remainder#3 div8u::@5/(byte*) div8u::remainder#4 ) + (byte) div8u::dividend#5 ← phi( div8u::@2/(byte) div8u::dividend#1 div8u::@5/(byte) div8u::dividend#7 ) + (byte) div8u::rem#9 ← phi( div8u::@2/(byte) div8u::rem#5 div8u::@5/(byte) div8u::rem#3 ) + (byte) div8u::i#2 ← phi( div8u::@2/(byte) div8u::i#3 div8u::@5/(byte) div8u::i#4 ) + (byte) div8u::i#1 ← ++ (byte) div8u::i#2 + (boolean~) div8u::$9 ← (byte) div8u::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 8 + if((boolean~) div8u::$9) goto div8u::@1 + to:div8u::@6 +div8u::@5: scope:[div8u] from div8u::@2 + (byte*) div8u::remainder#4 ← phi( div8u::@2/(byte*) div8u::remainder#3 ) + (byte) div8u::dividend#7 ← phi( div8u::@2/(byte) div8u::dividend#1 ) + (byte) div8u::i#4 ← phi( div8u::@2/(byte) div8u::i#3 ) + (byte) div8u::divisor#2 ← phi( div8u::@2/(byte) div8u::divisor#1 ) + (byte) div8u::rem#7 ← phi( div8u::@2/(byte) div8u::rem#5 ) + (byte) div8u::quotient#4 ← phi( div8u::@2/(byte) div8u::quotient#1 ) + (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#4 + (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 ← (byte) div8u::rem#7 - (byte) div8u::divisor#2 + (byte) div8u::rem#3 ← (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 + to:div8u::@3 +div8u::@6: scope:[div8u] from div8u::@3 + (byte) div8u::quotient#5 ← phi( div8u::@3/(byte) div8u::quotient#8 ) + (byte*) div8u::remainder#1 ← phi( div8u::@3/(byte*) div8u::remainder#2 ) + (byte) div8u::rem#8 ← phi( div8u::@3/(byte) div8u::rem#9 ) + *((byte*) div8u::remainder#1) ← (byte) div8u::rem#8 + (byte) div8u::return#1 ← (byte) div8u::quotient#5 + to:div8u::@return +div8u::@return: scope:[div8u] from div8u::@6 + (byte) div8u::return#4 ← phi( div8u::@6/(byte) div8u::return#1 ) + (byte) div8u::return#2 ← (byte) div8u::return#4 + return + to:@return +@10: scope:[] from @begin + (byte*) line_cursor#14 ← phi( @begin/(byte*) line_cursor#0 ) + (byte*) char_cursor#43 ← phi( @begin/(byte*) char_cursor#0 ) + call main param-assignment + to:@11 +@11: scope:[] from @10 + (byte*) line_cursor#11 ← phi( @10/(byte*) line_cursor#4 ) + (byte*) char_cursor#38 ← phi( @10/(byte*) char_cursor#18 ) + (byte*) char_cursor#19 ← (byte*) char_cursor#38 + (byte*) line_cursor#5 ← (byte*) line_cursor#11 + to:@end +@end: scope:[] from @11 + +SYMBOL TABLE SSA +(label) @10 +(label) @11 +(label) @begin +(label) @end +(byte*) char_cursor +(byte*) char_cursor#0 +(byte*) char_cursor#1 +(byte*) char_cursor#10 +(byte*) char_cursor#11 +(byte*) char_cursor#12 +(byte*) char_cursor#13 +(byte*) char_cursor#14 +(byte*) char_cursor#15 +(byte*) char_cursor#16 +(byte*) char_cursor#17 +(byte*) char_cursor#18 +(byte*) char_cursor#19 +(byte*) char_cursor#2 +(byte*) char_cursor#20 +(byte*) char_cursor#21 +(byte*) char_cursor#22 +(byte*) char_cursor#23 +(byte*) char_cursor#24 +(byte*) char_cursor#25 +(byte*) char_cursor#26 +(byte*) char_cursor#27 +(byte*) char_cursor#28 +(byte*) char_cursor#29 +(byte*) char_cursor#3 +(byte*) char_cursor#30 +(byte*) char_cursor#31 +(byte*) char_cursor#32 +(byte*) char_cursor#33 +(byte*) char_cursor#34 +(byte*) char_cursor#35 +(byte*) char_cursor#36 +(byte*) char_cursor#37 +(byte*) char_cursor#38 +(byte*) char_cursor#39 +(byte*) char_cursor#4 +(byte*) char_cursor#40 +(byte*) char_cursor#41 +(byte*) char_cursor#42 +(byte*) char_cursor#43 +(byte*) char_cursor#44 +(byte*) char_cursor#45 +(byte*) char_cursor#46 +(byte*) char_cursor#47 +(byte*) char_cursor#5 +(byte*) char_cursor#6 +(byte*) char_cursor#7 +(byte*) char_cursor#8 +(byte*) char_cursor#9 +(byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) +(byte~) div8u::$0 +(byte~) div8u::$1 +(boolean~) div8u::$2 +(boolean~) div8u::$3 +(byte~) div8u::$4 +(byte~) div8u::$5 +(boolean~) div8u::$6 +(boolean~) div8u::$7 +(byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 +(boolean~) div8u::$9 +(label) div8u::@1 +(label) div8u::@2 +(label) div8u::@3 +(label) div8u::@4 +(label) div8u::@5 +(label) div8u::@6 +(label) div8u::@return +(byte) div8u::dividend +(byte) div8u::dividend#0 +(byte) div8u::dividend#1 +(byte) div8u::dividend#2 +(byte) div8u::dividend#3 +(byte) div8u::dividend#4 +(byte) div8u::dividend#5 +(byte) div8u::dividend#6 +(byte) div8u::dividend#7 +(byte) div8u::divisor +(byte) div8u::divisor#0 +(byte) div8u::divisor#1 +(byte) div8u::divisor#2 +(byte) div8u::divisor#3 +(byte) div8u::divisor#4 +(byte) div8u::divisor#5 +(byte) div8u::divisor#6 +(byte) div8u::i +(byte) div8u::i#0 +(byte) div8u::i#1 +(byte) div8u::i#2 +(byte) div8u::i#3 +(byte) div8u::i#4 +(byte) div8u::i#5 +(byte) div8u::i#6 +(byte) div8u::quotient +(byte) div8u::quotient#0 +(byte) div8u::quotient#1 +(byte) div8u::quotient#2 +(byte) div8u::quotient#3 +(byte) div8u::quotient#4 +(byte) div8u::quotient#5 +(byte) div8u::quotient#6 +(byte) div8u::quotient#7 +(byte) div8u::quotient#8 +(byte) div8u::rem +(byte) div8u::rem#0 +(byte) div8u::rem#1 +(byte) div8u::rem#2 +(byte) div8u::rem#3 +(byte) div8u::rem#4 +(byte) div8u::rem#5 +(byte) div8u::rem#6 +(byte) div8u::rem#7 +(byte) div8u::rem#8 +(byte) div8u::rem#9 +(byte*) div8u::remainder +(byte*) div8u::remainder#0 +(byte*) div8u::remainder#1 +(byte*) div8u::remainder#2 +(byte*) div8u::remainder#3 +(byte*) div8u::remainder#4 +(byte*) div8u::remainder#5 +(byte*) div8u::remainder#6 +(byte*) div8u::remainder#7 +(byte) div8u::return +(byte) div8u::return#0 +(byte) div8u::return#1 +(byte) div8u::return#2 +(byte) div8u::return#3 +(byte) div8u::return#4 +(byte*) line_cursor +(byte*) line_cursor#0 +(byte*) line_cursor#1 +(byte*) line_cursor#10 +(byte*) line_cursor#11 +(byte*) line_cursor#12 +(byte*) line_cursor#13 +(byte*) line_cursor#14 +(byte*) line_cursor#15 +(byte*) line_cursor#16 +(byte*) line_cursor#17 +(byte*) line_cursor#18 +(byte*) line_cursor#19 +(byte*) line_cursor#2 +(byte*) line_cursor#20 +(byte*) line_cursor#21 +(byte*) line_cursor#22 +(byte*) line_cursor#23 +(byte*) line_cursor#24 +(byte*) line_cursor#3 +(byte*) line_cursor#4 +(byte*) line_cursor#5 +(byte*) line_cursor#6 +(byte*) line_cursor#7 +(byte*) line_cursor#8 +(byte*) line_cursor#9 +(void()) main() +(byte~) main::$1 +(boolean~) main::$10 +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 +(label) main::@return +(byte) main::dividend +(byte) main::dividend#0 +(byte) main::dividend#1 +(byte[]) main::dividends +(byte[]) main::dividends#0 +(byte) main::divisor +(byte) main::divisor#0 +(byte) main::divisor#1 +(byte) main::divisor#2 +(byte) main::divisor#3 +(byte[]) main::divisors +(byte[]) main::divisors#0 +(byte) main::i +(byte) main::i#0 +(byte) main::i#1 +(byte) main::i#10 +(byte) main::i#11 +(byte) main::i#2 +(byte) main::i#3 +(byte) main::i#4 +(byte) main::i#5 +(byte) main::i#6 +(byte) main::i#7 +(byte) main::i#8 +(byte) main::i#9 +(byte*) main::rem +(byte*) main::rem#0 +(byte*) main::rem#1 +(byte*) main::rem#10 +(byte*) main::rem#11 +(byte*) main::rem#2 +(byte*) main::rem#3 +(byte*) main::rem#4 +(byte*) main::rem#5 +(byte*) main::rem#6 +(byte*) main::rem#7 +(byte*) main::rem#8 +(byte*) main::rem#9 +(byte) main::res +(byte) main::res#0 +(byte) main::res#1 +(byte) main::res#2 +(byte) main::res#3 +(byte) main::res#4 +(const string) main::str = (string) " / @" +(const string) main::str1 = (string) " = @" +(const string) main::str2 = (string) " @" +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 +(byte~) print_byte::$2 +(const string) print_byte::$4 = (string) "0123456789abcdef" +(label) print_byte::@1 +(label) print_byte::@2 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 +(byte) print_byte::b#1 +(byte) print_byte::b#2 +(byte) print_byte::b#3 +(byte) print_byte::b#4 +(byte) print_byte::b#5 +(byte[]) print_byte::hextab +(byte[]) print_byte::hextab#0 +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 +(byte) print_char::ch#1 +(byte) print_char::ch#2 +(void()) print_cls() +(word/signed word/dword/signed dword~) print_cls::$0 +(boolean~) print_cls::$1 +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#0 +(byte*) print_cls::sc#1 +(byte*) print_cls::sc#2 +(void()) print_ln() +(byte*~) print_ln::$0 +(boolean~) print_ln::$1 +(label) print_ln::@1 +(label) print_ln::@2 +(label) print_ln::@return +(void()) print_str((byte*) print_str::str) +(boolean~) print_str::$0 +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 +(byte*) print_str::str#1 +(byte*) print_str::str#2 +(byte*) print_str::str#3 +(byte*) print_str::str#4 +(byte*) print_str::str#5 +(byte*) print_str::str#6 + +OPTIMIZING CONTROL FLOW GRAPH +Inversing boolean not (boolean~) div8u::$3 ← (byte~) div8u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (boolean~) div8u::$2 ← (byte~) div8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 +Inversing boolean not (boolean~) div8u::$7 ← (byte) div8u::rem#5 < (byte) div8u::divisor#1 from (boolean~) div8u::$6 ← (byte) div8u::rem#5 >= (byte) div8u::divisor#1 +Succesful SSA optimization Pass2UnaryNotSimplification +Not aliassing across scopes: print_str::str#6 print_str::str#1 +Not aliassing across scopes: char_cursor#44 char_cursor#10 +Not aliassing across scopes: line_cursor#12 line_cursor#13 +Not aliassing across scopes: char_cursor#40 char_cursor#16 +Not aliassing across scopes: print_byte::b#4 print_byte::b#3 +Not aliassing across scopes: char_cursor#41 char_cursor#15 +Not aliassing across scopes: char_cursor#24 char_cursor#9 +Not aliassing across scopes: char_cursor#25 char_cursor#9 +Not aliassing across scopes: print_char::ch#2 print_char::ch#0 +Not aliassing across scopes: char_cursor#27 char_cursor#41 +Not aliassing across scopes: char_cursor#47 char_cursor#43 +Not aliassing across scopes: line_cursor#24 line_cursor#14 +Not aliassing across scopes: div8u::dividend#0 main::dividend#0 +Not aliassing across scopes: div8u::divisor#0 main::divisor#0 +Not aliassing across scopes: div8u::remainder#0 main::rem#1 +Not aliassing across scopes: div8u::return#0 div8u::return#2 +Not aliassing across scopes: main::$1 div8u::return#3 +Not aliassing across scopes: print_byte::b#0 main::dividend#1 +Not aliassing across scopes: char_cursor#29 char_cursor#7 +Not aliassing across scopes: char_cursor#30 char_cursor#2 +Not aliassing across scopes: print_byte::b#1 main::divisor#1 +Not aliassing across scopes: char_cursor#31 char_cursor#7 +Not aliassing across scopes: char_cursor#32 char_cursor#2 +Not aliassing across scopes: print_byte::b#2 main::res#1 +Not aliassing across scopes: char_cursor#33 char_cursor#7 +Not aliassing across scopes: char_cursor#34 char_cursor#2 +Not aliassing across scopes: char_cursor#35 char_cursor#7 +Not aliassing across scopes: line_cursor#9 line_cursor#2 +Not aliassing across scopes: char_cursor#36 char_cursor#4 +Not aliassing across scopes: div8u::dividend#4 div8u::dividend#0 +Not aliassing across scopes: div8u::divisor#5 div8u::divisor#0 +Not aliassing across scopes: div8u::remainder#7 div8u::remainder#0 +Not aliassing across scopes: char_cursor#38 char_cursor#18 +Not aliassing across scopes: line_cursor#11 line_cursor#4 +Alias (byte*) char_cursor#0 = (byte*) line_cursor#0 (byte*) char_cursor#43 (byte*) line_cursor#14 +Alias (byte*) print_str::str#4 = (byte*) print_str::str#5 +Alias (byte*) char_cursor#2 = (byte*) char_cursor#20 (byte*) char_cursor#39 (byte*) char_cursor#21 +Alias (byte*) line_cursor#1 = (byte*~) print_ln::$0 (byte*) line_cursor#7 (byte*) char_cursor#3 (byte*) line_cursor#8 (byte*) char_cursor#23 (byte*) line_cursor#2 (byte*) char_cursor#4 +Alias (byte) print_byte::b#4 = (byte) print_byte::b#5 +Alias (byte*) char_cursor#24 = (byte*) char_cursor#5 +Alias (byte*) char_cursor#25 = (byte*) char_cursor#6 (byte*) char_cursor#26 (byte*) char_cursor#7 +Alias (byte*) char_cursor#28 = (byte*) char_cursor#8 (byte*) char_cursor#9 +Alias (byte*) main::rem#0 = (byte*) main::rem#4 +Alias (byte*) char_cursor#46 = (byte*) char_cursor#47 +Alias (byte*) line_cursor#23 = (byte*) line_cursor#24 +Alias (byte) div8u::return#0 = (byte) div8u::return#3 +Alias (byte) main::dividend#0 = (byte) main::dividend#1 +Alias (byte*) char_cursor#42 = (byte*) char_cursor#45 +Alias (byte) main::divisor#0 = (byte) main::divisor#3 (byte) main::divisor#2 (byte) main::divisor#1 +Alias (byte*) main::rem#1 = (byte*) main::rem#11 (byte*) main::rem#10 (byte*) main::rem#9 (byte*) main::rem#8 (byte*) main::rem#6 (byte*) main::rem#5 (byte*) main::rem#2 (byte*) main::rem#7 (byte*) main::rem#3 +Alias (byte*) line_cursor#13 = (byte*) line_cursor#21 (byte*) line_cursor#22 (byte*) line_cursor#20 (byte*) line_cursor#19 (byte*) line_cursor#18 (byte*) line_cursor#17 (byte*) line_cursor#16 (byte*) line_cursor#15 +Alias (byte) main::i#10 = (byte) main::i#11 (byte) main::i#2 (byte) main::i#9 (byte) main::i#8 (byte) main::i#7 (byte) main::i#6 (byte) main::i#5 (byte) main::i#4 (byte) main::i#3 +Alias (byte) main::res#0 = (byte~) main::$1 (byte) main::res#4 (byte) main::res#3 (byte) main::res#2 (byte) main::res#1 +Alias (byte*) char_cursor#10 = (byte*) char_cursor#29 +Alias (byte*) char_cursor#11 = (byte*) char_cursor#30 +Alias (byte*) char_cursor#12 = (byte*) char_cursor#31 +Alias (byte*) char_cursor#13 = (byte*) char_cursor#32 +Alias (byte*) char_cursor#14 = (byte*) char_cursor#33 +Alias (byte*) char_cursor#15 = (byte*) char_cursor#34 +Alias (byte*) char_cursor#16 = (byte*) char_cursor#35 +Alias (byte*) line_cursor#10 = (byte*) line_cursor#3 (byte*) line_cursor#9 (byte*) line_cursor#4 +Alias (byte*) char_cursor#17 = (byte*) char_cursor#36 (byte*) char_cursor#37 (byte*) char_cursor#18 +Alias (byte) div8u::rem#1 = (byte~) div8u::$0 (byte) div8u::rem#6 +Alias (byte) div8u::dividend#1 = (byte~) div8u::$4 (byte) div8u::dividend#7 +Alias (byte) div8u::quotient#1 = (byte~) div8u::$5 (byte) div8u::quotient#4 +Alias (byte) div8u::dividend#2 = (byte) div8u::dividend#6 +Alias (byte) div8u::quotient#6 = (byte) div8u::quotient#7 +Alias (byte) div8u::divisor#3 = (byte) div8u::divisor#4 +Alias (byte) div8u::i#5 = (byte) div8u::i#6 +Alias (byte*) div8u::remainder#5 = (byte*) div8u::remainder#6 +Alias (byte) div8u::rem#5 = (byte) div8u::rem#7 +Alias (byte) div8u::divisor#1 = (byte) div8u::divisor#2 +Alias (byte) div8u::i#3 = (byte) div8u::i#4 +Alias (byte*) div8u::remainder#3 = (byte*) div8u::remainder#4 +Alias (byte) div8u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword~) div8u::$8 +Alias (byte) div8u::rem#8 = (byte) div8u::rem#9 +Alias (byte*) div8u::remainder#1 = (byte*) div8u::remainder#2 +Alias (byte) div8u::return#1 = (byte) div8u::quotient#5 (byte) div8u::quotient#8 (byte) div8u::return#4 (byte) div8u::return#2 +Alias (byte*) char_cursor#19 = (byte*) char_cursor#38 +Alias (byte*) line_cursor#11 = (byte*) line_cursor#5 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: print_str::str#6 print_str::str#1 +Not aliassing across scopes: char_cursor#44 char_cursor#10 +Not aliassing across scopes: line_cursor#12 line_cursor#13 +Not aliassing across scopes: char_cursor#40 char_cursor#16 +Not aliassing across scopes: print_byte::b#4 print_byte::b#3 +Not aliassing across scopes: char_cursor#41 char_cursor#15 +Not aliassing across scopes: char_cursor#24 char_cursor#28 +Not aliassing across scopes: char_cursor#25 char_cursor#28 +Not aliassing across scopes: print_char::ch#2 print_char::ch#0 +Not aliassing across scopes: char_cursor#27 char_cursor#41 +Not aliassing across scopes: char_cursor#46 char_cursor#0 +Not aliassing across scopes: line_cursor#23 char_cursor#0 +Not aliassing identity: main::rem#1 main::rem#1 +Not aliassing across scopes: div8u::dividend#0 main::dividend#0 +Not aliassing across scopes: div8u::divisor#0 main::divisor#0 +Not aliassing across scopes: div8u::remainder#0 main::rem#1 +Not aliassing across scopes: div8u::return#0 div8u::return#1 +Not aliassing across scopes: main::res#0 div8u::return#0 +Not aliassing across scopes: print_byte::b#0 main::dividend#0 +Not aliassing across scopes: char_cursor#10 char_cursor#25 +Not aliassing across scopes: char_cursor#11 char_cursor#2 +Not aliassing across scopes: print_byte::b#1 main::divisor#0 +Not aliassing across scopes: char_cursor#12 char_cursor#25 +Not aliassing across scopes: char_cursor#13 char_cursor#2 +Not aliassing across scopes: print_byte::b#2 main::res#0 +Not aliassing across scopes: char_cursor#14 char_cursor#25 +Not aliassing across scopes: char_cursor#15 char_cursor#2 +Not aliassing across scopes: char_cursor#16 char_cursor#25 +Not aliassing across scopes: line_cursor#10 line_cursor#1 +Not aliassing across scopes: char_cursor#17 line_cursor#1 +Not aliassing across scopes: div8u::dividend#4 div8u::dividend#0 +Not aliassing across scopes: div8u::divisor#5 div8u::divisor#0 +Not aliassing across scopes: div8u::remainder#7 div8u::remainder#0 +Not aliassing across scopes: char_cursor#19 char_cursor#17 +Not aliassing across scopes: line_cursor#11 line_cursor#10 +Alias (byte) div8u::dividend#2 = (byte) div8u::dividend#3 +Alias (byte) div8u::quotient#3 = (byte) div8u::quotient#6 +Alias (byte) div8u::divisor#1 = (byte) div8u::divisor#3 (byte) div8u::divisor#6 +Alias (byte) div8u::i#2 = (byte) div8u::i#3 (byte) div8u::i#5 +Alias (byte*) div8u::remainder#1 = (byte*) div8u::remainder#3 (byte*) div8u::remainder#5 +Alias (byte) div8u::dividend#1 = (byte) div8u::dividend#5 +Succesful SSA optimization Pass2AliasElimination +Not aliassing across scopes: print_str::str#6 print_str::str#1 +Not aliassing across scopes: char_cursor#44 char_cursor#10 +Not aliassing across scopes: line_cursor#12 line_cursor#13 +Not aliassing across scopes: char_cursor#40 char_cursor#16 +Not aliassing across scopes: print_byte::b#4 print_byte::b#3 +Not aliassing across scopes: char_cursor#41 char_cursor#15 +Not aliassing across scopes: char_cursor#24 char_cursor#28 +Not aliassing across scopes: char_cursor#25 char_cursor#28 +Not aliassing across scopes: print_char::ch#2 print_char::ch#0 +Not aliassing across scopes: char_cursor#27 char_cursor#41 +Not aliassing across scopes: char_cursor#46 char_cursor#0 +Not aliassing across scopes: line_cursor#23 char_cursor#0 +Not aliassing identity: main::rem#1 main::rem#1 +Not aliassing across scopes: div8u::dividend#0 main::dividend#0 +Not aliassing across scopes: div8u::divisor#0 main::divisor#0 +Not aliassing across scopes: div8u::remainder#0 main::rem#1 +Not aliassing across scopes: div8u::return#0 div8u::return#1 +Not aliassing across scopes: main::res#0 div8u::return#0 +Not aliassing across scopes: print_byte::b#0 main::dividend#0 +Not aliassing across scopes: char_cursor#10 char_cursor#25 +Not aliassing across scopes: char_cursor#11 char_cursor#2 +Not aliassing across scopes: print_byte::b#1 main::divisor#0 +Not aliassing across scopes: char_cursor#12 char_cursor#25 +Not aliassing across scopes: char_cursor#13 char_cursor#2 +Not aliassing across scopes: print_byte::b#2 main::res#0 +Not aliassing across scopes: char_cursor#14 char_cursor#25 +Not aliassing across scopes: char_cursor#15 char_cursor#2 +Not aliassing across scopes: char_cursor#16 char_cursor#25 +Not aliassing across scopes: line_cursor#10 line_cursor#1 +Not aliassing across scopes: char_cursor#17 line_cursor#1 +Not aliassing across scopes: div8u::dividend#4 div8u::dividend#0 +Not aliassing across scopes: div8u::divisor#5 div8u::divisor#0 +Not aliassing across scopes: div8u::remainder#7 div8u::remainder#0 +Not aliassing across scopes: char_cursor#19 char_cursor#17 +Not aliassing across scopes: line_cursor#11 line_cursor#10 +Self Phi Eliminated (byte*) char_cursor#22 +Self Phi Eliminated (byte*) main::rem#1 +Self Phi Eliminated (byte) div8u::divisor#1 +Self Phi Eliminated (byte*) div8u::remainder#1 +Succesful SSA optimization Pass2SelfPhiElimination +Redundant Phi (byte*) line_cursor#12 (byte*) line_cursor#13 +Redundant Phi (byte*) char_cursor#40 (byte*) char_cursor#16 +Redundant Phi (byte*) char_cursor#22 (byte*) char_cursor#40 +Redundant Phi (byte*) char_cursor#24 (byte*) char_cursor#28 +Redundant Phi (byte*) char_cursor#25 (byte*) char_cursor#28 +Redundant Phi (byte*) char_cursor#46 (byte*) char_cursor#0 +Redundant Phi (byte*) line_cursor#23 (byte*) char_cursor#0 +Redundant Phi (byte*) main::rem#1 (byte*) main::rem#0 +Redundant Phi (byte*) char_cursor#10 (byte*) char_cursor#25 +Redundant Phi (byte*) char_cursor#11 (byte*) char_cursor#2 +Redundant Phi (byte*) char_cursor#12 (byte*) char_cursor#25 +Redundant Phi (byte*) char_cursor#13 (byte*) char_cursor#2 +Redundant Phi (byte*) char_cursor#14 (byte*) char_cursor#25 +Redundant Phi (byte*) char_cursor#15 (byte*) char_cursor#2 +Redundant Phi (byte*) char_cursor#16 (byte*) char_cursor#25 +Redundant Phi (byte*) line_cursor#10 (byte*) line_cursor#1 +Redundant Phi (byte*) char_cursor#17 (byte*) line_cursor#1 +Redundant Phi (byte) div8u::dividend#4 (byte) div8u::dividend#0 +Redundant Phi (byte) div8u::divisor#5 (byte) div8u::divisor#0 +Redundant Phi (byte*) div8u::remainder#7 (byte*) div8u::remainder#0 +Redundant Phi (byte) div8u::divisor#1 (byte) div8u::divisor#5 +Redundant Phi (byte*) div8u::remainder#1 (byte*) div8u::remainder#7 +Redundant Phi (byte*) char_cursor#19 (byte*) char_cursor#17 +Redundant Phi (byte*) line_cursor#11 (byte*) line_cursor#10 +Succesful SSA optimization Pass2RedundantPhiElimination +Redundant Phi (byte*) char_cursor#44 (byte*) char_cursor#28 +Succesful SSA optimization Pass2RedundantPhiElimination +Simple Condition (boolean~) print_str::$0 if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 +Simple Condition (boolean~) print_ln::$1 if((byte*) line_cursor#1<(byte*) char_cursor#28) goto print_ln::@1 +Simple Condition (boolean~) print_cls::$1 if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword~) print_cls::$0) goto print_cls::@1 +Simple Condition (boolean~) main::$10 if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@1 +Simple Condition (boolean~) div8u::$3 if((byte~) div8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8u::@2 +Simple Condition (boolean~) div8u::$7 if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 +Simple Condition (boolean~) div8u::$9 if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 +Succesful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) char_cursor#0 = ((byte*))1024 +Constant (const string) print_byte::hextab#0 = print_byte::$4 +Constant (const byte*) print_cls::sc#0 = ((byte*))1024 +Constant (const word/signed word/dword/signed dword) print_cls::$0 = 1024+1000 +Constant (const byte*) main::rem#0 = ((byte*))255 +Constant (const byte[]) main::dividends#0 = { 255, 255, 255, 255, 255, 255 } +Constant (const byte[]) main::divisors#0 = { 5, 7, 11, 13, 17, 19 } +Constant (const byte) main::i#0 = 0 +Constant (const string) print_str::str#1 = main::str +Constant (const string) print_str::str#2 = main::str1 +Constant (const string) print_str::str#3 = main::str2 +Constant (const byte) div8u::rem#0 = 0 +Constant (const byte) div8u::quotient#0 = 0 +Constant (const byte) div8u::i#0 = 0 +Succesful SSA optimization Pass2ConstantIdentification +Constant (const byte*) div8u::remainder#0 = main::rem#0 +Succesful SSA optimization Pass2ConstantIdentification +Culled Empty Block (label) print_ln::@2 +Culled Empty Block (label) print_byte::@2 +Culled Empty Block (label) main::@3 +Culled Empty Block (label) @11 +Succesful SSA optimization Pass2CullEmptyBlocks +Not aliassing across scopes: char_cursor#2 char_cursor#28 +Not aliassing across scopes: line_cursor#6 line_cursor#13 +Not aliassing across scopes: print_byte::b#4 print_byte::b#3 +Not aliassing across scopes: char_cursor#41 char_cursor#2 +Not aliassing across scopes: print_char::ch#2 print_char::ch#0 +Not aliassing across scopes: char_cursor#27 char_cursor#41 +Not aliassing across scopes: char_cursor#42 line_cursor#1 +Not aliassing across scopes: line_cursor#13 line_cursor#1 +Not aliassing across scopes: div8u::dividend#0 main::dividend#0 +Not aliassing across scopes: div8u::divisor#0 main::divisor#0 +Not aliassing across scopes: div8u::return#0 div8u::return#1 +Not aliassing across scopes: main::res#0 div8u::return#0 +Not aliassing across scopes: print_byte::b#0 main::dividend#0 +Not aliassing across scopes: print_byte::b#1 main::divisor#0 +Not aliassing across scopes: print_byte::b#2 main::res#0 +Not aliassing across scopes: div8u::dividend#2 div8u::dividend#0 +Not aliassing across scopes: char_cursor#2 char_cursor#28 +Not aliassing across scopes: line_cursor#6 line_cursor#13 +Not aliassing across scopes: print_byte::b#4 print_byte::b#3 +Not aliassing across scopes: char_cursor#41 char_cursor#2 +Not aliassing across scopes: print_char::ch#2 print_char::ch#0 +Not aliassing across scopes: char_cursor#27 char_cursor#41 +Not aliassing across scopes: char_cursor#42 line_cursor#1 +Not aliassing across scopes: line_cursor#13 line_cursor#1 +Not aliassing across scopes: div8u::dividend#0 main::dividend#0 +Not aliassing across scopes: div8u::divisor#0 main::divisor#0 +Not aliassing across scopes: div8u::return#0 div8u::return#1 +Not aliassing across scopes: main::res#0 div8u::return#0 +Not aliassing across scopes: print_byte::b#0 main::dividend#0 +Not aliassing across scopes: print_byte::b#1 main::divisor#0 +Not aliassing across scopes: print_byte::b#2 main::res#0 +Not aliassing across scopes: div8u::dividend#2 div8u::dividend#0 +OPTIMIZING CONTROL FLOW GRAPH +Inlining constant with var siblings (const string) print_str::str#1 +Inlining constant with var siblings (const string) print_str::str#1 +Inlining constant with var siblings (const string) print_str::str#1 +Inlining constant with var siblings (const string) print_str::str#2 +Inlining constant with var siblings (const string) print_str::str#2 +Inlining constant with var siblings (const string) print_str::str#2 +Inlining constant with var siblings (const string) print_str::str#3 +Inlining constant with var siblings (const string) print_str::str#3 +Inlining constant with var siblings (const string) print_str::str#3 +Inlining constant with var siblings (const byte*) print_cls::sc#0 +Inlining constant with var siblings (const byte*) print_cls::sc#0 +Inlining constant with var siblings (const byte) main::i#0 +Inlining constant with var siblings (const byte) main::i#0 +Inlining constant with var siblings (const byte) div8u::rem#0 +Inlining constant with var siblings (const byte) div8u::rem#0 +Inlining constant with var siblings (const byte) div8u::rem#0 +Inlining constant with var siblings (const byte) div8u::rem#0 +Inlining constant with var siblings (const byte) div8u::rem#0 +Inlining constant with var siblings (const byte) div8u::rem#0 +Inlining constant with var siblings (const byte) div8u::quotient#0 +Inlining constant with var siblings (const byte) div8u::quotient#0 +Inlining constant with var siblings (const byte) div8u::quotient#0 +Inlining constant with var siblings (const byte) div8u::i#0 +Inlining constant with var siblings (const byte) div8u::i#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Inlining constant with var siblings (const byte*) char_cursor#0 +Constant inlined print_cls::$0 = (word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000 +Constant inlined div8u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined div8u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Constant inlined print_str::str#3 = (const string) main::str2 +Constant inlined print_str::str#2 = (const string) main::str1 +Constant inlined char_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024 +Constant inlined print_str::str#1 = (const string) main::str +Constant inlined print_byte::$4 = (const string) print_byte::hextab#0 +Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024 +Constant inlined div8u::remainder#0 = (const byte*) main::rem#0 +Constant inlined div8u::rem#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 +Succesful SSA optimization Pass2ConstantInlining +Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@return print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return print_cls print_cls::@1 print_cls::@return +Added new block during phi lifting main::@13(between main::@12 and main::@1) +Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) +Added new block during phi lifting div8u::@8(between div8u::@3 and div8u::@1) +Added new block during phi lifting div8u::@9(between div8u::@1 and div8u::@2) +Added new block during phi lifting div8u::@10(between div8u::@2 and div8u::@3) +Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) +Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@return main::@13 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return div8u::@8 div8u::@10 div8u::@9 print_cls print_cls::@1 print_cls::@return print_cls::@3 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @10 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@7 +Adding NOP phi() at start of main::@9 +Adding NOP phi() at start of main::@11 +Adding NOP phi() at start of print_cls +CALL GRAPH +Calls in [] to main:2 +Calls in [main] to print_cls:5 div8u:11 print_byte:17 print_str:19 print_byte:23 print_str:25 print_byte:29 print_str:31 print_byte:35 print_ln:37 +Calls in [print_byte] to print_char:55 print_char:60 + +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Created 19 initial phi equivalence classes +Coalesced [15] print_byte::b#7 ← print_byte::b#0 +Coalesced [16] char_cursor#50 ← char_cursor#42 +Coalesced [21] print_byte::b#8 ← print_byte::b#1 +Coalesced [22] char_cursor#51 ← char_cursor#2 +Coalesced [27] print_byte::b#9 ← print_byte::b#2 +Coalesced (already) [28] char_cursor#52 ← char_cursor#2 +Coalesced [33] print_byte::b#6 ← print_byte::b#3 +Coalesced (already) [34] char_cursor#49 ← char_cursor#2 +Coalesced [41] main::i#12 ← main::i#1 +Not coalescing [42] char_cursor#48 ← line_cursor#1 +Coalesced [43] line_cursor#25 ← line_cursor#1 +Coalesced [44] line_cursor#26 ← line_cursor#13 +Coalesced (already) [49] line_cursor#27 ← line_cursor#1 +Coalesced [53] print_char::ch#3 ← print_char::ch#0 +Coalesced [54] char_cursor#53 ← char_cursor#41 +Coalesced [58] print_char::ch#4 ← print_char::ch#1 +Coalesced [59] char_cursor#54 ← char_cursor#28 +Coalesced [67] print_str::str#7 ← print_str::str#6 +Coalesced (already) [68] char_cursor#55 ← char_cursor#28 +Coalesced [75] print_str::str#8 ← print_str::str#0 +Coalesced [76] char_cursor#56 ← char_cursor#1 +Coalesced [77] div8u::dividend#8 ← div8u::dividend#0 +Coalesced [83] div8u::rem#12 ← div8u::rem#2 +Coalesced [90] div8u::rem#14 ← div8u::rem#3 +Coalesced [91] div8u::return#6 ← div8u::quotient#2 +Coalesced [97] div8u::rem#10 ← div8u::rem#8 +Coalesced [98] div8u::dividend#9 ← div8u::dividend#1 +Coalesced [99] div8u::quotient#9 ← div8u::return#1 +Coalesced [100] div8u::i#7 ← div8u::i#1 +Coalesced [101] div8u::rem#13 ← div8u::rem#5 +Coalesced [102] div8u::return#5 ← div8u::quotient#1 +Coalesced [103] div8u::rem#11 ← div8u::rem#1 +Coalesced [110] print_cls::sc#3 ← print_cls::sc#1 +Coalesced down to 11 phi equivalence classes +Culled Empty Block (label) print_ln::@3 +Culled Empty Block (label) div8u::@8 +Culled Empty Block (label) div8u::@10 +Culled Empty Block (label) div8u::@9 +Culled Empty Block (label) print_cls::@3 +Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@return main::@13 print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return print_cls print_cls::@1 print_cls::@return +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @10 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@7 +Adding NOP phi() at start of main::@9 +Adding NOP phi() at start of main::@11 +Adding NOP phi() at start of print_ln +Adding NOP phi() at start of div8u +Adding NOP phi() at start of print_cls +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... +Propagating live ranges... + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() [ ] ( ) + to:@10 +@10: scope:[] from @begin + [1] phi() [ ] ( ) + [2] call main param-assignment [ ] ( ) + to:@end +@end: scope:[] from @10 + [3] phi() [ ] ( ) +main: scope:[main] from @10 + [4] phi() [ ] ( main:2 [ ] ) + [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + to:main::@1 +main::@1: scope:[main] from main main::@13 + [6] (byte*) line_cursor#13 ← phi( main::@13/(byte*) line_cursor#1 main/((byte*))(word/signed word/dword/signed dword) 1024 ) [ main::i#10 char_cursor#42 line_cursor#13 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 ] ) + [6] (byte*) char_cursor#42 ← phi( main::@13/(byte*~) char_cursor#48 main/((byte*))(word/signed word/dword/signed dword) 1024 ) [ main::i#10 char_cursor#42 line_cursor#13 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 ] ) + [6] (byte) main::i#10 ← phi( main::@13/(byte) main::i#1 main/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ main::i#10 char_cursor#42 line_cursor#13 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 ] ) + [7] (byte) main::dividend#0 ← *((const byte[]) main::dividends#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ) + [8] (byte) main::divisor#0 ← *((const byte[]) main::divisors#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ) + [9] (byte) div8u::dividend#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ) + [10] (byte) div8u::divisor#0 ← (byte) main::divisor#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + [11] call div8u param-assignment [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + [12] (byte) div8u::return#0 ← (byte) div8u::return#1 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ) + to:main::@4 +main::@4: scope:[main] from main::@1 + [13] (byte) main::res#0 ← (byte) div8u::return#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ) + [14] (byte) print_byte::b#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ) + [15] call print_byte param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ) + to:main::@5 +main::@5: scope:[main] from main::@4 + [16] phi() [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ) + [17] call print_str param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ) + to:main::@6 +main::@6: scope:[main] from main::@5 + [18] (byte) print_byte::b#1 ← (byte) main::divisor#0 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ) + [19] call print_byte param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ) + to:main::@7 +main::@7: scope:[main] from main::@6 + [20] phi() [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ) + [21] call print_str param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ) + to:main::@8 +main::@8: scope:[main] from main::@7 + [22] (byte) print_byte::b#2 ← (byte) main::res#0 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ) + [23] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:main::@9 +main::@9: scope:[main] from main::@8 + [24] phi() [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + [25] call print_str param-assignment [ main::i#10 line_cursor#13 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + to:main::@10 +main::@10: scope:[main] from main::@9 + [26] (byte) print_byte::b#3 ← *((const byte*) main::rem#0) [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ) + [27] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:main::@11 +main::@11: scope:[main] from main::@10 + [28] phi() [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + [29] call print_ln param-assignment [ main::i#10 line_cursor#1 ] ( main:2 [ main::i#10 line_cursor#1 ] ) + to:main::@12 +main::@12: scope:[main] from main::@11 + [30] (byte) main::i#1 ← ++ (byte) main::i#10 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) + [31] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@13 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) + to:main::@return +main::@return: scope:[main] from main::@12 + [32] return [ ] ( main:2 [ ] ) + to:@return +main::@13: scope:[main] from main::@12 + [33] (byte*~) char_cursor#48 ← (byte*) line_cursor#1 [ main::i#1 char_cursor#48 line_cursor#1 ] ( main:2 [ main::i#1 char_cursor#48 line_cursor#1 ] ) + to:main::@1 +print_ln: scope:[print_ln] from main::@11 + [34] phi() [ line_cursor#13 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:print_ln::@1 +print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 + [35] (byte*) line_cursor#6 ← phi( print_ln/(byte*) line_cursor#13 print_ln::@1/(byte*) line_cursor#1 ) [ line_cursor#6 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#6 char_cursor#28 ] ) + [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) + [37] if((byte*) line_cursor#1<(byte*) char_cursor#28) goto print_ln::@1 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) + to:print_ln::@return +print_ln::@return: scope:[print_ln] from print_ln::@1 + [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 ] ) + to:@return +print_byte: scope:[print_byte] from main::@10 main::@4 main::@6 main::@8 + [39] (byte*) char_cursor#41 ← phi( main::@10/(byte*) char_cursor#2 main::@4/(byte*) char_cursor#42 main::@6/(byte*) char_cursor#2 main::@8/(byte*) char_cursor#2 ) [ print_byte::b#4 char_cursor#41 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 ] ) + [39] (byte) print_byte::b#4 ← phi( main::@10/(byte) print_byte::b#3 main::@4/(byte) print_byte::b#0 main::@6/(byte) print_byte::b#1 main::@8/(byte) print_byte::b#2 ) [ print_byte::b#4 char_cursor#41 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 ] ) + [40] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#4 char_cursor#41 print_byte::$0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] ) + [41] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#4 char_cursor#41 print_char::ch#0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] ) + [42] call print_char param-assignment [ char_cursor#28 print_byte::b#4 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] ) + to:print_byte::@1 +print_byte::@1: scope:[print_byte] from print_byte + [43] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ char_cursor#28 print_byte::$2 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] ) + [44] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#28 print_char::ch#1 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] ) + [45] call print_char param-assignment [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:print_byte::@return +print_byte::@return: scope:[print_byte] from print_byte::@1 + [46] return [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:@return +print_char: scope:[print_char] from print_byte print_byte::@1 + [47] (byte*) char_cursor#27 ← phi( print_byte/(byte*) char_cursor#41 print_byte::@1/(byte*) char_cursor#28 ) [ print_char::ch#2 char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_char::ch#2 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 print_char::ch#2 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 print_char::ch#2 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 print_char::ch#2 char_cursor#27 ] ) + [47] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) [ print_char::ch#2 char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 print_char::ch#2 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_char::ch#2 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 print_char::ch#2 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 print_char::ch#2 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 print_char::ch#2 char_cursor#27 ] ) + [48] *((byte*) char_cursor#27) ← (byte) print_char::ch#2 [ char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] ) + [49] (byte*) char_cursor#28 ← ++ (byte*) char_cursor#27 [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:print_char::@return +print_char::@return: scope:[print_char] from print_char + [50] return [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + to:@return +print_str: scope:[print_str] from main::@5 main::@7 main::@9 + [51] (byte*) print_str::str#6 ← phi( main::@5/(const string) main::str main::@7/(const string) main::str1 main::@9/(const string) main::str2 ) [ char_cursor#28 print_str::str#6 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_str::str#6 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_str::str#6 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#28 print_str::str#6 ] ) + to:print_str::@1 +print_str::@1: scope:[print_str] from print_str print_str::@2 + [52] (byte*) char_cursor#2 ← phi( print_str/(byte*) char_cursor#28 print_str::@2/(byte*) char_cursor#1 ) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) + [52] (byte*) print_str::str#4 ← phi( print_str/(byte*) print_str::str#6 print_str::@2/(byte*) print_str::str#0 ) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) + [53] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) + to:print_str::@return +print_str::@return: scope:[print_str] from print_str::@1 + [54] return [ char_cursor#2 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + to:@return +print_str::@2: scope:[print_str] from print_str::@1 + [55] *((byte*) char_cursor#2) ← *((byte*) print_str::str#4) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) + [56] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#4 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#4 char_cursor#1 ] ) + [57] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#4 [ print_str::str#0 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#0 char_cursor#1 ] ) + to:print_str::@1 +div8u: scope:[div8u] from main::@1 + [58] phi() [ div8u::dividend#0 div8u::divisor#0 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + to:div8u::@1 +div8u::@1: scope:[div8u] from div8u div8u::@3 + [59] (byte) div8u::i#2 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::i#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [59] (byte) div8u::quotient#3 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::return#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [59] (byte) div8u::dividend#2 ← phi( div8u/(byte) div8u::dividend#0 div8u::@3/(byte) div8u::dividend#1 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [59] (byte) div8u::rem#4 ← phi( div8u/(byte/signed byte/word/signed word/dword/signed dword) 0 div8u::@3/(byte) div8u::rem#8 ) [ div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::rem#4 div8u::dividend#2 div8u::quotient#3 div8u::i#2 ] ) + [60] (byte) div8u::rem#1 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) + [61] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) + [62] if((byte~) div8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8u::@2 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) + to:div8u::@4 +div8u::@4: scope:[div8u] from div8u::@1 + [63] (byte) div8u::rem#2 ← ++ (byte) div8u::rem#1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ) + to:div8u::@2 +div8u::@2: scope:[div8u] from div8u::@1 div8u::@4 + [64] (byte) div8u::rem#5 ← phi( div8u::@1/(byte) div8u::rem#1 div8u::@4/(byte) div8u::rem#2 ) [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#5 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#5 ] ) + [65] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) + [66] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) + [67] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) + to:div8u::@5 +div8u::@5: scope:[div8u] from div8u::@2 + [68] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) + [69] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) + to:div8u::@3 +div8u::@3: scope:[div8u] from div8u::@2 div8u::@5 + [70] (byte) div8u::return#1 ← phi( div8u::@2/(byte) div8u::quotient#1 div8u::@5/(byte) div8u::quotient#2 ) [ div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ) + [70] (byte) div8u::rem#8 ← phi( div8u::@2/(byte) div8u::rem#5 div8u::@5/(byte) div8u::rem#3 ) [ div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::i#2 div8u::rem#8 div8u::dividend#1 ] ) + [71] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) + [72] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) + to:div8u::@6 +div8u::@6: scope:[div8u] from div8u::@3 + [73] *((const byte*) main::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + to:div8u::@return +div8u::@return: scope:[div8u] from div8u::@6 + [74] return [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + to:@return +print_cls: scope:[print_cls] from main + [75] phi() [ ] ( main:2::print_cls:5 [ ] ) + to:print_cls::@1 +print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 + [76] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [77] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) + [78] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + [79] if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) + to:print_cls::@return +print_cls::@return: scope:[print_cls] from print_cls::@1 + [80] return [ ] ( main:2::print_cls:5 [ ] ) + to:@return + +DOMINATORS +@begin dominated by @begin +@10 dominated by @10 @begin +@end dominated by @end @10 @begin +main dominated by main @10 @begin +main::@1 dominated by main main::@1 @10 @begin +main::@4 dominated by main main::@1 @10 main::@4 @begin +main::@5 dominated by main main::@1 main::@5 @10 main::@4 @begin +main::@6 dominated by main main::@1 main::@5 main::@6 @10 main::@4 @begin +main::@7 dominated by main::@7 main main::@1 main::@5 main::@6 @10 main::@4 @begin +main::@8 dominated by main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 @begin +main::@9 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 @begin +main::@10 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 @begin main::@10 +main::@11 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 +main::@12 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@12 +main::@return dominated by main::@9 main::@return main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@12 +main::@13 dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 main::@13 main::@12 +print_ln dominated by main::@9 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 print_ln +print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 print_ln +print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@1 main::@5 main::@6 @10 main::@4 main::@11 @begin main::@10 print_ln +print_byte dominated by main main::@1 @10 main::@4 @begin print_byte +print_byte::@1 dominated by main main::@1 print_byte::@1 @10 main::@4 @begin print_byte +print_byte::@return dominated by main main::@1 print_byte::@1 @10 main::@4 @begin print_byte print_byte::@return +print_char dominated by main print_char main::@1 @10 main::@4 @begin print_byte +print_char::@return dominated by main print_char main::@1 @10 main::@4 print_char::@return @begin print_byte +print_str dominated by main main::@1 main::@5 @10 main::@4 @begin print_str +print_str::@1 dominated by main print_str::@1 main::@1 main::@5 @10 main::@4 @begin print_str +print_str::@return dominated by print_str::@return main print_str::@1 main::@1 main::@5 @10 main::@4 @begin print_str +print_str::@2 dominated by main print_str::@1 print_str::@2 main::@1 main::@5 @10 main::@4 @begin print_str +div8u dominated by main main::@1 @10 @begin div8u +div8u::@1 dominated by main main::@1 @10 @begin div8u::@1 div8u +div8u::@4 dominated by main div8u::@4 main::@1 @10 @begin div8u::@1 div8u +div8u::@2 dominated by main div8u::@2 main::@1 @10 @begin div8u::@1 div8u +div8u::@5 dominated by main div8u::@2 div8u::@5 main::@1 @10 @begin div8u::@1 div8u +div8u::@3 dominated by main div8u::@3 div8u::@2 main::@1 @10 @begin div8u::@1 div8u +div8u::@6 dominated by main div8u::@3 div8u::@2 div8u::@6 main::@1 @10 @begin div8u::@1 div8u +div8u::@return dominated by main div8u::@3 div8u::@2 div8u::@6 main::@1 div8u::@return @10 @begin div8u::@1 div8u +print_cls dominated by main @10 @begin print_cls +print_cls::@1 dominated by main @10 @begin print_cls::@1 print_cls +print_cls::@return dominated by main print_cls::@return @10 @begin print_cls::@1 print_cls + +NATURAL LOOPS +Found back edge: Loop head: main::@1 tails: main::@13 blocks: null +Found back edge: Loop head: print_ln::@1 tails: print_ln::@1 blocks: null +Found back edge: Loop head: print_str::@1 tails: print_str::@2 blocks: null +Found back edge: Loop head: div8u::@1 tails: div8u::@3 blocks: null +Found back edge: Loop head: print_cls::@1 tails: print_cls::@1 blocks: null +Populated: Loop head: main::@1 tails: main::@13 blocks: main::@13 main::@12 main::@11 main::@10 main::@9 main::@8 main::@7 main::@6 main::@5 main::@4 main::@1 +Populated: Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 +Populated: Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 +Populated: Loop head: div8u::@1 tails: div8u::@3 blocks: div8u::@3 div8u::@2 div8u::@5 div8u::@1 div8u::@4 +Populated: Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 +Loop head: main::@1 tails: main::@13 blocks: main::@13 main::@12 main::@11 main::@10 main::@9 main::@8 main::@7 main::@6 main::@5 main::@4 main::@1 +Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 +Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 +Loop head: div8u::@1 tails: div8u::@3 blocks: div8u::@3 div8u::@2 div8u::@5 div8u::@1 div8u::@4 +Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 + +NATURAL LOOPS WITH DEPTH +Found 0 loops in scope [] +Found 1 loops in scope [main] + Loop head: main::@1 tails: main::@13 blocks: main::@13 main::@12 main::@11 main::@10 main::@9 main::@8 main::@7 main::@6 main::@5 main::@4 main::@1 +Found 1 loops in scope [print_cls] + Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 +Found 1 loops in scope [div8u] + Loop head: div8u::@1 tails: div8u::@3 blocks: div8u::@3 div8u::@2 div8u::@5 div8u::@1 div8u::@4 +Found 0 loops in scope [print_byte] +Found 1 loops in scope [print_str] + Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 +Found 1 loops in scope [print_ln] + Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 +Found 0 loops in scope [print_char] +Loop head: main::@1 tails: main::@13 blocks: main::@13 main::@12 main::@11 main::@10 main::@9 main::@8 main::@7 main::@6 main::@5 main::@4 main::@1 depth: 1 +Loop head: print_ln::@1 tails: print_ln::@1 blocks: print_ln::@1 depth: 2 +Loop head: print_str::@1 tails: print_str::@2 blocks: print_str::@2 print_str::@1 depth: 2 +Loop head: div8u::@1 tails: div8u::@3 blocks: div8u::@3 div8u::@2 div8u::@5 div8u::@1 div8u::@4 depth: 2 +Loop head: print_cls::@1 tails: print_cls::@1 blocks: print_cls::@1 depth: 1 + + +VARIABLE REGISTER WEIGHTS +(byte*) char_cursor +(byte*) char_cursor#1 101.0 +(byte*) char_cursor#2 33.8 +(byte*) char_cursor#27 4.0 +(byte*) char_cursor#28 5.349999999999999 +(byte*) char_cursor#41 15.333333333333332 +(byte*) char_cursor#42 2.4444444444444446 +(byte*~) char_cursor#48 22.0 +(byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) +(byte~) div8u::$1 202.0 +(byte) div8u::dividend +(byte) div8u::dividend#0 4.333333333333333 +(byte) div8u::dividend#1 25.25 +(byte) div8u::dividend#2 50.83333333333333 +(byte) div8u::divisor +(byte) div8u::divisor#0 13.3125 +(byte) div8u::i +(byte) div8u::i#1 151.5 +(byte) div8u::i#2 16.833333333333332 +(byte) div8u::quotient +(byte) div8u::quotient#1 151.5 +(byte) div8u::quotient#2 101.0 +(byte) div8u::quotient#3 28.857142857142858 +(byte) div8u::rem +(byte) div8u::rem#1 101.0 +(byte) div8u::rem#2 202.0 +(byte) div8u::rem#3 202.0 +(byte) div8u::rem#4 202.0 +(byte) div8u::rem#5 101.0 +(byte) div8u::rem#8 101.66666666666667 +(byte*) div8u::remainder +(byte) div8u::return +(byte) div8u::return#0 22.0 +(byte) div8u::return#1 52.33333333333333 +(byte*) line_cursor +(byte*) line_cursor#1 46.42857142857143 +(byte*) line_cursor#13 0.5416666666666666 +(byte*) line_cursor#6 204.0 +(void()) main() +(byte) main::dividend +(byte) main::dividend#0 4.714285714285714 +(byte[]) main::dividends +(byte) main::divisor +(byte) main::divisor#0 3.3000000000000003 +(byte[]) main::divisors +(byte) main::i +(byte) main::i#1 11.0 +(byte) main::i#10 1.8333333333333333 +(byte*) main::rem +(byte) main::res +(byte) main::res#0 2.4444444444444446 +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 4.0 +(byte~) print_byte::$2 4.0 +(byte) print_byte::b +(byte) print_byte::b#0 22.0 +(byte) print_byte::b#1 22.0 +(byte) print_byte::b#2 22.0 +(byte) print_byte::b#3 22.0 +(byte) print_byte::b#4 12.0 +(byte[]) print_byte::hextab +(void()) print_char((byte) print_char::ch) +(byte) print_char::ch +(byte) print_char::ch#0 4.0 +(byte) print_char::ch#1 4.0 +(byte) print_char::ch#2 6.0 +(void()) print_cls() +(byte*) print_cls::sc +(byte*) print_cls::sc#1 16.5 +(byte*) print_cls::sc#2 16.5 +(void()) print_ln() +(void()) print_str((byte*) print_str::str) +(byte*) print_str::str +(byte*) print_str::str#0 202.0 +(byte*) print_str::str#4 101.5 +(byte*) print_str::str#6 2.0 + +Initial phi equivalence classes +[ main::i#10 main::i#1 ] +[ line_cursor#6 line_cursor#13 line_cursor#1 ] +[ print_byte::b#4 print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +[ char_cursor#27 char_cursor#41 char_cursor#2 char_cursor#42 char_cursor#48 char_cursor#28 char_cursor#1 ] +[ print_str::str#4 print_str::str#6 print_str::str#0 ] +[ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] +[ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] +[ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +[ div8u::i#2 div8u::i#1 ] +[ print_cls::sc#2 print_cls::sc#1 ] +Added variable main::dividend#0 to zero page equivalence class [ main::dividend#0 ] +Added variable main::divisor#0 to zero page equivalence class [ main::divisor#0 ] +Added variable div8u::divisor#0 to zero page equivalence class [ div8u::divisor#0 ] +Added variable div8u::return#0 to zero page equivalence class [ div8u::return#0 ] +Added variable main::res#0 to zero page equivalence class [ main::res#0 ] +Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] +Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] +Added variable div8u::$1 to zero page equivalence class [ div8u::$1 ] +Complete equivalence classes +[ main::i#10 main::i#1 ] +[ line_cursor#6 line_cursor#13 line_cursor#1 ] +[ print_byte::b#4 print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +[ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +[ char_cursor#27 char_cursor#41 char_cursor#2 char_cursor#42 char_cursor#48 char_cursor#28 char_cursor#1 ] +[ print_str::str#4 print_str::str#6 print_str::str#0 ] +[ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] +[ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] +[ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +[ div8u::i#2 div8u::i#1 ] +[ print_cls::sc#2 print_cls::sc#1 ] +[ main::dividend#0 ] +[ main::divisor#0 ] +[ div8u::divisor#0 ] +[ div8u::return#0 ] +[ main::res#0 ] +[ print_byte::$0 ] +[ print_byte::$2 ] +[ div8u::$1 ] +Allocated zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Allocated zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 ] +Allocated zp ZP_BYTE:5 [ print_byte::b#4 print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +Allocated zp ZP_BYTE:6 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Allocated zp ZP_WORD:7 [ char_cursor#27 char_cursor#41 char_cursor#2 char_cursor#42 char_cursor#48 char_cursor#28 char_cursor#1 ] +Allocated zp ZP_WORD:9 [ print_str::str#4 print_str::str#6 print_str::str#0 ] +Allocated zp ZP_BYTE:11 [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] +Allocated zp ZP_BYTE:12 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] +Allocated zp ZP_BYTE:13 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +Allocated zp ZP_BYTE:14 [ div8u::i#2 div8u::i#1 ] +Allocated zp ZP_WORD:15 [ print_cls::sc#2 print_cls::sc#1 ] +Allocated zp ZP_BYTE:17 [ main::dividend#0 ] +Allocated zp ZP_BYTE:18 [ main::divisor#0 ] +Allocated zp ZP_BYTE:19 [ div8u::divisor#0 ] +Allocated zp ZP_BYTE:20 [ div8u::return#0 ] +Allocated zp ZP_BYTE:21 [ main::res#0 ] +Allocated zp ZP_BYTE:22 [ print_byte::$0 ] +Allocated zp ZP_BYTE:23 [ print_byte::$2 ] +Allocated zp ZP_BYTE:24 [ div8u::$1 ] + +INITIAL ASM +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label char_cursor = 7 + .label line_cursor = 3 +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @10 [phi:@begin->@10] +b10_from_bbegin: + jmp b10 +//SEG4 @10 +b10: +//SEG5 [2] call main param-assignment [ ] ( ) +//SEG6 [4] phi from @10 to main [phi:@10->main] +main_from_b10: + jsr main +//SEG7 [3] phi from @10 to @end [phi:@10->@end] +bend_from_b10: + jmp bend +//SEG8 @end +bend: +//SEG9 main +main: { + .label rem = $ff + .label dividend = $11 + .label divisor = $12 + .label res = $15 + .label i = 2 + //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + //SEG11 [75] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG13 [6] phi (byte*) line_cursor#13 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + //SEG14 [6] phi (byte*) char_cursor#42 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG15 [6] phi (byte) main::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b1 + //SEG16 main::@1 + b1: + //SEG17 [7] (byte) main::dividend#0 ← *((const byte[]) main::dividends#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy i + lda dividends,y + sta dividend + //SEG18 [8] (byte) main::divisor#0 ← *((const byte[]) main::divisors#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy i + lda divisors,y + sta divisor + //SEG19 [9] (byte) div8u::dividend#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ) -- vbuz1=vbuz2 + lda dividend + sta div8u.dividend + //SEG20 [10] (byte) div8u::divisor#0 ← (byte) main::divisor#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) -- vbuz1=vbuz2 + lda divisor + sta div8u.divisor + //SEG21 [11] call div8u param-assignment [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + //SEG22 [58] phi from main::@1 to div8u [phi:main::@1->div8u] + div8u_from_b1: + jsr div8u + //SEG23 [12] (byte) div8u::return#0 ← (byte) div8u::return#1 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ) -- vbuz1=vbuz2 + lda div8u.return_1 + sta div8u.return + jmp b4 + //SEG24 main::@4 + b4: + //SEG25 [13] (byte) main::res#0 ← (byte) div8u::return#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ) -- vbuz1=vbuz2 + lda div8u.return + sta res + //SEG26 [14] (byte) print_byte::b#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ) -- vbuz1=vbuz2 + lda dividend + sta print_byte.b + //SEG27 [15] call print_byte param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ) + //SEG28 [39] phi from main::@4 to print_byte [phi:main::@4->print_byte] + print_byte_from_b4: + //SEG29 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#42 [phi:main::@4->print_byte#0] -- register_copy + //SEG30 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#0 [phi:main::@4->print_byte#1] -- register_copy + jsr print_byte + //SEG31 [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + b5_from_b4: + jmp b5 + //SEG32 main::@5 + b5: + //SEG33 [17] call print_str param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ) + //SEG34 [51] phi from main::@5 to print_str [phi:main::@5->print_str] + print_str_from_b5: + //SEG35 [51] phi (byte*) print_str::str#6 = (const string) main::str [phi:main::@5->print_str#0] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + jmp b6 + //SEG36 main::@6 + b6: + //SEG37 [18] (byte) print_byte::b#1 ← (byte) main::divisor#0 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ) -- vbuz1=vbuz2 + lda divisor + sta print_byte.b + //SEG38 [19] call print_byte param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ) + //SEG39 [39] phi from main::@6 to print_byte [phi:main::@6->print_byte] + print_byte_from_b6: + //SEG40 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#2 [phi:main::@6->print_byte#0] -- register_copy + //SEG41 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#1 [phi:main::@6->print_byte#1] -- register_copy + jsr print_byte + //SEG42 [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + jmp b7 + //SEG43 main::@7 + b7: + //SEG44 [21] call print_str param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ) + //SEG45 [51] phi from main::@7 to print_str [phi:main::@7->print_str] + print_str_from_b7: + //SEG46 [51] phi (byte*) print_str::str#6 = (const string) main::str1 [phi:main::@7->print_str#0] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + jmp b8 + //SEG47 main::@8 + b8: + //SEG48 [22] (byte) print_byte::b#2 ← (byte) main::res#0 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ) -- vbuz1=vbuz2 + lda res + sta print_byte.b + //SEG49 [23] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + //SEG50 [39] phi from main::@8 to print_byte [phi:main::@8->print_byte] + print_byte_from_b8: + //SEG51 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#2 [phi:main::@8->print_byte#0] -- register_copy + //SEG52 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#2 [phi:main::@8->print_byte#1] -- register_copy + jsr print_byte + //SEG53 [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + b9_from_b8: + jmp b9 + //SEG54 main::@9 + b9: + //SEG55 [25] call print_str param-assignment [ main::i#10 line_cursor#13 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + //SEG56 [51] phi from main::@9 to print_str [phi:main::@9->print_str] + print_str_from_b9: + //SEG57 [51] phi (byte*) print_str::str#6 = (const string) main::str2 [phi:main::@9->print_str#0] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + jmp b10 + //SEG58 main::@10 + b10: + //SEG59 [26] (byte) print_byte::b#3 ← *((const byte*) main::rem#0) [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ) -- vbuz1=_deref_pbuc1 + lda rem + sta print_byte.b + //SEG60 [27] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + //SEG61 [39] phi from main::@10 to print_byte [phi:main::@10->print_byte] + print_byte_from_b10: + //SEG62 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#2 [phi:main::@10->print_byte#0] -- register_copy + //SEG63 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#3 [phi:main::@10->print_byte#1] -- register_copy + jsr print_byte + //SEG64 [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + b11_from_b10: + jmp b11 + //SEG65 main::@11 + b11: + //SEG66 [29] call print_ln param-assignment [ main::i#10 line_cursor#1 ] ( main:2 [ main::i#10 line_cursor#1 ] ) + //SEG67 [34] phi from main::@11 to print_ln [phi:main::@11->print_ln] + print_ln_from_b11: + jsr print_ln + jmp b12 + //SEG68 main::@12 + b12: + //SEG69 [30] (byte) main::i#1 ← ++ (byte) main::i#10 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) -- vbuz1=_inc_vbuz1 + inc i + //SEG70 [31] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@13 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda i + cmp #6 + bne b13 + jmp breturn + //SEG71 main::@return + breturn: + //SEG72 [32] return [ ] ( main:2 [ ] ) + rts + //SEG73 main::@13 + b13: + //SEG74 [33] (byte*~) char_cursor#48 ← (byte*) line_cursor#1 [ main::i#1 char_cursor#48 line_cursor#1 ] ( main:2 [ main::i#1 char_cursor#48 line_cursor#1 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + //SEG75 [6] phi from main::@13 to main::@1 [phi:main::@13->main::@1] + b1_from_b13: + //SEG76 [6] phi (byte*) line_cursor#13 = (byte*) line_cursor#1 [phi:main::@13->main::@1#0] -- register_copy + //SEG77 [6] phi (byte*) char_cursor#42 = (byte*~) char_cursor#48 [phi:main::@13->main::@1#1] -- register_copy + //SEG78 [6] phi (byte) main::i#10 = (byte) main::i#1 [phi:main::@13->main::@1#2] -- register_copy + jmp b1 + str: .text " / @" + str1: .text " = @" + str2: .text " @" + dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff + divisors: .byte 5, 7, $b, $d, $11, $13 +} +//SEG79 print_ln +print_ln: { + //SEG80 [35] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + //SEG81 [35] phi (byte*) line_cursor#6 = (byte*) line_cursor#13 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + //SEG82 print_ln::@1 + b1: + //SEG83 [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + //SEG84 [37] if((byte*) line_cursor#1<(byte*) char_cursor#28) goto print_ln::@1 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) -- pbuz1_lt_pbuz2_then_la1 + lda line_cursor+1 + cmp char_cursor+1 + bcc b1_from_b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1_from_b1 + !: + jmp breturn + //SEG85 print_ln::@return + breturn: + //SEG86 [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 ] ) + rts +} +//SEG87 print_byte +print_byte: { + .label _0 = $16 + .label _2 = $17 + .label b = 5 + //SEG88 [40] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#4 char_cursor#41 print_byte::$0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] ) -- vbuz1=vbuz2_ror_4 + lda b + lsr + lsr + lsr + lsr + sta _0 + //SEG89 [41] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#4 char_cursor#41 print_char::ch#0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _0 + lda hextab,y + sta print_char.ch + //SEG90 [42] call print_char param-assignment [ char_cursor#28 print_byte::b#4 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] ) + //SEG91 [47] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + //SEG92 [47] phi (byte*) char_cursor#27 = (byte*) char_cursor#41 [phi:print_byte->print_char#0] -- register_copy + //SEG93 [47] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + //SEG94 print_byte::@1 + b1: + //SEG95 [43] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ char_cursor#28 print_byte::$2 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 + lda #$f + and b + sta _2 + //SEG96 [44] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#28 print_char::ch#1 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy _2 + lda hextab,y + sta print_char.ch + //SEG97 [45] call print_char param-assignment [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + //SEG98 [47] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + //SEG99 [47] phi (byte*) char_cursor#27 = (byte*) char_cursor#28 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG100 [47] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG101 print_byte::@return + breturn: + //SEG102 [46] return [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + rts + hextab: .text "0123456789abcdef" +} +//SEG103 print_char +print_char: { + .label ch = 6 + //SEG104 [48] *((byte*) char_cursor#27) ← (byte) print_char::ch#2 [ char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] ) -- _deref_pbuz1=vbuz2 + lda ch + ldy #0 + sta (char_cursor),y + //SEG105 [49] (byte*) char_cursor#28 ← ++ (byte*) char_cursor#27 [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + jmp breturn + //SEG106 print_char::@return + breturn: + //SEG107 [50] return [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + rts +} +//SEG108 print_str +print_str: { + .label str = 9 + //SEG109 [52] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + //SEG110 [52] phi (byte*) char_cursor#2 = (byte*) char_cursor#28 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + //SEG111 [52] phi (byte*) print_str::str#4 = (byte*) print_str::str#6 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + //SEG112 print_str::@1 + b1: + //SEG113 [53] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + //SEG114 print_str::@return + breturn: + //SEG115 [54] return [ char_cursor#2 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + rts + //SEG116 print_str::@2 + b2: + //SEG117 [55] *((byte*) char_cursor#2) ← *((byte*) print_str::str#4) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (char_cursor),y + //SEG118 [56] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#4 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#4 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + //SEG119 [57] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#4 [ print_str::str#0 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#0 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} +//SEG120 div8u +div8u: { + .label _1 = $18 + .label dividend = $c + .label divisor = $13 + .label return = $14 + .label rem = $b + .label quotient = $d + .label i = $e + .label return_1 = $d + //SEG121 [59] phi from div8u to div8u::@1 [phi:div8u->div8u::@1] + b1_from_div8u: + //SEG122 [59] phi (byte) div8u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#0] -- vbuz1=vbuc1 + lda #0 + sta i + //SEG123 [59] phi (byte) div8u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#1] -- vbuz1=vbuc1 + lda #0 + sta quotient + //SEG124 [59] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#0 [phi:div8u->div8u::@1#2] -- register_copy + //SEG125 [59] phi (byte) div8u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#3] -- vbuz1=vbuc1 + lda #0 + sta rem + jmp b1 + //SEG126 [59] phi from div8u::@3 to div8u::@1 [phi:div8u::@3->div8u::@1] + b1_from_b3: + //SEG127 [59] phi (byte) div8u::i#2 = (byte) div8u::i#1 [phi:div8u::@3->div8u::@1#0] -- register_copy + //SEG128 [59] phi (byte) div8u::quotient#3 = (byte) div8u::return#1 [phi:div8u::@3->div8u::@1#1] -- register_copy + //SEG129 [59] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#1 [phi:div8u::@3->div8u::@1#2] -- register_copy + //SEG130 [59] phi (byte) div8u::rem#4 = (byte) div8u::rem#8 [phi:div8u::@3->div8u::@1#3] -- register_copy + jmp b1 + //SEG131 div8u::@1 + b1: + //SEG132 [60] (byte) div8u::rem#1 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) -- vbuz1=vbuz1_rol_1 + asl rem + //SEG133 [61] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) -- vbuz1=vbuz2_band_vbuc1 + lda #$80 + and dividend + sta _1 + //SEG134 [62] if((byte~) div8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8u::@2 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) -- vbuz1_eq_0_then_la1 + lda _1 + beq b2_from_b1 + jmp b4 + //SEG135 div8u::@4 + b4: + //SEG136 [63] (byte) div8u::rem#2 ← ++ (byte) div8u::rem#1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ) -- vbuz1=_inc_vbuz1 + inc rem + //SEG137 [64] phi from div8u::@1 div8u::@4 to div8u::@2 [phi:div8u::@1/div8u::@4->div8u::@2] + b2_from_b1: + b2_from_b4: + //SEG138 [64] phi (byte) div8u::rem#5 = (byte) div8u::rem#1 [phi:div8u::@1/div8u::@4->div8u::@2#0] -- register_copy + jmp b2 + //SEG139 div8u::@2 + b2: + //SEG140 [65] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) -- vbuz1=vbuz1_rol_1 + asl dividend + //SEG141 [66] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1=vbuz1_rol_1 + asl quotient + //SEG142 [67] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1_lt_vbuz2_then_la1 + lda rem + cmp divisor + bcc b3_from_b2 + jmp b5 + //SEG143 div8u::@5 + b5: + //SEG144 [68] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) -- vbuz1=_inc_vbuz1 + inc quotient + //SEG145 [69] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) -- vbuz1=vbuz1_minus_vbuz2 + lda rem + sec + sbc divisor + sta rem + //SEG146 [70] phi from div8u::@2 div8u::@5 to div8u::@3 [phi:div8u::@2/div8u::@5->div8u::@3] + b3_from_b2: + b3_from_b5: + //SEG147 [70] phi (byte) div8u::return#1 = (byte) div8u::quotient#1 [phi:div8u::@2/div8u::@5->div8u::@3#0] -- register_copy + //SEG148 [70] phi (byte) div8u::rem#8 = (byte) div8u::rem#5 [phi:div8u::@2/div8u::@5->div8u::@3#1] -- register_copy + jmp b3 + //SEG149 div8u::@3 + b3: + //SEG150 [71] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuz1=_inc_vbuz1 + inc i + //SEG151 [72] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda i + cmp #8 + bne b1_from_b3 + jmp b6 + //SEG152 div8u::@6 + b6: + //SEG153 [73] *((const byte*) main::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) -- _deref_pbuc1=vbuz1 + lda rem + sta main.rem + jmp breturn + //SEG154 div8u::@return + breturn: + //SEG155 [74] return [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + rts +} +//SEG156 print_cls +print_cls: { + .label sc = $f + //SEG157 [76] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + b1_from_print_cls: + //SEG158 [76] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + jmp b1 + //SEG159 [76] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + b1_from_b1: + //SEG160 [76] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + jmp b1 + //SEG161 print_cls::@1 + b1: + //SEG162 [77] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG163 [78] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG164 [79] if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1_from_b1 + lda sc + cmp #<$400+$3e8 + bne b1_from_b1 + jmp breturn + //SEG165 print_cls::@return + breturn: + //SEG166 [80] return [ ] ( main:2::print_cls:5 [ ] ) + rts +} + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [33] (byte*~) char_cursor#48 ← (byte*) line_cursor#1 [ main::i#1 char_cursor#48 line_cursor#1 ] ( main:2 [ main::i#1 char_cursor#48 line_cursor#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Statement [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) always clobbers reg byte a +Statement [37] if((byte*) line_cursor#1<(byte*) char_cursor#28) goto print_ln::@1 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) always clobbers reg byte a +Statement [43] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ char_cursor#28 print_byte::$2 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:18 [ main::divisor#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ main::res#0 ] +Statement [48] *((byte*) char_cursor#27) ← (byte) print_char::ch#2 [ char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:18 [ main::divisor#0 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ main::res#0 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ print_byte::b#4 print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +Statement [53] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) always clobbers reg byte a reg byte y +Statement [55] *((byte*) char_cursor#2) ← *((byte*) print_str::str#4) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) always clobbers reg byte a reg byte y +Statement [61] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ main::dividend#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:19 [ div8u::divisor#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ div8u::i#2 div8u::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] +Statement [69] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) always clobbers reg byte a +Statement [77] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [79] if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Statement [8] (byte) main::divisor#0 ← *((const byte[]) main::divisors#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ) always clobbers reg byte a +Statement [33] (byte*~) char_cursor#48 ← (byte*) line_cursor#1 [ main::i#1 char_cursor#48 line_cursor#1 ] ( main:2 [ main::i#1 char_cursor#48 line_cursor#1 ] ) always clobbers reg byte a +Statement [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) always clobbers reg byte a +Statement [37] if((byte*) line_cursor#1<(byte*) char_cursor#28) goto print_ln::@1 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) always clobbers reg byte a +Statement [43] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ char_cursor#28 print_byte::$2 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] ) always clobbers reg byte a +Statement [48] *((byte*) char_cursor#27) ← (byte) print_char::ch#2 [ char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] ) always clobbers reg byte y +Statement [53] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) always clobbers reg byte a reg byte y +Statement [55] *((byte*) char_cursor#2) ← *((byte*) print_str::str#4) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) always clobbers reg byte a reg byte y +Statement [61] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) always clobbers reg byte a +Statement [69] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) always clobbers reg byte a +Statement [77] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y +Statement [79] if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#10 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , +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#4 print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , +Potential registers zp ZP_BYTE:6 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:7 [ char_cursor#27 char_cursor#41 char_cursor#2 char_cursor#42 char_cursor#48 char_cursor#28 char_cursor#1 ] : zp ZP_WORD:7 , +Potential registers zp ZP_WORD:9 [ print_str::str#4 print_str::str#6 print_str::str#0 ] : zp ZP_WORD:9 , +Potential registers zp ZP_BYTE:11 [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] : zp ZP_BYTE:11 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:12 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] : zp ZP_BYTE:12 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:13 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:14 [ div8u::i#2 div8u::i#1 ] : zp ZP_BYTE:14 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:15 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:15 , +Potential registers zp ZP_BYTE:17 [ main::dividend#0 ] : zp ZP_BYTE:17 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:18 [ main::divisor#0 ] : zp ZP_BYTE:18 , reg byte x , +Potential registers zp ZP_BYTE:19 [ div8u::divisor#0 ] : zp ZP_BYTE:19 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:20 [ div8u::return#0 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:21 [ main::res#0 ] : zp ZP_BYTE:21 , reg byte x , +Potential registers zp ZP_BYTE:22 [ print_byte::$0 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:23 [ print_byte::$2 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:24 [ div8u::$1 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [div8u] 909.67: zp ZP_BYTE:11 [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] 333.69: zp ZP_BYTE:13 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] 202: zp ZP_BYTE:24 [ div8u::$1 ] 168.33: zp ZP_BYTE:14 [ div8u::i#2 div8u::i#1 ] 80.42: zp ZP_BYTE:12 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] 22: zp ZP_BYTE:20 [ div8u::return#0 ] 13.31: zp ZP_BYTE:19 [ div8u::divisor#0 ] +Uplift Scope [] 250.97: zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 ] 183.93: zp ZP_WORD:7 [ char_cursor#27 char_cursor#41 char_cursor#2 char_cursor#42 char_cursor#48 char_cursor#28 char_cursor#1 ] +Uplift Scope [print_str] 305.5: zp ZP_WORD:9 [ print_str::str#4 print_str::str#6 print_str::str#0 ] +Uplift Scope [print_byte] 100: zp ZP_BYTE:5 [ print_byte::b#4 print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] 4: zp ZP_BYTE:22 [ print_byte::$0 ] 4: zp ZP_BYTE:23 [ print_byte::$2 ] +Uplift Scope [print_cls] 33: zp ZP_WORD:15 [ print_cls::sc#2 print_cls::sc#1 ] +Uplift Scope [main] 12.83: zp ZP_BYTE:2 [ main::i#10 main::i#1 ] 4.71: zp ZP_BYTE:17 [ main::dividend#0 ] 3.3: zp ZP_BYTE:18 [ main::divisor#0 ] 2.44: zp ZP_BYTE:21 [ main::res#0 ] +Uplift Scope [print_char] 14: zp ZP_BYTE:6 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplift Scope [print_ln] + +Uplifting [div8u] best 20989 combination reg byte y [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] zp ZP_BYTE:13 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] reg byte a [ div8u::$1 ] reg byte x [ div8u::i#2 div8u::i#1 ] zp ZP_BYTE:12 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] reg byte a [ div8u::return#0 ] zp ZP_BYTE:19 [ div8u::divisor#0 ] +Uplifting [] best 20989 combination zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 ] zp ZP_WORD:7 [ char_cursor#27 char_cursor#41 char_cursor#2 char_cursor#42 char_cursor#48 char_cursor#28 char_cursor#1 ] +Uplifting [print_str] best 20989 combination zp ZP_WORD:9 [ print_str::str#4 print_str::str#6 print_str::str#0 ] +Uplifting [print_byte] best 20859 combination reg byte x [ print_byte::b#4 print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_cls] best 20859 combination zp ZP_WORD:15 [ print_cls::sc#2 print_cls::sc#1 ] +Uplifting [main] best 20859 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ] zp ZP_BYTE:17 [ main::dividend#0 ] zp ZP_BYTE:18 [ main::divisor#0 ] zp ZP_BYTE:21 [ main::res#0 ] +Uplifting [print_char] best 20850 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplifting [print_ln] best 20850 combination +Attempting to uplift remaining variables inzp ZP_BYTE:13 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +Uplifting [div8u] best 20850 combination zp ZP_BYTE:13 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:12 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] +Uplifting [div8u] best 20850 combination zp ZP_BYTE:12 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:19 [ div8u::divisor#0 ] +Uplifting [div8u] best 20850 combination zp ZP_BYTE:19 [ div8u::divisor#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Uplifting [main] best 20850 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:17 [ main::dividend#0 ] +Uplifting [main] best 20850 combination zp ZP_BYTE:17 [ main::dividend#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:18 [ main::divisor#0 ] +Uplifting [main] best 20850 combination zp ZP_BYTE:18 [ main::divisor#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:21 [ main::res#0 ] +Uplifting [main] best 20850 combination zp ZP_BYTE:21 [ main::res#0 ] +Coalescing zero page register [ zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 ] ] with [ zp ZP_WORD:15 [ print_cls::sc#2 print_cls::sc#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:12 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 ] ] with [ zp ZP_BYTE:21 [ main::res#0 ] ] +Coalescing zero page register [ zp ZP_BYTE:18 [ main::divisor#0 ] ] with [ zp ZP_BYTE:19 [ div8u::divisor#0 ] ] +Allocated (was zp ZP_WORD:7) zp ZP_WORD:5 [ char_cursor#27 char_cursor#41 char_cursor#2 char_cursor#42 char_cursor#48 char_cursor#28 char_cursor#1 ] +Allocated (was zp ZP_WORD:9) zp ZP_WORD:7 [ print_str::str#4 print_str::str#6 print_str::str#0 ] +Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:9 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 main::res#0 ] +Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:10 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +Allocated (was zp ZP_BYTE:17) zp ZP_BYTE:11 [ main::dividend#0 ] +Allocated (was zp ZP_BYTE:18) zp ZP_BYTE:12 [ main::divisor#0 div8u::divisor#0 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label char_cursor = 5 + .label line_cursor = 3 +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @10 [phi:@begin->@10] +b10_from_bbegin: + jmp b10 +//SEG4 @10 +b10: +//SEG5 [2] call main param-assignment [ ] ( ) +//SEG6 [4] phi from @10 to main [phi:@10->main] +main_from_b10: + jsr main +//SEG7 [3] phi from @10 to @end [phi:@10->@end] +bend_from_b10: + jmp bend +//SEG8 @end +bend: +//SEG9 main +main: { + .label rem = $ff + .label dividend = $b + .label divisor = $c + .label res = 9 + .label i = 2 + //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + //SEG11 [75] phi from main to print_cls [phi:main->print_cls] + print_cls_from_main: + jsr print_cls + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG13 [6] phi (byte*) line_cursor#13 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + //SEG14 [6] phi (byte*) char_cursor#42 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG15 [6] phi (byte) main::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b1 + //SEG16 main::@1 + b1: + //SEG17 [7] (byte) main::dividend#0 ← *((const byte[]) main::dividends#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy i + lda dividends,y + sta dividend + //SEG18 [8] (byte) main::divisor#0 ← *((const byte[]) main::divisors#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy i + lda divisors,y + sta divisor + //SEG19 [9] (byte) div8u::dividend#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ) -- vbuz1=vbuz2 + lda dividend + sta div8u.dividend + //SEG20 [10] (byte) div8u::divisor#0 ← (byte) main::divisor#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + // (byte) div8u::divisor#0 = (byte) main::divisor#0 // register copy zp ZP_BYTE:12 + //SEG21 [11] call div8u param-assignment [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + //SEG22 [58] phi from main::@1 to div8u [phi:main::@1->div8u] + div8u_from_b1: + jsr div8u + //SEG23 [12] (byte) div8u::return#0 ← (byte) div8u::return#1 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ) -- vbuaa=vbuz1 + lda div8u.return + jmp b4 + //SEG24 main::@4 + b4: + //SEG25 [13] (byte) main::res#0 ← (byte) div8u::return#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ) -- vbuz1=vbuaa + sta res + //SEG26 [14] (byte) print_byte::b#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ) -- vbuxx=vbuz1 + ldx dividend + //SEG27 [15] call print_byte param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ) + //SEG28 [39] phi from main::@4 to print_byte [phi:main::@4->print_byte] + print_byte_from_b4: + //SEG29 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#42 [phi:main::@4->print_byte#0] -- register_copy + //SEG30 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#0 [phi:main::@4->print_byte#1] -- register_copy + jsr print_byte + //SEG31 [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + b5_from_b4: + jmp b5 + //SEG32 main::@5 + b5: + //SEG33 [17] call print_str param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ) + //SEG34 [51] phi from main::@5 to print_str [phi:main::@5->print_str] + print_str_from_b5: + //SEG35 [51] phi (byte*) print_str::str#6 = (const string) main::str [phi:main::@5->print_str#0] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + jmp b6 + //SEG36 main::@6 + b6: + //SEG37 [18] (byte) print_byte::b#1 ← (byte) main::divisor#0 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ) -- vbuxx=vbuz1 + ldx divisor + //SEG38 [19] call print_byte param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ) + //SEG39 [39] phi from main::@6 to print_byte [phi:main::@6->print_byte] + print_byte_from_b6: + //SEG40 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#2 [phi:main::@6->print_byte#0] -- register_copy + //SEG41 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#1 [phi:main::@6->print_byte#1] -- register_copy + jsr print_byte + //SEG42 [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + jmp b7 + //SEG43 main::@7 + b7: + //SEG44 [21] call print_str param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ) + //SEG45 [51] phi from main::@7 to print_str [phi:main::@7->print_str] + print_str_from_b7: + //SEG46 [51] phi (byte*) print_str::str#6 = (const string) main::str1 [phi:main::@7->print_str#0] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + jmp b8 + //SEG47 main::@8 + b8: + //SEG48 [22] (byte) print_byte::b#2 ← (byte) main::res#0 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ) -- vbuxx=vbuz1 + ldx res + //SEG49 [23] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + //SEG50 [39] phi from main::@8 to print_byte [phi:main::@8->print_byte] + print_byte_from_b8: + //SEG51 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#2 [phi:main::@8->print_byte#0] -- register_copy + //SEG52 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#2 [phi:main::@8->print_byte#1] -- register_copy + jsr print_byte + //SEG53 [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + b9_from_b8: + jmp b9 + //SEG54 main::@9 + b9: + //SEG55 [25] call print_str param-assignment [ main::i#10 line_cursor#13 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + //SEG56 [51] phi from main::@9 to print_str [phi:main::@9->print_str] + print_str_from_b9: + //SEG57 [51] phi (byte*) print_str::str#6 = (const string) main::str2 [phi:main::@9->print_str#0] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + jmp b10 + //SEG58 main::@10 + b10: + //SEG59 [26] (byte) print_byte::b#3 ← *((const byte*) main::rem#0) [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ) -- vbuxx=_deref_pbuc1 + ldx rem + //SEG60 [27] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + //SEG61 [39] phi from main::@10 to print_byte [phi:main::@10->print_byte] + print_byte_from_b10: + //SEG62 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#2 [phi:main::@10->print_byte#0] -- register_copy + //SEG63 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#3 [phi:main::@10->print_byte#1] -- register_copy + jsr print_byte + //SEG64 [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + b11_from_b10: + jmp b11 + //SEG65 main::@11 + b11: + //SEG66 [29] call print_ln param-assignment [ main::i#10 line_cursor#1 ] ( main:2 [ main::i#10 line_cursor#1 ] ) + //SEG67 [34] phi from main::@11 to print_ln [phi:main::@11->print_ln] + print_ln_from_b11: + jsr print_ln + jmp b12 + //SEG68 main::@12 + b12: + //SEG69 [30] (byte) main::i#1 ← ++ (byte) main::i#10 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) -- vbuz1=_inc_vbuz1 + inc i + //SEG70 [31] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@13 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda i + cmp #6 + bne b13 + jmp breturn + //SEG71 main::@return + breturn: + //SEG72 [32] return [ ] ( main:2 [ ] ) + rts + //SEG73 main::@13 + b13: + //SEG74 [33] (byte*~) char_cursor#48 ← (byte*) line_cursor#1 [ main::i#1 char_cursor#48 line_cursor#1 ] ( main:2 [ main::i#1 char_cursor#48 line_cursor#1 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + //SEG75 [6] phi from main::@13 to main::@1 [phi:main::@13->main::@1] + b1_from_b13: + //SEG76 [6] phi (byte*) line_cursor#13 = (byte*) line_cursor#1 [phi:main::@13->main::@1#0] -- register_copy + //SEG77 [6] phi (byte*) char_cursor#42 = (byte*~) char_cursor#48 [phi:main::@13->main::@1#1] -- register_copy + //SEG78 [6] phi (byte) main::i#10 = (byte) main::i#1 [phi:main::@13->main::@1#2] -- register_copy + jmp b1 + str: .text " / @" + str1: .text " = @" + str2: .text " @" + dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff + divisors: .byte 5, 7, $b, $d, $11, $13 +} +//SEG79 print_ln +print_ln: { + //SEG80 [35] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + b1_from_print_ln: + b1_from_b1: + //SEG81 [35] phi (byte*) line_cursor#6 = (byte*) line_cursor#13 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + jmp b1 + //SEG82 print_ln::@1 + b1: + //SEG83 [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + //SEG84 [37] if((byte*) line_cursor#1<(byte*) char_cursor#28) goto print_ln::@1 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) -- pbuz1_lt_pbuz2_then_la1 + lda line_cursor+1 + cmp char_cursor+1 + bcc b1_from_b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1_from_b1 + !: + jmp breturn + //SEG85 print_ln::@return + breturn: + //SEG86 [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 ] ) + rts +} +//SEG87 print_byte +print_byte: { + //SEG88 [40] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#4 char_cursor#41 print_byte::$0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] ) -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + //SEG89 [41] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#4 char_cursor#41 print_char::ch#0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa + tay + lda hextab,y + //SEG90 [42] call print_char param-assignment [ char_cursor#28 print_byte::b#4 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] ) + //SEG91 [47] phi from print_byte to print_char [phi:print_byte->print_char] + print_char_from_print_byte: + //SEG92 [47] phi (byte*) char_cursor#27 = (byte*) char_cursor#41 [phi:print_byte->print_char#0] -- register_copy + //SEG93 [47] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + jmp b1 + //SEG94 print_byte::@1 + b1: + //SEG95 [43] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ char_cursor#28 print_byte::$2 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #$f + //SEG96 [44] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#28 print_char::ch#1 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa + tay + lda hextab,y + //SEG97 [45] call print_char param-assignment [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + //SEG98 [47] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + print_char_from_b1: + //SEG99 [47] phi (byte*) char_cursor#27 = (byte*) char_cursor#28 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG100 [47] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + jmp breturn + //SEG101 print_byte::@return + breturn: + //SEG102 [46] return [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + rts + hextab: .text "0123456789abcdef" +} +//SEG103 print_char +print_char: { + //SEG104 [48] *((byte*) char_cursor#27) ← (byte) print_char::ch#2 [ char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (char_cursor),y + //SEG105 [49] (byte*) char_cursor#28 ← ++ (byte*) char_cursor#27 [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + jmp breturn + //SEG106 print_char::@return + breturn: + //SEG107 [50] return [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + rts +} +//SEG108 print_str +print_str: { + .label str = 7 + //SEG109 [52] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + b1_from_print_str: + b1_from_b2: + //SEG110 [52] phi (byte*) char_cursor#2 = (byte*) char_cursor#28 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + //SEG111 [52] phi (byte*) print_str::str#4 = (byte*) print_str::str#6 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + jmp b1 + //SEG112 print_str::@1 + b1: + //SEG113 [53] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + jmp breturn + //SEG114 print_str::@return + breturn: + //SEG115 [54] return [ char_cursor#2 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + rts + //SEG116 print_str::@2 + b2: + //SEG117 [55] *((byte*) char_cursor#2) ← *((byte*) print_str::str#4) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + ldy #0 + sta (char_cursor),y + //SEG118 [56] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#4 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#4 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + //SEG119 [57] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#4 [ print_str::str#0 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#0 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1_from_b2 +} +//SEG120 div8u +div8u: { + .label dividend = 9 + .label divisor = $c + .label quotient = $a + .label return = $a + //SEG121 [59] phi from div8u to div8u::@1 [phi:div8u->div8u::@1] + b1_from_div8u: + //SEG122 [59] phi (byte) div8u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG123 [59] phi (byte) div8u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#1] -- vbuz1=vbuc1 + lda #0 + sta quotient + //SEG124 [59] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#0 [phi:div8u->div8u::@1#2] -- register_copy + //SEG125 [59] phi (byte) div8u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#3] -- vbuyy=vbuc1 + ldy #0 + jmp b1 + //SEG126 [59] phi from div8u::@3 to div8u::@1 [phi:div8u::@3->div8u::@1] + b1_from_b3: + //SEG127 [59] phi (byte) div8u::i#2 = (byte) div8u::i#1 [phi:div8u::@3->div8u::@1#0] -- register_copy + //SEG128 [59] phi (byte) div8u::quotient#3 = (byte) div8u::return#1 [phi:div8u::@3->div8u::@1#1] -- register_copy + //SEG129 [59] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#1 [phi:div8u::@3->div8u::@1#2] -- register_copy + //SEG130 [59] phi (byte) div8u::rem#4 = (byte) div8u::rem#8 [phi:div8u::@3->div8u::@1#3] -- register_copy + jmp b1 + //SEG131 div8u::@1 + b1: + //SEG132 [60] (byte) div8u::rem#1 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) -- vbuyy=vbuyy_rol_1 + tya + asl + tay + //SEG133 [61] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) -- vbuaa=vbuz1_band_vbuc1 + lda #$80 + and dividend + //SEG134 [62] if((byte~) div8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8u::@2 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b2_from_b1 + jmp b4 + //SEG135 div8u::@4 + b4: + //SEG136 [63] (byte) div8u::rem#2 ← ++ (byte) div8u::rem#1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ) -- vbuyy=_inc_vbuyy + iny + //SEG137 [64] phi from div8u::@1 div8u::@4 to div8u::@2 [phi:div8u::@1/div8u::@4->div8u::@2] + b2_from_b1: + b2_from_b4: + //SEG138 [64] phi (byte) div8u::rem#5 = (byte) div8u::rem#1 [phi:div8u::@1/div8u::@4->div8u::@2#0] -- register_copy + jmp b2 + //SEG139 div8u::@2 + b2: + //SEG140 [65] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) -- vbuz1=vbuz1_rol_1 + asl dividend + //SEG141 [66] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1=vbuz1_rol_1 + asl quotient + //SEG142 [67] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuyy_lt_vbuz1_then_la1 + cpy divisor + bcc b3_from_b2 + jmp b5 + //SEG143 div8u::@5 + b5: + //SEG144 [68] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) -- vbuz1=_inc_vbuz1 + inc quotient + //SEG145 [69] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) -- vbuyy=vbuyy_minus_vbuz1 + tya + sec + sbc divisor + tay + //SEG146 [70] phi from div8u::@2 div8u::@5 to div8u::@3 [phi:div8u::@2/div8u::@5->div8u::@3] + b3_from_b2: + b3_from_b5: + //SEG147 [70] phi (byte) div8u::return#1 = (byte) div8u::quotient#1 [phi:div8u::@2/div8u::@5->div8u::@3#0] -- register_copy + //SEG148 [70] phi (byte) div8u::rem#8 = (byte) div8u::rem#5 [phi:div8u::@2/div8u::@5->div8u::@3#1] -- register_copy + jmp b3 + //SEG149 div8u::@3 + b3: + //SEG150 [71] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG151 [72] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne b1_from_b3 + jmp b6 + //SEG152 div8u::@6 + b6: + //SEG153 [73] *((const byte*) main::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) -- _deref_pbuc1=vbuyy + sty main.rem + jmp breturn + //SEG154 div8u::@return + breturn: + //SEG155 [74] return [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + rts +} +//SEG156 print_cls +print_cls: { + .label sc = 3 + //SEG157 [76] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + b1_from_print_cls: + //SEG158 [76] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + jmp b1 + //SEG159 [76] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + b1_from_b1: + //SEG160 [76] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + jmp b1 + //SEG161 print_cls::@1 + b1: + //SEG162 [77] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG163 [78] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG164 [79] if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1_from_b1 + lda sc + cmp #<$400+$3e8 + bne b1_from_b1 + jmp breturn + //SEG165 print_cls::@return + breturn: + //SEG166 [80] return [ ] ( main:2::print_cls:5 [ ] ) + rts +} + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b10 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b4 +Removing instruction jmp b5 +Removing instruction jmp b6 +Removing instruction jmp b7 +Removing instruction jmp b8 +Removing instruction jmp b9 +Removing instruction jmp b10 +Removing instruction jmp b11 +Removing instruction jmp b12 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp b4 +Removing instruction jmp b2 +Removing instruction jmp b5 +Removing instruction jmp b3 +Removing instruction jmp b6 +Removing instruction jmp breturn +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction ldy i +Removing instruction ldy #0 +Replacing instruction lda #0 with TXA +Replacing instruction ldy #0 with TAY +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b2 with b1 +Replacing label b2_from_b1 with b2 +Replacing label b3_from_b2 with b3 +Replacing label b1_from_b3 with b1 +Replacing label b1_from_b1 with b1 +Replacing label b1_from_b1 with b1 +Removing instruction bbegin: +Removing instruction b10_from_bbegin: +Removing instruction main_from_b10: +Removing instruction bend_from_b10: +Removing instruction b5_from_b4: +Removing instruction print_str_from_b5: +Removing instruction b7_from_b6: +Removing instruction print_str_from_b7: +Removing instruction b9_from_b8: +Removing instruction print_str_from_b9: +Removing instruction b11_from_b10: +Removing instruction print_ln_from_b11: +Removing instruction b1_from_print_ln: +Removing instruction b1_from_b1: +Removing instruction b1_from_print_str: +Removing instruction b1_from_b2: +Removing instruction b1_from_b3: +Removing instruction b2_from_b1: +Removing instruction b2_from_b4: +Removing instruction b3_from_b2: +Removing instruction b3_from_b5: +Removing instruction b1_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction b10: +Removing instruction bend: +Removing instruction print_cls_from_main: +Removing instruction b1_from_main: +Removing instruction div8u_from_b1: +Removing instruction b4: +Removing instruction print_byte_from_b4: +Removing instruction b5: +Removing instruction b6: +Removing instruction print_byte_from_b6: +Removing instruction b7: +Removing instruction b8: +Removing instruction print_byte_from_b8: +Removing instruction b9: +Removing instruction b10: +Removing instruction print_byte_from_b10: +Removing instruction b11: +Removing instruction b12: +Removing instruction breturn: +Removing instruction b1_from_b13: +Removing instruction breturn: +Removing instruction print_char_from_print_byte: +Removing instruction b1: +Removing instruction print_char_from_b1: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction breturn: +Removing instruction b1_from_div8u: +Removing instruction b4: +Removing instruction b5: +Removing instruction b6: +Removing instruction breturn: +Removing instruction b1_from_print_cls: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp b1 +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +(label) @10 +(label) @begin +(label) @end +(byte*) char_cursor +(byte*) char_cursor#1 char_cursor zp ZP_WORD:5 101.0 +(byte*) char_cursor#2 char_cursor zp ZP_WORD:5 33.8 +(byte*) char_cursor#27 char_cursor zp ZP_WORD:5 4.0 +(byte*) char_cursor#28 char_cursor zp ZP_WORD:5 5.349999999999999 +(byte*) char_cursor#41 char_cursor zp ZP_WORD:5 15.333333333333332 +(byte*) char_cursor#42 char_cursor zp ZP_WORD:5 2.4444444444444446 +(byte*~) char_cursor#48 char_cursor zp ZP_WORD:5 22.0 +(byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) +(byte~) div8u::$1 reg byte a 202.0 +(label) div8u::@1 +(label) div8u::@2 +(label) div8u::@3 +(label) div8u::@4 +(label) div8u::@5 +(label) div8u::@6 +(label) div8u::@return +(byte) div8u::dividend +(byte) div8u::dividend#0 dividend zp ZP_BYTE:9 4.333333333333333 +(byte) div8u::dividend#1 dividend zp ZP_BYTE:9 25.25 +(byte) div8u::dividend#2 dividend zp ZP_BYTE:9 50.83333333333333 +(byte) div8u::divisor +(byte) div8u::divisor#0 divisor zp ZP_BYTE:12 13.3125 +(byte) div8u::i +(byte) div8u::i#1 reg byte x 151.5 +(byte) div8u::i#2 reg byte x 16.833333333333332 +(byte) div8u::quotient +(byte) div8u::quotient#1 quotient zp ZP_BYTE:10 151.5 +(byte) div8u::quotient#2 quotient zp ZP_BYTE:10 101.0 +(byte) div8u::quotient#3 quotient zp ZP_BYTE:10 28.857142857142858 +(byte) div8u::rem +(byte) div8u::rem#1 reg byte y 101.0 +(byte) div8u::rem#2 reg byte y 202.0 +(byte) div8u::rem#3 reg byte y 202.0 +(byte) div8u::rem#4 reg byte y 202.0 +(byte) div8u::rem#5 reg byte y 101.0 +(byte) div8u::rem#8 reg byte y 101.66666666666667 +(byte*) div8u::remainder +(byte) div8u::return +(byte) div8u::return#0 reg byte a 22.0 +(byte) div8u::return#1 return zp ZP_BYTE:10 52.33333333333333 +(byte*) line_cursor +(byte*) line_cursor#1 line_cursor zp ZP_WORD:3 46.42857142857143 +(byte*) line_cursor#13 line_cursor zp ZP_WORD:3 0.5416666666666666 +(byte*) line_cursor#6 line_cursor zp ZP_WORD:3 204.0 +(void()) main() +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 +(label) main::@return +(byte) main::dividend +(byte) main::dividend#0 dividend zp ZP_BYTE:11 4.714285714285714 +(byte[]) main::dividends +(const byte[]) main::dividends#0 dividends = { (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255 } +(byte) main::divisor +(byte) main::divisor#0 divisor zp ZP_BYTE:12 3.3000000000000003 +(byte[]) main::divisors +(const byte[]) main::divisors#0 divisors = { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 } +(byte) main::i +(byte) main::i#1 i zp ZP_BYTE:2 11.0 +(byte) main::i#10 i zp ZP_BYTE:2 1.8333333333333333 +(byte*) main::rem +(const byte*) main::rem#0 rem = ((byte*))(byte/word/signed word/dword/signed dword) 255 +(byte) main::res +(byte) main::res#0 res zp ZP_BYTE:9 2.4444444444444446 +(const string) main::str str = (string) " / @" +(const string) main::str1 str1 = (string) " = @" +(const string) main::str2 str2 = (string) " @" +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 reg byte a 4.0 +(byte~) print_byte::$2 reg byte a 4.0 +(label) print_byte::@1 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 reg byte x 22.0 +(byte) print_byte::b#1 reg byte x 22.0 +(byte) print_byte::b#2 reg byte x 22.0 +(byte) print_byte::b#3 reg byte x 22.0 +(byte) print_byte::b#4 reg byte x 12.0 +(byte[]) print_byte::hextab +(const string) print_byte::hextab#0 hextab = (string) "0123456789abcdef" +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 reg byte a 4.0 +(byte) print_char::ch#1 reg byte a 4.0 +(byte) print_char::ch#2 reg byte a 6.0 +(void()) print_cls() +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#1 sc zp ZP_WORD:3 16.5 +(byte*) print_cls::sc#2 sc zp ZP_WORD:3 16.5 +(void()) print_ln() +(label) print_ln::@1 +(label) print_ln::@return +(void()) print_str((byte*) print_str::str) +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 str zp ZP_WORD:7 202.0 +(byte*) print_str::str#4 str zp ZP_WORD:7 101.5 +(byte*) print_str::str#6 str zp ZP_WORD:7 2.0 + +zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] +reg byte x [ print_byte::b#4 print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +zp ZP_WORD:5 [ char_cursor#27 char_cursor#41 char_cursor#2 char_cursor#42 char_cursor#48 char_cursor#28 char_cursor#1 ] +zp ZP_WORD:7 [ print_str::str#4 print_str::str#6 print_str::str#0 ] +reg byte y [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] +zp ZP_BYTE:9 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 main::res#0 ] +zp ZP_BYTE:10 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +reg byte x [ div8u::i#2 div8u::i#1 ] +zp ZP_BYTE:11 [ main::dividend#0 ] +zp ZP_BYTE:12 [ main::divisor#0 div8u::divisor#0 ] +reg byte a [ div8u::return#0 ] +reg byte a [ print_byte::$0 ] +reg byte a [ print_byte::$2 ] +reg byte a [ div8u::$1 ] + + +FINAL ASSEMBLER +Score: 16930 + +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .label char_cursor = 5 + .label line_cursor = 3 +//SEG2 @begin +//SEG3 [1] phi from @begin to @10 [phi:@begin->@10] +//SEG4 @10 +//SEG5 [2] call main param-assignment [ ] ( ) +//SEG6 [4] phi from @10 to main [phi:@10->main] + jsr main +//SEG7 [3] phi from @10 to @end [phi:@10->@end] +//SEG8 @end +//SEG9 main +main: { + .label rem = $ff + .label dividend = $b + .label divisor = $c + .label res = 9 + .label i = 2 + //SEG10 [5] call print_cls param-assignment [ ] ( main:2 [ ] ) + //SEG11 [75] phi from main to print_cls [phi:main->print_cls] + jsr print_cls + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + //SEG13 [6] phi (byte*) line_cursor#13 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main->main::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta line_cursor + lda #>$400 + sta line_cursor+1 + //SEG14 [6] phi (byte*) char_cursor#42 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:main->main::@1#1] -- pbuz1=pbuc1 + lda #<$400 + sta char_cursor + lda #>$400 + sta char_cursor+1 + //SEG15 [6] phi (byte) main::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#2] -- vbuz1=vbuc1 + lda #0 + sta i + //SEG16 main::@1 + b1: + //SEG17 [7] (byte) main::dividend#0 ← *((const byte[]) main::dividends#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + ldy i + lda dividends,y + sta dividend + //SEG18 [8] (byte) main::divisor#0 ← *((const byte[]) main::divisors#0 + (byte) main::i#10) [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + lda divisors,y + sta divisor + //SEG19 [9] (byte) div8u::dividend#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 ] ) -- vbuz1=vbuz2 + lda dividend + sta div8u.dividend + //SEG20 [10] (byte) div8u::divisor#0 ← (byte) main::divisor#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::dividend#0 div8u::divisor#0 ] ) + // (byte) div8u::divisor#0 = (byte) main::divisor#0 // register copy zp ZP_BYTE:12 + //SEG21 [11] call div8u param-assignment [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + //SEG22 [58] phi from main::@1 to div8u [phi:main::@1->div8u] + jsr div8u + //SEG23 [12] (byte) div8u::return#0 ← (byte) div8u::return#1 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#0 ] ) -- vbuaa=vbuz1 + lda div8u.return + //SEG24 main::@4 + //SEG25 [13] (byte) main::res#0 ← (byte) div8u::return#0 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 main::res#0 ] ) -- vbuz1=vbuaa + sta res + //SEG26 [14] (byte) print_byte::b#0 ← (byte) main::dividend#0 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ( main:2 [ main::i#10 char_cursor#42 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#0 ] ) -- vbuxx=vbuz1 + ldx dividend + //SEG27 [15] call print_byte param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] ) + //SEG28 [39] phi from main::@4 to print_byte [phi:main::@4->print_byte] + //SEG29 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#42 [phi:main::@4->print_byte#0] -- register_copy + //SEG30 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#0 [phi:main::@4->print_byte#1] -- register_copy + jsr print_byte + //SEG31 [16] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + //SEG32 main::@5 + //SEG33 [17] call print_str param-assignment [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] ) + //SEG34 [51] phi from main::@5 to print_str [phi:main::@5->print_str] + //SEG35 [51] phi (byte*) print_str::str#6 = (const string) main::str [phi:main::@5->print_str#0] -- pbuz1=pbuc1 + lda #str + sta print_str.str+1 + jsr print_str + //SEG36 main::@6 + //SEG37 [18] (byte) print_byte::b#1 ← (byte) main::divisor#0 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#1 char_cursor#2 ] ) -- vbuxx=vbuz1 + ldx divisor + //SEG38 [19] call print_byte param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] ) + //SEG39 [39] phi from main::@6 to print_byte [phi:main::@6->print_byte] + //SEG40 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#2 [phi:main::@6->print_byte#0] -- register_copy + //SEG41 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#1 [phi:main::@6->print_byte#1] -- register_copy + jsr print_byte + //SEG42 [20] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + //SEG43 main::@7 + //SEG44 [21] call print_str param-assignment [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] ) + //SEG45 [51] phi from main::@7 to print_str [phi:main::@7->print_str] + //SEG46 [51] phi (byte*) print_str::str#6 = (const string) main::str1 [phi:main::@7->print_str#0] -- pbuz1=pbuc1 + lda #str1 + sta print_str.str+1 + jsr print_str + //SEG47 main::@8 + //SEG48 [22] (byte) print_byte::b#2 ← (byte) main::res#0 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#2 char_cursor#2 ] ) -- vbuxx=vbuz1 + ldx res + //SEG49 [23] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + //SEG50 [39] phi from main::@8 to print_byte [phi:main::@8->print_byte] + //SEG51 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#2 [phi:main::@8->print_byte#0] -- register_copy + //SEG52 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#2 [phi:main::@8->print_byte#1] -- register_copy + jsr print_byte + //SEG53 [24] phi from main::@8 to main::@9 [phi:main::@8->main::@9] + //SEG54 main::@9 + //SEG55 [25] call print_str param-assignment [ main::i#10 line_cursor#13 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + //SEG56 [51] phi from main::@9 to print_str [phi:main::@9->print_str] + //SEG57 [51] phi (byte*) print_str::str#6 = (const string) main::str2 [phi:main::@9->print_str#0] -- pbuz1=pbuc1 + lda #str2 + sta print_str.str+1 + jsr print_str + //SEG58 main::@10 + //SEG59 [26] (byte) print_byte::b#3 ← *((const byte*) main::rem#0) [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ( main:2 [ main::i#10 line_cursor#13 print_byte::b#3 char_cursor#2 ] ) -- vbuxx=_deref_pbuc1 + ldx rem + //SEG60 [27] call print_byte param-assignment [ main::i#10 line_cursor#13 char_cursor#28 ] ( main:2 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + //SEG61 [39] phi from main::@10 to print_byte [phi:main::@10->print_byte] + //SEG62 [39] phi (byte*) char_cursor#41 = (byte*) char_cursor#2 [phi:main::@10->print_byte#0] -- register_copy + //SEG63 [39] phi (byte) print_byte::b#4 = (byte) print_byte::b#3 [phi:main::@10->print_byte#1] -- register_copy + jsr print_byte + //SEG64 [28] phi from main::@10 to main::@11 [phi:main::@10->main::@11] + //SEG65 main::@11 + //SEG66 [29] call print_ln param-assignment [ main::i#10 line_cursor#1 ] ( main:2 [ main::i#10 line_cursor#1 ] ) + //SEG67 [34] phi from main::@11 to print_ln [phi:main::@11->print_ln] + jsr print_ln + //SEG68 main::@12 + //SEG69 [30] (byte) main::i#1 ← ++ (byte) main::i#10 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) -- vbuz1=_inc_vbuz1 + inc i + //SEG70 [31] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@13 [ main::i#1 line_cursor#1 ] ( main:2 [ main::i#1 line_cursor#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + lda i + cmp #6 + bne b13 + //SEG71 main::@return + //SEG72 [32] return [ ] ( main:2 [ ] ) + rts + //SEG73 main::@13 + b13: + //SEG74 [33] (byte*~) char_cursor#48 ← (byte*) line_cursor#1 [ main::i#1 char_cursor#48 line_cursor#1 ] ( main:2 [ main::i#1 char_cursor#48 line_cursor#1 ] ) -- pbuz1=pbuz2 + lda line_cursor + sta char_cursor + lda line_cursor+1 + sta char_cursor+1 + //SEG75 [6] phi from main::@13 to main::@1 [phi:main::@13->main::@1] + //SEG76 [6] phi (byte*) line_cursor#13 = (byte*) line_cursor#1 [phi:main::@13->main::@1#0] -- register_copy + //SEG77 [6] phi (byte*) char_cursor#42 = (byte*~) char_cursor#48 [phi:main::@13->main::@1#1] -- register_copy + //SEG78 [6] phi (byte) main::i#10 = (byte) main::i#1 [phi:main::@13->main::@1#2] -- register_copy + jmp b1 + str: .text " / @" + str1: .text " = @" + str2: .text " @" + dividends: .byte $ff, $ff, $ff, $ff, $ff, $ff + divisors: .byte 5, 7, $b, $d, $11, $13 +} +//SEG79 print_ln +print_ln: { + //SEG80 [35] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1] + //SEG81 [35] phi (byte*) line_cursor#6 = (byte*) line_cursor#13 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy + //SEG82 print_ln::@1 + b1: + //SEG83 [36] (byte*) line_cursor#1 ← (byte*) line_cursor#6 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) -- pbuz1=pbuz1_plus_vbuc1 + lda line_cursor + clc + adc #$28 + sta line_cursor + bcc !+ + inc line_cursor+1 + !: + //SEG84 [37] if((byte*) line_cursor#1<(byte*) char_cursor#28) goto print_ln::@1 [ line_cursor#1 char_cursor#28 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 char_cursor#28 ] ) -- pbuz1_lt_pbuz2_then_la1 + lda line_cursor+1 + cmp char_cursor+1 + bcc b1 + bne !+ + lda line_cursor + cmp char_cursor + bcc b1 + !: + //SEG85 print_ln::@return + //SEG86 [38] return [ line_cursor#1 ] ( main:2::print_ln:29 [ main::i#10 line_cursor#1 ] ) + rts +} +//SEG87 print_byte +print_byte: { + //SEG88 [40] (byte~) print_byte::$0 ← (byte) print_byte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#4 char_cursor#41 print_byte::$0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_byte::$0 ] ) -- vbuaa=vbuxx_ror_4 + txa + lsr + lsr + lsr + lsr + //SEG89 [41] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#4 char_cursor#41 print_char::ch#0 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#41 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa + tay + lda hextab,y + //SEG90 [42] call print_char param-assignment [ char_cursor#28 print_byte::b#4 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::b#4 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::b#4 ] ) + //SEG91 [47] phi from print_byte to print_char [phi:print_byte->print_char] + //SEG92 [47] phi (byte*) char_cursor#27 = (byte*) char_cursor#41 [phi:print_byte->print_char#0] -- register_copy + //SEG93 [47] phi (byte) print_char::ch#2 = (byte) print_char::ch#0 [phi:print_byte->print_char#1] -- register_copy + jsr print_char + //SEG94 print_byte::@1 + //SEG95 [43] (byte~) print_byte::$2 ← (byte) print_byte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ char_cursor#28 print_byte::$2 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_byte::$2 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 + txa + and #$f + //SEG96 [44] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#28 print_char::ch#1 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 print_char::ch#1 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa + tay + lda hextab,y + //SEG97 [45] call print_char param-assignment [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + //SEG98 [47] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char] + //SEG99 [47] phi (byte*) char_cursor#27 = (byte*) char_cursor#28 [phi:print_byte::@1->print_char#0] -- register_copy + //SEG100 [47] phi (byte) print_char::ch#2 = (byte) print_char::ch#1 [phi:print_byte::@1->print_char#1] -- register_copy + jsr print_char + //SEG101 print_byte::@return + //SEG102 [46] return [ char_cursor#28 ] ( main:2::print_byte:15 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + rts + hextab: .text "0123456789abcdef" +} +//SEG103 print_char +print_char: { + //SEG104 [48] *((byte*) char_cursor#27) ← (byte) print_char::ch#2 [ char_cursor#27 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#27 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#27 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#27 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#27 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#27 ] ) -- _deref_pbuz1=vbuaa + ldy #0 + sta (char_cursor),y + //SEG105 [49] (byte*) char_cursor#28 ← ++ (byte*) char_cursor#27 [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + //SEG106 print_char::@return + //SEG107 [50] return [ char_cursor#28 ] ( main:2::print_byte:15::print_char:42 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:19::print_char:42 [ main::i#10 line_cursor#13 main::res#0 print_byte::b#4 char_cursor#28 ] main:2::print_byte:23::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:27::print_char:42 [ main::i#10 line_cursor#13 print_byte::b#4 char_cursor#28 ] main:2::print_byte:15::print_char:45 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#28 ] main:2::print_byte:19::print_char:45 [ main::i#10 line_cursor#13 main::res#0 char_cursor#28 ] main:2::print_byte:23::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] main:2::print_byte:27::print_char:45 [ main::i#10 line_cursor#13 char_cursor#28 ] ) + rts +} +//SEG108 print_str +print_str: { + .label str = 7 + //SEG109 [52] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] + //SEG110 [52] phi (byte*) char_cursor#2 = (byte*) char_cursor#28 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy + //SEG111 [52] phi (byte*) print_str::str#4 = (byte*) print_str::str#6 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy + //SEG112 print_str::@1 + b1: + //SEG113 [53] if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (str),y + cmp #'@' + bne b2 + //SEG114 print_str::@return + //SEG115 [54] return [ char_cursor#2 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 ] ) + rts + //SEG116 print_str::@2 + b2: + //SEG117 [55] *((byte*) char_cursor#2) ← *((byte*) print_str::str#4) [ char_cursor#2 print_str::str#4 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 char_cursor#2 print_str::str#4 ] main:2::print_str:25 [ main::i#10 line_cursor#13 char_cursor#2 print_str::str#4 ] ) -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (str),y + sta (char_cursor),y + //SEG118 [56] (byte*) char_cursor#1 ← ++ (byte*) char_cursor#2 [ print_str::str#4 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#4 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#4 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc char_cursor + bne !+ + inc char_cursor+1 + !: + //SEG119 [57] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#4 [ print_str::str#0 char_cursor#1 ] ( main:2::print_str:17 [ main::i#10 line_cursor#13 main::divisor#0 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:21 [ main::i#10 line_cursor#13 main::res#0 print_str::str#0 char_cursor#1 ] main:2::print_str:25 [ main::i#10 line_cursor#13 print_str::str#0 char_cursor#1 ] ) -- pbuz1=_inc_pbuz1 + inc str + bne !+ + inc str+1 + !: + jmp b1 +} +//SEG120 div8u +div8u: { + .label dividend = 9 + .label divisor = $c + .label quotient = $a + .label return = $a + //SEG121 [59] phi from div8u to div8u::@1 [phi:div8u->div8u::@1] + //SEG122 [59] phi (byte) div8u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG123 [59] phi (byte) div8u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#1] -- vbuz1=vbuc1 + txa + sta quotient + //SEG124 [59] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#0 [phi:div8u->div8u::@1#2] -- register_copy + //SEG125 [59] phi (byte) div8u::rem#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div8u->div8u::@1#3] -- vbuyy=vbuc1 + tay + //SEG126 [59] phi from div8u::@3 to div8u::@1 [phi:div8u::@3->div8u::@1] + //SEG127 [59] phi (byte) div8u::i#2 = (byte) div8u::i#1 [phi:div8u::@3->div8u::@1#0] -- register_copy + //SEG128 [59] phi (byte) div8u::quotient#3 = (byte) div8u::return#1 [phi:div8u::@3->div8u::@1#1] -- register_copy + //SEG129 [59] phi (byte) div8u::dividend#2 = (byte) div8u::dividend#1 [phi:div8u::@3->div8u::@1#2] -- register_copy + //SEG130 [59] phi (byte) div8u::rem#4 = (byte) div8u::rem#8 [phi:div8u::@3->div8u::@1#3] -- register_copy + //SEG131 div8u::@1 + b1: + //SEG132 [60] (byte) div8u::rem#1 ← (byte) div8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) -- vbuyy=vbuyy_rol_1 + tya + asl + tay + //SEG133 [61] (byte~) div8u::$1 ← (byte) div8u::dividend#2 & (byte/word/signed word/dword/signed dword) 128 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 div8u::$1 ] ) -- vbuaa=vbuz1_band_vbuc1 + lda #$80 + and dividend + //SEG134 [62] if((byte~) div8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8u::@2 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#1 ] ) -- vbuaa_eq_0_then_la1 + cmp #0 + beq b2 + //SEG135 div8u::@4 + //SEG136 [63] (byte) div8u::rem#2 ← ++ (byte) div8u::rem#1 [ div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::dividend#2 div8u::quotient#3 div8u::i#2 div8u::rem#2 ] ) -- vbuyy=_inc_vbuyy + iny + //SEG137 [64] phi from div8u::@1 div8u::@4 to div8u::@2 [phi:div8u::@1/div8u::@4->div8u::@2] + //SEG138 [64] phi (byte) div8u::rem#5 = (byte) div8u::rem#1 [phi:div8u::@1/div8u::@4->div8u::@2#0] -- register_copy + //SEG139 div8u::@2 + b2: + //SEG140 [65] (byte) div8u::dividend#1 ← (byte) div8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::quotient#3 div8u::i#2 div8u::dividend#1 div8u::rem#5 ] ) -- vbuz1=vbuz1_rol_1 + asl dividend + //SEG141 [66] (byte) div8u::quotient#1 ← (byte) div8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuz1=vbuz1_rol_1 + asl quotient + //SEG142 [67] if((byte) div8u::rem#5<(byte) div8u::divisor#0) goto div8u::@3 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#1 ] ) -- vbuyy_lt_vbuz1_then_la1 + cpy divisor + bcc b3 + //SEG143 div8u::@5 + //SEG144 [68] (byte) div8u::quotient#2 ← ++ (byte) div8u::quotient#1 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::rem#5 div8u::quotient#2 ] ) -- vbuz1=_inc_vbuz1 + inc quotient + //SEG145 [69] (byte) div8u::rem#3 ← (byte) div8u::rem#5 - (byte) div8u::divisor#0 [ div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::i#2 div8u::dividend#1 div8u::quotient#2 div8u::rem#3 ] ) -- vbuyy=vbuyy_minus_vbuz1 + tya + sec + sbc divisor + tay + //SEG146 [70] phi from div8u::@2 div8u::@5 to div8u::@3 [phi:div8u::@2/div8u::@5->div8u::@3] + //SEG147 [70] phi (byte) div8u::return#1 = (byte) div8u::quotient#1 [phi:div8u::@2/div8u::@5->div8u::@3#0] -- register_copy + //SEG148 [70] phi (byte) div8u::rem#8 = (byte) div8u::rem#5 [phi:div8u::@2/div8u::@5->div8u::@3#1] -- register_copy + //SEG149 div8u::@3 + b3: + //SEG150 [71] (byte) div8u::i#1 ← ++ (byte) div8u::i#2 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG151 [72] if((byte) div8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto div8u::@1 [ div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::divisor#0 div8u::return#1 div8u::rem#8 div8u::dividend#1 div8u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + cpx #8 + bne b1 + //SEG152 div8u::@6 + //SEG153 [73] *((const byte*) main::rem#0) ← (byte) div8u::rem#8 [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) -- _deref_pbuc1=vbuyy + sty main.rem + //SEG154 div8u::@return + //SEG155 [74] return [ div8u::return#1 ] ( main:2::div8u:11 [ main::i#10 char_cursor#42 line_cursor#13 main::dividend#0 main::divisor#0 div8u::return#1 ] ) + rts +} +//SEG156 print_cls +print_cls: { + .label sc = 3 + //SEG157 [76] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1] + //SEG158 [76] phi (byte*) print_cls::sc#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 + lda #<$400 + sta sc + lda #>$400 + sta sc+1 + //SEG159 [76] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1] + //SEG160 [76] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy + //SEG161 print_cls::@1 + b1: + //SEG162 [77] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) -- _deref_pbuz1=vbuc1 + lda #' ' + ldy #0 + sta (sc),y + //SEG163 [78] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1=_inc_pbuz1 + inc sc + bne !+ + inc sc+1 + !: + //SEG164 [79] if((byte*) print_cls::sc#1!=(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) -- pbuz1_neq_vwuc1_then_la1 + lda sc+1 + cmp #>$400+$3e8 + bne b1 + lda sc + cmp #<$400+$3e8 + bne b1 + //SEG165 print_cls::@return + //SEG166 [80] return [ ] ( main:2::print_cls:5 [ ] ) + rts +} + diff --git a/src/test/java/dk/camelot64/kickc/test/ref/division.sym b/src/test/java/dk/camelot64/kickc/test/ref/division.sym new file mode 100644 index 000000000..4b819899a --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/ref/division.sym @@ -0,0 +1,132 @@ +(label) @10 +(label) @begin +(label) @end +(byte*) char_cursor +(byte*) char_cursor#1 char_cursor zp ZP_WORD:5 101.0 +(byte*) char_cursor#2 char_cursor zp ZP_WORD:5 33.8 +(byte*) char_cursor#27 char_cursor zp ZP_WORD:5 4.0 +(byte*) char_cursor#28 char_cursor zp ZP_WORD:5 5.349999999999999 +(byte*) char_cursor#41 char_cursor zp ZP_WORD:5 15.333333333333332 +(byte*) char_cursor#42 char_cursor zp ZP_WORD:5 2.4444444444444446 +(byte*~) char_cursor#48 char_cursor zp ZP_WORD:5 22.0 +(byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor , (byte*) div8u::remainder) +(byte~) div8u::$1 reg byte a 202.0 +(label) div8u::@1 +(label) div8u::@2 +(label) div8u::@3 +(label) div8u::@4 +(label) div8u::@5 +(label) div8u::@6 +(label) div8u::@return +(byte) div8u::dividend +(byte) div8u::dividend#0 dividend zp ZP_BYTE:9 4.333333333333333 +(byte) div8u::dividend#1 dividend zp ZP_BYTE:9 25.25 +(byte) div8u::dividend#2 dividend zp ZP_BYTE:9 50.83333333333333 +(byte) div8u::divisor +(byte) div8u::divisor#0 divisor zp ZP_BYTE:12 13.3125 +(byte) div8u::i +(byte) div8u::i#1 reg byte x 151.5 +(byte) div8u::i#2 reg byte x 16.833333333333332 +(byte) div8u::quotient +(byte) div8u::quotient#1 quotient zp ZP_BYTE:10 151.5 +(byte) div8u::quotient#2 quotient zp ZP_BYTE:10 101.0 +(byte) div8u::quotient#3 quotient zp ZP_BYTE:10 28.857142857142858 +(byte) div8u::rem +(byte) div8u::rem#1 reg byte y 101.0 +(byte) div8u::rem#2 reg byte y 202.0 +(byte) div8u::rem#3 reg byte y 202.0 +(byte) div8u::rem#4 reg byte y 202.0 +(byte) div8u::rem#5 reg byte y 101.0 +(byte) div8u::rem#8 reg byte y 101.66666666666667 +(byte*) div8u::remainder +(byte) div8u::return +(byte) div8u::return#0 reg byte a 22.0 +(byte) div8u::return#1 return zp ZP_BYTE:10 52.33333333333333 +(byte*) line_cursor +(byte*) line_cursor#1 line_cursor zp ZP_WORD:3 46.42857142857143 +(byte*) line_cursor#13 line_cursor zp ZP_WORD:3 0.5416666666666666 +(byte*) line_cursor#6 line_cursor zp ZP_WORD:3 204.0 +(void()) main() +(label) main::@1 +(label) main::@10 +(label) main::@11 +(label) main::@12 +(label) main::@13 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@7 +(label) main::@8 +(label) main::@9 +(label) main::@return +(byte) main::dividend +(byte) main::dividend#0 dividend zp ZP_BYTE:11 4.714285714285714 +(byte[]) main::dividends +(const byte[]) main::dividends#0 dividends = { (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255 } +(byte) main::divisor +(byte) main::divisor#0 divisor zp ZP_BYTE:12 3.3000000000000003 +(byte[]) main::divisors +(const byte[]) main::divisors#0 divisors = { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 } +(byte) main::i +(byte) main::i#1 i zp ZP_BYTE:2 11.0 +(byte) main::i#10 i zp ZP_BYTE:2 1.8333333333333333 +(byte*) main::rem +(const byte*) main::rem#0 rem = ((byte*))(byte/word/signed word/dword/signed dword) 255 +(byte) main::res +(byte) main::res#0 res zp ZP_BYTE:9 2.4444444444444446 +(const string) main::str str = (string) " / @" +(const string) main::str1 str1 = (string) " = @" +(const string) main::str2 str2 = (string) " @" +(void()) print_byte((byte) print_byte::b) +(byte~) print_byte::$0 reg byte a 4.0 +(byte~) print_byte::$2 reg byte a 4.0 +(label) print_byte::@1 +(label) print_byte::@return +(byte) print_byte::b +(byte) print_byte::b#0 reg byte x 22.0 +(byte) print_byte::b#1 reg byte x 22.0 +(byte) print_byte::b#2 reg byte x 22.0 +(byte) print_byte::b#3 reg byte x 22.0 +(byte) print_byte::b#4 reg byte x 12.0 +(byte[]) print_byte::hextab +(const string) print_byte::hextab#0 hextab = (string) "0123456789abcdef" +(void()) print_char((byte) print_char::ch) +(label) print_char::@return +(byte) print_char::ch +(byte) print_char::ch#0 reg byte a 4.0 +(byte) print_char::ch#1 reg byte a 4.0 +(byte) print_char::ch#2 reg byte a 6.0 +(void()) print_cls() +(label) print_cls::@1 +(label) print_cls::@return +(byte*) print_cls::sc +(byte*) print_cls::sc#1 sc zp ZP_WORD:3 16.5 +(byte*) print_cls::sc#2 sc zp ZP_WORD:3 16.5 +(void()) print_ln() +(label) print_ln::@1 +(label) print_ln::@return +(void()) print_str((byte*) print_str::str) +(label) print_str::@1 +(label) print_str::@2 +(label) print_str::@return +(byte*) print_str::str +(byte*) print_str::str#0 str zp ZP_WORD:7 202.0 +(byte*) print_str::str#4 str zp ZP_WORD:7 101.5 +(byte*) print_str::str#6 str zp ZP_WORD:7 2.0 + +zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] +reg byte x [ print_byte::b#4 print_byte::b#3 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] +reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +zp ZP_WORD:5 [ char_cursor#27 char_cursor#41 char_cursor#2 char_cursor#42 char_cursor#48 char_cursor#28 char_cursor#1 ] +zp ZP_WORD:7 [ print_str::str#4 print_str::str#6 print_str::str#0 ] +reg byte y [ div8u::rem#4 div8u::rem#8 div8u::rem#5 div8u::rem#1 div8u::rem#2 div8u::rem#3 ] +zp ZP_BYTE:9 [ div8u::dividend#2 div8u::dividend#0 div8u::dividend#1 main::res#0 ] +zp ZP_BYTE:10 [ div8u::quotient#3 div8u::return#1 div8u::quotient#1 div8u::quotient#2 ] +reg byte x [ div8u::i#2 div8u::i#1 ] +zp ZP_BYTE:11 [ main::dividend#0 ] +zp ZP_BYTE:12 [ main::divisor#0 div8u::divisor#0 ] +reg byte a [ div8u::return#0 ] +reg byte a [ print_byte::$0 ] +reg byte a [ print_byte::$2 ] +reg byte a [ div8u::$1 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/double-import.asm b/src/test/java/dk/camelot64/kickc/test/ref/double-import.asm index 3e8eae581..a007ec4e4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/double-import.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/double-import.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const BGCOL = $d021 + .label BGCOL = $d021 .const RED = 2 jsr main main: { diff --git a/src/test/java/dk/camelot64/kickc/test/ref/double-import.log b/src/test/java/dk/camelot64/kickc/test/ref/double-import.log index 15a8fb238..90be94a1c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/double-import.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/double-import.log @@ -148,7 +148,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .const RED = 2 //SEG2 @begin bbegin: @@ -192,7 +192,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .const RED = 2 //SEG2 @begin bbegin: @@ -255,7 +255,7 @@ Score: 18 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .const RED = 2 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/dword.asm b/src/test/java/dk/camelot64/kickc/test/ref/dword.asm index 96e402b6a..beac6555c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/dword.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/dword.asm @@ -4,7 +4,7 @@ jsr main main: { .const a = $ee6b2800 - .const SCREEN = $400 + .label SCREEN = $400 .label b = 2 ldx #0 b1: diff --git a/src/test/java/dk/camelot64/kickc/test/ref/dword.log b/src/test/java/dk/camelot64/kickc/test/ref/dword.log index f970b0372..ba5de757a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/dword.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/dword.log @@ -277,7 +277,7 @@ bend: //SEG9 main main: { .const a = $ee6b2800 - .const SCREEN = $400 + .label SCREEN = $400 .label b = 3 .label c = 7 .label i = 2 @@ -370,7 +370,7 @@ bend: //SEG9 main main: { .const a = $ee6b2800 - .const SCREEN = $400 + .label SCREEN = $400 .label b = 2 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: @@ -477,7 +477,7 @@ Score: 477 //SEG9 main main: { .const a = $ee6b2800 - .const SCREEN = $400 + .label SCREEN = $400 .label b = 2 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.asm b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.asm index d51eebfa6..dc34d2e11 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const fibs = $1100 + .label fibs = $1100 jsr main main: { lda #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log index eae4ef002..fab2fc65c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log @@ -237,7 +237,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const fibs = $1100 + .label fibs = $1100 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -321,7 +321,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const fibs = $1100 + .label fibs = $1100 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -419,7 +419,7 @@ Score: 269 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const fibs = $1100 + .label fibs = $1100 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.asm b/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.asm index 73fb6ffba..181d3ac42 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { lda SCREEN @@ -9,9 +9,9 @@ main: { rts } fillscreen: { - .const SCREEN2 = SCREEN+$100 - .const SCREEN3 = SCREEN+$200 - .const SCREEN4 = SCREEN+$3e8 + .label SCREEN2 = SCREEN+$100 + .label SCREEN3 = SCREEN+$200 + .label SCREEN4 = SCREEN+$3e8 ldx #0 b1: sta SCREEN,x diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.log b/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.log index e1df6b364..a9f5569b1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.log @@ -366,7 +366,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -402,9 +402,9 @@ main: { } //SEG15 fillscreen fillscreen: { - .const SCREEN2 = SCREEN+$100 - .const SCREEN3 = SCREEN+$200 - .const SCREEN4 = SCREEN+$3e8 + .label SCREEN2 = SCREEN+$100 + .label SCREEN3 = SCREEN+$200 + .label SCREEN4 = SCREEN+$3e8 .label c = 4 .label j = 2 //SEG16 [9] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] @@ -467,7 +467,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -500,9 +500,9 @@ main: { } //SEG15 fillscreen fillscreen: { - .const SCREEN2 = SCREEN+$100 - .const SCREEN3 = SCREEN+$200 - .const SCREEN4 = SCREEN+$3e8 + .label SCREEN2 = SCREEN+$100 + .label SCREEN3 = SCREEN+$200 + .label SCREEN4 = SCREEN+$3e8 //SEG16 [9] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] b1_from_fillscreen: //SEG17 [9] phi (byte) fillscreen::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:fillscreen->fillscreen::@1#0] -- vbuxx=vbuc1 @@ -595,7 +595,7 @@ Score: 313 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 @@ -618,9 +618,9 @@ main: { } //SEG15 fillscreen fillscreen: { - .const SCREEN2 = SCREEN+$100 - .const SCREEN3 = SCREEN+$200 - .const SCREEN4 = SCREEN+$3e8 + .label SCREEN2 = SCREEN+$100 + .label SCREEN3 = SCREEN+$200 + .label SCREEN4 = SCREEN+$3e8 //SEG16 [9] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] //SEG17 [9] phi (byte) fillscreen::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:fillscreen->fillscreen::@1#0] -- vbuxx=vbuc1 ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.asm b/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.asm index 2bb4643c8..2056b7924 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.asm @@ -1,8 +1,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const RASTER = $d012 - .const SCREEN = $400 + .label RASTER = $d012 + .label SCREEN = $400 jsr main main: { jsr prepare diff --git a/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log b/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log index b5d96969f..5b8c43e17 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log @@ -1173,8 +1173,8 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const RASTER = $d012 - .const SCREEN = $400 + .label RASTER = $d012 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @4 [phi:@begin->@4] @@ -1534,8 +1534,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const RASTER = $d012 - .const SCREEN = $400 + .label RASTER = $d012 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @4 [phi:@begin->@4] @@ -1987,8 +1987,8 @@ Score: 84327 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const RASTER = $d012 - .const SCREEN = $400 + .label RASTER = $d012 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @4 [phi:@begin->@4] //SEG4 @4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.asm b/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.asm index 9eb9a9589..009a06ebf 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.log b/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.log index 8564238c0..6c3be33cd 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.log @@ -226,7 +226,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -291,7 +291,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -381,7 +381,7 @@ Score: 167 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.asm b/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.asm index 1784858bc..e5e453f3f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { lda #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log b/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log index 1fa655a2b..de1ff0a49 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log @@ -226,7 +226,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -295,7 +295,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -386,7 +386,7 @@ Score: 187 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.asm b/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.asm index 85f5c6a19..b2a545198 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.asm @@ -1,8 +1,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN1 = $400 - .const SCREEN2 = $500 + .label SCREEN1 = $400 + .label SCREEN2 = $500 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.log b/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.log index 7b075657b..ba14e032e 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.log @@ -324,8 +324,8 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN1 = $400 - .const SCREEN2 = $500 + .label SCREEN1 = $400 + .label SCREEN2 = $500 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -413,8 +413,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN1 = $400 - .const SCREEN2 = $500 + .label SCREEN1 = $400 + .label SCREEN2 = $500 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -535,8 +535,8 @@ Score: 322 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN1 = $400 - .const SCREEN2 = $500 + .label SCREEN1 = $400 + .label SCREEN2 = $500 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/halfscii.asm b/src/test/java/dk/camelot64/kickc/test/ref/halfscii.asm index 54c5a0fac..668d433a1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/halfscii.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/halfscii.asm @@ -1,11 +1,11 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 - .const CHARGEN = $d000 - .const PROCPORT = 1 - .const D018 = $d018 - .const CHARSET4 = $2800 + .label SCREEN = $400 + .label CHARGEN = $d000 + .label PROCPORT = 1 + .label D018 = $d018 + .label CHARSET4 = $2800 jsr main main: { .label _1 = 8 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log b/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log index 881219387..ad6c99b99 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log @@ -1315,11 +1315,11 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const CHARGEN = $d000 - .const PROCPORT = 1 - .const D018 = $d018 - .const CHARSET4 = $2800 + .label SCREEN = $400 + .label CHARGEN = $d000 + .label PROCPORT = 1 + .label D018 = $d018 + .label CHARSET4 = $2800 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -1832,11 +1832,11 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const CHARGEN = $d000 - .const PROCPORT = 1 - .const D018 = $d018 - .const CHARSET4 = $2800 + .label SCREEN = $400 + .label CHARGEN = $d000 + .label PROCPORT = 1 + .label D018 = $d018 + .label CHARSET4 = $2800 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -2293,11 +2293,11 @@ Score: 3054 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const CHARGEN = $d000 - .const PROCPORT = 1 - .const D018 = $d018 - .const CHARSET4 = $2800 + .label SCREEN = $400 + .label CHARGEN = $d000 + .label PROCPORT = 1 + .label D018 = $d018 + .label CHARSET4 = $2800 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ifmin.asm b/src/test/java/dk/camelot64/kickc/test/ref/ifmin.asm index 253f7b1d5..f5334ac19 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ifmin.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/ifmin.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ifmin.log b/src/test/java/dk/camelot64/kickc/test/ref/ifmin.log index 3a7f35a49..969a44882 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ifmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/ifmin.log @@ -269,7 +269,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -343,7 +343,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -446,7 +446,7 @@ Score: 182 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/importing.asm b/src/test/java/dk/camelot64/kickc/test/ref/importing.asm index 5d04c1e32..58c79b4db 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/importing.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/importing.asm @@ -1,11 +1,11 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const BGCOL = $d021 + .label BGCOL = $d021 .const RED = 2 jsr main main: { - .const screen = $400 + .label screen = $400 lda #1 sta screen lda #RED diff --git a/src/test/java/dk/camelot64/kickc/test/ref/importing.log b/src/test/java/dk/camelot64/kickc/test/ref/importing.log index 3db6ff5ef..ca75fc59a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/importing.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/importing.log @@ -161,7 +161,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .const RED = 2 //SEG2 @begin bbegin: @@ -179,7 +179,7 @@ bend_from_b1: bend: //SEG8 main main: { - .const screen = $400 + .label screen = $400 //SEG9 [4] *((const byte*) main::screen#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta screen @@ -210,7 +210,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .const RED = 2 //SEG2 @begin bbegin: @@ -228,7 +228,7 @@ bend_from_b1: bend: //SEG8 main main: { - .const screen = $400 + .label screen = $400 //SEG9 [4] *((const byte*) main::screen#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta screen @@ -279,7 +279,7 @@ Score: 24 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .const RED = 2 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -290,7 +290,7 @@ Score: 24 //SEG7 @end //SEG8 main main: { - .const screen = $400 + .label screen = $400 //SEG9 [4] *((const byte*) main::screen#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta screen diff --git a/src/test/java/dk/camelot64/kickc/test/ref/incd020.asm b/src/test/java/dk/camelot64/kickc/test/ref/incd020.asm index 8e82d3d20..2f77ff4dd 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/incd020.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/incd020.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const BGCOL = $d020 + .label BGCOL = $d020 jsr main main: { b1: diff --git a/src/test/java/dk/camelot64/kickc/test/ref/incd020.log b/src/test/java/dk/camelot64/kickc/test/ref/incd020.log index a3fa795bf..c6ac4cfca 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/incd020.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/incd020.log @@ -186,7 +186,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d020 + .label BGCOL = $d020 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -236,7 +236,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d020 + .label BGCOL = $d020 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -309,7 +309,7 @@ Score: 156 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d020 + .label BGCOL = $d020 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.asm b/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.asm index 74fa8d7ce..466d523db 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.log index 0d68af5e3..93aab73d6 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.log @@ -223,7 +223,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -293,7 +293,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -387,7 +387,7 @@ Score: 237 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-word.asm b/src/test/java/dk/camelot64/kickc/test/ref/inline-word.asm index 15fd6c826..54c50d0c4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-word.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-word.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { .label w = 3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-word.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-word.log index 6cd38a26c..816ff0daa 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-word.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-word.log @@ -356,7 +356,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -464,7 +464,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -603,7 +603,7 @@ Score: 3387 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.asm b/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.asm index 1d08a5c8d..f3cb5d3b2 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.asm @@ -1,8 +1,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 - .const SCREEN2 = $400+$28 + .label SCREEN = $400 + .label SCREEN2 = $400+$28 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log b/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log index b9646da07..2426ee852 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log @@ -272,8 +272,8 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const SCREEN2 = $400+$28 + .label SCREEN = $400 + .label SCREEN2 = $400+$28 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -349,8 +349,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const SCREEN2 = $400+$28 + .label SCREEN = $400 + .label SCREEN2 = $400+$28 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -451,8 +451,8 @@ Score: 287 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const SCREEN2 = $400+$28 + .label SCREEN = $400 + .label SCREEN2 = $400+$28 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.asm b/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.asm index 7ecf0a146..c2e7819c4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.asm @@ -6,8 +6,8 @@ .const GREEN = 5 jsr main main: { - .const screen = $400 - .const cols = $d800 + .label screen = $400 + .label cols = $d800 ldy #0 ldx #0 b1: diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.log b/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.log index c6c66b818..45adec0f7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.log @@ -423,8 +423,8 @@ bend_from_b1: bend: //SEG9 main main: { - .const screen = $400 - .const cols = $d800 + .label screen = $400 + .label cols = $d800 .label j = 3 .label i = 2 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] @@ -533,8 +533,8 @@ bend_from_b1: bend: //SEG9 main main: { - .const screen = $400 - .const cols = $d800 + .label screen = $400 + .label cols = $d800 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: //SEG11 [5] phi (byte) main::j#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 @@ -676,8 +676,8 @@ Score: 367 //SEG8 @end //SEG9 main main: { - .const screen = $400 - .const cols = $d800 + .label screen = $400 + .label cols = $d800 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] //SEG11 [5] phi (byte) main::j#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 ldy #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.asm b/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.asm index d779b1f52..0bcc9c283 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.log b/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.log index 74326c132..b9c4eee36 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.log @@ -331,7 +331,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -431,7 +431,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -567,7 +567,7 @@ Score: 297 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.asm b/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.asm index 295983791..5f1dab107 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { .label cursor = 2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.log b/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.log index 51d66476e..959aa8060 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.log @@ -346,7 +346,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -459,7 +459,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -610,7 +610,7 @@ Score: 642 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.asm b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.asm index eda73f799..990142d63 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.asm @@ -3,7 +3,7 @@ .pc = $80d "Program" jsr main main: { - .const buf = $1100 + .label buf = $1100 ldx #5 b1: txa diff --git a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log index 9944dc9c8..0ec669aa0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log @@ -253,7 +253,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const buf = $1100 + .label buf = $1100 .label _1 = 3 .label i = 2 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] @@ -328,7 +328,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const buf = $1100 + .label buf = $1100 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 5 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -415,7 +415,7 @@ Score: 207 //SEG8 @end //SEG9 main main: { - .const buf = $1100 + .label buf = $1100 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 5 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #5 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/literals.asm b/src/test/java/dk/camelot64/kickc/test/ref/literals.asm index ff1677952..46ead635e 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/literals.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/literals.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 .const char = 'a' .const num = 1 jsr main diff --git a/src/test/java/dk/camelot64/kickc/test/ref/literals.log b/src/test/java/dk/camelot64/kickc/test/ref/literals.log index ffed8e85d..b23a0bd58 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/literals.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/literals.log @@ -322,7 +322,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .const char = 'a' .const num = 1 //SEG2 @begin @@ -408,7 +408,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .const char = 'a' .const num = 1 //SEG2 @begin @@ -516,7 +516,7 @@ Score: 299 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .const char = 'a' .const num = 1 //SEG2 @begin diff --git a/src/test/java/dk/camelot64/kickc/test/ref/liverange.asm b/src/test/java/dk/camelot64/kickc/test/ref/liverange.asm index 8d49f10d2..779024af9 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/liverange.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/liverange.asm @@ -3,7 +3,7 @@ .pc = $80d "Program" jsr main main: { - .const SCREEN = $400 + .label SCREEN = $400 .label a = 2 ldy #0 jsr inci diff --git a/src/test/java/dk/camelot64/kickc/test/ref/liverange.log b/src/test/java/dk/camelot64/kickc/test/ref/liverange.log index 42fec703d..bad25b63c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/liverange.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/liverange.log @@ -442,7 +442,7 @@ bend_from_b2: bend: //SEG9 main main: { - .const SCREEN = $400 + .label SCREEN = $400 .label _0 = 4 .label _2 = 7 .label a = 5 @@ -572,7 +572,7 @@ bend_from_b2: bend: //SEG9 main main: { - .const SCREEN = $400 + .label SCREEN = $400 .label a = 2 //SEG10 [5] call inci param-assignment [ inci::return#2 i#11 ] ( main:2 [ inci::return#2 i#11 ] ) //SEG11 [16] phi from main to inci [phi:main->inci] @@ -709,7 +709,7 @@ Score: 64 //SEG8 @end //SEG9 main main: { - .const SCREEN = $400 + .label SCREEN = $400 .label a = 2 //SEG10 [5] call inci param-assignment [ inci::return#2 i#11 ] ( main:2 [ inci::return#2 i#11 ] ) //SEG11 [16] phi from main to inci [phi:main->inci] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/local-string.asm b/src/test/java/dk/camelot64/kickc/test/ref/local-string.asm index 43138a9c6..1cd1969c9 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/local-string.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/local-string.asm @@ -3,7 +3,7 @@ .pc = $80d "Program" jsr main main: { - .const screen = $400 + .label screen = $400 ldx #0 b1: lda msg,x diff --git a/src/test/java/dk/camelot64/kickc/test/ref/local-string.log b/src/test/java/dk/camelot64/kickc/test/ref/local-string.log index cdbcd589d..4ccb66a4a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/local-string.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/local-string.log @@ -265,7 +265,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const screen = $400 + .label screen = $400 .label i = 2 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: @@ -339,7 +339,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const screen = $400 + .label screen = $400 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 @@ -425,7 +425,7 @@ Score: 267 //SEG8 @end //SEG9 main main: { - .const screen = $400 + .label screen = $400 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopnest.asm b/src/test/java/dk/camelot64/kickc/test/ref/loopnest.asm index 3e636f85c..db34ff209 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopnest.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopnest.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { ldy #$64 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopnest.log b/src/test/java/dk/camelot64/kickc/test/ref/loopnest.log index e03c6401e..449edcf5e 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopnest.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopnest.log @@ -345,7 +345,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -444,7 +444,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -582,7 +582,7 @@ Score: 1359 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.asm b/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.asm index d6bd8dafe..f1c09dfc1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { .label j = 3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.log b/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.log index 320b369cd..1cf2bd315 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.log @@ -720,7 +720,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -927,7 +927,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -1217,7 +1217,7 @@ Score: 13472241 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] //SEG4 @3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.asm b/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.asm index bfb7b425f..d335aa83f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { ldy #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.log b/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.log index 995809089..be066f67d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.log @@ -408,7 +408,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -532,7 +532,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -694,7 +694,7 @@ Score: 1527 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] //SEG4 @3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.asm b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.asm index d9ce07037..e6bdff600 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 .label cnt3 = 2 jsr main main: { diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log index ad869a041..a64836c7b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log @@ -534,7 +534,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .label cnt = 2 .label cnt2 = 3 .label cnt3 = 4 @@ -665,7 +665,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .label cnt3 = 2 //SEG2 @begin bbegin: @@ -819,7 +819,7 @@ Score: 60 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .label cnt3 = 2 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.asm b/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.asm index ec0d66a55..979649527 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.log b/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.log index 83e86c204..bc520d2b7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.log @@ -312,7 +312,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .label cnt = 2 .label cnt_11 = 3 .label cnt_13 = 4 @@ -405,7 +405,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -520,7 +520,7 @@ Score: 46 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.asm b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.asm index 9d6596cff..6164ca1b0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log index af4f29c58..e24b406eb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log @@ -504,7 +504,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -663,7 +663,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -866,7 +866,7 @@ Score: 235 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] //SEG4 @3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.asm b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.asm index 7a820c7f7..0d8703213 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { ldx #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.log b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.log index d89d56bb7..ba415132f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.log @@ -492,7 +492,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -647,7 +647,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -849,7 +849,7 @@ Score: 298 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/print-problem.asm b/src/test/java/dk/camelot64/kickc/test/ref/print-problem.asm index 8503aa3ed..b6e60be7a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/print-problem.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/print-problem.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { lda #$40 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log index 4f77be67f..3075752cb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log @@ -408,7 +408,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 .label line = 2 //SEG2 @begin bbegin: @@ -500,7 +500,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -625,7 +625,7 @@ Score: 46 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.asm b/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.asm index 36fa721bb..a8ccc6cc9 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.asm @@ -3,9 +3,9 @@ .pc = $80d "Program" jsr main main: { - .const screen = $400 - .const BGCOL = $d020 - .const sc2 = screen+$51 + .label screen = $400 + .label BGCOL = $d020 + .label sc2 = screen+$51 .label _2 = 2 .label _9 = 2 .label _11 = 4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.log b/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.log index f3b2294e1..54abc7738 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.log @@ -510,9 +510,9 @@ bend_from_b1: bend: //SEG9 main main: { - .const screen = $400 - .const BGCOL = $d020 - .const sc2 = screen+$51 + .label screen = $400 + .label BGCOL = $d020 + .label sc2 = screen+$51 .label _2 = 4 .label _9 = 6 .label _11 = 8 @@ -672,9 +672,9 @@ bend_from_b1: bend: //SEG9 main main: { - .const screen = $400 - .const BGCOL = $d020 - .const sc2 = screen+$51 + .label screen = $400 + .label BGCOL = $d020 + .label sc2 = screen+$51 .label _2 = 2 .label _9 = 2 .label _11 = 4 @@ -850,9 +850,9 @@ Score: 956 //SEG8 @end //SEG9 main main: { - .const screen = $400 - .const BGCOL = $d020 - .const sc2 = screen+$51 + .label screen = $400 + .label BGCOL = $d020 + .label sc2 = screen+$51 .label _2 = 2 .label _9 = 2 .label _11 = 4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.asm b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.asm index 6564649db..d150f1cf5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.asm @@ -62,7 +62,7 @@ rvalue: { jmp b1 } lvalue: { - .const SCREEN = $400 + .label SCREEN = $400 lda #1 sta SCREEN lda #2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log index 2150e3a4b..02b7ce77f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log @@ -1017,7 +1017,7 @@ rvalue: { } //SEG65 lvalue lvalue: { - .const SCREEN = $400 + .label SCREEN = $400 .label i = 9 //SEG66 [31] *((const byte*) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 @@ -1260,7 +1260,7 @@ rvalue: { } //SEG65 lvalue lvalue: { - .const SCREEN = $400 + .label SCREEN = $400 //SEG66 [31] *((const byte*) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta SCREEN @@ -1533,7 +1533,7 @@ rvalue: { } //SEG65 lvalue lvalue: { - .const SCREEN = $400 + .label SCREEN = $400 //SEG66 [31] *((const byte*) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta SCREEN diff --git a/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.asm b/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.asm index 56afccd83..33d44d04b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.asm @@ -1,9 +1,9 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const RASTER = $d012 - .const BORDERCOL = $d020 - .const BGCOL = $d021 + .label RASTER = $d012 + .label BORDERCOL = $d020 + .label BGCOL = $d021 jsr main main: { sei diff --git a/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.log b/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.log index d8f7cac51..282680cb9 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.log @@ -638,9 +638,9 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const RASTER = $d012 - .const BORDERCOL = $d020 - .const BGCOL = $d021 + .label RASTER = $d012 + .label BORDERCOL = $d020 + .label BGCOL = $d021 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -800,9 +800,9 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const RASTER = $d012 - .const BORDERCOL = $d020 - .const BGCOL = $d021 + .label RASTER = $d012 + .label BORDERCOL = $d020 + .label BGCOL = $d021 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -1004,9 +1004,9 @@ Score: 8346 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const RASTER = $d012 - .const BORDERCOL = $d020 - .const BGCOL = $d021 + .label RASTER = $d012 + .label BORDERCOL = $d020 + .label BGCOL = $d021 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.asm b/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.asm index 0945ce7dd..be67566ef 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { .label nxt = 2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.log b/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.log index c330cdd65..f59367419 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.log @@ -367,7 +367,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -481,7 +481,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -634,7 +634,7 @@ Score: 651 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scroll.asm b/src/test/java/dk/camelot64/kickc/test/ref/scroll.asm index 274e83f03..bfeb4d888 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scroll.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/scroll.asm @@ -1,13 +1,13 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 - .const RASTER = $d012 - .const BGCOL = $d020 - .const SCROLL = $d016 + .label SCREEN = $400 + .label RASTER = $d012 + .label BGCOL = $d020 + .label SCROLL = $d016 jsr main main: { - .const line = SCREEN+$28 + .label line = SCREEN+$28 .label nxt = 2 jsr fillscreen lda #@2] @@ -1051,7 +1051,7 @@ bend_from_b2: bend: //SEG9 main main: { - .const line = SCREEN+$28 + .label line = SCREEN+$28 .label scroll = 2 .label i = 3 .label c = 4 @@ -1275,10 +1275,10 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const RASTER = $d012 - .const BGCOL = $d020 - .const SCROLL = $d016 + .label SCREEN = $400 + .label RASTER = $d012 + .label BGCOL = $d020 + .label SCROLL = $d016 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -1297,7 +1297,7 @@ bend_from_b2: bend: //SEG9 main main: { - .const line = SCREEN+$28 + .label line = SCREEN+$28 .label nxt = 2 //SEG10 [5] call fillscreen param-assignment [ ] ( main:2 [ ] ) //SEG11 [27] phi from main to fillscreen [phi:main->fillscreen] @@ -1598,10 +1598,10 @@ Score: 5938 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const RASTER = $d012 - .const BGCOL = $d020 - .const SCROLL = $d016 + .label SCREEN = $400 + .label RASTER = $d012 + .label BGCOL = $d020 + .label SCROLL = $d016 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 @@ -1612,7 +1612,7 @@ Score: 5938 //SEG8 @end //SEG9 main main: { - .const line = SCREEN+$28 + .label line = SCREEN+$28 .label nxt = 2 //SEG10 [5] call fillscreen param-assignment [ ] ( main:2 [ ] ) //SEG11 [27] phi from main to fillscreen [phi:main->fillscreen] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.asm b/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.asm index e93b6c080..c9e72ce0d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.asm @@ -1,12 +1,12 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SCREEN = $400 - .const RASTER = $d012 - .const BGCOL = $d020 - .const SCROLL = $d016 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SCREEN = $400 + .label RASTER = $d012 + .label BGCOL = $d020 + .label SCROLL = $d016 .label current_bit = 2 .label current_chargen = 3 .label nxt = 7 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log b/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log index 829a3fb5f..84261d0ee 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log @@ -2617,12 +2617,12 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SCREEN = $400 - .const RASTER = $d012 - .const BGCOL = $d020 - .const SCROLL = $d016 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SCREEN = $400 + .label RASTER = $d012 + .label BGCOL = $d020 + .label SCROLL = $d016 .label scroll = 2 .label current_bit = 3 .label current_chargen = 4 @@ -3173,12 +3173,12 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SCREEN = $400 - .const RASTER = $d012 - .const BGCOL = $d020 - .const SCROLL = $d016 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SCREEN = $400 + .label RASTER = $d012 + .label BGCOL = $d020 + .label SCROLL = $d016 .label current_bit = 2 .label current_chargen = 3 .label nxt = 7 @@ -3801,12 +3801,12 @@ Score: 20556 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SCREEN = $400 - .const RASTER = $d012 - .const BGCOL = $d020 - .const SCROLL = $d016 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SCREEN = $400 + .label RASTER = $d012 + .label BGCOL = $d020 + .label SCROLL = $d016 .label current_bit = 2 .label current_chargen = 3 .label nxt = 7 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.asm b/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.asm index 6b49eb02f..9d2eb42ed 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.asm @@ -3,7 +3,7 @@ .pc = $80d "Program" jsr main main: { - .const screen = $400 + .label screen = $400 ldy #0 ldx #-$7f b1: diff --git a/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.log b/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.log index b5051247c..dda49d936 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.log @@ -300,7 +300,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const screen = $400 + .label screen = $400 .label i = 2 .label j = 3 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] @@ -385,7 +385,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const screen = $400 + .label screen = $400 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: //SEG11 [5] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 @@ -481,7 +481,7 @@ Score: 322 //SEG8 @end //SEG9 main main: { - .const screen = $400 + .label screen = $400 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] //SEG11 [5] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 ldy #0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/signed-words.asm b/src/test/java/dk/camelot64/kickc/test/ref/signed-words.asm index 2ad2ec93c..4e1bf8fdd 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/signed-words.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/signed-words.asm @@ -1,19 +1,19 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SPRITES_XPOS = $d000 - .const SPRITES_YPOS = $d001 - .const SPRITES_XMSB = $d010 - .const RASTER = $d012 - .const SPRITES_ENABLE = $d015 - .const SPRITES_EXPAND_Y = $d017 - .const SPRITES_EXPAND_X = $d01d - .const SPRITES_COLS = $d027 + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label SPRITES_EXPAND_Y = $d017 + .label SPRITES_EXPAND_X = $d01d + .label SPRITES_COLS = $d027 .const WHITE = 1 - .const SCREEN = $400 - .const SPRITE = $2000 + .label SCREEN = $400 + .label SPRITE = $2000 .const g = -5 - .const SPRITES_PTR = SCREEN+$3f8 + .label SPRITES_PTR = SCREEN+$3f8 .label yvel_init = 4 .label yvel = 4 .label yvel_9 = 6 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log b/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log index 2656199b4..11f9cd964 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log @@ -1547,19 +1547,19 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SPRITES_XPOS = $d000 - .const SPRITES_YPOS = $d001 - .const SPRITES_XMSB = $d010 - .const RASTER = $d012 - .const SPRITES_ENABLE = $d015 - .const SPRITES_EXPAND_Y = $d017 - .const SPRITES_EXPAND_X = $d01d - .const SPRITES_COLS = $d027 + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label SPRITES_EXPAND_Y = $d017 + .label SPRITES_EXPAND_X = $d01d + .label SPRITES_COLS = $d027 .const WHITE = 1 - .const SCREEN = $400 - .const SPRITE = $2000 + .label SCREEN = $400 + .label SPRITE = $2000 .const g = -5 - .const SPRITES_PTR = SCREEN+$3f8 + .label SPRITES_PTR = SCREEN+$3f8 .label yvel_init = 4 .label yvel = 4 .label yvel_9 = 6 @@ -2017,19 +2017,19 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SPRITES_XPOS = $d000 - .const SPRITES_YPOS = $d001 - .const SPRITES_XMSB = $d010 - .const RASTER = $d012 - .const SPRITES_ENABLE = $d015 - .const SPRITES_EXPAND_Y = $d017 - .const SPRITES_EXPAND_X = $d01d - .const SPRITES_COLS = $d027 + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label SPRITES_EXPAND_Y = $d017 + .label SPRITES_EXPAND_X = $d01d + .label SPRITES_COLS = $d027 .const WHITE = 1 - .const SCREEN = $400 - .const SPRITE = $2000 + .label SCREEN = $400 + .label SPRITE = $2000 .const g = -5 - .const SPRITES_PTR = SCREEN+$3f8 + .label SPRITES_PTR = SCREEN+$3f8 .label yvel_init = 4 .label yvel = 4 .label yvel_9 = 6 @@ -2566,19 +2566,19 @@ Score: 6153 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SPRITES_XPOS = $d000 - .const SPRITES_YPOS = $d001 - .const SPRITES_XMSB = $d010 - .const RASTER = $d012 - .const SPRITES_ENABLE = $d015 - .const SPRITES_EXPAND_Y = $d017 - .const SPRITES_EXPAND_X = $d01d - .const SPRITES_COLS = $d027 + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label SPRITES_EXPAND_Y = $d017 + .label SPRITES_EXPAND_X = $d01d + .label SPRITES_COLS = $d027 .const WHITE = 1 - .const SCREEN = $400 - .const SPRITE = $2000 + .label SCREEN = $400 + .label SPRITE = $2000 .const g = -5 - .const SPRITES_PTR = SCREEN+$3f8 + .label SPRITES_PTR = SCREEN+$3f8 .label yvel_init = 4 .label yvel = 4 .label yvel_9 = 6 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.asm b/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.asm index fe502da51..5abbc5136 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.asm @@ -1,13 +1,13 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const memLo = $fe - .const memHi = $ff + .label memLo = $fe + .label memHi = $ff .label line_cursor = 3 .label char_cursor = 5 jsr main main: { - .const f_2pi = $e2e5 + .label f_2pi = $e2e5 .label i = 2 lda #<$4fb sta setFAC.w diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.log b/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.log index 5ddbac1f4..6161b5fdf 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.log @@ -2637,8 +2637,8 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const memLo = $fe - .const memHi = $ff + .label memLo = $fe + .label memHi = $ff .label line_cursor = 3 .label char_cursor = 7 //SEG2 @begin @@ -2659,7 +2659,7 @@ bend_from_b36: bend: //SEG9 main main: { - .const f_2pi = $e2e5 + .label f_2pi = $e2e5 .label i = 2 //SEG10 [5] call setFAC param-assignment [ ] ( main:2 [ ] ) //SEG11 [84] phi from main to setFAC [phi:main->setFAC] @@ -3286,8 +3286,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const memLo = $fe - .const memHi = $ff + .label memLo = $fe + .label memHi = $ff .label line_cursor = 3 .label char_cursor = 5 //SEG2 @begin @@ -3308,7 +3308,7 @@ bend_from_b36: bend: //SEG9 main main: { - .const f_2pi = $e2e5 + .label f_2pi = $e2e5 .label i = 2 //SEG10 [5] call setFAC param-assignment [ ] ( main:2 [ ] ) //SEG11 [84] phi from main to setFAC [phi:main->setFAC] @@ -4046,8 +4046,8 @@ Score: 4973 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const memLo = $fe - .const memHi = $ff + .label memLo = $fe + .label memHi = $ff .label line_cursor = 3 .label char_cursor = 5 //SEG2 @begin @@ -4060,7 +4060,7 @@ Score: 4973 //SEG8 @end //SEG9 main main: { - .const f_2pi = $e2e5 + .label f_2pi = $e2e5 .label i = 2 //SEG10 [5] call setFAC param-assignment [ ] ( main:2 [ ] ) //SEG11 [84] phi from main to setFAC [phi:main->setFAC] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.asm b/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.asm index ed36ccd7c..79c87ae22 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.asm @@ -1,24 +1,24 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SPRITES_XPOS = $d000 - .const SPRITES_YPOS = $d001 - .const SPRITES_XMSB = $d010 - .const RASTER = $d012 - .const SPRITES_ENABLE = $d015 - .const SPRITES_EXPAND_Y = $d017 - .const SPRITES_EXPAND_X = $d01d - .const BORDERCOL = $d020 - .const SPRITES_COLS = $d027 - .const COLS = $d800 - .const memLo = $fe - .const memHi = $ff - .const SCREEN = $400 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label SPRITES_EXPAND_Y = $d017 + .label SPRITES_EXPAND_X = $d01d + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label COLS = $d800 + .label memLo = $fe + .label memHi = $ff + .label SCREEN = $400 .const sinlen_x = $dd .const sinlen_y = $c5 - .const sprites = $2000 + .label sprites = $2000 .label progress_idx = 4 .label progress_cursor = $a .label sin_idx_x = 2 @@ -187,7 +187,7 @@ clear_screen: { rts } gen_sintab: { - .const f_2pi = $e2e5 + .label f_2pi = $e2e5 .label _23 = $c .label i = 2 .label min = 2 @@ -525,7 +525,7 @@ gen_chargen_sprite: { rts } place_sprites: { - .const sprites_ptr = SCREEN+$3f8 + .label sprites_ptr = SCREEN+$3f8 .label spr_id = 2 .label spr_x = 3 .label col = 4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log b/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log index 2216fc2cb..9e4adcc06 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log @@ -6261,24 +6261,24 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SPRITES_XPOS = $d000 - .const SPRITES_YPOS = $d001 - .const SPRITES_XMSB = $d010 - .const RASTER = $d012 - .const SPRITES_ENABLE = $d015 - .const SPRITES_EXPAND_Y = $d017 - .const SPRITES_EXPAND_X = $d01d - .const BORDERCOL = $d020 - .const SPRITES_COLS = $d027 - .const COLS = $d800 - .const memLo = $fe - .const memHi = $ff - .const SCREEN = $400 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label SPRITES_EXPAND_Y = $d017 + .label SPRITES_EXPAND_X = $d01d + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label COLS = $d800 + .label memLo = $fe + .label memHi = $ff + .label SCREEN = $400 .const sinlen_x = $dd .const sinlen_y = $c5 - .const sprites = $2000 + .label sprites = $2000 .label progress_idx = $12 .label progress_cursor = $13 .label sin_idx_x = 2 @@ -6721,7 +6721,7 @@ clear_screen: { } //SEG154 gen_sintab gen_sintab: { - .const f_2pi = $e2e5 + .label f_2pi = $e2e5 .label _23 = $39 .label _24 = $3b .label i = $11 @@ -7588,7 +7588,7 @@ gen_chargen_sprite: { } //SEG451 place_sprites place_sprites: { - .const sprites_ptr = SCREEN+$3f8 + .label sprites_ptr = SCREEN+$3f8 .label spr_id = $2d .label spr_x = $2f .label col = $31 @@ -8022,24 +8022,24 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SPRITES_XPOS = $d000 - .const SPRITES_YPOS = $d001 - .const SPRITES_XMSB = $d010 - .const RASTER = $d012 - .const SPRITES_ENABLE = $d015 - .const SPRITES_EXPAND_Y = $d017 - .const SPRITES_EXPAND_X = $d01d - .const BORDERCOL = $d020 - .const SPRITES_COLS = $d027 - .const COLS = $d800 - .const memLo = $fe - .const memHi = $ff - .const SCREEN = $400 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label SPRITES_EXPAND_Y = $d017 + .label SPRITES_EXPAND_X = $d01d + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label COLS = $d800 + .label memLo = $fe + .label memHi = $ff + .label SCREEN = $400 .const sinlen_x = $dd .const sinlen_y = $c5 - .const sprites = $2000 + .label sprites = $2000 .label progress_idx = 4 .label progress_cursor = $a .label sin_idx_x = 2 @@ -8463,7 +8463,7 @@ clear_screen: { } //SEG154 gen_sintab gen_sintab: { - .const f_2pi = $e2e5 + .label f_2pi = $e2e5 .label _23 = $c .label i = 2 .label min = 2 @@ -9272,7 +9272,7 @@ gen_chargen_sprite: { } //SEG451 place_sprites place_sprites: { - .const sprites_ptr = SCREEN+$3f8 + .label sprites_ptr = SCREEN+$3f8 .label spr_id = 2 .label spr_x = 3 .label col = 4 @@ -10021,24 +10021,24 @@ Score: 767890 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const PROCPORT = 1 - .const CHARGEN = $d000 - .const SPRITES_XPOS = $d000 - .const SPRITES_YPOS = $d001 - .const SPRITES_XMSB = $d010 - .const RASTER = $d012 - .const SPRITES_ENABLE = $d015 - .const SPRITES_EXPAND_Y = $d017 - .const SPRITES_EXPAND_X = $d01d - .const BORDERCOL = $d020 - .const SPRITES_COLS = $d027 - .const COLS = $d800 - .const memLo = $fe - .const memHi = $ff - .const SCREEN = $400 + .label PROCPORT = 1 + .label CHARGEN = $d000 + .label SPRITES_XPOS = $d000 + .label SPRITES_YPOS = $d001 + .label SPRITES_XMSB = $d010 + .label RASTER = $d012 + .label SPRITES_ENABLE = $d015 + .label SPRITES_EXPAND_Y = $d017 + .label SPRITES_EXPAND_X = $d01d + .label BORDERCOL = $d020 + .label SPRITES_COLS = $d027 + .label COLS = $d800 + .label memLo = $fe + .label memHi = $ff + .label SCREEN = $400 .const sinlen_x = $dd .const sinlen_y = $c5 - .const sprites = $2000 + .label sprites = $2000 .label progress_idx = 4 .label progress_cursor = $a .label sin_idx_x = 2 @@ -10361,7 +10361,7 @@ clear_screen: { } //SEG154 gen_sintab gen_sintab: { - .const f_2pi = $e2e5 + .label f_2pi = $e2e5 .label _23 = $c .label i = 2 .label min = 2 @@ -11003,7 +11003,7 @@ gen_chargen_sprite: { } //SEG451 place_sprites place_sprites: { - .const sprites_ptr = SCREEN+$3f8 + .label sprites_ptr = SCREEN+$3f8 .label spr_id = 2 .label spr_x = 3 .label col = 4 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/summin.asm b/src/test/java/dk/camelot64/kickc/test/ref/summin.asm index 7383d3fb0..ac648793c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/summin.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/summin.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const screen = $400 + .label screen = $400 jsr main main: { .label s1 = 2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/summin.log b/src/test/java/dk/camelot64/kickc/test/ref/summin.log index 1ad04ff0e..137631957 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/summin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/summin.log @@ -466,7 +466,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const screen = $400 + .label screen = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -620,7 +620,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const screen = $400 + .label screen = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -793,7 +793,7 @@ Score: 80 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const screen = $400 + .label screen = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.asm b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.asm index 09991054a..0e669c616 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const BGCOL = $d021 + .label BGCOL = $d021 .label char_cursor = 8 .label line_cursor = 4 jsr main @@ -264,8 +264,8 @@ signed_multiply: { rts } multiply: { - .const memA = $fe - .const memB = $ff + .label memA = $fe + .label memB = $ff .label return = 6 sta memA stx memB @@ -572,7 +572,7 @@ multiply_tables_compare: { str2: .text "multiply tables match!@" } init_multiply_asm: { - .const mem = $ff + .label mem = $ff ldx #0 txa .byte $c9 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log index a41eec4ad..7265fbc19 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply.log @@ -6303,7 +6303,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .label char_cursor = $e .label line_cursor = 4 //SEG2 @begin @@ -7039,8 +7039,8 @@ signed_multiply: { } //SEG261 multiply multiply: { - .const memA = $fe - .const memB = $ff + .label memA = $fe + .label memB = $ff .label return = $4c .label return_2 = $46 .label a = $13 @@ -7734,7 +7734,7 @@ multiply_tables_compare: { } //SEG486 init_multiply_asm init_multiply_asm: { - .const mem = $ff + .label mem = $ff //SEG487 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 @@ -8415,7 +8415,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .label char_cursor = 8 .label line_cursor = 4 //SEG2 @begin @@ -9096,8 +9096,8 @@ signed_multiply: { } //SEG261 multiply multiply: { - .const memA = $fe - .const memB = $ff + .label memA = $fe + .label memB = $ff .label return = 6 //SEG262 [130] *((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:157 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::b#2 ] ) -- _deref_pbuc1=vbuaa sta memA @@ -9754,7 +9754,7 @@ multiply_tables_compare: { } //SEG486 init_multiply_asm init_multiply_asm: { - .const mem = $ff + .label mem = $ff //SEG487 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 @@ -10802,7 +10802,7 @@ Score: 161070 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const BGCOL = $d021 + .label BGCOL = $d021 .label char_cursor = 8 .label line_cursor = 4 //SEG2 @begin @@ -11335,8 +11335,8 @@ signed_multiply: { } //SEG261 multiply multiply: { - .const memA = $fe - .const memB = $ff + .label memA = $fe + .label memB = $ff .label return = 6 //SEG262 [130] *((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:157 [ line_cursor#27 char_cursor#27 multiply_results_compare::a#6 multiply_results_compare::b#2 multiply_results_compare::ms#0 multiply::b#2 ] ) -- _deref_pbuc1=vbuaa sta memA @@ -11874,7 +11874,7 @@ multiply_tables_compare: { } //SEG486 init_multiply_asm init_multiply_asm: { - .const mem = $ff + .label mem = $ff //SEG487 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 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.asm b/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.asm index 466212332..bbdff2527 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.asm @@ -4,8 +4,8 @@ jsr main main: { .const b = 4 - .const pos = $501 - .const bgcol = $d021 + .label pos = $501 + .label bgcol = $d021 .const w = b*$100+0 .const w2 = 1*$100+1+w+0*$100+0 lda bs+1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log b/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log index 292ae17c7..6aed511cd 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log @@ -304,8 +304,8 @@ bend: //SEG8 main main: { .const b = 4 - .const pos = $501 - .const bgcol = $d021 + .label pos = $501 + .label bgcol = $d021 .const w = b*$100+0 .const w2 = 1*$100+1+w+0*$100+0 //SEG9 [4] *((byte*)(const word) main::w2#0) ← *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2 @@ -371,8 +371,8 @@ bend: //SEG8 main main: { .const b = 4 - .const pos = $501 - .const bgcol = $d021 + .label pos = $501 + .label bgcol = $d021 .const w = b*$100+0 .const w2 = 1*$100+1+w+0*$100+0 //SEG9 [4] *((byte*)(const word) main::w2#0) ← *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2 @@ -459,8 +459,8 @@ Score: 43 //SEG8 main main: { .const b = 4 - .const pos = $501 - .const bgcol = $d021 + .label pos = $501 + .label bgcol = $d021 .const w = b*$100+0 .const w2 = 1*$100+1+w+0*$100+0 //SEG9 [4] *((byte*)(const word) main::w2#0) ← *((const byte[]) main::bs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unused-method.asm b/src/test/java/dk/camelot64/kickc/test/ref/unused-method.asm index 6b97d44e9..94eb95862 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unused-method.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/unused-method.asm @@ -3,7 +3,7 @@ .pc = $80d "Program" jsr main main: { - .const screen = $400 + .label screen = $400 lda #1 sta screen+0 rts diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log b/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log index 0e7dae0ab..6ca2477f3 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log @@ -182,7 +182,7 @@ bend_from_b2: bend: //SEG8 main main: { - .const screen = $400 + .label screen = $400 //SEG9 [4] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta screen+0 @@ -225,7 +225,7 @@ bend_from_b2: bend: //SEG8 main main: { - .const screen = $400 + .label screen = $400 //SEG9 [4] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta screen+0 @@ -278,7 +278,7 @@ Score: 18 //SEG7 @end //SEG8 main main: { - .const screen = $400 + .label screen = $400 //SEG9 [4] *((const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta screen+0 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.asm b/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.asm index 54b4197dc..acdab116b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.asm @@ -1,11 +1,11 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { .const col = 2 - .const COLS = $d800 + .label COLS = $d800 jsr s ldx #0 b1: diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log b/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log index 07d84bcd7..ef53a1eb1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log @@ -495,7 +495,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -515,7 +515,7 @@ bend: //SEG9 main main: { .const col = 2 - .const COLS = $d800 + .label COLS = $d800 .label i = 2 //SEG10 [5] call s param-assignment [ ] ( main:2 [ ] ) //SEG11 [12] phi from main to s [phi:main->s] @@ -585,7 +585,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -605,7 +605,7 @@ bend: //SEG9 main main: { .const col = 2 - .const COLS = $d800 + .label COLS = $d800 //SEG10 [5] call s param-assignment [ ] ( main:2 [ ] ) //SEG11 [12] phi from main to s [phi:main->s] s_from_main: @@ -703,7 +703,7 @@ Score: 249 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 @@ -715,7 +715,7 @@ Score: 249 //SEG9 main main: { .const col = 2 - .const COLS = $d800 + .label COLS = $d800 //SEG10 [5] call s param-assignment [ ] ( main:2 [ ] ) //SEG11 [12] phi from main to s [phi:main->s] jsr s diff --git a/src/test/java/dk/camelot64/kickc/test/ref/useglobal.asm b/src/test/java/dk/camelot64/kickc/test/ref/useglobal.asm index f8e44613c..d6ac1c173 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/useglobal.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/useglobal.asm @@ -1,7 +1,7 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 + .label SCREEN = $400 jsr main main: { lda #1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/useglobal.log b/src/test/java/dk/camelot64/kickc/test/ref/useglobal.log index 0ce8e4e87..f1f9a27d1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/useglobal.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/useglobal.log @@ -144,7 +144,7 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -187,7 +187,7 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] @@ -247,7 +247,7 @@ Score: 18 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 + .label SCREEN = $400 //SEG2 @begin //SEG3 [1] phi from @begin to @1 [phi:@begin->@1] //SEG4 @1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/var-register.asm b/src/test/java/dk/camelot64/kickc/test/ref/var-register.asm index 8e18d6a89..872d90e1e 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/var-register.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/var-register.asm @@ -28,7 +28,7 @@ main: { rts } print: { - .const SCREEN = $400 + .label SCREEN = $400 sta SCREEN,x rts } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/var-register.log b/src/test/java/dk/camelot64/kickc/test/ref/var-register.log index 453260a26..2e4b94dae 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/var-register.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/var-register.log @@ -567,7 +567,7 @@ main: { } //SEG40 print print: { - .const SCREEN = $400 + .label SCREEN = $400 .label val = 4 //SEG41 [19] *((const byte*) print::SCREEN#0 + (byte) print::idx#0) ← (byte) print::val#0 [ ] ( main:2::print:11 [ main::x#7 main::y#4 main::a#2 ] ) -- pbuc1_derefidx_vbuxx=vbuz1 lda val @@ -707,7 +707,7 @@ main: { } //SEG40 print print: { - .const SCREEN = $400 + .label SCREEN = $400 //SEG41 [19] *((const byte*) print::SCREEN#0 + (byte) print::idx#0) ← (byte) print::val#0 [ ] ( main:2::print:11 [ main::x#7 main::y#4 main::a#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x jmp breturn @@ -872,7 +872,7 @@ main: { } //SEG40 print print: { - .const SCREEN = $400 + .label SCREEN = $400 //SEG41 [19] *((const byte*) print::SCREEN#0 + (byte) print::idx#0) ← (byte) print::val#0 [ ] ( main:2::print:11 [ main::x#7 main::y#4 main::a#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta SCREEN,x //SEG42 print::@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.asm b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.asm index 8f0fc0e85..1e71cb06c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.asm @@ -1,8 +1,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 - .const COLORS = $d800 + .label SCREEN = $400 + .label COLORS = $d800 .const FILL = $e6 .const numpoints = 6 jsr main diff --git a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log index 643870aa3..83b23524f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log @@ -1988,8 +1988,8 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const COLORS = $d800 + .label SCREEN = $400 + .label COLORS = $d800 .const FILL = $e6 .const numpoints = 6 //SEG2 @begin @@ -2614,8 +2614,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const COLORS = $d800 + .label SCREEN = $400 + .label COLORS = $d800 .const FILL = $e6 .const numpoints = 6 //SEG2 @begin @@ -3305,8 +3305,8 @@ Score: 1438777 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const COLORS = $d800 + .label SCREEN = $400 + .label COLORS = $d800 .const FILL = $e6 .const numpoints = 6 //SEG2 @begin diff --git a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.asm b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.asm index e52cc347b..711acbeaa 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.asm @@ -1,8 +1,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .const SCREEN = $400 - .const SCREEN2 = $400+$28 + .label SCREEN = $400 + .label SCREEN2 = $400+$28 jsr main main: { .label i = 2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log index 08e5ac8f8..ab43555df 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log @@ -618,8 +618,8 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const SCREEN2 = $400+$28 + .label SCREEN = $400 + .label SCREEN2 = $400+$28 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -821,8 +821,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const SCREEN2 = $400+$28 + .label SCREEN = $400 + .label SCREEN2 = $400+$28 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -1042,8 +1042,8 @@ Score: 821 :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .const SCREEN = $400 - .const SCREEN2 = $400+$28 + .label SCREEN = $400 + .label SCREEN2 = $400+$28 //SEG2 @begin //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] //SEG4 @3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/zpptr.asm b/src/test/java/dk/camelot64/kickc/test/ref/zpptr.asm index f07679fce..09ef05a10 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/zpptr.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/zpptr.asm @@ -3,7 +3,7 @@ .pc = $80d "Program" jsr main main: { - .const zpptr = $1000 + .label zpptr = $1000 .label zpptr2 = 4 .label w = 6 .label i = 3 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/zpptr.log b/src/test/java/dk/camelot64/kickc/test/ref/zpptr.log index f8495535a..1697a3a7b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/zpptr.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/zpptr.log @@ -453,7 +453,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const zpptr = $1000 + .label zpptr = $1000 .label zpptr2 = 5 .label w = 7 .label zpptr2_1 = 9 @@ -612,7 +612,7 @@ bend_from_b1: bend: //SEG9 main main: { - .const zpptr = $1000 + .label zpptr = $1000 .label zpptr2 = 4 .label w = 6 .label i = 3 @@ -795,7 +795,7 @@ Score: 68437 //SEG8 @end //SEG9 main main: { - .const zpptr = $1000 + .label zpptr = $1000 .label zpptr2 = 4 .label w = 6 .label i = 3