ARM Hacks
General:
r0 is input/output byte.
orr r0,r0,r0,lsl#10
ldr r1,=0x2211000
and r2,r1,r0,lsl#9
and r0,r1,r0,lsl#11
orr r0,r2,r0,lsl#2
add r2,r0,r0,lsl#8
add r2,r2,r0,lsl#16
mov r0,r2,lsr#24
alternate
orr r0,r0,r0,lsl#8
and r1,r0,#0x330
and r2,r0,#0xCC0
orr r0,r1,r2,lsr#4
and r1,r0,#0x154
and r2,r0,#0x2A8
orr r0,r1,r2,lsr#2
mov r0,r0,lsr#1
r0 is input/output byte. 1 = odd, 0 = even parity. Sign flag can also be used if actual value not needed.
eor r0,r0,r0,lsl#16
eor r0,r0,r0,lsl#8
eor r0,r0,r0,lsl#4
eor r0,r0,r0,lsl#2
eors r0,r0,r0,lsl#1
(mov r0,r0,lsr#31)
r0 is input/output register.
rsb r1,r0,#0
and r0,r0,r1
alternate
sub r1,r0,#1
bic r0,r0,r1
r0 is input/output register.
Division by 3
ldr r1,=0x55555555
umull r2,r0,r1,r0
Division by 5
ldr r1,=0x33333333
umull r2,r0,r1,r0
Division by 7
ldr r1,=0x24924924
umull r2,r0,r1,r0
Division by N
ldr r1,=0x100000000/N
umull r2,r0,r1,r0
|