-int g(int i, int x, int t, int o) {
- return ((3 & x & (i * ((3 & i >> 16 ? "BY}6YB6%" : "Qj}6jQ6%")[t % 8] + 51) >> o)));
+
+u8 data[] = {
+ 0x84, 0x9d, 0xb0, 0x69, 0x9d, 0x84, 0x69, 0x58,
+ 0x75, 0x8c, 0xb0, 0x69, 0x8c, 0x75, 0x69, 0x58
+};
+u8 i0;
+u8 i1;
+u8 i2;
+u8 i3;
+u8 x;
+u8 t;
+u8 o;
+void g(void) {
+ // g(i, x, t, o) -> t
+ u8 tmp;
+ ANDI (t, 0x07)
+ MOV (tmp, i2)
+ ANDI (tmp, 3)
+ TST (tmp)
+ BREQ (skip)
+ SUBI (t, -8)
+ skip:
+ t = data[t];
+ t = ((i3<<24|i2<<16|i1<<8|i0)*t) >> o;
+ AND (t, x)
+ ANDI (t, 3)
+ RET