#undef tmp
}
void g(void) {
- // g(i, t, o) -> t
+ // g(i, t) -> t
// tempvars: `x` and `_`
#define tmp _
ANDI (t, 0x07)
ADC X_hi, zero
LD t, X */
t = (((i1&0x1f)<<8|i0)*t)>>8; //TODO
- t >>= o; //NOTE: o == {1, 2, 4}
- ANDI (t, 3)
RET //TODO: CALL/RET is expensive; store PC in register and RJMP, then JRMP back
};
MOV (t, n)
LDI (o, 4)
RCALL g();
+ t >>= o; //NOTE: o == {1, 2, 4}
+ ANDI (t, 3)
ANDI (t, 1)
MOV (acc, t)
EOR (t, n)
LDI (o, 2)
RCALL g();
+ t >>= o; //NOTE: o == {1, 2, 4}
+ ANDI (t, 3)
AND (t, s)
ADD (acc, t)
ADD (t, n)
LDI (o, 2)
RCALL g();
+ t >>= o; //NOTE: o == {1, 2, 4}
+ ANDI (t, 3)
MOV (x, s)
INC (x)
#define tmp o
SUBI (t, -8)
LDI (o, 1)
RCALL g();
+ t >>= o; //NOTE: o == {1, 2, 4}
+ ANDI (t, 3)
MOV (x, s)
INC (x)
#define tmp o