xcodebuild-helper 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +20 -0
  3. data/.gitignore +1 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +7 -0
  6. data/Gemfile +6 -0
  7. data/Gemfile.lock +110 -0
  8. data/Guardfile +18 -0
  9. data/README.md +7 -0
  10. data/Rakefile +7 -0
  11. data/TODO.md +3 -0
  12. data/bin/oclint +5 -0
  13. data/bin/oclint-0.8 +5 -0
  14. data/bin/oclint-json-compilation-database +5 -0
  15. data/bin/oclint-xcodebuild +5 -0
  16. data/externals/oclint/LICENSE +69 -0
  17. data/externals/oclint/bin/oclint +0 -0
  18. data/externals/oclint/bin/oclint-0.10.2 +0 -0
  19. data/externals/oclint/bin/oclint-json-compilation-database +88 -0
  20. data/externals/oclint/bin/oclint-xcodebuild +218 -0
  21. data/externals/oclint/lib/clang/3.7.0/asan_blacklist.txt +13 -0
  22. data/externals/oclint/lib/clang/3.7.0/include/Intrin.h +958 -0
  23. data/externals/oclint/lib/clang/3.7.0/include/__stddef_max_align_t.h +43 -0
  24. data/externals/oclint/lib/clang/3.7.0/include/__wmmintrin_aes.h +72 -0
  25. data/externals/oclint/lib/clang/3.7.0/include/__wmmintrin_pclmul.h +34 -0
  26. data/externals/oclint/lib/clang/3.7.0/include/adxintrin.h +88 -0
  27. data/externals/oclint/lib/clang/3.7.0/include/altivec.h +13528 -0
  28. data/externals/oclint/lib/clang/3.7.0/include/ammintrin.h +215 -0
  29. data/externals/oclint/lib/clang/3.7.0/include/arm_acle.h +304 -0
  30. data/externals/oclint/lib/clang/3.7.0/include/arm_neon.h +68419 -0
  31. data/externals/oclint/lib/clang/3.7.0/include/avx2intrin.h +1256 -0
  32. data/externals/oclint/lib/clang/3.7.0/include/avx512bwintrin.h +1250 -0
  33. data/externals/oclint/lib/clang/3.7.0/include/avx512cdintrin.h +131 -0
  34. data/externals/oclint/lib/clang/3.7.0/include/avx512dqintrin.h +242 -0
  35. data/externals/oclint/lib/clang/3.7.0/include/avx512erintrin.h +285 -0
  36. data/externals/oclint/lib/clang/3.7.0/include/avx512fintrin.h +2457 -0
  37. data/externals/oclint/lib/clang/3.7.0/include/avx512vlbwintrin.h +1907 -0
  38. data/externals/oclint/lib/clang/3.7.0/include/avx512vldqintrin.h +353 -0
  39. data/externals/oclint/lib/clang/3.7.0/include/avx512vlintrin.h +1982 -0
  40. data/externals/oclint/lib/clang/3.7.0/include/avxintrin.h +1308 -0
  41. data/externals/oclint/lib/clang/3.7.0/include/bmi2intrin.h +99 -0
  42. data/externals/oclint/lib/clang/3.7.0/include/bmiintrin.h +153 -0
  43. data/externals/oclint/lib/clang/3.7.0/include/cpuid.h +209 -0
  44. data/externals/oclint/lib/clang/3.7.0/include/cuda_builtin_vars.h +110 -0
  45. data/externals/oclint/lib/clang/3.7.0/include/emmintrin.h +1480 -0
  46. data/externals/oclint/lib/clang/3.7.0/include/f16cintrin.h +63 -0
  47. data/externals/oclint/lib/clang/3.7.0/include/float.h +124 -0
  48. data/externals/oclint/lib/clang/3.7.0/include/fma4intrin.h +236 -0
  49. data/externals/oclint/lib/clang/3.7.0/include/fmaintrin.h +234 -0
  50. data/externals/oclint/lib/clang/3.7.0/include/fxsrintrin.h +55 -0
  51. data/externals/oclint/lib/clang/3.7.0/include/htmintrin.h +226 -0
  52. data/externals/oclint/lib/clang/3.7.0/include/htmxlintrin.h +363 -0
  53. data/externals/oclint/lib/clang/3.7.0/include/ia32intrin.h +101 -0
  54. data/externals/oclint/lib/clang/3.7.0/include/immintrin.h +203 -0
  55. data/externals/oclint/lib/clang/3.7.0/include/inttypes.h +102 -0
  56. data/externals/oclint/lib/clang/3.7.0/include/iso646.h +43 -0
  57. data/externals/oclint/lib/clang/3.7.0/include/limits.h +118 -0
  58. data/externals/oclint/lib/clang/3.7.0/include/lzcntintrin.h +72 -0
  59. data/externals/oclint/lib/clang/3.7.0/include/mm3dnow.h +167 -0
  60. data/externals/oclint/lib/clang/3.7.0/include/mm_malloc.h +75 -0
  61. data/externals/oclint/lib/clang/3.7.0/include/mmintrin.h +507 -0
  62. data/externals/oclint/lib/clang/3.7.0/include/module.modulemap +196 -0
  63. data/externals/oclint/lib/clang/3.7.0/include/nmmintrin.h +35 -0
  64. data/externals/oclint/lib/clang/3.7.0/include/pmmintrin.h +122 -0
  65. data/externals/oclint/lib/clang/3.7.0/include/popcntintrin.h +50 -0
  66. data/externals/oclint/lib/clang/3.7.0/include/prfchwintrin.h +39 -0
  67. data/externals/oclint/lib/clang/3.7.0/include/rdseedintrin.h +59 -0
  68. data/externals/oclint/lib/clang/3.7.0/include/rtmintrin.h +59 -0
  69. data/externals/oclint/lib/clang/3.7.0/include/s390intrin.h +39 -0
  70. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/allocator_interface.h +66 -0
  71. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/asan_interface.h +155 -0
  72. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/common_interface_defs.h +118 -0
  73. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/coverage_interface.h +63 -0
  74. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/dfsan_interface.h +114 -0
  75. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/linux_syscall_hooks.h +3070 -0
  76. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/lsan_interface.h +84 -0
  77. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/msan_interface.h +107 -0
  78. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/tsan_interface_atomic.h +222 -0
  79. data/externals/oclint/lib/clang/3.7.0/include/shaintrin.h +79 -0
  80. data/externals/oclint/lib/clang/3.7.0/include/smmintrin.h +487 -0
  81. data/externals/oclint/lib/clang/3.7.0/include/stdalign.h +35 -0
  82. data/externals/oclint/lib/clang/3.7.0/include/stdarg.h +52 -0
  83. data/externals/oclint/lib/clang/3.7.0/include/stdatomic.h +190 -0
  84. data/externals/oclint/lib/clang/3.7.0/include/stdbool.h +44 -0
  85. data/externals/oclint/lib/clang/3.7.0/include/stddef.h +137 -0
  86. data/externals/oclint/lib/clang/3.7.0/include/stdint.h +707 -0
  87. data/externals/oclint/lib/clang/3.7.0/include/stdnoreturn.h +30 -0
  88. data/externals/oclint/lib/clang/3.7.0/include/tbmintrin.h +154 -0
  89. data/externals/oclint/lib/clang/3.7.0/include/tgmath.h +1374 -0
  90. data/externals/oclint/lib/clang/3.7.0/include/tmmintrin.h +230 -0
  91. data/externals/oclint/lib/clang/3.7.0/include/unwind.h +282 -0
  92. data/externals/oclint/lib/clang/3.7.0/include/vadefs.h +65 -0
  93. data/externals/oclint/lib/clang/3.7.0/include/varargs.h +26 -0
  94. data/externals/oclint/lib/clang/3.7.0/include/vecintrin.h +8946 -0
  95. data/externals/oclint/lib/clang/3.7.0/include/wmmintrin.h +42 -0
  96. data/externals/oclint/lib/clang/3.7.0/include/x86intrin.h +81 -0
  97. data/externals/oclint/lib/clang/3.7.0/include/xmmintrin.h +1008 -0
  98. data/externals/oclint/lib/clang/3.7.0/include/xopintrin.h +809 -0
  99. data/externals/oclint/lib/clang/3.7.0/include/xtestintrin.h +41 -0
  100. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.asan_iossim_dynamic.dylib +0 -0
  101. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib +0 -0
  102. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.builtins-i386.a +0 -0
  103. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.builtins-x86_64.a +0 -0
  104. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.profile_osx.a +0 -0
  105. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.safestack_osx.a +0 -0
  106. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.ubsan_iossim_dynamic.dylib +0 -0
  107. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.ubsan_osx_dynamic.dylib +0 -0
  108. data/externals/oclint/lib/oclint/reporters/libHTMLReporter.dylib +0 -0
  109. data/externals/oclint/lib/oclint/reporters/libJSONReporter.dylib +0 -0
  110. data/externals/oclint/lib/oclint/reporters/libPMDReporter.dylib +0 -0
  111. data/externals/oclint/lib/oclint/reporters/libTextReporter.dylib +0 -0
  112. data/externals/oclint/lib/oclint/reporters/libXMLReporter.dylib +0 -0
  113. data/externals/oclint/lib/oclint/reporters/libXcodeReporter.dylib +0 -0
  114. data/externals/oclint/lib/oclint/rules/libAvoidBranchingStatementAsLastInLoopRule.dylib +0 -0
  115. data/externals/oclint/lib/oclint/rules/libAvoidDefaultArgumentsOnVirtualMethodsRule.dylib +0 -0
  116. data/externals/oclint/lib/oclint/rules/libAvoidPrivateStaticMembersRule.dylib +0 -0
  117. data/externals/oclint/lib/oclint/rules/libBaseClassDestructorShouldBeVirtualOrProtectedRule.dylib +0 -0
  118. data/externals/oclint/lib/oclint/rules/libBitwiseOperatorInConditionalRule.dylib +0 -0
  119. data/externals/oclint/lib/oclint/rules/libBrokenNullCheckRule.dylib +0 -0
  120. data/externals/oclint/lib/oclint/rules/libBrokenOddnessCheckRule.dylib +0 -0
  121. data/externals/oclint/lib/oclint/rules/libCollapsibleIfStatementsRule.dylib +0 -0
  122. data/externals/oclint/lib/oclint/rules/libConstantConditionalOperatorRule.dylib +0 -0
  123. data/externals/oclint/lib/oclint/rules/libConstantIfExpressionRule.dylib +0 -0
  124. data/externals/oclint/lib/oclint/rules/libCoveredSwitchStatementsDontNeedDefaultRule.dylib +0 -0
  125. data/externals/oclint/lib/oclint/rules/libCyclomaticComplexityRule.dylib +0 -0
  126. data/externals/oclint/lib/oclint/rules/libDeadCodeRule.dylib +0 -0
  127. data/externals/oclint/lib/oclint/rules/libDefaultLabelNotLastInSwitchStatementRule.dylib +0 -0
  128. data/externals/oclint/lib/oclint/rules/libDestructorOfVirtualClassRule.dylib +0 -0
  129. data/externals/oclint/lib/oclint/rules/libDoubleNegativeRule.dylib +0 -0
  130. data/externals/oclint/lib/oclint/rules/libEmptyCatchStatementRule.dylib +0 -0
  131. data/externals/oclint/lib/oclint/rules/libEmptyDoWhileStatementRule.dylib +0 -0
  132. data/externals/oclint/lib/oclint/rules/libEmptyElseBlockRule.dylib +0 -0
  133. data/externals/oclint/lib/oclint/rules/libEmptyFinallyStatementRule.dylib +0 -0
  134. data/externals/oclint/lib/oclint/rules/libEmptyForStatementRule.dylib +0 -0
  135. data/externals/oclint/lib/oclint/rules/libEmptyIfStatementRule.dylib +0 -0
  136. data/externals/oclint/lib/oclint/rules/libEmptySwitchStatementRule.dylib +0 -0
  137. data/externals/oclint/lib/oclint/rules/libEmptyTryStatementRule.dylib +0 -0
  138. data/externals/oclint/lib/oclint/rules/libEmptyWhileStatementRule.dylib +0 -0
  139. data/externals/oclint/lib/oclint/rules/libForLoopShouldBeWhileLoopRule.dylib +0 -0
  140. data/externals/oclint/lib/oclint/rules/libGotoStatementRule.dylib +0 -0
  141. data/externals/oclint/lib/oclint/rules/libInvertedLogicRule.dylib +0 -0
  142. data/externals/oclint/lib/oclint/rules/libJumbledIncrementerRule.dylib +0 -0
  143. data/externals/oclint/lib/oclint/rules/libLongClassRule.dylib +0 -0
  144. data/externals/oclint/lib/oclint/rules/libLongLineRule.dylib +0 -0
  145. data/externals/oclint/lib/oclint/rules/libLongMethodRule.dylib +0 -0
  146. data/externals/oclint/lib/oclint/rules/libLongVariableNameRule.dylib +0 -0
  147. data/externals/oclint/lib/oclint/rules/libMisplacedNullCheckRule.dylib +0 -0
  148. data/externals/oclint/lib/oclint/rules/libMissingBreakInSwitchStatementRule.dylib +0 -0
  149. data/externals/oclint/lib/oclint/rules/libMultipleUnaryOperatorRule.dylib +0 -0
  150. data/externals/oclint/lib/oclint/rules/libNPathComplexityRule.dylib +0 -0
  151. data/externals/oclint/lib/oclint/rules/libNcssMethodCountRule.dylib +0 -0
  152. data/externals/oclint/lib/oclint/rules/libNestedBlockDepthRule.dylib +0 -0
  153. data/externals/oclint/lib/oclint/rules/libNonCaseLabelInSwitchStatementRule.dylib +0 -0
  154. data/externals/oclint/lib/oclint/rules/libObjCAssignIvarOutsideAccessorsRule.dylib +0 -0
  155. data/externals/oclint/lib/oclint/rules/libObjCBoxedExpressionsRule.dylib +0 -0
  156. data/externals/oclint/lib/oclint/rules/libObjCContainerLiteralsRule.dylib +0 -0
  157. data/externals/oclint/lib/oclint/rules/libObjCNSNumberLiteralsRule.dylib +0 -0
  158. data/externals/oclint/lib/oclint/rules/libObjCObjectSubscriptingRule.dylib +0 -0
  159. data/externals/oclint/lib/oclint/rules/libObjCVerifyIsEqualHashRule.dylib +0 -0
  160. data/externals/oclint/lib/oclint/rules/libObjCVerifyMustCallSuperRule.dylib +0 -0
  161. data/externals/oclint/lib/oclint/rules/libObjCVerifyProhibitedCallRule.dylib +0 -0
  162. data/externals/oclint/lib/oclint/rules/libObjCVerifyProtectedMethodRule.dylib +0 -0
  163. data/externals/oclint/lib/oclint/rules/libObjCVerifySubclassMustImplementRule.dylib +0 -0
  164. data/externals/oclint/lib/oclint/rules/libParameterReassignmentRule.dylib +0 -0
  165. data/externals/oclint/lib/oclint/rules/libPreferEarlyExitRule.dylib +0 -0
  166. data/externals/oclint/lib/oclint/rules/libRedundantConditionalOperatorRule.dylib +0 -0
  167. data/externals/oclint/lib/oclint/rules/libRedundantIfStatementRule.dylib +0 -0
  168. data/externals/oclint/lib/oclint/rules/libRedundantLocalVariableRule.dylib +0 -0
  169. data/externals/oclint/lib/oclint/rules/libRedundantNilCheckRule.dylib +0 -0
  170. data/externals/oclint/lib/oclint/rules/libReturnFromFinallyBlockRule.dylib +0 -0
  171. data/externals/oclint/lib/oclint/rules/libShortVariableNameRule.dylib +0 -0
  172. data/externals/oclint/lib/oclint/rules/libSwitchStatementsShouldHaveDefaultRule.dylib +0 -0
  173. data/externals/oclint/lib/oclint/rules/libThrowExceptionFromFinallyBlockRule.dylib +0 -0
  174. data/externals/oclint/lib/oclint/rules/libTooFewBranchesInSwitchStatementRule.dylib +0 -0
  175. data/externals/oclint/lib/oclint/rules/libTooManyFieldsRule.dylib +0 -0
  176. data/externals/oclint/lib/oclint/rules/libTooManyMethodsRule.dylib +0 -0
  177. data/externals/oclint/lib/oclint/rules/libTooManyParametersRule.dylib +0 -0
  178. data/externals/oclint/lib/oclint/rules/libUnnecessaryElseStatementRule.dylib +0 -0
  179. data/externals/oclint/lib/oclint/rules/libUnnecessaryNullCheckForCXXDeallocRule.dylib +0 -0
  180. data/externals/oclint/lib/oclint/rules/libUnusedLocalVariableRule.dylib +0 -0
  181. data/externals/oclint/lib/oclint/rules/libUnusedMethodParameterRule.dylib +0 -0
  182. data/externals/oclint/lib/oclint/rules/libUselessParenthesesRule.dylib +0 -0
  183. data/lib/coverage_plan.rb +19 -0
  184. data/lib/device.rb +27 -0
  185. data/lib/execute.rb +7 -0
  186. data/lib/lint_plan.rb +41 -0
  187. data/lib/rules.rb +23 -0
  188. data/lib/test_plan.rb +11 -0
  189. data/lib/version.rb +3 -0
  190. data/lib/xcode.rb +128 -0
  191. data/lib/xcodebuild-helper.rb +110 -0
  192. data/spec/coverage_plan_spec.rb +18 -0
  193. data/spec/device_spec.rb +24 -0
  194. data/spec/lint_plan_spec.rb +35 -0
  195. data/spec/rule_spec.rb +37 -0
  196. data/spec/spec_helper.rb +17 -0
  197. data/spec/test_plan_spec.rb +11 -0
  198. data/spec/xcode_dsl_actions_spec.rb +136 -0
  199. data/spec/xcode_dsl_spec.rb +176 -0
  200. data/spec/xcode_spec.rb +79 -0
  201. data/xcodebuild-helper.gemspec +26 -0
  202. metadata +327 -0
