ARM Hacks


General:



Mirror byte

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


Parity

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)


Mask lowest set bit

r0 is input/output register.
	rsb r1,r0,#0
	and r0,r0,r1

alternate
	sub r1,r0,#1
	bic r0,r0,r1


Division by constant

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


This Page last updated 20-August-2008 by: FluBBa of WarD.