tst buf, #1 @ odd address?
ldrneb td0, [buf], #1
subne len, len, #1
- adcnes sum, sum, td0, lsl #byte(1)
+ adcnes sum, sum, td0, put_byte_1
.less4: tst len, #6
beq .less8_byte
.less8_byte: tst len, #1 @ odd number of bytes
ldrneb td0, [buf], #1 @ include last byte
- adcnes sum, sum, td0, lsl #byte(0) @ update checksum
+ adcnes sum, sum, td0, put_byte_0 @ update checksum
.done: adc r0, sum, #0 @ collect up the last carry
ldr td0, [sp], #4
.not_aligned: tst buf, #1 @ odd address
ldrneb td0, [buf], #1 @ make even
subne len, len, #1
- adcnes sum, sum, td0, lsl #byte(1) @ update checksum
+ adcnes sum, sum, td0, put_byte_1 @ update checksum
tst buf, #2 @ 32-bit aligned?
#if __LINUX_ARM_ARCH__ >= 4
load1b ip
sub len, len, #1
- adcs sum, sum, ip, lsl #byte(1) @ update checksum
+ adcs sum, sum, ip, put_byte_1 @ update checksum
strb ip, [dst], #1
tst dst, #2
moveq pc, lr @ dst is now 32bit aligned
.dst_16bit: load2b r8, ip
sub len, len, #2
- adcs sum, sum, r8, lsl #byte(0)
+ adcs sum, sum, r8, put_byte_0
strb r8, [dst], #1
- adcs sum, sum, ip, lsl #byte(1)
+ adcs sum, sum, ip, put_byte_1
strb ip, [dst], #1
mov pc, lr @ dst is now 32bit aligned
/* Align dst */
load1b ip
sub len, len, #1
- adcs sum, sum, ip, lsl #byte(1) @ update checksum
+ adcs sum, sum, ip, put_byte_1 @ update checksum
strb ip, [dst], #1
tst len, #6
beq .less8_byteonly
1: load2b r8, ip
sub len, len, #2
- adcs sum, sum, r8, lsl #byte(0)
+ adcs sum, sum, r8, put_byte_0
strb r8, [dst], #1
- adcs sum, sum, ip, lsl #byte(1)
+ adcs sum, sum, ip, put_byte_1
strb ip, [dst], #1
.less8_aligned: tst len, #6
bne 1b
tst len, #1
beq .done
load1b r8
- adcs sum, sum, r8, lsl #byte(0) @ update checksum
+ adcs sum, sum, r8, put_byte_0 @ update checksum
strb r8, [dst], #1
b .done
beq .done
load1l r4
tst len, #2
- mov r5, r4, lsr #byte(0)
+ mov r5, r4, get_byte_0
beq .exit
adcs sum, sum, r4, push #16
strb r5, [dst], #1
- mov r5, r4, lsr #byte(1)
+ mov r5, r4, get_byte_1
strb r5, [dst], #1
- mov r5, r4, lsr #byte(2)
+ mov r5, r4, get_byte_2
.exit: tst len, #1
strneb r5, [dst], #1
andne r5, r5, #255
- adcnes sum, sum, r5, lsl #byte(0)
+ adcnes sum, sum, r5, put_byte_0
/*
* If the dst pointer was not 16-bit aligned, we
mov r4, r5, pull #8
4: ands len, len, #3
beq .done
- mov r5, r4, lsr #byte(0)
+ mov r5, r4, get_byte_0
tst len, #2
beq .exit
adcs sum, sum, r4, push #16
strb r5, [dst], #1
- mov r5, r4, lsr #byte(1)
+ mov r5, r4, get_byte_1
strb r5, [dst], #1
- mov r5, r4, lsr #byte(2)
+ mov r5, r4, get_byte_2
b .exit
.src2_aligned: mov r4, r5, pull #16
mov r4, r5, pull #16
4: ands len, len, #3
beq .done
- mov r5, r4, lsr #byte(0)
+ mov r5, r4, get_byte_0
tst len, #2
beq .exit
adcs sum, sum, r4
strb r5, [dst], #1
- mov r5, r4, lsr #byte(1)
+ mov r5, r4, get_byte_1
strb r5, [dst], #1
tst len, #1
beq .done
mov r4, r5, pull #24
4: ands len, len, #3
beq .done
- mov r5, r4, lsr #byte(0)
+ mov r5, r4, get_byte_0
tst len, #2
beq .exit
strb r5, [dst], #1
adcs sum, sum, r4
load1l r4
- mov r5, r4, lsr #byte(0)
+ mov r5, r4, get_byte_0
strb r5, [dst], #1
adcs sum, sum, r4, push #24
- mov r5, r4, lsr #byte(1)
+ mov r5, r4, get_byte_1
b .exit
.insb_16_lp: ldrb r3, [r0]
ldrb r4, [r0]
ldrb r5, [r0]
- mov r3, r3, lsl #byte(0)
+ mov r3, r3, put_byte_0
ldrb r6, [r0]
- orr r3, r3, r4, lsl #byte(1)
+ orr r3, r3, r4, put_byte_1
ldrb r4, [r0]
- orr r3, r3, r5, lsl #byte(2)
+ orr r3, r3, r5, put_byte_2
ldrb r5, [r0]
- orr r3, r3, r6, lsl #byte(3)
+ orr r3, r3, r6, put_byte_3
ldrb r6, [r0]
- mov r4, r4, lsl #byte(0)
+ mov r4, r4, put_byte_0
ldrb ip, [r0]
- orr r4, r4, r5, lsl #byte(1)
+ orr r4, r4, r5, put_byte_1
ldrb r5, [r0]
- orr r4, r4, r6, lsl #byte(2)
+ orr r4, r4, r6, put_byte_2
ldrb r6, [r0]
- orr r4, r4, ip, lsl #byte(3)
+ orr r4, r4, ip, put_byte_3
ldrb ip, [r0]
- mov r5, r5, lsl #byte(0)
+ mov r5, r5, put_byte_0
ldrb lr, [r0]
- orr r5, r5, r6, lsl #byte(1)
+ orr r5, r5, r6, put_byte_1
ldrb r6, [r0]
- orr r5, r5, ip, lsl #byte(2)
+ orr r5, r5, ip, put_byte_2
ldrb ip, [r0]
- orr r5, r5, lr, lsl #byte(3)
+ orr r5, r5, lr, put_byte_3
ldrb lr, [r0]
- mov r6, r6, lsl #byte(0)
- orr r6, r6, ip, lsl #byte(1)
+ mov r6, r6, put_byte_0
+ orr r6, r6, ip, put_byte_1
ldrb ip, [r0]
- orr r6, r6, lr, lsl #byte(2)
- orr r6, r6, ip, lsl #byte(3)
+ orr r6, r6, lr, put_byte_2
+ orr r6, r6, ip, put_byte_3
stmia r1!, {r3 - r6}
subs r2, r2, #16
ldrb r3, [r0]
ldrb r4, [r0]
ldrb r5, [r0]
- mov r3, r3, lsl #byte(0)
+ mov r3, r3, put_byte_0
ldrb r6, [r0]
- orr r3, r3, r4, lsl #byte(1)
+ orr r3, r3, r4, put_byte_1
ldrb r4, [r0]
- orr r3, r3, r5, lsl #byte(2)
+ orr r3, r3, r5, put_byte_2
ldrb r5, [r0]
- orr r3, r3, r6, lsl #byte(3)
+ orr r3, r3, r6, put_byte_3
ldrb r6, [r0]
- mov r4, r4, lsl #byte(0)
+ mov r4, r4, put_byte_0
ldrb ip, [r0]
- orr r4, r4, r5, lsl #byte(1)
- orr r4, r4, r6, lsl #byte(2)
- orr r4, r4, ip, lsl #byte(3)
+ orr r4, r4, r5, put_byte_1
+ orr r4, r4, r6, put_byte_2
+ orr r4, r4, ip, put_byte_3
stmia r1!, {r3, r4}
.insb_no_8: tst r2, #4
ldrb r4, [r0]
ldrb r5, [r0]
ldrb r6, [r0]
- mov r3, r3, lsl #byte(0)
- orr r3, r3, r4, lsl #byte(1)
- orr r3, r3, r5, lsl #byte(2)
- orr r3, r3, r6, lsl #byte(3)
+ mov r3, r3, put_byte_0
+ orr r3, r3, r4, put_byte_1
+ orr r3, r3, r5, put_byte_2
+ orr r3, r3, r6, put_byte_3
str r3, [r1], #4
.insb_no_4: ands r2, r2, #3
strnet r3, [r0], #4 @ Shouldnt fault
ands ip, ip, #3
beq .c2u_1fupi
-.c2u_1nowords: mov r3, r7, lsr #byte(1)
+.c2u_1nowords: mov r3, r7, get_byte_1
teq ip, #0
beq .c2u_finished
cmp ip, #2
USER( strbt r3, [r0], #1) @ May fault
- movge r3, r7, lsr #byte(2)
+ movge r3, r7, get_byte_2
USER( strgebt r3, [r0], #1) @ May fault
- movgt r3, r7, lsr #byte(3)
+ movgt r3, r7, get_byte_3
USER( strgtbt r3, [r0], #1) @ May fault
b .c2u_finished
strnet r3, [r0], #4 @ Shouldnt fault
ands ip, ip, #3
beq .c2u_2fupi
-.c2u_2nowords: mov r3, r7, lsr #byte(2)
+.c2u_2nowords: mov r3, r7, get_byte_2
teq ip, #0
beq .c2u_finished
cmp ip, #2
USER( strbt r3, [r0], #1) @ May fault
- movge r3, r7, lsr #byte(3)
+ movge r3, r7, get_byte_3
USER( strgebt r3, [r0], #1) @ May fault
ldrgtb r3, [r1], #0
USER( strgtbt r3, [r0], #1) @ May fault
strnet r3, [r0], #4 @ Shouldnt fault
ands ip, ip, #3
beq .c2u_3fupi
-.c2u_3nowords: mov r3, r7, lsr #byte(3)
+.c2u_3nowords: mov r3, r7, get_byte_3
teq ip, #0
beq .c2u_finished
cmp ip, #2
strne r3, [r0], #4
ands ip, ip, #3
beq .cfu_1fupi
-.cfu_1nowords: mov r3, r7, lsr #byte(1)
+.cfu_1nowords: mov r3, r7, get_byte_1
teq ip, #0
beq .cfu_finished
cmp ip, #2
strb r3, [r0], #1
- movge r3, r7, lsr #byte(2)
+ movge r3, r7, get_byte_2
strgeb r3, [r0], #1
- movgt r3, r7, lsr #byte(3)
+ movgt r3, r7, get_byte_3
strgtb r3, [r0], #1
b .cfu_finished
strne r3, [r0], #4
ands ip, ip, #3
beq .cfu_2fupi
-.cfu_2nowords: mov r3, r7, lsr #byte(2)
+.cfu_2nowords: mov r3, r7, get_byte_2
teq ip, #0
beq .cfu_finished
cmp ip, #2
strb r3, [r0], #1
- movge r3, r7, lsr #byte(3)
+ movge r3, r7, get_byte_3
strgeb r3, [r0], #1
USER( ldrgtbt r3, [r1], #0) @ May fault
strgtb r3, [r0], #1
strne r3, [r0], #4
ands ip, ip, #3
beq .cfu_3fupi
-.cfu_3nowords: mov r3, r7, lsr #byte(3)
+.cfu_3nowords: mov r3, r7, get_byte_3
teq ip, #0
beq .cfu_finished
cmp ip, #2
#ifndef __ARMEB__
#define pull lsr
#define push lsl
-#define byte(x) (x*8)
+#define get_byte_0 lsl #0
+#define get_byte_1 lsr #8
+#define get_byte_2 lsr #16
+#define get_byte_3 lsr #24
+#define put_byte_0 lsl #0
+#define put_byte_1 lsl #8
+#define put_byte_2 lsl #16
+#define put_byte_3 lsl #24
#else
#define pull lsl
#define push lsr
-#define byte(x) ((3-x)*8)
+#define get_byte_0 lsr #24
+#define get_byte_1 lsr #16
+#define get_byte_2 lsr #8
+#define get_byte_3 lsl #0
+#define put_byte_0 lsl #24
+#define put_byte_1 lsl #16
+#define put_byte_2 lsl #8
+#define put_byte_3 lsl #0
#endif
/*