@@ -0,0 +1,215 @@
1
+ /*===---- ammintrin.h - SSE4a 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 __AMMINTRIN_H
25
+ #define __AMMINTRIN_H
26
+
27
+ #ifndef __SSE4A__
28
+ #error "SSE4A instruction set not enabled"
29
+ #else
30
+
31
+ #include <pmmintrin.h>
32
+
33
+ /* Define the default attributes for the functions in this file. */
34
+ #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
35
+
36
+ /// \brief Extracts the specified bits from the lower 64 bits of the 128-bit
37
+ /// integer vector operand at the index idx and of the length len.
38
+ ///
39
+ /// \headerfile <x86intrin.h>
40
+ ///
41
+ /// \code
42
+ /// __m128i _mm_extracti_si64(__m128i x, const int len, const int idx);
43
+ /// \endcode
44
+ ///
45
+ /// \code
46
+ /// This intrinsic corresponds to the \c EXTRQ instruction.
47
+ /// \endcode
48
+ ///
49
+ /// \param x
50
+ /// The value from which bits are extracted.
51
+ /// \param len
52
+ /// Bits [5:0] specify the length; the other bits are ignored. If bits [5:0]
53
+ /// are zero, the length is interpreted as 64.
54
+ /// \param idx
55
+ /// Bits [5:0] specify the index of the least significant bit; the other
56
+ /// bits are ignored. If the sum of the index and length is greater than
57
+ /// 64, the result is undefined. If the length and index are both zero,
58
+ /// bits [63:0] of parameter x are extracted. If the length is zero
59
+ /// but the index is non-zero, the result is undefined.
60
+ /// \returns A 128-bit integer vector whose lower 64 bits contain the bits
61
+ /// extracted from the source operand.
62
+ #define _mm_extracti_si64(x, len, idx) \
63
+ ((__m128i)__builtin_ia32_extrqi((__v2di)(__m128i)(x), \
64
+ (char)(len), (char)(idx)))
65
+
66
+ /// \brief Extracts the specified bits from the lower 64 bits of the 128-bit
67
+ /// integer vector operand at the index and of the length specified by __y.
68
+ ///
69
+ /// \headerfile <x86intrin.h>
70
+ ///
71
+ /// \code
72
+ /// This intrinsic corresponds to the \c EXTRQ instruction.
73
+ /// \endcode
74
+ ///
75
+ /// \param __x
76
+ /// The value from which bits are extracted.
77
+ /// \param __y
78
+ /// Specifies the index of the least significant bit at [13:8]
79
+ /// and the length at [5:0]; all other bits are ignored.
80
+ /// If bits [5:0] are zero, the length is interpreted as 64.
81
+ /// If the sum of the index and length is greater than 64, the result is
82
+ /// undefined. If the length and index are both zero, bits [63:0] of
83
+ /// parameter __x are extracted. If the length is zero but the index is
84
+ /// non-zero, the result is undefined.
85
+ /// \returns A 128-bit vector whose lower 64 bits contain the bits extracted
86
+ /// from the source operand.
87
+ static __inline__ __m128i __DEFAULT_FN_ATTRS
88
+ _mm_extract_si64(__m128i __x, __m128i __y)
89
+ {
90
+ return (__m128i)__builtin_ia32_extrq((__v2di)__x, (__v16qi)__y);
91
+ }
92
+
93
+ /// \brief Inserts bits of a specified length from the source integer vector
94
+ /// y into the lower 64 bits of the destination integer vector x at the
95
+ /// index idx and of the length len.
96
+ ///
97
+ /// \headerfile <x86intrin.h>
98
+ ///
99
+ /// \code
100
+ /// __m128i _mm_inserti_si64(__m128i x, __m128i y, const int len,
101
+ /// const int idx);
102
+ /// \endcode
103
+ ///
104
+ /// \code
105
+ /// This intrinsic corresponds to the \c INSERTQ instruction.
106
+ /// \endcode
107
+ ///
108
+ /// \param x
109
+ /// The destination operand where bits will be inserted. The inserted bits
110
+ /// are defined by the length len and by the index idx specifying the least
111
+ /// significant bit.
112
+ /// \param y
113
+ /// The source operand containing the bits to be extracted. The extracted
114
+ /// bits are the least significant bits of operand y of length len.
115
+ /// \param len
116
+ /// Bits [5:0] specify the length; the other bits are ignored. If bits [5:0]
117
+ /// are zero, the length is interpreted as 64.
118
+ /// \param idx
119
+ /// Bits [5:0] specify the index of the least significant bit; the other
120
+ /// bits are ignored. If the sum of the index and length is greater than
121
+ /// 64, the result is undefined. If the length and index are both zero,
122
+ /// bits [63:0] of parameter y are inserted into parameter x. If the
123
+ /// length is zero but the index is non-zero, the result is undefined.
124
+ /// \returns A 128-bit integer vector containing the original lower 64-bits
125
+ /// of destination operand x with the specified bitfields replaced by the
126
+ /// lower bits of source operand y. The upper 64 bits of the return value
127
+ /// are undefined.
128
+
129
+ #define _mm_inserti_si64(x, y, len, idx) \
130
+ ((__m128i)__builtin_ia32_insertqi((__v2di)(__m128i)(x), \
131
+ (__v2di)(__m128i)(y), \
132
+ (char)(len), (char)(idx)))
133
+
134
+ /// \brief Inserts bits of a specified length from the source integer vector
135
+ /// __y into the lower 64 bits of the destination integer vector __x at
136
+ /// the index and of the length specified by __y.
137
+ ///
138
+ /// \headerfile <x86intrin.h>
139
+ ///
140
+ /// \code
141
+ /// This intrinsic corresponds to the \c INSERTQ instruction.
142
+ /// \endcode
143
+ ///
144
+ /// \param __x
145
+ /// The destination operand where bits will be inserted. The inserted bits
146
+ /// are defined by the length and by the index of the least significant bit
147
+ /// specified by operand __y.
148
+ /// \param __y
149
+ /// The source operand containing the bits to be extracted. The extracted
150
+ /// bits are the least significant bits of operand __y with length specified
151
+ /// by bits [69:64]. These are inserted into the destination at the index
152
+ /// specified by bits [77:72]; all other bits are ignored.
153
+ /// If bits [69:64] are zero, the length is interpreted as 64.
154
+ /// If the sum of the index and length is greater than 64, the result is
155
+ /// undefined. If the length and index are both zero, bits [63:0] of
156
+ /// parameter __y are inserted into parameter __x. If the length
157
+ /// is zero but the index is non-zero, the result is undefined.
158
+ /// \returns A 128-bit integer vector containing the original lower 64-bits
159
+ /// of destination operand __x with the specified bitfields replaced by the
160
+ /// lower bits of source operand __y. The upper 64 bits of the return value
161
+ /// are undefined.
162
+
163
+ static __inline__ __m128i __DEFAULT_FN_ATTRS
164
+ _mm_insert_si64(__m128i __x, __m128i __y)
165
+ {
166
+ return (__m128i)__builtin_ia32_insertq((__v2di)__x, (__v2di)__y);
167
+ }
168
+
169
+ /// \brief Stores a 64-bit double-precision value in a 64-bit memory location.
170
+ /// To minimize caching, the data is flagged as non-temporal (unlikely to be
171
+ /// used again soon).
172
+ ///
173
+ /// \headerfile <x86intrin.h>
174
+ ///
175
+ /// \code
176
+ /// This intrinsic corresponds to the \c MOVNTSD instruction.
177
+ /// \endcode
178
+ ///
179
+ /// \param __p
180
+ /// The 64-bit memory location used to store the register value.
181
+ /// \param __a
182
+ /// The 64-bit double-precision floating-point register value to
183
+ /// be stored.
184
+ static __inline__ void __DEFAULT_FN_ATTRS
185
+ _mm_stream_sd(double *__p, __m128d __a)
186
+ {
187
+ __builtin_ia32_movntsd(__p, (__v2df)__a);
188
+ }
189
+
190
+ /// \brief Stores a 32-bit single-precision floating-point value in a 32-bit
191
+ /// memory location. To minimize caching, the data is flagged as
192
+ /// non-temporal (unlikely to be used again soon).
193
+ ///
194
+ /// \headerfile <x86intrin.h>
195
+ ///
196
+ /// \code
197
+ /// This intrinsic corresponds to the \c MOVNTSS instruction.
198
+ /// \endcode
199
+ ///
200
+ /// \param __p
201
+ /// The 32-bit memory location used to store the register value.
202
+ /// \param __a
203
+ /// The 32-bit single-precision floating-point register value to
204
+ /// be stored.
205
+ static __inline__ void __DEFAULT_FN_ATTRS
206
+ _mm_stream_ss(float *__p, __m128 __a)
207
+ {
208
+ __builtin_ia32_movntss(__p, (__v4sf)__a);
209
+ }
210
+
211
+ #undef __DEFAULT_FN_ATTRS
212
+
213
+ #endif /* __SSE4A__ */
214
+
215
+ #endif /* __AMMINTRIN_H */
@@ -0,0 +1,304 @@
1
+ /*===---- arm_acle.h - ARM Non-Neon 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 __ARM_ACLE_H
25
+ #define __ARM_ACLE_H
26
+
27
+ #ifndef __ARM_ACLE
28
+ #error "ACLE intrinsics support not enabled."
29
+ #endif
30
+
31
+ #include <stdint.h>
32
+
33
+ #if defined(__cplusplus)
34
+ extern "C" {
35
+ #endif
36
+
37
+ /* 8 SYNCHRONIZATION, BARRIER AND HINT INTRINSICS */
38
+ /* 8.3 Memory barriers */
39
+ #if !defined(_MSC_VER)
40
+ #define __dmb(i) __builtin_arm_dmb(i)
41
+ #define __dsb(i) __builtin_arm_dsb(i)
42
+ #define __isb(i) __builtin_arm_isb(i)
43
+ #endif
44
+
45
+ /* 8.4 Hints */
46
+
47
+ #if !defined(_MSC_VER)
48
+ static __inline__ void __attribute__((__always_inline__, __nodebug__)) __wfi(void) {
49
+ __builtin_arm_wfi();
50
+ }
51
+
52
+ static __inline__ void __attribute__((__always_inline__, __nodebug__)) __wfe(void) {
53
+ __builtin_arm_wfe();
54
+ }
55
+
56
+ static __inline__ void __attribute__((__always_inline__, __nodebug__)) __sev(void) {
57
+ __builtin_arm_sev();
58
+ }
59
+
60
+ static __inline__ void __attribute__((__always_inline__, __nodebug__)) __sevl(void) {
61
+ __builtin_arm_sevl();
62
+ }
63
+
64
+ static __inline__ void __attribute__((__always_inline__, __nodebug__)) __yield(void) {
65
+ __builtin_arm_yield();
66
+ }
67
+ #endif
68
+
69
+ #if __ARM_32BIT_STATE
70
+ #define __dbg(t) __builtin_arm_dbg(t)
71
+ #endif
72
+
73
+ /* 8.5 Swap */
74
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
75
+ __swp(uint32_t x, volatile uint32_t *p) {
76
+ uint32_t v;
77
+ do v = __builtin_arm_ldrex(p); while (__builtin_arm_strex(x, p));
78
+ return v;
79
+ }
80
+
81
+ /* 8.6 Memory prefetch intrinsics */
82
+ /* 8.6.1 Data prefetch */
83
+ #define __pld(addr) __pldx(0, 0, 0, addr)
84
+
85
+ #if __ARM_32BIT_STATE
86
+ #define __pldx(access_kind, cache_level, retention_policy, addr) \
87
+ __builtin_arm_prefetch(addr, access_kind, 1)
88
+ #else
89
+ #define __pldx(access_kind, cache_level, retention_policy, addr) \
90
+ __builtin_arm_prefetch(addr, access_kind, cache_level, retention_policy, 1)
91
+ #endif
92
+
93
+ /* 8.6.2 Instruction prefetch */
94
+ #define __pli(addr) __plix(0, 0, addr)
95
+
96
+ #if __ARM_32BIT_STATE
97
+ #define __plix(cache_level, retention_policy, addr) \
98
+ __builtin_arm_prefetch(addr, 0, 0)
99
+ #else
100
+ #define __plix(cache_level, retention_policy, addr) \
101
+ __builtin_arm_prefetch(addr, 0, cache_level, retention_policy, 0)
102
+ #endif
103
+
104
+ /* 8.7 NOP */
105
+ static __inline__ void __attribute__((__always_inline__, __nodebug__)) __nop(void) {
106
+ __builtin_arm_nop();
107
+ }
108
+
109
+ /* 9 DATA-PROCESSING INTRINSICS */
110
+ /* 9.2 Miscellaneous data-processing intrinsics */
111
+ /* ROR */
112
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
113
+ __ror(uint32_t x, uint32_t y) {
114
+ y %= 32;
115
+ if (y == 0) return x;
116
+ return (x >> y) | (x << (32 - y));
117
+ }
118
+
119
+ static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
120
+ __rorll(uint64_t x, uint32_t y) {
121
+ y %= 64;
122
+ if (y == 0) return x;
123
+ return (x >> y) | (x << (64 - y));
124
+ }
125
+
126
+ static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
127
+ __rorl(unsigned long x, uint32_t y) {
128
+ #if __SIZEOF_LONG__ == 4
129
+ return __ror(x, y);
130
+ #else
131
+ return __rorll(x, y);
132
+ #endif
133
+ }
134
+
135
+
136
+ /* CLZ */
137
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
138
+ __clz(uint32_t t) {
139
+ return __builtin_clz(t);
140
+ }
141
+
142
+ static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
143
+ __clzl(unsigned long t) {
144
+ return __builtin_clzl(t);
145
+ }
146
+
147
+ static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
148
+ __clzll(uint64_t t) {
149
+ return __builtin_clzll(t);
150
+ }
151
+
152
+ /* REV */
153
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
154
+ __rev(uint32_t t) {
155
+ return __builtin_bswap32(t);
156
+ }
157
+
158
+ static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
159
+ __revl(unsigned long t) {
160
+ #if __SIZEOF_LONG__ == 4
161
+ return __builtin_bswap32(t);
162
+ #else
163
+ return __builtin_bswap64(t);
164
+ #endif
165
+ }
166
+
167
+ static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
168
+ __revll(uint64_t t) {
169
+ return __builtin_bswap64(t);
170
+ }
171
+
172
+ /* REV16 */
173
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
174
+ __rev16(uint32_t t) {
175
+ return __ror(__rev(t), 16);
176
+ }
177
+
178
+ static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
179
+ __rev16l(unsigned long t) {
180
+ return __rorl(__revl(t), sizeof(long) / 2);
181
+ }
182
+
183
+ static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
184
+ __rev16ll(uint64_t t) {
185
+ return __rorll(__revll(t), 32);
186
+ }
187
+
188
+ /* REVSH */
189
+ static __inline__ int16_t __attribute__((__always_inline__, __nodebug__))
190
+ __revsh(int16_t t) {
191
+ return __builtin_bswap16(t);
192
+ }
193
+
194
+ /* RBIT */
195
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
196
+ __rbit(uint32_t t) {
197
+ return __builtin_arm_rbit(t);
198
+ }
199
+
200
+ static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
201
+ __rbitll(uint64_t t) {
202
+ #if __ARM_32BIT_STATE
203
+ return (((uint64_t) __builtin_arm_rbit(t)) << 32) |
204
+ __builtin_arm_rbit(t >> 32);
205
+ #else
206
+ return __builtin_arm_rbit64(t);
207
+ #endif
208
+ }
209
+
210
+ static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
211
+ __rbitl(unsigned long t) {
212
+ #if __SIZEOF_LONG__ == 4
213
+ return __rbit(t);
214
+ #else
215
+ return __rbitll(t);
216
+ #endif
217
+ }
218
+
219
+ /*
220
+ * 9.4 Saturating intrinsics
221
+ *
222
+ * FIXME: Change guard to their corrosponding __ARM_FEATURE flag when Q flag
223
+ * intrinsics are implemented and the flag is enabled.
224
+ */
225
+ /* 9.4.1 Width-specified saturation intrinsics */
226
+ #if __ARM_32BIT_STATE
227
+ #define __ssat(x, y) __builtin_arm_ssat(x, y)
228
+ #define __usat(x, y) __builtin_arm_usat(x, y)
229
+ #endif
230
+
231
+ /* 9.4.2 Saturating addition and subtraction intrinsics */
232
+ #if __ARM_32BIT_STATE
233
+ static __inline__ int32_t __attribute__((__always_inline__, __nodebug__))
234
+ __qadd(int32_t t, int32_t v) {
235
+ return __builtin_arm_qadd(t, v);
236
+ }
237
+
238
+ static __inline__ int32_t __attribute__((__always_inline__, __nodebug__))
239
+ __qsub(int32_t t, int32_t v) {
240
+ return __builtin_arm_qsub(t, v);
241
+ }
242
+
243
+ static __inline__ int32_t __attribute__((__always_inline__, __nodebug__))
244
+ __qdbl(int32_t t) {
245
+ return __builtin_arm_qadd(t, t);
246
+ }
247
+ #endif
248
+
249
+ /* 9.7 CRC32 intrinsics */
250
+ #if __ARM_FEATURE_CRC32
251
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
252
+ __crc32b(uint32_t a, uint8_t b) {
253
+ return __builtin_arm_crc32b(a, b);
254
+ }
255
+
256
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
257
+ __crc32h(uint32_t a, uint16_t b) {
258
+ return __builtin_arm_crc32h(a, b);
259
+ }
260
+
261
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
262
+ __crc32w(uint32_t a, uint32_t b) {
263
+ return __builtin_arm_crc32w(a, b);
264
+ }
265
+
266
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
267
+ __crc32d(uint32_t a, uint64_t b) {
268
+ return __builtin_arm_crc32d(a, b);
269
+ }
270
+
271
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
272
+ __crc32cb(uint32_t a, uint8_t b) {
273
+ return __builtin_arm_crc32cb(a, b);
274
+ }
275
+
276
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
277
+ __crc32ch(uint32_t a, uint16_t b) {
278
+ return __builtin_arm_crc32ch(a, b);
279
+ }
280
+
281
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
282
+ __crc32cw(uint32_t a, uint32_t b) {
283
+ return __builtin_arm_crc32cw(a, b);
284
+ }
285
+
286
+ static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
287
+ __crc32cd(uint32_t a, uint64_t b) {
288
+ return __builtin_arm_crc32cd(a, b);
289
+ }
290
+ #endif
291
+
292
+ /* 10.1 Special register intrinsics */
293
+ #define __arm_rsr(sysreg) __builtin_arm_rsr(sysreg)
294
+ #define __arm_rsr64(sysreg) __builtin_arm_rsr64(sysreg)
295
+ #define __arm_rsrp(sysreg) __builtin_arm_rsrp(sysreg)
296
+ #define __arm_wsr(sysreg, v) __builtin_arm_wsr(sysreg, v)
297
+ #define __arm_wsr64(sysreg, v) __builtin_arm_wsr64(sysreg, v)
298
+ #define __arm_wsrp(sysreg, v) __builtin_arm_wsrp(sysreg, v)
299
+
300
+ #if defined(__cplusplus)
301
+ }
302
+ #endif
303
+
304
+ #endif /* __ARM_ACLE_H */