u8 x;
u8 t;
u8 o;
-void g(int i) {
+void g(void) {
// g(i, x, t, o) -> t
u8 tmp;
ANDI (t, 0x07)
SUBI (t, -8)
skip:
t = data[t];
- t = (i*t) >> o;
+ t = ((i3<<24|i2<<16|i1<<8|i0)*t) >> o;
AND (t, x)
ANDI (t, 3)
RET
};
int main(void) {
- int i = 0;
unsigned short n;
unsigned short s;
u8 acc;
LDI (x, 1)
MOV (t, n)
LDI (o, 12)
- RCALL g(i);
+ RCALL g();
MOV (acc, t)
//voice 2:
MOV (x, s)
t = n ^ (i2<<3 | i1>>5);
LDI (o, 10)
- RCALL g(i);
+ RCALL g();
ADD (acc, t)
//voice 3:
x = s / 3;
t = n + ((i3<<13 | i2<<5 | i1>>3) % 3);
LDI (o, 10)
- RCALL g(i);
+ RCALL g();
ADD (acc, t)
//voice 4:
x = s / 5;
t = 8 + n - ((i3<<14 | i2<<6 | i1>>2) % 3);
LDI (o, 9)
- RCALL g(i);
+ RCALL g();
ADD (acc, t)
putchar(acc<<4);
- i++;
#define tmp acc
LDI (tmp, 0)
SUBI (i0, -1)