xref: /aosp_15_r20/external/lzma/Asm/arm/7zCrcOpt.asm (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker	CODE32
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker	EXPORT	|CrcUpdateT4@16|
4*f6dc9357SAndroid Build Coastguard Worker
5*f6dc9357SAndroid Build Coastguard Worker	AREA	|.text|, CODE, ARM
6*f6dc9357SAndroid Build Coastguard Worker
7*f6dc9357SAndroid Build Coastguard Worker	MACRO
8*f6dc9357SAndroid Build Coastguard Worker	CRC32_STEP_1
9*f6dc9357SAndroid Build Coastguard Worker
10*f6dc9357SAndroid Build Coastguard Worker	ldrb    r4, [r1], #1
11*f6dc9357SAndroid Build Coastguard Worker	subs    r2, r2, #1
12*f6dc9357SAndroid Build Coastguard Worker	eor     r4, r4, r0
13*f6dc9357SAndroid Build Coastguard Worker	and     r4, r4, #0xFF
14*f6dc9357SAndroid Build Coastguard Worker	ldr     r4, [r3, +r4, lsl #2]
15*f6dc9357SAndroid Build Coastguard Worker	eor     r0, r4, r0, lsr #8
16*f6dc9357SAndroid Build Coastguard Worker
17*f6dc9357SAndroid Build Coastguard Worker	MEND
18*f6dc9357SAndroid Build Coastguard Worker
19*f6dc9357SAndroid Build Coastguard Worker
20*f6dc9357SAndroid Build Coastguard Worker	MACRO
21*f6dc9357SAndroid Build Coastguard Worker	CRC32_STEP_4 $STREAM_WORD
22*f6dc9357SAndroid Build Coastguard Worker
23*f6dc9357SAndroid Build Coastguard Worker	eor     r7, r7, r8
24*f6dc9357SAndroid Build Coastguard Worker	eor     r7, r7, r9
25*f6dc9357SAndroid Build Coastguard Worker	eor     r0, r0, r7
26*f6dc9357SAndroid Build Coastguard Worker	eor     r0, r0, $STREAM_WORD
27*f6dc9357SAndroid Build Coastguard Worker	ldr     $STREAM_WORD, [r1], #4
28*f6dc9357SAndroid Build Coastguard Worker
29*f6dc9357SAndroid Build Coastguard Worker	and     r7, r0, #0xFF
30*f6dc9357SAndroid Build Coastguard Worker	and     r8, r0, #0xFF00
31*f6dc9357SAndroid Build Coastguard Worker	and     r9, r0, #0xFF0000
32*f6dc9357SAndroid Build Coastguard Worker	and     r0, r0, #0xFF000000
33*f6dc9357SAndroid Build Coastguard Worker
34*f6dc9357SAndroid Build Coastguard Worker	ldr     r7, [r6, +r7, lsl #2]
35*f6dc9357SAndroid Build Coastguard Worker	ldr     r8, [r5, +r8, lsr #6]
36*f6dc9357SAndroid Build Coastguard Worker	ldr     r9, [r4, +r9, lsr #14]
37*f6dc9357SAndroid Build Coastguard Worker	ldr     r0, [r3, +r0, lsr #22]
38*f6dc9357SAndroid Build Coastguard Worker
39*f6dc9357SAndroid Build Coastguard Worker	MEND
40*f6dc9357SAndroid Build Coastguard Worker
41*f6dc9357SAndroid Build Coastguard Worker
42*f6dc9357SAndroid Build Coastguard Worker|CrcUpdateT4@16| PROC
43*f6dc9357SAndroid Build Coastguard Worker
44*f6dc9357SAndroid Build Coastguard Worker	stmdb   sp!, {r4-r11, lr}
45*f6dc9357SAndroid Build Coastguard Worker	cmp     r2, #0
46*f6dc9357SAndroid Build Coastguard Worker	beq     |$fin|
47*f6dc9357SAndroid Build Coastguard Worker
48*f6dc9357SAndroid Build Coastguard Worker|$v1|
49*f6dc9357SAndroid Build Coastguard Worker	tst     r1, #7
50*f6dc9357SAndroid Build Coastguard Worker	beq     |$v2|
51*f6dc9357SAndroid Build Coastguard Worker	CRC32_STEP_1
52*f6dc9357SAndroid Build Coastguard Worker	bne     |$v1|
53*f6dc9357SAndroid Build Coastguard Worker
54*f6dc9357SAndroid Build Coastguard Worker|$v2|
55*f6dc9357SAndroid Build Coastguard Worker	cmp     r2, #16
56*f6dc9357SAndroid Build Coastguard Worker	blo     |$v3|
57*f6dc9357SAndroid Build Coastguard Worker
58*f6dc9357SAndroid Build Coastguard Worker	ldr     r10, [r1], #4
59*f6dc9357SAndroid Build Coastguard Worker	ldr     r11, [r1], #4
60*f6dc9357SAndroid Build Coastguard Worker
61*f6dc9357SAndroid Build Coastguard Worker	add     r4, r3, #0x400
62*f6dc9357SAndroid Build Coastguard Worker	add     r5, r3, #0x800
63*f6dc9357SAndroid Build Coastguard Worker	add     r6, r3, #0xC00
64*f6dc9357SAndroid Build Coastguard Worker
65*f6dc9357SAndroid Build Coastguard Worker	mov     r7, #0
66*f6dc9357SAndroid Build Coastguard Worker	mov     r8, #0
67*f6dc9357SAndroid Build Coastguard Worker	mov     r9, #0
68*f6dc9357SAndroid Build Coastguard Worker
69*f6dc9357SAndroid Build Coastguard Worker	sub     r2, r2, #16
70*f6dc9357SAndroid Build Coastguard Worker
71*f6dc9357SAndroid Build Coastguard Worker|$loop|
72*f6dc9357SAndroid Build Coastguard Worker	; pld     [r1, #0x40]
73*f6dc9357SAndroid Build Coastguard Worker
74*f6dc9357SAndroid Build Coastguard Worker	CRC32_STEP_4 r10
75*f6dc9357SAndroid Build Coastguard Worker	CRC32_STEP_4 r11
76*f6dc9357SAndroid Build Coastguard Worker
77*f6dc9357SAndroid Build Coastguard Worker	subs    r2, r2, #8
78*f6dc9357SAndroid Build Coastguard Worker	bhs     |$loop|
79*f6dc9357SAndroid Build Coastguard Worker
80*f6dc9357SAndroid Build Coastguard Worker	sub     r1, r1, #8
81*f6dc9357SAndroid Build Coastguard Worker	add     r2, r2, #16
82*f6dc9357SAndroid Build Coastguard Worker
83*f6dc9357SAndroid Build Coastguard Worker	eor     r7, r7, r8
84*f6dc9357SAndroid Build Coastguard Worker	eor     r7, r7, r9
85*f6dc9357SAndroid Build Coastguard Worker	eor     r0, r0, r7
86*f6dc9357SAndroid Build Coastguard Worker
87*f6dc9357SAndroid Build Coastguard Worker|$v3|
88*f6dc9357SAndroid Build Coastguard Worker	cmp     r2, #0
89*f6dc9357SAndroid Build Coastguard Worker	beq     |$fin|
90*f6dc9357SAndroid Build Coastguard Worker
91*f6dc9357SAndroid Build Coastguard Worker|$v4|
92*f6dc9357SAndroid Build Coastguard Worker	CRC32_STEP_1
93*f6dc9357SAndroid Build Coastguard Worker	bne     |$v4|
94*f6dc9357SAndroid Build Coastguard Worker
95*f6dc9357SAndroid Build Coastguard Worker|$fin|
96*f6dc9357SAndroid Build Coastguard Worker	ldmia   sp!, {r4-r11, pc}
97*f6dc9357SAndroid Build Coastguard Worker
98*f6dc9357SAndroid Build Coastguard Worker|CrcUpdateT4@16| ENDP
99*f6dc9357SAndroid Build Coastguard Worker
100*f6dc9357SAndroid Build Coastguard Worker	END
101