new version
authorTobias Girstmair <t@thi3nkpad.lan>
Tue, 13 Nov 2018 18:07:54 +0000 (19:07 +0100)
committerTobias Girstmair <t@thi3nkpad.lan>
Tue, 13 Nov 2018 18:07:55 +0000 (19:07 +0100)
move `x` out of g(), so we can use it as tempvar in g()

foo.c

diff --git a/foo.c b/foo.c
index 4f8d74c..8d512b4 100644 (file)
--- a/foo.c
+++ b/foo.c
@@ -67,7 +67,6 @@ void g(void) {
          LD  t, X         */
        t = (((i1&0x1f)<<8|i0)*t)>>8; //TODO
        t >>= o; //NOTE: o == {1, 2, 4}
-       AND     (t, x)
        ANDI    (t, 3)
        RET //TODO: CALL/RET is expensive; store PC in register and RJMP, then JRMP back
 };
@@ -104,6 +103,7 @@ int main(void) {
                MOV     (t, n)
                LDI     (o, 4)
                RCALL   g();
+               AND     (t, x)
                MOV     (acc, t)
 
                //voice 2:
@@ -122,6 +122,7 @@ int main(void) {
                EOR     (t, n)
                LDI     (o, 2)
                RCALL   g();
+               AND     (t, x)
                ADD     (acc, t)
 
                //voice 3:
@@ -168,6 +169,7 @@ int main(void) {
                ADD     (t, n)
                LDI     (o, 2)
                RCALL   g();
+               AND     (t, x)
                ADD     (acc, t)
 
                //voice 4:
@@ -216,6 +218,7 @@ int main(void) {
                SUBI    (t, -8)
                LDI     (o, 1)
                RCALL   g();
+               AND     (t, x)
                ADD     (acc, t)
 
                putchar(acc<<4); //TODO
Imprint / Impressum