clang 20.0.0git
crc32intrin.h
Go to the documentation of this file.
1/*===---- crc32intrin.h - SSE4.2 Accumulate CRC32 intrinsics ---------------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===-----------------------------------------------------------------------===
8 */
9
10#ifndef __CRC32INTRIN_H
11#define __CRC32INTRIN_H
12
13#define __DEFAULT_FN_ATTRS \
14 __attribute__((__always_inline__, __nodebug__, __target__("crc32")))
15
16/// Adds the unsigned integer operand to the CRC-32C checksum of the
17/// unsigned char operand.
18///
19/// \headerfile <x86intrin.h>
20///
21/// This intrinsic corresponds to the <c> CRC32B </c> instruction.
22///
23/// \param __C
24/// An unsigned integer operand to add to the CRC-32C checksum of operand
25/// \a __D.
26/// \param __D
27/// An unsigned 8-bit integer operand used to compute the CRC-32C checksum.
28/// \returns The result of adding operand \a __C to the CRC-32C checksum of
29/// operand \a __D.
30static __inline__ unsigned int __DEFAULT_FN_ATTRS
31_mm_crc32_u8(unsigned int __C, unsigned char __D)
32{
33 return __builtin_ia32_crc32qi(__C, __D);
34}
35
36/// Adds the unsigned integer operand to the CRC-32C checksum of the
37/// unsigned short operand.
38///
39/// \headerfile <x86intrin.h>
40///
41/// This intrinsic corresponds to the <c> CRC32W </c> instruction.
42///
43/// \param __C
44/// An unsigned integer operand to add to the CRC-32C checksum of operand
45/// \a __D.
46/// \param __D
47/// An unsigned 16-bit integer operand used to compute the CRC-32C checksum.
48/// \returns The result of adding operand \a __C to the CRC-32C checksum of
49/// operand \a __D.
50static __inline__ unsigned int __DEFAULT_FN_ATTRS
51_mm_crc32_u16(unsigned int __C, unsigned short __D)
52{
53 return __builtin_ia32_crc32hi(__C, __D);
54}
55
56/// Adds the first unsigned integer operand to the CRC-32C checksum of
57/// the second unsigned integer operand.
58///
59/// \headerfile <x86intrin.h>
60///
61/// This intrinsic corresponds to the <c> CRC32L </c> instruction.
62///
63/// \param __C
64/// An unsigned integer operand to add to the CRC-32C checksum of operand
65/// \a __D.
66/// \param __D
67/// An unsigned 32-bit integer operand used to compute the CRC-32C checksum.
68/// \returns The result of adding operand \a __C to the CRC-32C checksum of
69/// operand \a __D.
70static __inline__ unsigned int __DEFAULT_FN_ATTRS
71_mm_crc32_u32(unsigned int __C, unsigned int __D)
72{
73 return __builtin_ia32_crc32si(__C, __D);
74}
75
76#ifdef __x86_64__
77/// Adds the unsigned integer operand to the CRC-32C checksum of the
78/// unsigned 64-bit integer operand.
79///
80/// \headerfile <x86intrin.h>
81///
82/// This intrinsic corresponds to the <c> CRC32Q </c> instruction.
83///
84/// \param __C
85/// An unsigned integer operand to add to the CRC-32C checksum of operand
86/// \a __D.
87/// \param __D
88/// An unsigned 64-bit integer operand used to compute the CRC-32C checksum.
89/// \returns The result of adding operand \a __C to the CRC-32C checksum of
90/// operand \a __D.
91static __inline__ unsigned long long __DEFAULT_FN_ATTRS
92_mm_crc32_u64(unsigned long long __C, unsigned long long __D)
93{
94 return __builtin_ia32_crc32di(__C, __D);
95}
96#endif /* __x86_64__ */
97
98#undef __DEFAULT_FN_ATTRS
99
100#endif /* __CRC32INTRIN_H */
static __inline__ unsigned int __DEFAULT_FN_ATTRS _mm_crc32_u8(unsigned int __C, unsigned char __D)
Adds the unsigned integer operand to the CRC-32C checksum of the unsigned char operand.
Definition: crc32intrin.h:31
#define __DEFAULT_FN_ATTRS
Definition: crc32intrin.h:13
static __inline__ unsigned int __DEFAULT_FN_ATTRS _mm_crc32_u32(unsigned int __C, unsigned int __D)
Adds the first unsigned integer operand to the CRC-32C checksum of the second unsigned integer operan...
Definition: crc32intrin.h:71
static __inline__ unsigned int __DEFAULT_FN_ATTRS _mm_crc32_u16(unsigned int __C, unsigned short __D)
Adds the unsigned integer operand to the CRC-32C checksum of the unsigned short operand.
Definition: crc32intrin.h:51
static __inline__ void short __D
Definition: immintrin.h:468