objective-ci 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +1 -3
  3. data/Rakefile +1 -1
  4. data/bin/oclint +4 -0
  5. data/bin/oclint-0.8 +1 -1
  6. data/bin/oclint-json-compilation-database +1 -1
  7. data/bin/oclint-xcodebuild +1 -1
  8. data/externals/oclint/LICENSE +69 -0
  9. data/externals/oclint/bin/oclint +0 -0
  10. data/externals/oclint/{oclint-0.8 → bin/oclint-0.8} +0 -0
  11. data/externals/oclint/{oclint-json-compilation-database → bin/oclint-json-compilation-database} +0 -0
  12. data/externals/oclint/{oclint-xcodebuild → bin/oclint-xcodebuild} +0 -0
  13. data/externals/oclint/lib/clang/3.4/asan_blacklist.txt +10 -0
  14. data/externals/oclint/lib/clang/3.4/include/Intrin.h +784 -0
  15. data/externals/oclint/lib/clang/3.4/include/__wmmintrin_aes.h +67 -0
  16. data/externals/oclint/lib/clang/3.4/include/__wmmintrin_pclmul.h +34 -0
  17. data/externals/oclint/lib/clang/3.4/include/altivec.h +11856 -0
  18. data/externals/oclint/lib/clang/3.4/include/ammintrin.h +68 -0
  19. data/externals/oclint/lib/clang/3.4/include/arm_neon.h +6802 -0
  20. data/externals/oclint/lib/clang/3.4/include/avx2intrin.h +1206 -0
  21. data/externals/oclint/lib/clang/3.4/include/avxintrin.h +1224 -0
  22. data/externals/oclint/lib/clang/3.4/include/bmi2intrin.h +94 -0
  23. data/externals/oclint/lib/clang/3.4/include/bmiintrin.h +115 -0
  24. data/externals/oclint/lib/clang/3.4/include/cpuid.h +156 -0
  25. data/externals/oclint/lib/clang/3.4/include/emmintrin.h +1451 -0
  26. data/externals/oclint/lib/clang/3.4/include/f16cintrin.h +58 -0
  27. data/externals/oclint/lib/clang/3.4/include/float.h +124 -0
  28. data/externals/oclint/lib/clang/3.4/include/fma4intrin.h +231 -0
  29. data/externals/oclint/lib/clang/3.4/include/fmaintrin.h +229 -0
  30. data/externals/oclint/lib/clang/3.4/include/immintrin.h +118 -0
  31. data/externals/oclint/lib/clang/3.4/include/iso646.h +43 -0
  32. data/externals/oclint/lib/clang/3.4/include/limits.h +119 -0
  33. data/externals/oclint/lib/clang/3.4/include/lzcntintrin.h +55 -0
  34. data/externals/oclint/lib/clang/3.4/include/mm3dnow.h +162 -0
  35. data/externals/oclint/lib/clang/3.4/include/mm_malloc.h +75 -0
  36. data/externals/oclint/lib/clang/3.4/include/mmintrin.h +503 -0
  37. data/externals/oclint/lib/clang/3.4/include/module.map +156 -0
  38. data/externals/oclint/lib/clang/3.4/include/nmmintrin.h +35 -0
  39. data/externals/oclint/lib/clang/3.4/include/pmmintrin.h +117 -0
  40. data/externals/oclint/lib/clang/3.4/include/popcntintrin.h +45 -0
  41. data/externals/oclint/lib/clang/3.4/include/prfchwintrin.h +39 -0
  42. data/externals/oclint/lib/clang/3.4/include/rdseedintrin.h +52 -0
  43. data/externals/oclint/lib/clang/3.4/include/rtmintrin.h +54 -0
  44. data/externals/oclint/lib/clang/3.4/include/sanitizer/asan_interface.h +137 -0
  45. data/externals/oclint/lib/clang/3.4/include/sanitizer/common_interface_defs.h +54 -0
  46. data/externals/oclint/lib/clang/3.4/include/sanitizer/dfsan_interface.h +87 -0
  47. data/externals/oclint/lib/clang/3.4/include/sanitizer/linux_syscall_hooks.h +3070 -0
  48. data/externals/oclint/lib/clang/3.4/include/sanitizer/lsan_interface.h +52 -0
  49. data/externals/oclint/lib/clang/3.4/include/sanitizer/msan_interface.h +162 -0
  50. data/externals/oclint/lib/clang/3.4/include/shaintrin.h +74 -0
  51. data/externals/oclint/lib/clang/3.4/include/smmintrin.h +468 -0
  52. data/externals/oclint/lib/clang/3.4/include/stdalign.h +35 -0
  53. data/externals/oclint/lib/clang/3.4/include/stdarg.h +50 -0
  54. data/externals/oclint/lib/clang/3.4/include/stdbool.h +44 -0
  55. data/externals/oclint/lib/clang/3.4/include/stddef.h +102 -0
  56. data/externals/oclint/lib/clang/3.4/include/stdint.h +708 -0
  57. data/externals/oclint/lib/clang/3.4/include/stdnoreturn.h +30 -0
  58. data/externals/oclint/lib/clang/3.4/include/tbmintrin.h +158 -0
  59. data/externals/oclint/lib/clang/3.4/include/tgmath.h +1374 -0
  60. data/externals/oclint/lib/clang/3.4/include/tmmintrin.h +225 -0
  61. data/externals/oclint/lib/clang/3.4/include/unwind.h +280 -0
  62. data/externals/oclint/lib/clang/3.4/include/varargs.h +26 -0
  63. data/externals/oclint/lib/clang/3.4/include/wmmintrin.h +42 -0
  64. data/externals/oclint/lib/clang/3.4/include/x86intrin.h +79 -0
  65. data/externals/oclint/lib/clang/3.4/include/xmmintrin.h +1001 -0
  66. data/externals/oclint/lib/clang/3.4/include/xopintrin.h +804 -0
  67. data/externals/oclint/lib/clang/3.4/lib/darwin/libclang_rt.asan_osx_dynamic.dylib +0 -0
  68. data/externals/oclint/lib/clang/3.4/lib/darwin/libclang_rt.i386.a +0 -0
  69. data/externals/oclint/lib/clang/3.4/lib/darwin/libclang_rt.profile_osx.a +0 -0
  70. data/externals/oclint/lib/clang/3.4/lib/darwin/libclang_rt.ubsan_osx.a +0 -0
  71. data/externals/oclint/lib/clang/3.4/lib/darwin/libclang_rt.x86_64.a +0 -0
  72. data/externals/oclint/lib/oclint/reporters/libHTMLReporter.dylib +0 -0
  73. data/externals/oclint/lib/oclint/reporters/libJSONReporter.dylib +0 -0
  74. data/externals/oclint/lib/oclint/reporters/libPMDReporter.dylib +0 -0
  75. data/externals/oclint/lib/oclint/reporters/libTextReporter.dylib +0 -0
  76. data/externals/oclint/lib/oclint/reporters/libXMLReporter.dylib +0 -0
  77. data/externals/oclint/lib/oclint/rules/libAvoidBranchingStatementAsLastInLoopRule.dylib +0 -0
  78. data/externals/oclint/lib/oclint/rules/libBitwiseOperatorInConditionalRule.dylib +0 -0
  79. data/externals/oclint/lib/oclint/rules/libBrokenNullCheckRule.dylib +0 -0
  80. data/externals/oclint/lib/oclint/rules/libBrokenOddnessCheckRule.dylib +0 -0
  81. data/externals/oclint/lib/oclint/rules/libCollapsibleIfStatementsRule.dylib +0 -0
  82. data/externals/oclint/lib/oclint/rules/libConstantConditionalOperatorRule.dylib +0 -0
  83. data/externals/oclint/lib/oclint/rules/libConstantIfExpressionRule.dylib +0 -0
  84. data/externals/oclint/lib/oclint/rules/libCyclomaticComplexityRule.dylib +0 -0
  85. data/externals/oclint/lib/oclint/rules/libDeadCodeRule.dylib +0 -0
  86. data/externals/oclint/lib/oclint/rules/libDefaultLabelNotLastInSwitchStatementRule.dylib +0 -0
  87. data/externals/oclint/lib/oclint/rules/libDoubleNegativeRule.dylib +0 -0
  88. data/externals/oclint/lib/oclint/rules/libEmptyCatchStatementRule.dylib +0 -0
  89. data/externals/oclint/lib/oclint/rules/libEmptyDoWhileStatementRule.dylib +0 -0
  90. data/externals/oclint/lib/oclint/rules/libEmptyElseBlockRule.dylib +0 -0
  91. data/externals/oclint/lib/oclint/rules/libEmptyFinallyStatementRule.dylib +0 -0
  92. data/externals/oclint/lib/oclint/rules/libEmptyForStatementRule.dylib +0 -0
  93. data/externals/oclint/lib/oclint/rules/libEmptyIfStatementRule.dylib +0 -0
  94. data/externals/oclint/lib/oclint/rules/libEmptySwitchStatementRule.dylib +0 -0
  95. data/externals/oclint/lib/oclint/rules/libEmptyTryStatementRule.dylib +0 -0
  96. data/externals/oclint/lib/oclint/rules/libEmptyWhileStatementRule.dylib +0 -0
  97. data/externals/oclint/lib/oclint/rules/libForLoopShouldBeWhileLoopRule.dylib +0 -0
  98. data/externals/oclint/lib/oclint/rules/libGotoStatementRule.dylib +0 -0
  99. data/externals/oclint/lib/oclint/rules/libInvertedLogicRule.dylib +0 -0
  100. data/externals/oclint/lib/oclint/rules/libJumbledIncrementerRule.dylib +0 -0
  101. data/externals/oclint/lib/oclint/rules/libLongClassRule.dylib +0 -0
  102. data/externals/oclint/lib/oclint/rules/libLongLineRule.dylib +0 -0
  103. data/externals/oclint/lib/oclint/rules/libLongMethodRule.dylib +0 -0
  104. data/externals/oclint/lib/oclint/rules/libLongVariableNameRule.dylib +0 -0
  105. data/externals/oclint/lib/oclint/rules/libMisplacedNullCheckRule.dylib +0 -0
  106. data/externals/oclint/lib/oclint/rules/libMissingBreakInSwitchStatementRule.dylib +0 -0
  107. data/externals/oclint/lib/oclint/rules/libMultipleUnaryOperatorRule.dylib +0 -0
  108. data/externals/oclint/lib/oclint/rules/libNPathComplexityRule.dylib +0 -0
  109. data/externals/oclint/lib/oclint/rules/libNcssMethodCountRule.dylib +0 -0
  110. data/externals/oclint/lib/oclint/rules/libNestedBlockDepthRule.dylib +0 -0
  111. data/externals/oclint/lib/oclint/rules/libNonCaseLabelInSwitchStatementRule.dylib +0 -0
  112. data/externals/oclint/lib/oclint/rules/libObjCBoxedExpressionsRule.dylib +0 -0
  113. data/externals/oclint/lib/oclint/rules/libObjCContainerLiteralsRule.dylib +0 -0
  114. data/externals/oclint/lib/oclint/rules/libObjCNSNumberLiteralsRule.dylib +0 -0
  115. data/externals/oclint/lib/oclint/rules/libObjCObjectSubscriptingRule.dylib +0 -0
  116. data/externals/oclint/lib/oclint/rules/libParameterReassignmentRule.dylib +0 -0
  117. data/externals/oclint/lib/oclint/rules/libRedundantConditionalOperatorRule.dylib +0 -0
  118. data/externals/oclint/lib/oclint/rules/libRedundantIfStatementRule.dylib +0 -0
  119. data/externals/oclint/lib/oclint/rules/libRedundantLocalVariableRule.dylib +0 -0
  120. data/externals/oclint/lib/oclint/rules/libRedundantNilCheckRule.dylib +0 -0
  121. data/externals/oclint/lib/oclint/rules/libReturnFromFinallyBlockRule.dylib +0 -0
  122. data/externals/oclint/lib/oclint/rules/libShortVariableNameRule.dylib +0 -0
  123. data/externals/oclint/lib/oclint/rules/libSwitchStatementsShouldHaveDefaultRule.dylib +0 -0
  124. data/externals/oclint/lib/oclint/rules/libThrowExceptionFromFinallyBlockRule.dylib +0 -0
  125. data/externals/oclint/lib/oclint/rules/libTooFewBranchesInSwitchStatementRule.dylib +0 -0
  126. data/externals/oclint/lib/oclint/rules/libTooManyFieldsRule.dylib +0 -0
  127. data/externals/oclint/lib/oclint/rules/libTooManyMethodsRule.dylib +0 -0
  128. data/externals/oclint/lib/oclint/rules/libTooManyParametersRule.dylib +0 -0
  129. data/externals/oclint/lib/oclint/rules/libUnnecessaryElseStatementRule.dylib +0 -0
  130. data/externals/oclint/lib/oclint/rules/libUnnecessaryNullCheckForCXXDeallocRule.dylib +0 -0
  131. data/externals/oclint/lib/oclint/rules/libUnusedLocalVariableRule.dylib +0 -0
  132. data/externals/oclint/lib/oclint/rules/libUnusedMethodParameterRule.dylib +0 -0
  133. data/externals/oclint/lib/oclint/rules/libUselessParenthesesRule.dylib +0 -0
  134. data/lib/objective_ci/ci_tasks.rb +1 -1
  135. data/lib/objective_ci/version.rb +1 -1
  136. metadata +200 -84
