Warning: This file is not a C or C++ file. It does not have highlighting.
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. |
30 | static __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. |
50 | static __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. |
70 | static __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. |
91 | static __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 */ |
101 |
Warning: This file is not a C or C++ file. It does not have highlighting.