diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vduz1=vduz2_rol_3.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vduz1=vduz2_rol_3.asm index d1cab4764..115a4756d 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/asm/vduz1=vduz2_rol_3.asm +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vduz1=vduz2_rol_3.asm @@ -6,15 +6,11 @@ lda {z2}+2 sta {z1}+2 lda {z2}+3 sta {z1}+3 +ldy #3 +!: asl {z1} rol {z1}+1 rol {z1}+2 rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 -asl {z1} -rol {z1}+1 -rol {z1}+2 -rol {z1}+3 \ No newline at end of file +dey +bne !- diff --git a/src/main/java/dk/camelot64/kickc/fragment/asm/vduz1=vduz2_rol_vbuz3.asm b/src/main/java/dk/camelot64/kickc/fragment/asm/vduz1=vduz2_rol_vbuz3.asm index 1e45a088f..3220e5751 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/asm/vduz1=vduz2_rol_vbuz3.asm +++ b/src/main/java/dk/camelot64/kickc/fragment/asm/vduz1=vduz2_rol_vbuz3.asm @@ -6,13 +6,13 @@ lda {z2}+2 sta {z1}+2 lda {z2}+3 sta {z1}+3 -ldy {z3} +ldx {z3} beq !e+ !: asl {z1} rol {z1}+1 rol {z1}+2 rol {z1}+3 -dey +dex bne !- !e: \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4ZeroPageCoalesce.java b/src/main/java/dk/camelot64/kickc/passes/Pass4ZeroPageCoalesce.java index 2e6853cad..7dc79cc20 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4ZeroPageCoalesce.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4ZeroPageCoalesce.java @@ -3,7 +3,9 @@ package dk.camelot64.kickc.passes; import dk.camelot64.kickc.model.*; import java.util.Collection; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; /** * Coalesces zero page registers where their live ranges do not overlap. @@ -17,21 +19,30 @@ public class Pass4ZeroPageCoalesce extends Pass2Base { } public void allocate() { + LinkedHashSet unknownFragments = new LinkedHashSet<>(); LiveRangeEquivalenceClassSet liveRangeEquivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet(); boolean change; do { - change = coalesce(liveRangeEquivalenceClassSet); + change = coalesce(liveRangeEquivalenceClassSet, unknownFragments); } while(change); + if(unknownFragments.size() > 0) { + getLog().append("MISSING FRAGMENTS"); + for(String unknownFragment : unknownFragments) { + getLog().append(" " + unknownFragment); + } + } + } /** * Find two equivalence classes that can be coalesced into one - and perform the coalescence. * * @param liveRangeEquivalenceClassSet The set of live range equivalence classes + * @param unknownFragments * @return true if any classes were coalesced. False otherwise. */ - private boolean coalesce(LiveRangeEquivalenceClassSet liveRangeEquivalenceClassSet) { + private boolean coalesce(LiveRangeEquivalenceClassSet liveRangeEquivalenceClassSet, Set unknownFragments) { double maxScore = -1.0; LiveRangeEquivalenceClass maxThis = null; @@ -40,7 +51,7 @@ public class Pass4ZeroPageCoalesce extends Pass2Base { for(LiveRangeEquivalenceClass thisEquivalenceClass : liveRangeEquivalenceClassSet.getEquivalenceClasses()) { for(LiveRangeEquivalenceClass otherEquivalenceClass : liveRangeEquivalenceClassSet.getEquivalenceClasses()) { if(!thisEquivalenceClass.equals(otherEquivalenceClass)) { - if(canCoalesce(thisEquivalenceClass, otherEquivalenceClass)) { + if(canCoalesce(thisEquivalenceClass, otherEquivalenceClass, unknownFragments)) { double coalesceScore = getCoalesceScore(thisEquivalenceClass, otherEquivalenceClass); if(coalesceScore>maxScore) { if(otherEquivalenceClass==null) { @@ -97,7 +108,7 @@ public class Pass4ZeroPageCoalesce extends Pass2Base { return score; } - private boolean canCoalesce(LiveRangeEquivalenceClass myEquivalenceClass, LiveRangeEquivalenceClass otherEquivalenceClass) { + private boolean canCoalesce(LiveRangeEquivalenceClass myEquivalenceClass, LiveRangeEquivalenceClass otherEquivalenceClass, Set unknownFragments) { VariableRef myVariableRef = myEquivalenceClass.getVariables().get(0); Variable myVariable = getProgram().getSymbolInfos().getVariable(myVariableRef); VariableRef otherVariableRef = otherEquivalenceClass.getVariables().get(0); @@ -107,22 +118,12 @@ public class Pass4ZeroPageCoalesce extends Pass2Base { Registers.Register otherRegister = otherEquivalenceClass.getRegister(); if(myRegister.isZp() && otherRegister.isZp()) { // Both registers are on Zero Page - if(myRegister.getType().equals(otherRegister.getType())) { // Both registers have the same Zero Page size - - // Reset the program register allocation to the one specified in the equivalence class set - getProgram().getLiveRangeEquivalenceClassSet().storeRegisterAllocation(); // Try out the coalesce to test if it works - for(VariableRef var : otherEquivalenceClass.getVariables()) { - Variable variable = getProgram().getSymbolInfos().getVariable(var); - variable.setAllocation(myRegister); - } - if(!Pass4RegisterUpliftCombinations.isAllocationOverlapping(getProgram())) { - // Live ranges do not overlap - // Perform coalesce! - return true; - } + RegisterCombination combination = new RegisterCombination(); + combination.setRegister(otherEquivalenceClass, myRegister); + return Pass4RegisterUpliftCombinations.generateCombinationAsm(combination, getProgram(), unknownFragments, ScopeRef.ROOT); } } return false; diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.asm b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.asm index c042e1a12..3dbddee23 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.asm @@ -229,8 +229,8 @@ sin16s_gen: { rts } sin16s: { - .label _6 = $e - .label x = $e + .label _6 = $f + .label x = $f .label return = 6 .label x1 = $1f .label x2 = 8 @@ -239,8 +239,9 @@ sin16s: { .label usinx = 6 .label x4 = 8 .label x5 = 8 - .label x5_128 = $12 + .label x5_128 = $13 .label sinx = 6 + .label isUpper = $e lda x+3 cmp #>PI_u4f28>>$10 bcc b4 @@ -270,10 +271,12 @@ sin16s: { lda x+3 sbc #>PI_u4f28>>$10 sta x+3 - ldx #1 + lda #1 + sta isUpper jmp b1 b4: - ldx #0 + lda #0 + sta isUpper b1: lda x+3 cmp #>PI_HALF_u4f28>>$10 @@ -325,8 +328,7 @@ sin16s: { sta mul_u16_sel.v2 lda x1+1 sta mul_u16_sel.v2+1 - lda #0 - sta mul_u16_sel.select + ldx #0 jsr mul_u16_sel lda mul_u16_sel.return_14 sta mul_u16_sel.return @@ -336,15 +338,13 @@ sin16s: { sta mul_u16_sel.v2 lda x1+1 sta mul_u16_sel.v2+1 - lda #1 - sta mul_u16_sel.select + ldx #1 jsr mul_u16_sel lda mul_u16_sel.return_14 sta mul_u16_sel.return lda mul_u16_sel.return_14+1 sta mul_u16_sel.return+1 - lda #1 - sta mul_u16_sel.select + ldx #1 lda #<$10000/6 sta mul_u16_sel.v2 lda #>$10000/6 @@ -365,8 +365,7 @@ sin16s: { sta mul_u16_sel.v2 lda x1+1 sta mul_u16_sel.v2+1 - lda #0 - sta mul_u16_sel.select + ldx #0 jsr mul_u16_sel lda mul_u16_sel.return_14 sta mul_u16_sel.return @@ -376,15 +375,13 @@ sin16s: { sta mul_u16_sel.v2 lda x1+1 sta mul_u16_sel.v2+1 - lda #0 - sta mul_u16_sel.select + ldx #0 jsr mul_u16_sel lda mul_u16_sel.return_14 sta mul_u16_sel.return lda mul_u16_sel.return_14+1 sta mul_u16_sel.return+1 - lda #3 - sta mul_u16_sel.select + ldx #3 lda #<$10000/$80 sta mul_u16_sel.v2 lda #>$10000/$80 @@ -397,7 +394,7 @@ sin16s: { lda usinx+1 adc x5_128+1 sta usinx+1 - cpx #0 + lda isUpper beq b3 sec lda sinx @@ -412,29 +409,27 @@ sin16s: { rts } mul_u16_sel: { - .label _0 = $e - .label _1 = $e + .label _0 = $f + .label _1 = $f .label v1 = 8 - .label v2 = $12 + .label v2 = $13 .label return = 8 .label return_10 = 6 - .label return_13 = $12 - .label select = $14 - .label return_14 = $12 + .label return_13 = $13 + .label return_14 = $13 lda v1 sta mul16u.a lda v1+1 sta mul16u.a+1 jsr mul16u - ldy select - cpy #0 + cpx #0 beq !e+ !: asl _1 rol _1+1 rol _1+2 rol _1+3 - dey + dex bne !- !e: lda _1+2 @@ -446,9 +441,9 @@ mul_u16_sel: { mul16u: { .label mb = $17 .label a = $15 - .label res = $e - .label b = $12 - .label return = $e + .label res = $f + .label b = $13 + .label return = $f lda b sta mb lda b+1 @@ -496,7 +491,7 @@ mul16u: { } div32u16u: { .label return = $1b - .label quotient_hi = $12 + .label quotient_hi = $13 .label quotient_lo = 8 lda # (dword~) sin16s::$6 [ sin16s::isUpper#10 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 ] ) -- vwuz1=_hi_vduz2 lda _6+2 sta x1 @@ -6435,14 +6431,14 @@ mul_u16_sel: { sta _1+2 lda _0+3 sta _1+3 - ldy select + ldx select beq !e+ !: asl _1 rol _1+1 rol _1+2 rol _1+3 - dey + dex bne !- !e: //SEG246 [123] (word) mul_u16_sel::return#14 ← > (dword~) mul_u16_sel::$1 [ mul_u16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] ) -- vwuz1=_hi_vduz2 @@ -6783,7 +6779,8 @@ Statement [74] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4 Statement [76] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#10 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#4 sin16s::isUpper#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ sin16s::isUpper#10 ] Statement [77] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#10 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x#2 ] ) always clobbers reg byte a -Statement [79] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ sin16s::isUpper#10 sin16s::$6 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::$6 ] ) always clobbers reg byte a +Statement [79] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ sin16s::isUpper#10 sin16s::$6 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::$6 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ sin16s::isUpper#10 ] Statement [80] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 [ sin16s::isUpper#10 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 ] ) always clobbers reg byte a Statement [81] (word) mul_u16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v1#0 ] ) always clobbers reg byte a Statement [82] (word) mul_u16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v1#0 mul_u16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v1#0 mul_u16_sel::v2#0 ] ) always clobbers reg byte a @@ -6816,7 +6813,8 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ m Statement [118] (word) mul16u::b#0 ← (word) mul_u16_sel::v2#6 [ mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a Statement [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul_u16_sel::select#6 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] ) always clobbers reg byte a Statement [121] (dword~) mul_u16_sel::$0 ← (dword) mul16u::return#2 [ mul_u16_sel::select#6 mul_u16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] ) always clobbers reg byte a -Statement [122] (dword~) mul_u16_sel::$1 ← (dword~) mul_u16_sel::$0 << (byte) mul_u16_sel::select#6 [ mul_u16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] ) always clobbers reg byte a +Statement [122] (dword~) mul_u16_sel::$1 ← (dword~) mul_u16_sel::$0 << (byte) mul_u16_sel::select#6 [ mul_u16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte x as potential for zp ZP_BYTE:22 [ sin16s::isUpper#10 ] Statement [123] (word) mul_u16_sel::return#14 ← > (dword~) mul_u16_sel::$1 [ mul_u16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] ) always clobbers reg byte a Statement [125] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [127] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a @@ -6863,7 +6861,7 @@ Statement [73] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 Statement [74] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#1 ] ) always clobbers reg byte a Statement [76] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#10 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#4 sin16s::isUpper#10 ] ) always clobbers reg byte a Statement [77] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#10 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x#2 ] ) always clobbers reg byte a -Statement [79] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ sin16s::isUpper#10 sin16s::$6 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::$6 ] ) always clobbers reg byte a +Statement [79] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ sin16s::isUpper#10 sin16s::$6 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::$6 ] ) always clobbers reg byte a reg byte y Statement [80] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 [ sin16s::isUpper#10 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 ] ) always clobbers reg byte a Statement [81] (word) mul_u16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v1#0 ] ) always clobbers reg byte a Statement [82] (word) mul_u16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v1#0 mul_u16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v1#0 mul_u16_sel::v2#0 ] ) always clobbers reg byte a @@ -6889,13 +6887,14 @@ Statement [106] (word) mul_u16_sel::v1#5 ← (word) sin16s::x5#0 [ sin16s::isUpp Statement [108] (word) mul_u16_sel::return#13 ← (word) mul_u16_sel::return#14 [ sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#13 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#13 ] ) always clobbers reg byte a Statement [109] (word) sin16s::x5_128#0 ← (word) mul_u16_sel::return#13 [ sin16s::isUpper#10 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a Statement [110] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#10 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [111] if((byte) sin16s::isUpper#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@16 [ sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::usinx#1 ] ) always clobbers reg byte a Statement [112] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::sinx#1 ] ) always clobbers reg byte a Statement [115] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#5 ] ) always clobbers reg byte a Statement [117] (word) mul16u::a#1 ← (word) mul_u16_sel::v1#6 [ mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] ) always clobbers reg byte a Statement [118] (word) mul16u::b#0 ← (word) mul_u16_sel::v2#6 [ mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a Statement [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul_u16_sel::select#6 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] ) always clobbers reg byte a Statement [121] (dword~) mul_u16_sel::$0 ← (dword) mul16u::return#2 [ mul_u16_sel::select#6 mul_u16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] ) always clobbers reg byte a -Statement [122] (dword~) mul_u16_sel::$1 ← (dword~) mul_u16_sel::$0 << (byte) mul_u16_sel::select#6 [ mul_u16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] ) always clobbers reg byte a +Statement [122] (dword~) mul_u16_sel::$1 ← (dword~) mul_u16_sel::$0 << (byte) mul_u16_sel::select#6 [ mul_u16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] ) always clobbers reg byte a reg byte x Statement [123] (word) mul_u16_sel::return#14 ← > (dword~) mul_u16_sel::$1 [ mul_u16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] ) always clobbers reg byte a Statement [125] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [127] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a @@ -6923,7 +6922,7 @@ Potential registers zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WO Potential registers zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] : zp ZP_DWORD:14 , Potential registers zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#1 ] : zp ZP_WORD:18 , Potential registers zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] : zp ZP_WORD:20 , -Potential registers zp ZP_BYTE:22 [ sin16s::isUpper#10 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:22 [ sin16s::isUpper#10 ] : zp ZP_BYTE:22 , Potential registers zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp ZP_DWORD:23 , Potential registers zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp ZP_WORD:27 , Potential registers zp ZP_WORD:29 [ mul_u16_sel::v1#6 mul_u16_sel::v1#3 mul_u16_sel::v1#4 mul_u16_sel::v1#5 mul_u16_sel::v1#0 mul_u16_sel::v1#1 mul_u16_sel::v1#2 ] : zp ZP_WORD:29 , @@ -6991,22 +6990,22 @@ Uplift Scope [div32u16u] 4: zp ZP_DWORD:57 [ div32u16u::return#0 ] 4: zp ZP_WORD Uplift Scope [print_sword] 9.58: zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] Uplift Scope [print_word] -Uplifting [mul16u] best 25183 combination zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_WORD:103 [ mul16u::b#0 ] zp ZP_DWORD:105 [ mul16u::return#2 ] -Uplifting [print_str] best 25183 combination zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplifting [divr16u] best 24993 combination zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:120 [ divr16u::return#2 ] zp ZP_WORD:124 [ divr16u::return#3 ] zp ZP_WORD:44 [ divr16u::divisor#6 ] -Uplifting [] best 24993 combination zp ZP_WORD:10 [ char_cursor#33 char_cursor#46 char_cursor#43 char_cursor#51 char_cursor#48 char_cursor#49 char_cursor#2 char_cursor#12 char_cursor#1 ] zp ZP_WORD:134 [ rem16u#1 ] -Uplifting [sin16s] best 24986 combination zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:65 [ sin16s::return#0 ] zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:69 [ sin16s::$6 ] zp ZP_WORD:77 [ sin16s::x2#0 ] zp ZP_WORD:85 [ sin16s::x3_6#0 ] zp ZP_WORD:91 [ sin16s::x4#0 ] zp ZP_WORD:95 [ sin16s::x5#0 ] zp ZP_WORD:99 [ sin16s::x5_128#0 ] zp ZP_WORD:81 [ sin16s::x3#0 ] zp ZP_WORD:101 [ sin16s::usinx#1 ] zp ZP_WORD:73 [ sin16s::x1#0 ] zp ZP_WORD:87 [ sin16s::usinx#0 ] reg byte x [ sin16s::isUpper#10 ] -Uplifting [mul_u16_sel] best 24986 combination zp ZP_WORD:29 [ mul_u16_sel::v1#6 mul_u16_sel::v1#3 mul_u16_sel::v1#4 mul_u16_sel::v1#5 mul_u16_sel::v1#0 mul_u16_sel::v1#1 mul_u16_sel::v1#2 ] zp ZP_WORD:31 [ mul_u16_sel::v2#6 mul_u16_sel::v2#3 mul_u16_sel::v2#4 mul_u16_sel::v2#0 mul_u16_sel::v2#1 ] zp ZP_WORD:75 [ mul_u16_sel::return#0 ] zp ZP_WORD:79 [ mul_u16_sel::return#1 ] zp ZP_WORD:83 [ mul_u16_sel::return#10 ] zp ZP_WORD:89 [ mul_u16_sel::return#11 ] zp ZP_WORD:93 [ mul_u16_sel::return#12 ] zp ZP_WORD:97 [ mul_u16_sel::return#13 ] zp ZP_DWORD:109 [ mul_u16_sel::$0 ] zp ZP_DWORD:113 [ mul_u16_sel::$1 ] zp ZP_WORD:117 [ mul_u16_sel::return#14 ] zp ZP_BYTE:33 [ mul_u16_sel::select#6 ] -Uplifting [sin16s_gen] best 24986 combination zp ZP_WORD:67 [ sin16s_gen::$1 ] zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#1 ] zp ZP_DWORD:61 [ sin16s_gen::step#0 ] -Uplifting [print_cls] best 24986 combination zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ] -Uplifting [main] best 24986 combination zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:53 [ main::sw#0 ] -Uplifting [print_byte] best 24974 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [print_char] best 24962 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] -Uplifting [div32u16u] best 24962 combination zp ZP_DWORD:57 [ div32u16u::return#0 ] zp ZP_WORD:126 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:128 [ div32u16u::return#1 ] zp ZP_WORD:122 [ div32u16u::quotient_hi#0 ] -Uplifting [print_sword] best 24962 combination zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] -Uplifting [print_word] best 24962 combination -Attempting to uplift remaining variables inzp ZP_BYTE:33 [ mul_u16_sel::select#6 ] -Uplifting [mul_u16_sel] best 24962 combination zp ZP_BYTE:33 [ mul_u16_sel::select#6 ] +Uplifting [mul16u] best 25149 combination zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_WORD:103 [ mul16u::b#0 ] zp ZP_DWORD:105 [ mul16u::return#2 ] +Uplifting [print_str] best 25149 combination zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Uplifting [divr16u] best 24959 combination zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:120 [ divr16u::return#2 ] zp ZP_WORD:124 [ divr16u::return#3 ] zp ZP_WORD:44 [ divr16u::divisor#6 ] +Uplifting [] best 24959 combination zp ZP_WORD:10 [ char_cursor#33 char_cursor#46 char_cursor#43 char_cursor#51 char_cursor#48 char_cursor#49 char_cursor#2 char_cursor#12 char_cursor#1 ] zp ZP_WORD:134 [ rem16u#1 ] +Uplifting [sin16s] best 24959 combination zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:65 [ sin16s::return#0 ] zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:69 [ sin16s::$6 ] zp ZP_WORD:77 [ sin16s::x2#0 ] zp ZP_WORD:85 [ sin16s::x3_6#0 ] zp ZP_WORD:91 [ sin16s::x4#0 ] zp ZP_WORD:95 [ sin16s::x5#0 ] zp ZP_WORD:99 [ sin16s::x5_128#0 ] zp ZP_WORD:81 [ sin16s::x3#0 ] zp ZP_WORD:101 [ sin16s::usinx#1 ] zp ZP_WORD:73 [ sin16s::x1#0 ] zp ZP_WORD:87 [ sin16s::usinx#0 ] zp ZP_BYTE:22 [ sin16s::isUpper#10 ] +Uplifting [mul_u16_sel] best 24940 combination zp ZP_WORD:29 [ mul_u16_sel::v1#6 mul_u16_sel::v1#3 mul_u16_sel::v1#4 mul_u16_sel::v1#5 mul_u16_sel::v1#0 mul_u16_sel::v1#1 mul_u16_sel::v1#2 ] zp ZP_WORD:31 [ mul_u16_sel::v2#6 mul_u16_sel::v2#3 mul_u16_sel::v2#4 mul_u16_sel::v2#0 mul_u16_sel::v2#1 ] zp ZP_WORD:75 [ mul_u16_sel::return#0 ] zp ZP_WORD:79 [ mul_u16_sel::return#1 ] zp ZP_WORD:83 [ mul_u16_sel::return#10 ] zp ZP_WORD:89 [ mul_u16_sel::return#11 ] zp ZP_WORD:93 [ mul_u16_sel::return#12 ] zp ZP_WORD:97 [ mul_u16_sel::return#13 ] zp ZP_DWORD:109 [ mul_u16_sel::$0 ] zp ZP_DWORD:113 [ mul_u16_sel::$1 ] zp ZP_WORD:117 [ mul_u16_sel::return#14 ] reg byte x [ mul_u16_sel::select#6 ] +Uplifting [sin16s_gen] best 24940 combination zp ZP_WORD:67 [ sin16s_gen::$1 ] zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#1 ] zp ZP_DWORD:61 [ sin16s_gen::step#0 ] +Uplifting [print_cls] best 24940 combination zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ] +Uplifting [main] best 24940 combination zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:53 [ main::sw#0 ] +Uplifting [print_byte] best 24928 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [print_char] best 24916 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] +Uplifting [div32u16u] best 24916 combination zp ZP_DWORD:57 [ div32u16u::return#0 ] zp ZP_WORD:126 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:128 [ div32u16u::return#1 ] zp ZP_WORD:122 [ div32u16u::quotient_hi#0 ] +Uplifting [print_sword] best 24916 combination zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] +Uplifting [print_word] best 24916 combination +Attempting to uplift remaining variables inzp ZP_BYTE:22 [ sin16s::isUpper#10 ] +Uplifting [sin16s] best 24916 combination zp ZP_BYTE:22 [ sin16s::isUpper#10 ] Coalescing zero page register [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:101 [ sin16s::usinx#1 ] ] Coalescing zero page register [ zp ZP_WORD:29 [ mul_u16_sel::v1#6 mul_u16_sel::v1#3 mul_u16_sel::v1#4 mul_u16_sel::v1#5 mul_u16_sel::v1#0 mul_u16_sel::v1#1 mul_u16_sel::v1#2 ] ] with [ zp ZP_WORD:81 [ sin16s::x3#0 ] ] Coalescing zero page register [ zp ZP_WORD:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:134 [ rem16u#1 ] ] @@ -7049,9 +7048,9 @@ Coalescing zero page register [ zp ZP_WORD:31 [ mul_u16_sel::v2#6 mul_u16_sel::v Coalescing zero page register [ zp ZP_WORD:31 [ mul_u16_sel::v2#6 mul_u16_sel::v2#3 mul_u16_sel::v2#4 mul_u16_sel::v2#0 mul_u16_sel::v2#1 mul16u::b#0 mul_u16_sel::return#13 sin16s::x5_128#0 mul_u16_sel::return#14 ] ] with [ zp ZP_WORD:122 [ div32u16u::quotient_hi#0 ] ] Allocated (was zp ZP_WORD:10) zp ZP_WORD:8 [ char_cursor#33 char_cursor#46 char_cursor#43 char_cursor#51 char_cursor#48 char_cursor#49 char_cursor#2 char_cursor#12 char_cursor#1 mul_u16_sel::v1#6 mul_u16_sel::v1#3 mul_u16_sel::v1#4 mul_u16_sel::v1#5 mul_u16_sel::v1#0 mul_u16_sel::v1#1 mul_u16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 mul_u16_sel::return#0 mul_u16_sel::return#1 sin16s::x4#0 mul_u16_sel::return#11 sin16s::x5#0 mul_u16_sel::return#12 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] Allocated (was zp ZP_DWORD:14) zp ZP_DWORD:10 [ sin16s_gen::x#2 sin16s_gen::x#1 ] -Allocated (was zp ZP_DWORD:23) zp ZP_DWORD:14 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mul_u16_sel::$0 mul_u16_sel::$1 ] -Allocated (was zp ZP_WORD:31) zp ZP_WORD:18 [ mul_u16_sel::v2#6 mul_u16_sel::v2#3 mul_u16_sel::v2#4 mul_u16_sel::v2#0 mul_u16_sel::v2#1 mul16u::b#0 mul_u16_sel::return#13 sin16s::x5_128#0 mul_u16_sel::return#14 div32u16u::quotient_hi#0 ] -Allocated (was zp ZP_BYTE:33) zp ZP_BYTE:20 [ mul_u16_sel::select#6 ] +Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:14 [ sin16s::isUpper#10 ] +Allocated (was zp ZP_DWORD:23) zp ZP_DWORD:15 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mul_u16_sel::$0 mul_u16_sel::$1 ] +Allocated (was zp ZP_WORD:31) zp ZP_WORD:19 [ mul_u16_sel::v2#6 mul_u16_sel::v2#3 mul_u16_sel::v2#4 mul_u16_sel::v2#0 mul_u16_sel::v2#1 mul16u::b#0 mul_u16_sel::return#13 sin16s::x5_128#0 mul_u16_sel::return#14 div32u16u::quotient_hi#0 ] Allocated (was zp ZP_WORD:34) zp ZP_WORD:21 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] Allocated (was zp ZP_DWORD:40) zp ZP_DWORD:23 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] Allocated (was zp ZP_DWORD:57) zp ZP_DWORD:27 [ div32u16u::return#0 sin16s_gen::step#0 div32u16u::return#1 ] @@ -7528,8 +7527,8 @@ sin16s_gen: { } //SEG149 sin16s sin16s: { - .label _6 = $e - .label x = $e + .label _6 = $f + .label x = $f .label return = 6 .label x1 = $1f .label x2 = 8 @@ -7538,8 +7537,9 @@ sin16s: { .label usinx = 6 .label x4 = 8 .label x5 = 8 - .label x5_128 = $12 + .label x5_128 = $13 .label sinx = 6 + .label isUpper = $e //SEG150 [73] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) -- vduz1_lt_vduc1_then_la1 lda x+3 cmp #>PI_u4f28>>$10 @@ -7576,14 +7576,16 @@ sin16s: { sta x+3 //SEG153 [75] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] b1_from_b4: - //SEG154 [75] phi (byte) sin16s::isUpper#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuxx=vbuc1 - ldx #1 + //SEG154 [75] phi (byte) sin16s::isUpper#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 + lda #1 + sta isUpper //SEG155 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp b1 //SEG156 [75] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] b1_from_sin16s: - //SEG157 [75] phi (byte) sin16s::isUpper#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuxx=vbuc1 - ldx #0 + //SEG157 [75] phi (byte) sin16s::isUpper#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 + lda #0 + sta isUpper //SEG158 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp b1 //SEG159 sin16s::@1 @@ -7656,9 +7658,8 @@ sin16s: { //SEG170 [83] call mul_u16_sel param-assignment [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] ) //SEG171 [116] phi from sin16s::@2 to mul_u16_sel [phi:sin16s::@2->mul_u16_sel] mul_u16_sel_from_b2: - //SEG172 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #0 - sta mul_u16_sel.select + //SEG172 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #0 //SEG173 [116] phi (word) mul_u16_sel::v2#6 = (word) mul_u16_sel::v2#0 [phi:sin16s::@2->mul_u16_sel#1] -- register_copy //SEG174 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#0 [phi:sin16s::@2->mul_u16_sel#2] -- register_copy jsr mul_u16_sel @@ -7682,9 +7683,8 @@ sin16s: { //SEG180 [88] call mul_u16_sel param-assignment [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] ) //SEG181 [116] phi from sin16s::@8 to mul_u16_sel [phi:sin16s::@8->mul_u16_sel] mul_u16_sel_from_b8: - //SEG182 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #1 - sta mul_u16_sel.select + //SEG182 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #1 //SEG183 [116] phi (word) mul_u16_sel::v2#6 = (word) mul_u16_sel::v2#1 [phi:sin16s::@8->mul_u16_sel#1] -- register_copy //SEG184 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#1 [phi:sin16s::@8->mul_u16_sel#2] -- register_copy jsr mul_u16_sel @@ -7703,9 +7703,8 @@ sin16s: { //SEG189 [92] call mul_u16_sel param-assignment [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 sin16s::x3#0 ] ) //SEG190 [116] phi from sin16s::@9 to mul_u16_sel [phi:sin16s::@9->mul_u16_sel] mul_u16_sel_from_b9: - //SEG191 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #1 - sta mul_u16_sel.select + //SEG191 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #1 //SEG192 [116] phi (word) mul_u16_sel::v2#6 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 [phi:sin16s::@9->mul_u16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta mul_u16_sel.v2 @@ -7741,9 +7740,8 @@ sin16s: { //SEG200 [98] call mul_u16_sel param-assignment [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 sin16s::usinx#0 ] ) //SEG201 [116] phi from sin16s::@10 to mul_u16_sel [phi:sin16s::@10->mul_u16_sel] mul_u16_sel_from_b10: - //SEG202 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #0 - sta mul_u16_sel.select + //SEG202 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #0 //SEG203 [116] phi (word) mul_u16_sel::v2#6 = (word) mul_u16_sel::v2#3 [phi:sin16s::@10->mul_u16_sel#1] -- register_copy //SEG204 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#3 [phi:sin16s::@10->mul_u16_sel#2] -- register_copy jsr mul_u16_sel @@ -7767,9 +7765,8 @@ sin16s: { //SEG210 [103] call mul_u16_sel param-assignment [ sin16s::isUpper#10 mul_u16_sel::return#14 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 mul_u16_sel::return#14 sin16s::usinx#0 ] ) //SEG211 [116] phi from sin16s::@11 to mul_u16_sel [phi:sin16s::@11->mul_u16_sel] mul_u16_sel_from_b11: - //SEG212 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #0 - sta mul_u16_sel.select + //SEG212 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #0 //SEG213 [116] phi (word) mul_u16_sel::v2#6 = (word) mul_u16_sel::v2#4 [phi:sin16s::@11->mul_u16_sel#1] -- register_copy //SEG214 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#4 [phi:sin16s::@11->mul_u16_sel#2] -- register_copy jsr mul_u16_sel @@ -7788,9 +7785,8 @@ sin16s: { //SEG219 [107] call mul_u16_sel param-assignment [ sin16s::isUpper#10 mul_u16_sel::return#14 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 mul_u16_sel::return#14 sin16s::usinx#0 ] ) //SEG220 [116] phi from sin16s::@12 to mul_u16_sel [phi:sin16s::@12->mul_u16_sel] mul_u16_sel_from_b12: - //SEG221 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 3 [phi:sin16s::@12->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #3 - sta mul_u16_sel.select + //SEG221 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 3 [phi:sin16s::@12->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #3 //SEG222 [116] phi (word) mul_u16_sel::v2#6 = (dword/signed dword) 65536/(byte/word/signed word/dword/signed dword) 128 [phi:sin16s::@12->mul_u16_sel#1] -- vwuz1=vwuc1 lda #<$10000/$80 sta mul_u16_sel.v2 @@ -7799,12 +7795,12 @@ sin16s: { //SEG223 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#5 [phi:sin16s::@12->mul_u16_sel#2] -- register_copy jsr mul_u16_sel //SEG224 [108] (word) mul_u16_sel::return#13 ← (word) mul_u16_sel::return#14 [ sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#13 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#13 ] ) - // (word) mul_u16_sel::return#13 = (word) mul_u16_sel::return#14 // register copy zp ZP_WORD:18 + // (word) mul_u16_sel::return#13 = (word) mul_u16_sel::return#14 // register copy zp ZP_WORD:19 jmp b13 //SEG225 sin16s::@13 b13: //SEG226 [109] (word) sin16s::x5_128#0 ← (word) mul_u16_sel::return#13 [ sin16s::isUpper#10 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 sin16s::x5_128#0 ] ) - // (word) sin16s::x5_128#0 = (word) mul_u16_sel::return#13 // register copy zp ZP_WORD:18 + // (word) sin16s::x5_128#0 = (word) mul_u16_sel::return#13 // register copy zp ZP_WORD:19 //SEG227 [110] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#10 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#1 ] ) -- vwuz1=vwuz1_plus_vwuz2 lda usinx clc @@ -7813,8 +7809,8 @@ sin16s: { lda usinx+1 adc x5_128+1 sta usinx+1 - //SEG228 [111] if((byte) sin16s::isUpper#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@16 [ sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::usinx#1 ] ) -- vbuxx_eq_0_then_la1 - cpx #0 + //SEG228 [111] if((byte) sin16s::isUpper#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@16 [ sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::usinx#1 ] ) -- vbuz1_eq_0_then_la1 + lda isUpper beq b16 jmp b6 //SEG229 sin16s::@6 @@ -7849,41 +7845,39 @@ sin16s: { } //SEG238 mul_u16_sel mul_u16_sel: { - .label _0 = $e - .label _1 = $e + .label _0 = $f + .label _1 = $f .label v1 = 8 - .label v2 = $12 + .label v2 = $13 .label return = 8 .label return_10 = 6 - .label return_13 = $12 - .label select = $14 - .label return_14 = $12 + .label return_13 = $13 + .label return_14 = $13 //SEG239 [117] (word) mul16u::a#1 ← (word) mul_u16_sel::v1#6 [ mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] ) -- vwuz1=vwuz2 lda v1 sta mul16u.a lda v1+1 sta mul16u.a+1 //SEG240 [118] (word) mul16u::b#0 ← (word) mul_u16_sel::v2#6 [ mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] ) - // (word) mul16u::b#0 = (word) mul_u16_sel::v2#6 // register copy zp ZP_WORD:18 + // (word) mul16u::b#0 = (word) mul_u16_sel::v2#6 // register copy zp ZP_WORD:19 //SEG241 [119] call mul16u param-assignment [ mul_u16_sel::select#6 mul16u::res#2 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 ] ) jsr mul16u //SEG242 [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul_u16_sel::select#6 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] ) - // (dword) mul16u::return#2 = (dword) mul16u::res#2 // register copy zp ZP_DWORD:14 + // (dword) mul16u::return#2 = (dword) mul16u::res#2 // register copy zp ZP_DWORD:15 jmp b2 //SEG243 mul_u16_sel::@2 b2: //SEG244 [121] (dword~) mul_u16_sel::$0 ← (dword) mul16u::return#2 [ mul_u16_sel::select#6 mul_u16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] ) - // (dword~) mul_u16_sel::$0 = (dword) mul16u::return#2 // register copy zp ZP_DWORD:14 - //SEG245 [122] (dword~) mul_u16_sel::$1 ← (dword~) mul_u16_sel::$0 << (byte) mul_u16_sel::select#6 [ mul_u16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] ) -- vduz1=vduz1_rol_vbuz2 - ldy select - cpy #0 + // (dword~) mul_u16_sel::$0 = (dword) mul16u::return#2 // register copy zp ZP_DWORD:15 + //SEG245 [122] (dword~) mul_u16_sel::$1 ← (dword~) mul_u16_sel::$0 << (byte) mul_u16_sel::select#6 [ mul_u16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] ) -- vduz1=vduz1_rol_vbuxx + cpx #0 beq !e+ !: asl _1 rol _1+1 rol _1+2 rol _1+3 - dey + dex bne !- !e: //SEG246 [123] (word) mul_u16_sel::return#14 ← > (dword~) mul_u16_sel::$1 [ mul_u16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] ) -- vwuz1=_hi_vduz2 @@ -7901,9 +7895,9 @@ mul_u16_sel: { mul16u: { .label mb = $17 .label a = $15 - .label res = $e - .label b = $12 - .label return = $e + .label res = $f + .label b = $13 + .label return = $f //SEG250 [125] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] ) -- vduz1=_dword_vwuz2 lda b sta mb @@ -7987,7 +7981,7 @@ mul16u: { //SEG273 div32u16u div32u16u: { .label return = $1b - .label quotient_hi = $12 + .label quotient_hi = $13 .label quotient_lo = 8 //SEG274 [136] call divr16u param-assignment [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ divr16u::return#0 rem16u#1 ] ) //SEG275 [145] phi from div32u16u to divr16u [phi:div32u16u->divr16u] @@ -8393,7 +8387,7 @@ FINAL SYMBOL TABLE (word) div32u16u::divisor (dword) div32u16u::quotient (word) div32u16u::quotient_hi -(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:18 0.8 +(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:19 0.8 (word) div32u16u::quotient_lo (word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:8 4.0 (dword) div32u16u::return @@ -8467,20 +8461,20 @@ FINAL SYMBOL TABLE (word) mul16u::a#1 a zp ZP_WORD:21 1.3333333333333333 (word) mul16u::a#2 a zp ZP_WORD:21 67.66666666666666 (word) mul16u::b -(word) mul16u::b#0 b zp ZP_WORD:18 4.0 +(word) mul16u::b#0 b zp ZP_WORD:19 4.0 (dword) mul16u::mb (dword) mul16u::mb#0 mb zp ZP_DWORD:23 4.0 (dword) mul16u::mb#1 mb zp ZP_DWORD:23 202.0 (dword) mul16u::mb#2 mb zp ZP_DWORD:23 43.57142857142858 (dword) mul16u::res -(dword) mul16u::res#1 res zp ZP_DWORD:14 202.0 -(dword) mul16u::res#2 res zp ZP_DWORD:14 50.83333333333333 -(dword) mul16u::res#6 res zp ZP_DWORD:14 101.0 +(dword) mul16u::res#1 res zp ZP_DWORD:15 202.0 +(dword) mul16u::res#2 res zp ZP_DWORD:15 50.83333333333333 +(dword) mul16u::res#6 res zp ZP_DWORD:15 101.0 (dword) mul16u::return -(dword) mul16u::return#2 return zp ZP_DWORD:14 4.0 +(dword) mul16u::return#2 return zp ZP_DWORD:15 4.0 (word()) mul_u16_sel((word) mul_u16_sel::v1 , (word) mul_u16_sel::v2 , (byte) mul_u16_sel::select) -(dword~) mul_u16_sel::$0 $0 zp ZP_DWORD:14 4.0 -(dword~) mul_u16_sel::$1 $1 zp ZP_DWORD:14 4.0 +(dword~) mul_u16_sel::$0 $0 zp ZP_DWORD:15 4.0 +(dword~) mul_u16_sel::$1 $1 zp ZP_DWORD:15 4.0 (label) mul_u16_sel::@2 (label) mul_u16_sel::@return (word) mul_u16_sel::return @@ -8489,10 +8483,10 @@ FINAL SYMBOL TABLE (word) mul_u16_sel::return#10 return#10 zp ZP_WORD:6 4.0 (word) mul_u16_sel::return#11 return zp ZP_WORD:8 4.0 (word) mul_u16_sel::return#12 return zp ZP_WORD:8 4.0 -(word) mul_u16_sel::return#13 return#13 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::return#14 return#14 zp ZP_WORD:18 1.75 +(word) mul_u16_sel::return#13 return#13 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::return#14 return#14 zp ZP_WORD:19 1.75 (byte) mul_u16_sel::select -(byte) mul_u16_sel::select#6 select zp ZP_BYTE:20 0.3333333333333333 +(byte) mul_u16_sel::select#6 reg byte x 0.3333333333333333 (word) mul_u16_sel::v1 (word) mul_u16_sel::v1#0 v1 zp ZP_WORD:8 2.0 (word) mul_u16_sel::v1#1 v1 zp ZP_WORD:8 2.0 @@ -8502,11 +8496,11 @@ FINAL SYMBOL TABLE (word) mul_u16_sel::v1#5 v1 zp ZP_WORD:8 4.0 (word) mul_u16_sel::v1#6 v1 zp ZP_WORD:8 14.0 (word) mul_u16_sel::v2 -(word) mul_u16_sel::v2#0 v2 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::v2#1 v2 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::v2#3 v2 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::v2#4 v2 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::v2#6 v2 zp ZP_WORD:18 5.0 +(word) mul_u16_sel::v2#0 v2 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::v2#1 v2 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::v2#3 v2 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::v2#4 v2 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::v2#6 v2 zp ZP_WORD:19 5.0 (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 @@ -8554,7 +8548,7 @@ FINAL SYMBOL TABLE (word) rem16u (word) rem16u#1 rem16u zp ZP_WORD:4 0.8 (signed word()) sin16s((dword) sin16s::x) -(dword~) sin16s::$6 $6 zp ZP_DWORD:14 4.0 +(dword~) sin16s::$6 $6 zp ZP_DWORD:15 4.0 (label) sin16s::@1 (label) sin16s::@10 (label) sin16s::@11 @@ -8570,7 +8564,7 @@ FINAL SYMBOL TABLE (label) sin16s::@9 (label) sin16s::@return (byte) sin16s::isUpper -(byte) sin16s::isUpper#10 reg byte x 0.05555555555555555 +(byte) sin16s::isUpper#10 isUpper zp ZP_BYTE:14 0.05555555555555555 (signed word) sin16s::return (signed word) sin16s::return#0 return zp ZP_WORD:6 22.0 (signed word) sin16s::return#1 return zp ZP_WORD:6 5.0 @@ -8581,11 +8575,11 @@ FINAL SYMBOL TABLE (word) sin16s::usinx#0 usinx zp ZP_WORD:6 0.26666666666666666 (word) sin16s::usinx#1 usinx zp ZP_WORD:6 1.0 (dword) sin16s::x -(dword) sin16s::x#0 x zp ZP_DWORD:14 8.5 -(dword) sin16s::x#1 x zp ZP_DWORD:14 4.0 -(dword) sin16s::x#2 x zp ZP_DWORD:14 4.0 -(dword) sin16s::x#4 x zp ZP_DWORD:14 5.0 -(dword) sin16s::x#6 x zp ZP_DWORD:14 6.0 +(dword) sin16s::x#0 x zp ZP_DWORD:15 8.5 +(dword) sin16s::x#1 x zp ZP_DWORD:15 4.0 +(dword) sin16s::x#2 x zp ZP_DWORD:15 4.0 +(dword) sin16s::x#4 x zp ZP_DWORD:15 5.0 +(dword) sin16s::x#6 x zp ZP_DWORD:15 6.0 (word) sin16s::x1 (word) sin16s::x1#0 x1 zp ZP_WORD:31 0.6363636363636365 (word) sin16s::x2 @@ -8599,7 +8593,7 @@ FINAL SYMBOL TABLE (word) sin16s::x5 (word) sin16s::x5#0 x5 zp ZP_WORD:8 4.0 (word) sin16s::x5_128 -(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:18 4.0 +(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:19 4.0 (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) (signed word~) sin16s_gen::$1 $1 zp ZP_WORD:6 22.0 (label) sin16s_gen::@1 @@ -8626,10 +8620,10 @@ reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] zp ZP_WORD:8 [ char_cursor#33 char_cursor#46 char_cursor#43 char_cursor#51 char_cursor#48 char_cursor#49 char_cursor#2 char_cursor#12 char_cursor#1 mul_u16_sel::v1#6 mul_u16_sel::v1#3 mul_u16_sel::v1#4 mul_u16_sel::v1#5 mul_u16_sel::v1#0 mul_u16_sel::v1#1 mul_u16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 mul_u16_sel::return#0 mul_u16_sel::return#1 sin16s::x4#0 mul_u16_sel::return#11 sin16s::x5#0 mul_u16_sel::return#12 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] zp ZP_DWORD:10 [ sin16s_gen::x#2 sin16s_gen::x#1 ] -reg byte x [ sin16s::isUpper#10 ] -zp ZP_DWORD:14 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mul_u16_sel::$0 mul_u16_sel::$1 ] -zp ZP_WORD:18 [ mul_u16_sel::v2#6 mul_u16_sel::v2#3 mul_u16_sel::v2#4 mul_u16_sel::v2#0 mul_u16_sel::v2#1 mul16u::b#0 mul_u16_sel::return#13 sin16s::x5_128#0 mul_u16_sel::return#14 div32u16u::quotient_hi#0 ] -zp ZP_BYTE:20 [ mul_u16_sel::select#6 ] +zp ZP_BYTE:14 [ sin16s::isUpper#10 ] +zp ZP_DWORD:15 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mul_u16_sel::$0 mul_u16_sel::$1 ] +zp ZP_WORD:19 [ mul_u16_sel::v2#6 mul_u16_sel::v2#3 mul_u16_sel::v2#4 mul_u16_sel::v2#0 mul_u16_sel::v2#1 mul16u::b#0 mul_u16_sel::return#13 sin16s::x5_128#0 mul_u16_sel::return#14 div32u16u::quotient_hi#0 ] +reg byte x [ mul_u16_sel::select#6 ] zp ZP_WORD:21 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:23 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] @@ -8643,7 +8637,7 @@ reg byte a [ divr16u::$2 ] FINAL ASSEMBLER -Score: 20947 +Score: 20933 //SEG0 Basic Upstart .pc = $801 "Basic" @@ -9031,8 +9025,8 @@ sin16s_gen: { } //SEG149 sin16s sin16s: { - .label _6 = $e - .label x = $e + .label _6 = $f + .label x = $f .label return = 6 .label x1 = $1f .label x2 = 8 @@ -9041,8 +9035,9 @@ sin16s: { .label usinx = 6 .label x4 = 8 .label x5 = 8 - .label x5_128 = $12 + .label x5_128 = $13 .label sinx = 6 + .label isUpper = $e //SEG150 [73] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) -- vduz1_lt_vduc1_then_la1 lda x+3 cmp #>PI_u4f28>>$10 @@ -9076,14 +9071,16 @@ sin16s: { sbc #>PI_u4f28>>$10 sta x+3 //SEG153 [75] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] - //SEG154 [75] phi (byte) sin16s::isUpper#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuxx=vbuc1 - ldx #1 + //SEG154 [75] phi (byte) sin16s::isUpper#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 + lda #1 + sta isUpper //SEG155 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp b1 //SEG156 [75] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] b4: - //SEG157 [75] phi (byte) sin16s::isUpper#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuxx=vbuc1 - ldx #0 + //SEG157 [75] phi (byte) sin16s::isUpper#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 + lda #0 + sta isUpper //SEG158 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy //SEG159 sin16s::@1 b1: @@ -9149,9 +9146,8 @@ sin16s: { sta mul_u16_sel.v2+1 //SEG170 [83] call mul_u16_sel param-assignment [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] ) //SEG171 [116] phi from sin16s::@2 to mul_u16_sel [phi:sin16s::@2->mul_u16_sel] - //SEG172 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #0 - sta mul_u16_sel.select + //SEG172 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #0 //SEG173 [116] phi (word) mul_u16_sel::v2#6 = (word) mul_u16_sel::v2#0 [phi:sin16s::@2->mul_u16_sel#1] -- register_copy //SEG174 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#0 [phi:sin16s::@2->mul_u16_sel#2] -- register_copy jsr mul_u16_sel @@ -9172,9 +9168,8 @@ sin16s: { sta mul_u16_sel.v2+1 //SEG180 [88] call mul_u16_sel param-assignment [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] ) //SEG181 [116] phi from sin16s::@8 to mul_u16_sel [phi:sin16s::@8->mul_u16_sel] - //SEG182 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #1 - sta mul_u16_sel.select + //SEG182 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #1 //SEG183 [116] phi (word) mul_u16_sel::v2#6 = (word) mul_u16_sel::v2#1 [phi:sin16s::@8->mul_u16_sel#1] -- register_copy //SEG184 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#1 [phi:sin16s::@8->mul_u16_sel#2] -- register_copy jsr mul_u16_sel @@ -9190,9 +9185,8 @@ sin16s: { // (word) mul_u16_sel::v1#2 = (word) sin16s::x3#0 // register copy zp ZP_WORD:8 //SEG189 [92] call mul_u16_sel param-assignment [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 sin16s::x3#0 ] ) //SEG190 [116] phi from sin16s::@9 to mul_u16_sel [phi:sin16s::@9->mul_u16_sel] - //SEG191 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #1 - sta mul_u16_sel.select + //SEG191 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #1 //SEG192 [116] phi (word) mul_u16_sel::v2#6 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 [phi:sin16s::@9->mul_u16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta mul_u16_sel.v2 @@ -9225,9 +9219,8 @@ sin16s: { sta mul_u16_sel.v2+1 //SEG200 [98] call mul_u16_sel param-assignment [ sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 sin16s::usinx#0 ] ) //SEG201 [116] phi from sin16s::@10 to mul_u16_sel [phi:sin16s::@10->mul_u16_sel] - //SEG202 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #0 - sta mul_u16_sel.select + //SEG202 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #0 //SEG203 [116] phi (word) mul_u16_sel::v2#6 = (word) mul_u16_sel::v2#3 [phi:sin16s::@10->mul_u16_sel#1] -- register_copy //SEG204 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#3 [phi:sin16s::@10->mul_u16_sel#2] -- register_copy jsr mul_u16_sel @@ -9248,9 +9241,8 @@ sin16s: { sta mul_u16_sel.v2+1 //SEG210 [103] call mul_u16_sel param-assignment [ sin16s::isUpper#10 mul_u16_sel::return#14 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 mul_u16_sel::return#14 sin16s::usinx#0 ] ) //SEG211 [116] phi from sin16s::@11 to mul_u16_sel [phi:sin16s::@11->mul_u16_sel] - //SEG212 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #0 - sta mul_u16_sel.select + //SEG212 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #0 //SEG213 [116] phi (word) mul_u16_sel::v2#6 = (word) mul_u16_sel::v2#4 [phi:sin16s::@11->mul_u16_sel#1] -- register_copy //SEG214 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#4 [phi:sin16s::@11->mul_u16_sel#2] -- register_copy jsr mul_u16_sel @@ -9266,9 +9258,8 @@ sin16s: { // (word) mul_u16_sel::v1#5 = (word) sin16s::x5#0 // register copy zp ZP_WORD:8 //SEG219 [107] call mul_u16_sel param-assignment [ sin16s::isUpper#10 mul_u16_sel::return#14 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 mul_u16_sel::return#14 sin16s::usinx#0 ] ) //SEG220 [116] phi from sin16s::@12 to mul_u16_sel [phi:sin16s::@12->mul_u16_sel] - //SEG221 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 3 [phi:sin16s::@12->mul_u16_sel#0] -- vbuz1=vbuc1 - lda #3 - sta mul_u16_sel.select + //SEG221 [116] phi (byte) mul_u16_sel::select#6 = (byte/signed byte/word/signed word/dword/signed dword) 3 [phi:sin16s::@12->mul_u16_sel#0] -- vbuxx=vbuc1 + ldx #3 //SEG222 [116] phi (word) mul_u16_sel::v2#6 = (dword/signed dword) 65536/(byte/word/signed word/dword/signed dword) 128 [phi:sin16s::@12->mul_u16_sel#1] -- vwuz1=vwuc1 lda #<$10000/$80 sta mul_u16_sel.v2 @@ -9277,10 +9268,10 @@ sin16s: { //SEG223 [116] phi (word) mul_u16_sel::v1#6 = (word) mul_u16_sel::v1#5 [phi:sin16s::@12->mul_u16_sel#2] -- register_copy jsr mul_u16_sel //SEG224 [108] (word) mul_u16_sel::return#13 ← (word) mul_u16_sel::return#14 [ sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#13 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#13 ] ) - // (word) mul_u16_sel::return#13 = (word) mul_u16_sel::return#14 // register copy zp ZP_WORD:18 + // (word) mul_u16_sel::return#13 = (word) mul_u16_sel::return#14 // register copy zp ZP_WORD:19 //SEG225 sin16s::@13 //SEG226 [109] (word) sin16s::x5_128#0 ← (word) mul_u16_sel::return#13 [ sin16s::isUpper#10 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 sin16s::x5_128#0 ] ) - // (word) sin16s::x5_128#0 = (word) mul_u16_sel::return#13 // register copy zp ZP_WORD:18 + // (word) sin16s::x5_128#0 = (word) mul_u16_sel::return#13 // register copy zp ZP_WORD:19 //SEG227 [110] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#10 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#1 ] ) -- vwuz1=vwuz1_plus_vwuz2 lda usinx clc @@ -9289,8 +9280,8 @@ sin16s: { lda usinx+1 adc x5_128+1 sta usinx+1 - //SEG228 [111] if((byte) sin16s::isUpper#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@16 [ sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::usinx#1 ] ) -- vbuxx_eq_0_then_la1 - cpx #0 + //SEG228 [111] if((byte) sin16s::isUpper#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@16 [ sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::usinx#1 ] ) -- vbuz1_eq_0_then_la1 + lda isUpper beq b3 //SEG229 sin16s::@6 //SEG230 [112] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::sinx#1 ] ) -- vwsz1=_neg_vwsz1 @@ -9316,39 +9307,37 @@ sin16s: { } //SEG238 mul_u16_sel mul_u16_sel: { - .label _0 = $e - .label _1 = $e + .label _0 = $f + .label _1 = $f .label v1 = 8 - .label v2 = $12 + .label v2 = $13 .label return = 8 .label return_10 = 6 - .label return_13 = $12 - .label select = $14 - .label return_14 = $12 + .label return_13 = $13 + .label return_14 = $13 //SEG239 [117] (word) mul16u::a#1 ← (word) mul_u16_sel::v1#6 [ mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::v2#6 mul_u16_sel::select#6 mul16u::a#1 ] ) -- vwuz1=vwuz2 lda v1 sta mul16u.a lda v1+1 sta mul16u.a+1 //SEG240 [118] (word) mul16u::b#0 ← (word) mul_u16_sel::v2#6 [ mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::b#0 ] ) - // (word) mul16u::b#0 = (word) mul_u16_sel::v2#6 // register copy zp ZP_WORD:18 + // (word) mul16u::b#0 = (word) mul_u16_sel::v2#6 // register copy zp ZP_WORD:19 //SEG241 [119] call mul16u param-assignment [ mul_u16_sel::select#6 mul16u::res#2 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::res#2 ] ) jsr mul16u //SEG242 [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul_u16_sel::select#6 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::return#2 ] ) - // (dword) mul16u::return#2 = (dword) mul16u::res#2 // register copy zp ZP_DWORD:14 + // (dword) mul16u::return#2 = (dword) mul16u::res#2 // register copy zp ZP_DWORD:15 //SEG243 mul_u16_sel::@2 //SEG244 [121] (dword~) mul_u16_sel::$0 ← (dword) mul16u::return#2 [ mul_u16_sel::select#6 mul_u16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul_u16_sel::$0 ] ) - // (dword~) mul_u16_sel::$0 = (dword) mul16u::return#2 // register copy zp ZP_DWORD:14 - //SEG245 [122] (dword~) mul_u16_sel::$1 ← (dword~) mul_u16_sel::$0 << (byte) mul_u16_sel::select#6 [ mul_u16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] ) -- vduz1=vduz1_rol_vbuz2 - ldy select - cpy #0 + // (dword~) mul_u16_sel::$0 = (dword) mul16u::return#2 // register copy zp ZP_DWORD:15 + //SEG245 [122] (dword~) mul_u16_sel::$1 ← (dword~) mul_u16_sel::$0 << (byte) mul_u16_sel::select#6 [ mul_u16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::$1 ] ) -- vduz1=vduz1_rol_vbuxx + cpx #0 beq !e+ !: asl _1 rol _1+1 rol _1+2 rol _1+3 - dey + dex bne !- !e: //SEG246 [123] (word) mul_u16_sel::return#14 ← > (dword~) mul_u16_sel::$1 [ mul_u16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::return#14 ] ) -- vwuz1=_hi_vduz2 @@ -9364,9 +9353,9 @@ mul_u16_sel: { mul16u: { .label mb = $17 .label a = $15 - .label res = $e - .label b = $12 - .label return = $e + .label res = $f + .label b = $13 + .label return = $f //SEG250 [125] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:83::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:88::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:92::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::x3#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:98::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::x1#0 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:103::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mul_u16_sel:107::mul16u:119 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#10 sin16s::usinx#0 mul_u16_sel::select#6 mul16u::a#1 mul16u::mb#0 ] ) -- vduz1=_dword_vwuz2 lda b sta mb @@ -9438,7 +9427,7 @@ mul16u: { //SEG273 div32u16u div32u16u: { .label return = $1b - .label quotient_hi = $12 + .label quotient_hi = $13 .label quotient_lo = 8 //SEG274 [136] call divr16u param-assignment [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ divr16u::return#0 rem16u#1 ] ) //SEG275 [145] phi from div32u16u to divr16u [phi:div32u16u->divr16u] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.sym b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.sym index ece6ae57d..557485524 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen.sym @@ -27,7 +27,7 @@ (word) div32u16u::divisor (dword) div32u16u::quotient (word) div32u16u::quotient_hi -(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:18 0.8 +(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:19 0.8 (word) div32u16u::quotient_lo (word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:8 4.0 (dword) div32u16u::return @@ -101,20 +101,20 @@ (word) mul16u::a#1 a zp ZP_WORD:21 1.3333333333333333 (word) mul16u::a#2 a zp ZP_WORD:21 67.66666666666666 (word) mul16u::b -(word) mul16u::b#0 b zp ZP_WORD:18 4.0 +(word) mul16u::b#0 b zp ZP_WORD:19 4.0 (dword) mul16u::mb (dword) mul16u::mb#0 mb zp ZP_DWORD:23 4.0 (dword) mul16u::mb#1 mb zp ZP_DWORD:23 202.0 (dword) mul16u::mb#2 mb zp ZP_DWORD:23 43.57142857142858 (dword) mul16u::res -(dword) mul16u::res#1 res zp ZP_DWORD:14 202.0 -(dword) mul16u::res#2 res zp ZP_DWORD:14 50.83333333333333 -(dword) mul16u::res#6 res zp ZP_DWORD:14 101.0 +(dword) mul16u::res#1 res zp ZP_DWORD:15 202.0 +(dword) mul16u::res#2 res zp ZP_DWORD:15 50.83333333333333 +(dword) mul16u::res#6 res zp ZP_DWORD:15 101.0 (dword) mul16u::return -(dword) mul16u::return#2 return zp ZP_DWORD:14 4.0 +(dword) mul16u::return#2 return zp ZP_DWORD:15 4.0 (word()) mul_u16_sel((word) mul_u16_sel::v1 , (word) mul_u16_sel::v2 , (byte) mul_u16_sel::select) -(dword~) mul_u16_sel::$0 $0 zp ZP_DWORD:14 4.0 -(dword~) mul_u16_sel::$1 $1 zp ZP_DWORD:14 4.0 +(dword~) mul_u16_sel::$0 $0 zp ZP_DWORD:15 4.0 +(dword~) mul_u16_sel::$1 $1 zp ZP_DWORD:15 4.0 (label) mul_u16_sel::@2 (label) mul_u16_sel::@return (word) mul_u16_sel::return @@ -123,10 +123,10 @@ (word) mul_u16_sel::return#10 return#10 zp ZP_WORD:6 4.0 (word) mul_u16_sel::return#11 return zp ZP_WORD:8 4.0 (word) mul_u16_sel::return#12 return zp ZP_WORD:8 4.0 -(word) mul_u16_sel::return#13 return#13 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::return#14 return#14 zp ZP_WORD:18 1.75 +(word) mul_u16_sel::return#13 return#13 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::return#14 return#14 zp ZP_WORD:19 1.75 (byte) mul_u16_sel::select -(byte) mul_u16_sel::select#6 select zp ZP_BYTE:20 0.3333333333333333 +(byte) mul_u16_sel::select#6 reg byte x 0.3333333333333333 (word) mul_u16_sel::v1 (word) mul_u16_sel::v1#0 v1 zp ZP_WORD:8 2.0 (word) mul_u16_sel::v1#1 v1 zp ZP_WORD:8 2.0 @@ -136,11 +136,11 @@ (word) mul_u16_sel::v1#5 v1 zp ZP_WORD:8 4.0 (word) mul_u16_sel::v1#6 v1 zp ZP_WORD:8 14.0 (word) mul_u16_sel::v2 -(word) mul_u16_sel::v2#0 v2 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::v2#1 v2 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::v2#3 v2 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::v2#4 v2 zp ZP_WORD:18 4.0 -(word) mul_u16_sel::v2#6 v2 zp ZP_WORD:18 5.0 +(word) mul_u16_sel::v2#0 v2 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::v2#1 v2 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::v2#3 v2 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::v2#4 v2 zp ZP_WORD:19 4.0 +(word) mul_u16_sel::v2#6 v2 zp ZP_WORD:19 5.0 (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 @@ -188,7 +188,7 @@ (word) rem16u (word) rem16u#1 rem16u zp ZP_WORD:4 0.8 (signed word()) sin16s((dword) sin16s::x) -(dword~) sin16s::$6 $6 zp ZP_DWORD:14 4.0 +(dword~) sin16s::$6 $6 zp ZP_DWORD:15 4.0 (label) sin16s::@1 (label) sin16s::@10 (label) sin16s::@11 @@ -204,7 +204,7 @@ (label) sin16s::@9 (label) sin16s::@return (byte) sin16s::isUpper -(byte) sin16s::isUpper#10 reg byte x 0.05555555555555555 +(byte) sin16s::isUpper#10 isUpper zp ZP_BYTE:14 0.05555555555555555 (signed word) sin16s::return (signed word) sin16s::return#0 return zp ZP_WORD:6 22.0 (signed word) sin16s::return#1 return zp ZP_WORD:6 5.0 @@ -215,11 +215,11 @@ (word) sin16s::usinx#0 usinx zp ZP_WORD:6 0.26666666666666666 (word) sin16s::usinx#1 usinx zp ZP_WORD:6 1.0 (dword) sin16s::x -(dword) sin16s::x#0 x zp ZP_DWORD:14 8.5 -(dword) sin16s::x#1 x zp ZP_DWORD:14 4.0 -(dword) sin16s::x#2 x zp ZP_DWORD:14 4.0 -(dword) sin16s::x#4 x zp ZP_DWORD:14 5.0 -(dword) sin16s::x#6 x zp ZP_DWORD:14 6.0 +(dword) sin16s::x#0 x zp ZP_DWORD:15 8.5 +(dword) sin16s::x#1 x zp ZP_DWORD:15 4.0 +(dword) sin16s::x#2 x zp ZP_DWORD:15 4.0 +(dword) sin16s::x#4 x zp ZP_DWORD:15 5.0 +(dword) sin16s::x#6 x zp ZP_DWORD:15 6.0 (word) sin16s::x1 (word) sin16s::x1#0 x1 zp ZP_WORD:31 0.6363636363636365 (word) sin16s::x2 @@ -233,7 +233,7 @@ (word) sin16s::x5 (word) sin16s::x5#0 x5 zp ZP_WORD:8 4.0 (word) sin16s::x5_128 -(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:18 4.0 +(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:19 4.0 (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) (signed word~) sin16s_gen::$1 $1 zp ZP_WORD:6 22.0 (label) sin16s_gen::@1 @@ -260,10 +260,10 @@ reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] zp ZP_WORD:8 [ char_cursor#33 char_cursor#46 char_cursor#43 char_cursor#51 char_cursor#48 char_cursor#49 char_cursor#2 char_cursor#12 char_cursor#1 mul_u16_sel::v1#6 mul_u16_sel::v1#3 mul_u16_sel::v1#4 mul_u16_sel::v1#5 mul_u16_sel::v1#0 mul_u16_sel::v1#1 mul_u16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 mul_u16_sel::return#0 mul_u16_sel::return#1 sin16s::x4#0 mul_u16_sel::return#11 sin16s::x5#0 mul_u16_sel::return#12 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] zp ZP_DWORD:10 [ sin16s_gen::x#2 sin16s_gen::x#1 ] -reg byte x [ sin16s::isUpper#10 ] -zp ZP_DWORD:14 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mul_u16_sel::$0 mul_u16_sel::$1 ] -zp ZP_WORD:18 [ mul_u16_sel::v2#6 mul_u16_sel::v2#3 mul_u16_sel::v2#4 mul_u16_sel::v2#0 mul_u16_sel::v2#1 mul16u::b#0 mul_u16_sel::return#13 sin16s::x5_128#0 mul_u16_sel::return#14 div32u16u::quotient_hi#0 ] -zp ZP_BYTE:20 [ mul_u16_sel::select#6 ] +zp ZP_BYTE:14 [ sin16s::isUpper#10 ] +zp ZP_DWORD:15 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mul_u16_sel::$0 mul_u16_sel::$1 ] +zp ZP_WORD:19 [ mul_u16_sel::v2#6 mul_u16_sel::v2#3 mul_u16_sel::v2#4 mul_u16_sel::v2#0 mul_u16_sel::v2#1 mul16u::b#0 mul_u16_sel::return#13 sin16s::x5_128#0 mul_u16_sel::return#14 div32u16u::quotient_hi#0 ] +reg byte x [ mul_u16_sel::select#6 ] zp ZP_WORD:21 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_DWORD:23 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte x [ divr16u::i#2 divr16u::i#1 ]