@@ -0,0 +1,52 @@
1
+ //===-- sanitizer/lsan_interface.h ------------------------------*- C++ -*-===//
2
+ //
3
+ // The LLVM Compiler Infrastructure
4
+ //
5
+ // This file is distributed under the University of Illinois Open Source
6
+ // License. See LICENSE.TXT for details.
7
+ //
8
+ //===----------------------------------------------------------------------===//
9
+ //
10
+ // This file is a part of LeakSanitizer.
11
+ //
12
+ // Public interface header.
13
+ //===----------------------------------------------------------------------===//
14
+ #ifndef SANITIZER_LSAN_INTERFACE_H
15
+ #define SANITIZER_LSAN_INTERFACE_H
16
+
17
+ #include <sanitizer/common_interface_defs.h>
18
+
19
+ #ifdef __cplusplus
20
+ extern "C" {
21
+ #endif
22
+ // Allocations made between calls to __lsan_disable() and __lsan_enable() will
23
+ // be treated as non-leaks. Disable/enable pairs may be nested.
24
+ void __lsan_disable();
25
+ void __lsan_enable();
26
+ // The heap object into which p points will be treated as a non-leak.
27
+ void __lsan_ignore_object(const void *p);
28
+ // The user may optionally provide this function to disallow leak checking
29
+ // for the program it is linked into (if the return value is non-zero). This
30
+ // function must be defined as returning a constant value; any behavior beyond
31
+ // that is unsupported.
32
+ int __lsan_is_turned_off();
33
+ // Calling this function makes LSan enter the leak checking phase immediately.
34
+ // Use this if normal end-of-process leak checking happens too late (e.g. if
35
+ // you have intentional memory leaks in your shutdown code). Calling this
36
+ // function overrides end-of-process leak checking; it must be called at
37
+ // most once per process. This function will terminate the process if there
38
+ // are memory leaks and the exit_code flag is non-zero.
39
+ void __lsan_do_leak_check();
40
+ #ifdef __cplusplus
41
+ } // extern "C"
42
+
43
+ namespace __lsan {
44
+ class ScopedDisabler {
45
+ public:
46
+ ScopedDisabler() { __lsan_disable(); }
47
+ ~ScopedDisabler() { __lsan_enable(); }
48
+ };
49
+ } // namespace __lsan
50
+ #endif
51
+
52
+ #endif // SANITIZER_LSAN_INTERFACE_H
@@ -0,0 +1,162 @@
1
+ //===-- msan_interface.h --------------------------------------------------===//
2
+ //
3
+ // The LLVM Compiler Infrastructure
4
+ //
5
+ // This file is distributed under the University of Illinois Open Source
6
+ // License. See LICENSE.TXT for details.
7
+ //
8
+ //===----------------------------------------------------------------------===//
9
+ //
10
+ // This file is a part of MemorySanitizer.
11
+ //
12
+ // Public interface header.
13
+ //===----------------------------------------------------------------------===//
14
+ #ifndef MSAN_INTERFACE_H
15
+ #define MSAN_INTERFACE_H
16
+
17
+ #include <sanitizer/common_interface_defs.h>
18
+
19
+ #ifdef __cplusplus
20
+ extern "C" {
21
+ #endif
22
+
23
+ #if __has_feature(memory_sanitizer)
24
+ /* Returns a string describing a stack origin.
25
+ Return NULL if the origin is invalid, or is not a stack origin. */
26
+ const char *__msan_get_origin_descr_if_stack(uint32_t id);
27
+
28
+
29
+ /* Set raw origin for the memory range. */
30
+ void __msan_set_origin(const volatile void *a, size_t size, uint32_t origin);
31
+
32
+ /* Get raw origin for an address. */
33
+ uint32_t __msan_get_origin(const volatile void *a);
34
+
35
+ /* Returns non-zero if tracking origins. */
36
+ int __msan_get_track_origins();
37
+
38
+ /* Returns the origin id of the latest UMR in the calling thread. */
39
+ uint32_t __msan_get_umr_origin();
40
+
41
+ /* Make memory region fully initialized (without changing its contents). */
42
+ void __msan_unpoison(const volatile void *a, size_t size);
43
+
44
+ /* Make memory region fully uninitialized (without changing its contents). */
45
+ void __msan_poison(const volatile void *a, size_t size);
46
+
47
+ /* Make memory region partially uninitialized (without changing its contents).
48
+ */
49
+ void __msan_partial_poison(const volatile void *data, void *shadow,
50
+ size_t size);
51
+
52
+ /* Returns the offset of the first (at least partially) poisoned byte in the
53
+ memory range, or -1 if the whole range is good. */
54
+ intptr_t __msan_test_shadow(const volatile void *x, size_t size);
55
+
56
+ /* Set exit code when error(s) were detected.
57
+ Value of 0 means don't change the program exit code. */
58
+ void __msan_set_exit_code(int exit_code);
59
+
60
+ /* For testing:
61
+ __msan_set_expect_umr(1);
62
+ ... some buggy code ...
63
+ __msan_set_expect_umr(0);
64
+ The last line will verify that a UMR happened. */
65
+ void __msan_set_expect_umr(int expect_umr);
66
+
67
+ /* Change the value of keep_going flag. Non-zero value means don't terminate
68
+ program execution when an error is detected. This will not affect error in
69
+ modules that were compiled without the corresponding compiler flag. */
70
+ void __msan_set_keep_going(int keep_going);
71
+
72
+ /* Print shadow and origin for the memory range to stdout in a human-readable
73
+ format. */
74
+ void __msan_print_shadow(const volatile void *x, size_t size);
75
+
76
+ /* Print current function arguments shadow and origin to stdout in a
77
+ human-readable format. */
78
+ void __msan_print_param_shadow();
79
+
80
+ /* Returns true if running under a dynamic tool (DynamoRio-based). */
81
+ int __msan_has_dynamic_component();
82
+
83
+ /* Tell MSan about newly allocated memory (ex.: custom allocator).
84
+ Memory will be marked uninitialized, with origin at the call site. */
85
+ void __msan_allocated_memory(const volatile void* data, size_t size);
86
+
87
+ /* This function may be optionally provided by user and should return
88
+ a string containing Msan runtime options. See msan_flags.h for details. */
89
+ const char* __msan_default_options();
90
+
91
+
92
+ /***********************************/
93
+ /* Allocator statistics interface. */
94
+
95
+ /* Returns the estimated number of bytes that will be reserved by allocator
96
+ for request of "size" bytes. If Msan allocator can't allocate that much
97
+ memory, returns the maximal possible allocation size, otherwise returns
98
+ "size". */
99
+ size_t __msan_get_estimated_allocated_size(size_t size);
100
+
101
+ /* Returns true if p was returned by the Msan allocator and
102
+ is not yet freed. */
103
+ int __msan_get_ownership(const volatile void *p);
104
+
105
+ /* Returns the number of bytes reserved for the pointer p.
106
+ Requires (get_ownership(p) == true) or (p == 0). */
107
+ size_t __msan_get_allocated_size(const volatile void *p);
108
+
109
+ /* Number of bytes, allocated and not yet freed by the application. */
110
+ size_t __msan_get_current_allocated_bytes();
111
+
112
+ /* Number of bytes, mmaped by msan allocator to fulfill allocation requests.
113
+ Generally, for request of X bytes, allocator can reserve and add to free
114
+ lists a large number of chunks of size X to use them for future requests.
115
+ All these chunks count toward the heap size. Currently, allocator never
116
+ releases memory to OS (instead, it just puts freed chunks to free
117
+ lists). */
118
+ size_t __msan_get_heap_size();
119
+
120
+ /* Number of bytes, mmaped by msan allocator, which can be used to fulfill
121
+ allocation requests. When a user program frees memory chunk, it can first
122
+ fall into quarantine and will count toward __msan_get_free_bytes()
123
+ later. */
124
+ size_t __msan_get_free_bytes();
125
+
126
+ /* Number of bytes in unmapped pages, that are released to OS. Currently,
127
+ always returns 0. */
128
+ size_t __msan_get_unmapped_bytes();
129
+
130
+ /* Malloc hooks that may be optionally provided by user.
131
+ __msan_malloc_hook(ptr, size) is called immediately after
132
+ allocation of "size" bytes, which returned "ptr".
133
+ __msan_free_hook(ptr) is called immediately before
134
+ deallocation of "ptr". */
135
+ void __msan_malloc_hook(const volatile void *ptr, size_t size);
136
+ void __msan_free_hook(const volatile void *ptr);
137
+
138
+ #else // __has_feature(memory_sanitizer)
139
+
140
+ #define __msan_get_origin_descr_if_stack(id) ((const char*)0)
141
+ #define __msan_set_origin(a, size, origin)
142
+ #define __msan_get_origin(a) ((uint32_t)-1)
143
+ #define __msan_get_track_origins() (0)
144
+ #define __msan_get_umr_origin() ((uint32_t)-1)
145
+ #define __msan_unpoison(a, size)
146
+ #define __msan_poison(a, size)
147
+ #define __msan_partial_poison(data, shadow, size)
148
+ #define __msan_test_shadow(x, size) ((intptr_t)-1)
149
+ #define __msan_set_exit_code(exit_code)
150
+ #define __msan_set_expect_umr(expect_umr)
151
+ #define __msan_print_shadow(x, size)
152
+ #define __msan_print_param_shadow()
153
+ #define __msan_has_dynamic_component() (0)
154
+ #define __msan_allocated_memory(data, size)
155
+
156
+ #endif // __has_feature(memory_sanitizer)
157
+
158
+ #ifdef __cplusplus
159
+ } // extern "C"
160
+ #endif
161
+
162
+ #endif
@@ -0,0 +1,74 @@
1
+ /*===---- shaintrin.h - SHA intrinsics -------------------------------------===
2
+ *
3
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ * of this software and associated documentation files (the "Software"), to deal
5
+ * in the Software without restriction, including without limitation the rights
6
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ * copies of the Software, and to permit persons to whom the Software is
8
+ * furnished to do so, subject to the following conditions:
9
+ *
10
+ * The above copyright notice and this permission notice shall be included in
11
+ * all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ * THE SOFTWARE.
20
+ *
21
+ *===-----------------------------------------------------------------------===
22
+ */
23
+
24
+ #ifndef __IMMINTRIN_H
25
+ #error "Never use <shaintrin.h> directly; include <immintrin.h> instead."
26
+ #endif
27
+
28
+ #ifndef __SHAINTRIN_H
29
+ #define __SHAINTRIN_H
30
+
31
+ #if !defined (__SHA__)
32
+ # error "SHA instructions not enabled"
33
+ #endif
34
+
35
+ #define _mm_sha1rnds4_epu32(V1, V2, M) __extension__ ({ \
36
+ __builtin_ia32_sha1rnds4((V1), (V2), (M)); })
37
+
38
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
39
+ _mm_sha1nexte_epu32(__m128i __X, __m128i __Y)
40
+ {
41
+ return __builtin_ia32_sha1nexte(__X, __Y);
42
+ }
43
+
44
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
45
+ _mm_sha1msg1_epu32(__m128i __X, __m128i __Y)
46
+ {
47
+ return __builtin_ia32_sha1msg1(__X, __Y);
48
+ }
49
+
50
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
51
+ _mm_sha1msg2_epu32(__m128i __X, __m128i __Y)
52
+ {
53
+ return __builtin_ia32_sha1msg2(__X, __Y);
54
+ }
55
+
56
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
57
+ _mm_sha256rnds2_epu32(__m128i __X, __m128i __Y, __m128i __Z)
58
+ {
59
+ return __builtin_ia32_sha256rnds2(__X, __Y, __Z);
60
+ }
61
+
62
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
63
+ _mm_sha256msg1_epu32(__m128i __X, __m128i __Y)
64
+ {
65
+ return __builtin_ia32_sha256msg1(__X, __Y);
66
+ }
67
+
68
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
69
+ _mm_sha256msg2_epu32(__m128i __X, __m128i __Y)
70
+ {
71
+ return __builtin_ia32_sha256msg2(__X, __Y);
72
+ }
73
+
74
+ #endif /* __SHAINTRIN_H */
@@ -0,0 +1,468 @@
1
+ /*===---- smmintrin.h - SSE4 intrinsics ------------------------------------===
2
+ *
3
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ * of this software and associated documentation files (the "Software"), to deal
5
+ * in the Software without restriction, including without limitation the rights
6
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ * copies of the Software, and to permit persons to whom the Software is
8
+ * furnished to do so, subject to the following conditions:
9
+ *
10
+ * The above copyright notice and this permission notice shall be included in
11
+ * all copies or substantial portions of the Software.
12
+ *
13
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ * THE SOFTWARE.
20
+ *
21
+ *===-----------------------------------------------------------------------===
22
+ */
23
+
24
+ #ifndef _SMMINTRIN_H
25
+ #define _SMMINTRIN_H
26
+
27
+ #ifndef __SSE4_1__
28
+ #error "SSE4.1 instruction set not enabled"
29
+ #else
30
+
31
+ #include <tmmintrin.h>
32
+
33
+ /* SSE4 Rounding macros. */
34
+ #define _MM_FROUND_TO_NEAREST_INT 0x00
35
+ #define _MM_FROUND_TO_NEG_INF 0x01
36
+ #define _MM_FROUND_TO_POS_INF 0x02
37
+ #define _MM_FROUND_TO_ZERO 0x03
38
+ #define _MM_FROUND_CUR_DIRECTION 0x04
39
+
40
+ #define _MM_FROUND_RAISE_EXC 0x00
41
+ #define _MM_FROUND_NO_EXC 0x08
42
+
43
+ #define _MM_FROUND_NINT (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_NEAREST_INT)
44
+ #define _MM_FROUND_FLOOR (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_NEG_INF)
45
+ #define _MM_FROUND_CEIL (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_POS_INF)
46
+ #define _MM_FROUND_TRUNC (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_ZERO)
47
+ #define _MM_FROUND_RINT (_MM_FROUND_RAISE_EXC | _MM_FROUND_CUR_DIRECTION)
48
+ #define _MM_FROUND_NEARBYINT (_MM_FROUND_NO_EXC | _MM_FROUND_CUR_DIRECTION)
49
+
50
+ #define _mm_ceil_ps(X) _mm_round_ps((X), _MM_FROUND_CEIL)
51
+ #define _mm_ceil_pd(X) _mm_round_pd((X), _MM_FROUND_CEIL)
52
+ #define _mm_ceil_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_CEIL)
53
+ #define _mm_ceil_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_CEIL)
54
+
55
+ #define _mm_floor_ps(X) _mm_round_ps((X), _MM_FROUND_FLOOR)
56
+ #define _mm_floor_pd(X) _mm_round_pd((X), _MM_FROUND_FLOOR)
57
+ #define _mm_floor_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_FLOOR)
58
+ #define _mm_floor_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_FLOOR)
59
+
60
+ #define _mm_round_ps(X, M) __extension__ ({ \
61
+ __m128 __X = (X); \
62
+ (__m128) __builtin_ia32_roundps((__v4sf)__X, (M)); })
63
+
64
+ #define _mm_round_ss(X, Y, M) __extension__ ({ \
65
+ __m128 __X = (X); \
66
+ __m128 __Y = (Y); \
67
+ (__m128) __builtin_ia32_roundss((__v4sf)__X, (__v4sf)__Y, (M)); })
68
+
69
+ #define _mm_round_pd(X, M) __extension__ ({ \
70
+ __m128d __X = (X); \
71
+ (__m128d) __builtin_ia32_roundpd((__v2df)__X, (M)); })
72
+
73
+ #define _mm_round_sd(X, Y, M) __extension__ ({ \
74
+ __m128d __X = (X); \
75
+ __m128d __Y = (Y); \
76
+ (__m128d) __builtin_ia32_roundsd((__v2df)__X, (__v2df)__Y, (M)); })
77
+
78
+ /* SSE4 Packed Blending Intrinsics. */
79
+ #define _mm_blend_pd(V1, V2, M) __extension__ ({ \
80
+ __m128d __V1 = (V1); \
81
+ __m128d __V2 = (V2); \
82
+ (__m128d) __builtin_ia32_blendpd ((__v2df)__V1, (__v2df)__V2, (M)); })
83
+
84
+ #define _mm_blend_ps(V1, V2, M) __extension__ ({ \
85
+ __m128 __V1 = (V1); \
86
+ __m128 __V2 = (V2); \
87
+ (__m128) __builtin_ia32_blendps ((__v4sf)__V1, (__v4sf)__V2, (M)); })
88
+
89
+ static __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
90
+ _mm_blendv_pd (__m128d __V1, __m128d __V2, __m128d __M)
91
+ {
92
+ return (__m128d) __builtin_ia32_blendvpd ((__v2df)__V1, (__v2df)__V2,
93
+ (__v2df)__M);
94
+ }
95
+
96
+ static __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
97
+ _mm_blendv_ps (__m128 __V1, __m128 __V2, __m128 __M)
98
+ {
99
+ return (__m128) __builtin_ia32_blendvps ((__v4sf)__V1, (__v4sf)__V2,
100
+ (__v4sf)__M);
101
+ }
102
+
103
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
104
+ _mm_blendv_epi8 (__m128i __V1, __m128i __V2, __m128i __M)
105
+ {
106
+ return (__m128i) __builtin_ia32_pblendvb128 ((__v16qi)__V1, (__v16qi)__V2,
107
+ (__v16qi)__M);
108
+ }
109
+
110
+ #define _mm_blend_epi16(V1, V2, M) __extension__ ({ \
111
+ __m128i __V1 = (V1); \
112
+ __m128i __V2 = (V2); \
113
+ (__m128i) __builtin_ia32_pblendw128 ((__v8hi)__V1, (__v8hi)__V2, (M)); })
114
+
115
+ /* SSE4 Dword Multiply Instructions. */
116
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
117
+ _mm_mullo_epi32 (__m128i __V1, __m128i __V2)
118
+ {
119
+ return (__m128i) ((__v4si)__V1 * (__v4si)__V2);
120
+ }
121
+
122
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
123
+ _mm_mul_epi32 (__m128i __V1, __m128i __V2)
124
+ {
125
+ return (__m128i) __builtin_ia32_pmuldq128 ((__v4si)__V1, (__v4si)__V2);
126
+ }
127
+
128
+ /* SSE4 Floating Point Dot Product Instructions. */
129
+ #define _mm_dp_ps(X, Y, M) __extension__ ({ \
130
+ __m128 __X = (X); \
131
+ __m128 __Y = (Y); \
132
+ (__m128) __builtin_ia32_dpps((__v4sf)__X, (__v4sf)__Y, (M)); })
133
+
134
+ #define _mm_dp_pd(X, Y, M) __extension__ ({\
135
+ __m128d __X = (X); \
136
+ __m128d __Y = (Y); \
137
+ (__m128d) __builtin_ia32_dppd((__v2df)__X, (__v2df)__Y, (M)); })
138
+
139
+ /* SSE4 Streaming Load Hint Instruction. */
140
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
141
+ _mm_stream_load_si128 (__m128i *__V)
142
+ {
143
+ return (__m128i) __builtin_ia32_movntdqa ((__v2di *) __V);
144
+ }
145
+
146
+ /* SSE4 Packed Integer Min/Max Instructions. */
147
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
148
+ _mm_min_epi8 (__m128i __V1, __m128i __V2)
149
+ {
150
+ return (__m128i) __builtin_ia32_pminsb128 ((__v16qi) __V1, (__v16qi) __V2);
151
+ }
152
+
153
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
154
+ _mm_max_epi8 (__m128i __V1, __m128i __V2)
155
+ {
156
+ return (__m128i) __builtin_ia32_pmaxsb128 ((__v16qi) __V1, (__v16qi) __V2);
157
+ }
158
+
159
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
160
+ _mm_min_epu16 (__m128i __V1, __m128i __V2)
161
+ {
162
+ return (__m128i) __builtin_ia32_pminuw128 ((__v8hi) __V1, (__v8hi) __V2);
163
+ }
164
+
165
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
166
+ _mm_max_epu16 (__m128i __V1, __m128i __V2)
167
+ {
168
+ return (__m128i) __builtin_ia32_pmaxuw128 ((__v8hi) __V1, (__v8hi) __V2);
169
+ }
170
+
171
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
172
+ _mm_min_epi32 (__m128i __V1, __m128i __V2)
173
+ {
174
+ return (__m128i) __builtin_ia32_pminsd128 ((__v4si) __V1, (__v4si) __V2);
175
+ }
176
+
177
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
178
+ _mm_max_epi32 (__m128i __V1, __m128i __V2)
179
+ {
180
+ return (__m128i) __builtin_ia32_pmaxsd128 ((__v4si) __V1, (__v4si) __V2);
181
+ }
182
+
183
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
184
+ _mm_min_epu32 (__m128i __V1, __m128i __V2)
185
+ {
186
+ return (__m128i) __builtin_ia32_pminud128((__v4si) __V1, (__v4si) __V2);
187
+ }
188
+
189
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
190
+ _mm_max_epu32 (__m128i __V1, __m128i __V2)
191
+ {
192
+ return (__m128i) __builtin_ia32_pmaxud128((__v4si) __V1, (__v4si) __V2);
193
+ }
194
+
195
+ /* SSE4 Insertion and Extraction from XMM Register Instructions. */
196
+ #define _mm_insert_ps(X, Y, N) __builtin_ia32_insertps128((X), (Y), (N))
197
+ #define _mm_extract_ps(X, N) (__extension__ \
198
+ ({ union { int __i; float __f; } __t; \
199
+ __v4sf __a = (__v4sf)(X); \
200
+ __t.__f = __a[(N) & 3]; \
201
+ __t.__i;}))
202
+
203
+ /* Miscellaneous insert and extract macros. */
204
+ /* Extract a single-precision float from X at index N into D. */
205
+ #define _MM_EXTRACT_FLOAT(D, X, N) (__extension__ ({ __v4sf __a = (__v4sf)(X); \
206
+ (D) = __a[N]; }))
207
+
208
+ /* Or together 2 sets of indexes (X and Y) with the zeroing bits (Z) to create
209
+ an index suitable for _mm_insert_ps. */
210
+ #define _MM_MK_INSERTPS_NDX(X, Y, Z) (((X) << 6) | ((Y) << 4) | (Z))
211
+
212
+ /* Extract a float from X at index N into the first index of the return. */
213
+ #define _MM_PICK_OUT_PS(X, N) _mm_insert_ps (_mm_setzero_ps(), (X), \
214
+ _MM_MK_INSERTPS_NDX((N), 0, 0x0e))
215
+
216
+ /* Insert int into packed integer array at index. */
217
+ #define _mm_insert_epi8(X, I, N) (__extension__ ({ __v16qi __a = (__v16qi)(X); \
218
+ __a[(N) & 15] = (I); \
219
+ __a;}))
220
+ #define _mm_insert_epi32(X, I, N) (__extension__ ({ __v4si __a = (__v4si)(X); \
221
+ __a[(N) & 3] = (I); \
222
+ __a;}))
223
+ #ifdef __x86_64__
224
+ #define _mm_insert_epi64(X, I, N) (__extension__ ({ __v2di __a = (__v2di)(X); \
225
+ __a[(N) & 1] = (I); \
226
+ __a;}))
227
+ #endif /* __x86_64__ */
228
+
229
+ /* Extract int from packed integer array at index. This returns the element
230
+ * as a zero extended value, so it is unsigned.
231
+ */
232
+ #define _mm_extract_epi8(X, N) (__extension__ ({ __v16qi __a = (__v16qi)(X); \
233
+ (int)(unsigned char) \
234
+ __a[(N) & 15];}))
235
+ #define _mm_extract_epi32(X, N) (__extension__ ({ __v4si __a = (__v4si)(X); \
236
+ __a[(N) & 3];}))
237
+ #ifdef __x86_64__
238
+ #define _mm_extract_epi64(X, N) (__extension__ ({ __v2di __a = (__v2di)(X); \
239
+ __a[(N) & 1];}))
240
+ #endif /* __x86_64 */
241
+
242
+ /* SSE4 128-bit Packed Integer Comparisons. */
243
+ static __inline__ int __attribute__((__always_inline__, __nodebug__))
244
+ _mm_testz_si128(__m128i __M, __m128i __V)
245
+ {
246
+ return __builtin_ia32_ptestz128((__v2di)__M, (__v2di)__V);
247
+ }
248
+
249
+ static __inline__ int __attribute__((__always_inline__, __nodebug__))
250
+ _mm_testc_si128(__m128i __M, __m128i __V)
251
+ {
252
+ return __builtin_ia32_ptestc128((__v2di)__M, (__v2di)__V);
253
+ }
254
+
255
+ static __inline__ int __attribute__((__always_inline__, __nodebug__))
256
+ _mm_testnzc_si128(__m128i __M, __m128i __V)
257
+ {
258
+ return __builtin_ia32_ptestnzc128((__v2di)__M, (__v2di)__V);
259
+ }
260
+
261
+ #define _mm_test_all_ones(V) _mm_testc_si128((V), _mm_cmpeq_epi32((V), (V)))
262
+ #define _mm_test_mix_ones_zeros(M, V) _mm_testnzc_si128((M), (V))
263
+ #define _mm_test_all_zeros(M, V) _mm_testz_si128 ((M), (V))
264
+
265
+ /* SSE4 64-bit Packed Integer Comparisons. */
266
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
267
+ _mm_cmpeq_epi64(__m128i __V1, __m128i __V2)
268
+ {
269
+ return (__m128i)((__v2di)__V1 == (__v2di)__V2);
270
+ }
271
+
272
+ /* SSE4 Packed Integer Sign-Extension. */
273
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
274
+ _mm_cvtepi8_epi16(__m128i __V)
275
+ {
276
+ return (__m128i) __builtin_ia32_pmovsxbw128((__v16qi) __V);
277
+ }
278
+
279
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
280
+ _mm_cvtepi8_epi32(__m128i __V)
281
+ {
282
+ return (__m128i) __builtin_ia32_pmovsxbd128((__v16qi) __V);
283
+ }
284
+
285
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
286
+ _mm_cvtepi8_epi64(__m128i __V)
287
+ {
288
+ return (__m128i) __builtin_ia32_pmovsxbq128((__v16qi) __V);
289
+ }
290
+
291
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
292
+ _mm_cvtepi16_epi32(__m128i __V)
293
+ {
294
+ return (__m128i) __builtin_ia32_pmovsxwd128((__v8hi) __V);
295
+ }
296
+
297
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
298
+ _mm_cvtepi16_epi64(__m128i __V)
299
+ {
300
+ return (__m128i) __builtin_ia32_pmovsxwq128((__v8hi)__V);
301
+ }
302
+
303
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
304
+ _mm_cvtepi32_epi64(__m128i __V)
305
+ {
306
+ return (__m128i) __builtin_ia32_pmovsxdq128((__v4si)__V);
307
+ }
308
+
309
+ /* SSE4 Packed Integer Zero-Extension. */
310
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
311
+ _mm_cvtepu8_epi16(__m128i __V)
312
+ {
313
+ return (__m128i) __builtin_ia32_pmovzxbw128((__v16qi) __V);
314
+ }
315
+
316
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
317
+ _mm_cvtepu8_epi32(__m128i __V)
318
+ {
319
+ return (__m128i) __builtin_ia32_pmovzxbd128((__v16qi)__V);
320
+ }
321
+
322
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
323
+ _mm_cvtepu8_epi64(__m128i __V)
324
+ {
325
+ return (__m128i) __builtin_ia32_pmovzxbq128((__v16qi)__V);
326
+ }
327
+
328
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
329
+ _mm_cvtepu16_epi32(__m128i __V)
330
+ {
331
+ return (__m128i) __builtin_ia32_pmovzxwd128((__v8hi)__V);
332
+ }
333
+
334
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
335
+ _mm_cvtepu16_epi64(__m128i __V)
336
+ {
337
+ return (__m128i) __builtin_ia32_pmovzxwq128((__v8hi)__V);
338
+ }
339
+
340
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
341
+ _mm_cvtepu32_epi64(__m128i __V)
342
+ {
343
+ return (__m128i) __builtin_ia32_pmovzxdq128((__v4si)__V);
344
+ }
345
+
346
+ /* SSE4 Pack with Unsigned Saturation. */
347
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
348
+ _mm_packus_epi32(__m128i __V1, __m128i __V2)
349
+ {
350
+ return (__m128i) __builtin_ia32_packusdw128((__v4si)__V1, (__v4si)__V2);
351
+ }
352
+
353
+ /* SSE4 Multiple Packed Sums of Absolute Difference. */
354
+ #define _mm_mpsadbw_epu8(X, Y, M) __extension__ ({ \
355
+ __m128i __X = (X); \
356
+ __m128i __Y = (Y); \
357
+ (__m128i) __builtin_ia32_mpsadbw128((__v16qi)__X, (__v16qi)__Y, (M)); })
358
+
359
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
360
+ _mm_minpos_epu16(__m128i __V)
361
+ {
362
+ return (__m128i) __builtin_ia32_phminposuw128((__v8hi)__V);
363
+ }
364
+
365
+ /* These definitions are normally in nmmintrin.h, but gcc puts them in here
366
+ so we'll do the same. */
367
+ #ifdef __SSE4_2__
368
+
369
+ /* These specify the type of data that we're comparing. */
370
+ #define _SIDD_UBYTE_OPS 0x00
371
+ #define _SIDD_UWORD_OPS 0x01
372
+ #define _SIDD_SBYTE_OPS 0x02
373
+ #define _SIDD_SWORD_OPS 0x03
374
+
375
+ /* These specify the type of comparison operation. */
376
+ #define _SIDD_CMP_EQUAL_ANY 0x00
377
+ #define _SIDD_CMP_RANGES 0x04
378
+ #define _SIDD_CMP_EQUAL_EACH 0x08
379
+ #define _SIDD_CMP_EQUAL_ORDERED 0x0c
380
+
381
+ /* These macros specify the polarity of the operation. */
382
+ #define _SIDD_POSITIVE_POLARITY 0x00
383
+ #define _SIDD_NEGATIVE_POLARITY 0x10
384
+ #define _SIDD_MASKED_POSITIVE_POLARITY 0x20
385
+ #define _SIDD_MASKED_NEGATIVE_POLARITY 0x30
386
+
387
+ /* These macros are used in _mm_cmpXstri() to specify the return. */
388
+ #define _SIDD_LEAST_SIGNIFICANT 0x00
389
+ #define _SIDD_MOST_SIGNIFICANT 0x40
390
+
391
+ /* These macros are used in _mm_cmpXstri() to specify the return. */
392
+ #define _SIDD_BIT_MASK 0x00
393
+ #define _SIDD_UNIT_MASK 0x40
394
+
395
+ /* SSE4.2 Packed Comparison Intrinsics. */
396
+ #define _mm_cmpistrm(A, B, M) __builtin_ia32_pcmpistrm128((A), (B), (M))
397
+ #define _mm_cmpistri(A, B, M) __builtin_ia32_pcmpistri128((A), (B), (M))
398
+
399
+ #define _mm_cmpestrm(A, LA, B, LB, M) \
400
+ __builtin_ia32_pcmpestrm128((A), (LA), (B), (LB), (M))
401
+ #define _mm_cmpestri(A, LA, B, LB, M) \
402
+ __builtin_ia32_pcmpestri128((A), (LA), (B), (LB), (M))
403
+
404
+ /* SSE4.2 Packed Comparison Intrinsics and EFlag Reading. */
405
+ #define _mm_cmpistra(A, B, M) \
406
+ __builtin_ia32_pcmpistria128((A), (B), (M))
407
+ #define _mm_cmpistrc(A, B, M) \
408
+ __builtin_ia32_pcmpistric128((A), (B), (M))
409
+ #define _mm_cmpistro(A, B, M) \
410
+ __builtin_ia32_pcmpistrio128((A), (B), (M))
411
+ #define _mm_cmpistrs(A, B, M) \
412
+ __builtin_ia32_pcmpistris128((A), (B), (M))
413
+ #define _mm_cmpistrz(A, B, M) \
414
+ __builtin_ia32_pcmpistriz128((A), (B), (M))
415
+
416
+ #define _mm_cmpestra(A, LA, B, LB, M) \
417
+ __builtin_ia32_pcmpestria128((A), (LA), (B), (LB), (M))
418
+ #define _mm_cmpestrc(A, LA, B, LB, M) \
419
+ __builtin_ia32_pcmpestric128((A), (LA), (B), (LB), (M))
420
+ #define _mm_cmpestro(A, LA, B, LB, M) \
421
+ __builtin_ia32_pcmpestrio128((A), (LA), (B), (LB), (M))
422
+ #define _mm_cmpestrs(A, LA, B, LB, M) \
423
+ __builtin_ia32_pcmpestris128((A), (LA), (B), (LB), (M))
424
+ #define _mm_cmpestrz(A, LA, B, LB, M) \
425
+ __builtin_ia32_pcmpestriz128((A), (LA), (B), (LB), (M))
426
+
427
+ /* SSE4.2 Compare Packed Data -- Greater Than. */
428
+ static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
429
+ _mm_cmpgt_epi64(__m128i __V1, __m128i __V2)
430
+ {
431
+ return (__m128i)((__v2di)__V1 > (__v2di)__V2);
432
+ }
433
+
434
+ /* SSE4.2 Accumulate CRC32. */
435
+ static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
436
+ _mm_crc32_u8(unsigned int __C, unsigned char __D)
437
+ {
438
+ return __builtin_ia32_crc32qi(__C, __D);
439
+ }
440
+
441
+ static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
442
+ _mm_crc32_u16(unsigned int __C, unsigned short __D)
443
+ {
444
+ return __builtin_ia32_crc32hi(__C, __D);
445
+ }
446
+
447
+ static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
448
+ _mm_crc32_u32(unsigned int __C, unsigned int __D)
449
+ {
450
+ return __builtin_ia32_crc32si(__C, __D);
451
+ }
452
+
453
+ #ifdef __x86_64__
454
+ static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__))
455
+ _mm_crc32_u64(unsigned long long __C, unsigned long long __D)
456
+ {
457
+ return __builtin_ia32_crc32di(__C, __D);
458
+ }
459
+ #endif /* __x86_64__ */
460
+
461
+ #ifdef __POPCNT__
462
+ #include <popcntintrin.h>
463
+ #endif
464
+
465
+ #endif /* __SSE4_2__ */
466
+ #endif /* __SSE4_1__ */
467
+
468
+ #endif /* _SMMINTRIN_H */