#ip 4 ; while (123 & 456 != 72); 00: seti 123 0 2 01: bani 2 456 2 02: eqri 2 72 2 03: addr 2 4 4 04: seti 0 0 4 05: seti 0 8 2 ; r2 = 0 ; xref 30 06: bori 2 65536 5 ; r5 = r2 | 0x10000 07: seti 2238642 0 2 ; r2 = 2238642 ; xref 27 08: bani 5 255 3 ; r3 = r5 & 0xff 09: addr 2 3 2 ; r2 = r2 + r3 10: bani 2 16777215 2 ; r2 = r2 & 0xffffff 11: muli 2 65899 2 ; r2 = r2 * 65899 12: bani 2 16777215 2 ; r2 = r2 & 0xffffff ; trash = r3 ; keep = r2, r5 13: gtir 256 5 3 ; if (0x100 > r5) 14: addr 3 4 4 ; then 15: addi 4 1 4 ; (false) jr +1 (17) 16: seti 27 3 4 ; (true ) jp 27 (28) ; xref 16 (256 <= r5) ; r5 >>= 8 17: seti 0 8 3 ; r3 = 0 18: addi 3 1 1 ; r1 = r3 + 1 19: muli 1 256 1 ; r1 = r1 * 0x100 20: gtrr 1 5 1 ; if (r1 > r5) 21: addr 1 4 4 ; then 22: addi 4 1 4 ; .. 23: seti 25 4 4 ; .. 24: addi 3 1 3 ; (false) r3 = r3 + 1 25: seti 17 2 4 ; (false) jp 17 (18) 26: setr 3 9 5 ; (true ) r5 = r3 27: seti 7 9 4 ; (true ) jp 07 (08) ; xref 16 (256 > r5) 28: eqrr 2 0 3 ; if (r2 == r0) 29: addr 3 4 4 ; then 30: seti 5 0 4 ; (false) jp 05 (06) ; (true ) exit ; ===== HIGH-LEVEL PSEUDOCODE ===== r2 = 0 do { r5 = r2 | 0x10000 r2 = 2238642 while (1) { // r2 = (r2 + r5) * 65899 r2 = (((r2 + (r5 & 0xff)) & 0xffffff) * 65899) & 0xffffff if (0x100 > r5) break r5 >>= 8 } } while (r2 != r0)