1010
1111 .arch armv8-a+crc
1212
13- .macro byteorder, reg, be
14- .if \be
15- CPU_LE( rev \reg, \reg )
16- .else
17- CPU_BE( rev \reg, \reg )
18- .endif
13+ .macro bitle, reg
1914 .endm
2015
21- .macro byteorder16, reg, be
22- .if \be
23- CPU_LE( rev16 \reg, \reg )
24- .else
25- CPU_BE( rev16 \reg, \reg )
26- .endif
16+ .macro bitbe, reg
17+ rbit \reg, \reg
2718 .endm
2819
29- .macro bitorder, reg, be
30- .if \be
31- rbit \reg, \reg
32- .endif
20+ .macro bytele, reg
3321 .endm
3422
35- .macro bitorder16, reg, be
36- .if \be
23+ .macro bytebe, reg
3724 rbit \reg, \reg
38- lsr \reg, \reg, #16
39- .endif
25+ lsr \reg, \reg, #24
26+ .endm
27+
28+ .macro hwordle, reg
29+ CPU_BE( rev16 \reg, \reg )
4030 .endm
4131
42- .macro bitorder8 , reg, be
43- .if \be
32+ .macro hwordbe , reg
33+ CPU_LE( rev \reg, \reg )
4434 rbit \reg, \reg
45- lsr \reg, \reg, #24
46- .endif
35+ CPU_BE( lsr \reg, \reg, #16 )
36+ .endm
37+
38+ .macro le, regs: vararg
39+ .irp r, \regs
40+ CPU_BE( rev \r, \r )
41+ .endr
42+ .endm
43+
44+ .macro be, regs: vararg
45+ .irp r, \regs
46+ CPU_LE( rev \r, \r )
47+ .endr
48+ .irp r, \regs
49+ rbit \r, \r
50+ .endr
4751 .endm
4852
49- .macro __crc32, c, be = 0
50- bitorder w0, \be
53+ .macro __crc32, c, order = le
54+ bit\order w0
5155 cmp x2, #16
5256 b.lt 8f // less than 16 bytes
5357
@@ -60,14 +64,7 @@ CPU_BE( rev16 \reg, \reg )
6064 add x8, x8, x1
6165 add x1, x1, x7
6266 ldp x5, x6, [x8]
63- byteorder x3, \be
64- byteorder x4, \be
65- byteorder x5, \be
66- byteorder x6, \be
67- bitorder x3, \be
68- bitorder x4, \be
69- bitorder x5, \be
70- bitorder x6, \be
67+ \order x3, x4, x5, x6
7168
7269 tst x7, #8
7370 crc32 \c\()x w8, w0, x3
@@ -95,42 +92,32 @@ CPU_BE( rev16 \reg, \reg )
959232: ldp x3, x4, [x1], #32
9693 sub x2, x2, #32
9794 ldp x5, x6, [x1, #-16]
98- byteorder x3, \be
99- byteorder x4, \be
100- byteorder x5, \be
101- byteorder x6, \be
102- bitorder x3, \be
103- bitorder x4, \be
104- bitorder x5, \be
105- bitorder x6, \be
95+ \order x3, x4, x5, x6
10696 crc32 \c\()x w0, w0, x3
10797 crc32 \c\()x w0, w0, x4
10898 crc32 \c\()x w0, w0, x5
10999 crc32 \c\()x w0, w0, x6
110100 cbnz x2, 32b
111- 0: bitorder w0, \be
101+ 0: bit\order w0
112102 ret
113103
1141048: tbz x2, #3, 4f
115105 ldr x3, [x1], #8
116- byteorder x3, \be
117- bitorder x3, \be
106+ \order x3
118107 crc32 \c\()x w0, w0, x3
1191084: tbz x2, #2, 2f
120109 ldr w3, [x1], #4
121- byteorder w3, \be
122- bitorder w3, \be
110+ \order w3
123111 crc32 \c\()w w0, w0, w3
1241122: tbz x2, #1, 1f
125113 ldrh w3, [x1], #2
126- byteorder16 w3, \be
127- bitorder16 w3, \be
114+ hword\order w3
128115 crc32 \c\()h w0, w0, w3
1291161: tbz x2, #0, 0f
130117 ldrb w3, [x1]
131- bitorder8 w3, \be
118+ byte\order w3
132119 crc32 \c\()b w0, w0, w3
133- 0: bitorder w0, \be
120+ 0: bit\order w0
134121 ret
135122 .endm
136123
@@ -146,5 +133,5 @@ SYM_FUNC_END(crc32c_le_arm64)
146133
147134 .align 5
148135SYM_FUNC_START(crc32_be_arm64)
149- __crc32 be = 1
136+ __crc32 order = be
150137SYM_FUNC_END(crc32_be_arm64)
0 commit comments