xref: /linux/lib/crc/arm64/crc64-neon.h (revision 9611c0ce215a66770ccbe5c126bf57ba8c31bcad)
1*061cef5fSArd Biesheuvel // SPDX-License-Identifier: GPL-2.0-only
2*061cef5fSArd Biesheuvel 
3*061cef5fSArd Biesheuvel static inline uint64x2_t pmull64(uint64x2_t a, uint64x2_t b)
4*061cef5fSArd Biesheuvel {
5*061cef5fSArd Biesheuvel 	return vreinterpretq_u64_p128(vmull_p64(vgetq_lane_u64(a, 0),
6*061cef5fSArd Biesheuvel 						vgetq_lane_u64(b, 0)));
7*061cef5fSArd Biesheuvel }
8*061cef5fSArd Biesheuvel 
9*061cef5fSArd Biesheuvel static inline uint64x2_t pmull64_high(uint64x2_t a, uint64x2_t b)
10*061cef5fSArd Biesheuvel {
11*061cef5fSArd Biesheuvel 	poly64x2_t l = vreinterpretq_p64_u64(a);
12*061cef5fSArd Biesheuvel 	poly64x2_t m = vreinterpretq_p64_u64(b);
13*061cef5fSArd Biesheuvel 
14*061cef5fSArd Biesheuvel 	return vreinterpretq_u64_p128(vmull_high_p64(l, m));
15*061cef5fSArd Biesheuvel }
16*061cef5fSArd Biesheuvel 
17*061cef5fSArd Biesheuvel static inline uint64x2_t pmull64_hi_lo(uint64x2_t a, uint64x2_t b)
18*061cef5fSArd Biesheuvel {
19*061cef5fSArd Biesheuvel 	return vreinterpretq_u64_p128(vmull_p64(vgetq_lane_u64(a, 1),
20*061cef5fSArd Biesheuvel 						vgetq_lane_u64(b, 0)));
21*061cef5fSArd Biesheuvel }
22