minimap2 0.2.25.0 → 0.2.25.1

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 (123) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -3
  3. data/ext/minimap2/Makefile +6 -2
  4. data/ext/minimap2/NEWS.md +38 -0
  5. data/ext/minimap2/README.md +9 -3
  6. data/ext/minimap2/align.c +5 -3
  7. data/ext/minimap2/cookbook.md +2 -2
  8. data/ext/minimap2/format.c +7 -4
  9. data/ext/minimap2/kalloc.c +20 -1
  10. data/ext/minimap2/kalloc.h +13 -2
  11. data/ext/minimap2/ksw2.h +1 -0
  12. data/ext/minimap2/ksw2_extd2_sse.c +1 -1
  13. data/ext/minimap2/ksw2_exts2_sse.c +79 -40
  14. data/ext/minimap2/ksw2_extz2_sse.c +1 -1
  15. data/ext/minimap2/lchain.c +15 -16
  16. data/ext/minimap2/lib/simde/CONTRIBUTING.md +114 -0
  17. data/ext/minimap2/lib/simde/COPYING +20 -0
  18. data/ext/minimap2/lib/simde/README.md +333 -0
  19. data/ext/minimap2/lib/simde/amalgamate.py +58 -0
  20. data/ext/minimap2/lib/simde/meson.build +33 -0
  21. data/ext/minimap2/lib/simde/netlify.toml +20 -0
  22. data/ext/minimap2/lib/simde/simde/arm/neon/float32x2.h +140 -0
  23. data/ext/minimap2/lib/simde/simde/arm/neon/float32x4.h +137 -0
  24. data/ext/minimap2/lib/simde/simde/arm/neon/float64x1.h +142 -0
  25. data/ext/minimap2/lib/simde/simde/arm/neon/float64x2.h +145 -0
  26. data/ext/minimap2/lib/simde/simde/arm/neon/int16x4.h +140 -0
  27. data/ext/minimap2/lib/simde/simde/arm/neon/int16x8.h +145 -0
  28. data/ext/minimap2/lib/simde/simde/arm/neon/int32x2.h +140 -0
  29. data/ext/minimap2/lib/simde/simde/arm/neon/int32x4.h +143 -0
  30. data/ext/minimap2/lib/simde/simde/arm/neon/int64x1.h +137 -0
  31. data/ext/minimap2/lib/simde/simde/arm/neon/int64x2.h +141 -0
  32. data/ext/minimap2/lib/simde/simde/arm/neon/int8x16.h +147 -0
  33. data/ext/minimap2/lib/simde/simde/arm/neon/int8x8.h +141 -0
  34. data/ext/minimap2/lib/simde/simde/arm/neon/uint16x4.h +134 -0
  35. data/ext/minimap2/lib/simde/simde/arm/neon/uint16x8.h +138 -0
  36. data/ext/minimap2/lib/simde/simde/arm/neon/uint32x2.h +134 -0
  37. data/ext/minimap2/lib/simde/simde/arm/neon/uint32x4.h +137 -0
  38. data/ext/minimap2/lib/simde/simde/arm/neon/uint64x1.h +131 -0
  39. data/ext/minimap2/lib/simde/simde/arm/neon/uint64x2.h +135 -0
  40. data/ext/minimap2/lib/simde/simde/arm/neon/uint8x16.h +141 -0
  41. data/ext/minimap2/lib/simde/simde/arm/neon/uint8x8.h +135 -0
  42. data/ext/minimap2/lib/simde/simde/arm/neon.h +97 -0
  43. data/ext/minimap2/lib/simde/simde/check.h +267 -0
  44. data/ext/minimap2/lib/simde/simde/debug-trap.h +83 -0
  45. data/ext/minimap2/lib/simde/simde/hedley.h +1899 -0
  46. data/ext/minimap2/lib/simde/simde/simde-arch.h +445 -0
  47. data/ext/minimap2/lib/simde/simde/simde-common.h +697 -0
  48. data/ext/minimap2/lib/simde/simde/x86/avx.h +5385 -0
  49. data/ext/minimap2/lib/simde/simde/x86/avx2.h +2402 -0
  50. data/ext/minimap2/lib/simde/simde/x86/avx512bw.h +391 -0
  51. data/ext/minimap2/lib/simde/simde/x86/avx512f.h +3389 -0
  52. data/ext/minimap2/lib/simde/simde/x86/avx512vl.h +112 -0
  53. data/ext/minimap2/lib/simde/simde/x86/fma.h +659 -0
  54. data/ext/minimap2/lib/simde/simde/x86/mmx.h +2210 -0
  55. data/ext/minimap2/lib/simde/simde/x86/sse.h +3696 -0
  56. data/ext/minimap2/lib/simde/simde/x86/sse2.h +5991 -0
  57. data/ext/minimap2/lib/simde/simde/x86/sse3.h +343 -0
  58. data/ext/minimap2/lib/simde/simde/x86/sse4.1.h +1783 -0
  59. data/ext/minimap2/lib/simde/simde/x86/sse4.2.h +105 -0
  60. data/ext/minimap2/lib/simde/simde/x86/ssse3.h +1053 -0
  61. data/ext/minimap2/lib/simde/simde/x86/svml.h +543 -0
  62. data/ext/minimap2/lib/simde/test/CMakeLists.txt +166 -0
  63. data/ext/minimap2/lib/simde/test/arm/meson.build +4 -0
  64. data/ext/minimap2/lib/simde/test/arm/neon/meson.build +23 -0
  65. data/ext/minimap2/lib/simde/test/arm/neon/skel.c +871 -0
  66. data/ext/minimap2/lib/simde/test/arm/neon/test-neon-internal.h +134 -0
  67. data/ext/minimap2/lib/simde/test/arm/neon/test-neon.c +39 -0
  68. data/ext/minimap2/lib/simde/test/arm/neon/test-neon.h +10 -0
  69. data/ext/minimap2/lib/simde/test/arm/neon/vadd.c +1260 -0
  70. data/ext/minimap2/lib/simde/test/arm/neon/vdup_n.c +873 -0
  71. data/ext/minimap2/lib/simde/test/arm/neon/vmul.c +1084 -0
  72. data/ext/minimap2/lib/simde/test/arm/neon/vsub.c +1260 -0
  73. data/ext/minimap2/lib/simde/test/arm/test-arm-internal.h +18 -0
  74. data/ext/minimap2/lib/simde/test/arm/test-arm.c +20 -0
  75. data/ext/minimap2/lib/simde/test/arm/test-arm.h +8 -0
  76. data/ext/minimap2/lib/simde/test/cmake/AddCompilerFlags.cmake +171 -0
  77. data/ext/minimap2/lib/simde/test/cmake/ExtraWarningFlags.cmake +68 -0
  78. data/ext/minimap2/lib/simde/test/meson.build +64 -0
  79. data/ext/minimap2/lib/simde/test/munit/COPYING +21 -0
  80. data/ext/minimap2/lib/simde/test/munit/Makefile +55 -0
  81. data/ext/minimap2/lib/simde/test/munit/README.md +54 -0
  82. data/ext/minimap2/lib/simde/test/munit/example.c +351 -0
  83. data/ext/minimap2/lib/simde/test/munit/meson.build +37 -0
  84. data/ext/minimap2/lib/simde/test/munit/munit.c +2055 -0
  85. data/ext/minimap2/lib/simde/test/munit/munit.h +535 -0
  86. data/ext/minimap2/lib/simde/test/run-tests.c +20 -0
  87. data/ext/minimap2/lib/simde/test/run-tests.h +260 -0
  88. data/ext/minimap2/lib/simde/test/x86/avx.c +13752 -0
  89. data/ext/minimap2/lib/simde/test/x86/avx2.c +9977 -0
  90. data/ext/minimap2/lib/simde/test/x86/avx512bw.c +2664 -0
  91. data/ext/minimap2/lib/simde/test/x86/avx512f.c +10416 -0
  92. data/ext/minimap2/lib/simde/test/x86/avx512vl.c +210 -0
  93. data/ext/minimap2/lib/simde/test/x86/fma.c +2557 -0
  94. data/ext/minimap2/lib/simde/test/x86/meson.build +33 -0
  95. data/ext/minimap2/lib/simde/test/x86/mmx.c +2878 -0
  96. data/ext/minimap2/lib/simde/test/x86/skel.c +2984 -0
  97. data/ext/minimap2/lib/simde/test/x86/sse.c +5121 -0
  98. data/ext/minimap2/lib/simde/test/x86/sse2.c +9860 -0
  99. data/ext/minimap2/lib/simde/test/x86/sse3.c +486 -0
  100. data/ext/minimap2/lib/simde/test/x86/sse4.1.c +3446 -0
  101. data/ext/minimap2/lib/simde/test/x86/sse4.2.c +101 -0
  102. data/ext/minimap2/lib/simde/test/x86/ssse3.c +2084 -0
  103. data/ext/minimap2/lib/simde/test/x86/svml.c +1545 -0
  104. data/ext/minimap2/lib/simde/test/x86/test-avx.h +16 -0
  105. data/ext/minimap2/lib/simde/test/x86/test-avx512.h +25 -0
  106. data/ext/minimap2/lib/simde/test/x86/test-mmx.h +13 -0
  107. data/ext/minimap2/lib/simde/test/x86/test-sse.h +13 -0
  108. data/ext/minimap2/lib/simde/test/x86/test-sse2.h +13 -0
  109. data/ext/minimap2/lib/simde/test/x86/test-x86-internal.h +196 -0
  110. data/ext/minimap2/lib/simde/test/x86/test-x86.c +48 -0
  111. data/ext/minimap2/lib/simde/test/x86/test-x86.h +8 -0
  112. data/ext/minimap2/main.c +13 -6
  113. data/ext/minimap2/map.c +0 -5
  114. data/ext/minimap2/minimap.h +40 -31
  115. data/ext/minimap2/minimap2.1 +19 -5
  116. data/ext/minimap2/misc/paftools.js +545 -24
  117. data/ext/minimap2/options.c +1 -1
  118. data/ext/minimap2/pyproject.toml +2 -0
  119. data/ext/minimap2/python/mappy.pyx +3 -1
  120. data/ext/minimap2/seed.c +1 -1
  121. data/ext/minimap2/setup.py +32 -22
  122. data/lib/minimap2/version.rb +1 -1
  123. metadata +100 -3
@@ -0,0 +1,659 @@
1
+ /* Permission is hereby granted, free of charge, to any person
2
+ * obtaining a copy of this software and associated documentation
3
+ * files (the "Software"), to deal in the Software without
4
+ * restriction, including without limitation the rights to use, copy,
5
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
6
+ * of the Software, and to permit persons to whom the Software is
7
+ * furnished to do so, subject to the following conditions:
8
+ *
9
+ * The above copyright notice and this permission notice shall be
10
+ * included in all copies or substantial portions of the Software.
11
+ *
12
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
16
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
17
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ * SOFTWARE.
20
+ *
21
+ * Copyright:
22
+ * 2019 Evan Nemerson <evan@nemerson.com>
23
+ */
24
+
25
+ #include "sse.h"
26
+ #include "sse2.h"
27
+ #if !defined(SIMDE__FMA_H)
28
+ # if !defined(SIMDE__FMA_H)
29
+ # define SIMDE__FMA_H
30
+ # endif
31
+ # include "avx.h"
32
+
33
+ HEDLEY_DIAGNOSTIC_PUSH
34
+ SIMDE_DISABLE_UNWANTED_DIAGNOSTICS
35
+
36
+ # if defined(SIMDE_FMA_NATIVE)
37
+ # undef SIMDE_FMA_NATIVE
38
+ # endif
39
+ # if defined(SIMDE_ARCH_X86_GMA) && !defined(SIMDE_FMA_NO_NATIVE) && !defined(SIMDE_NO_NATIVE)
40
+ # define SIMDE_FMA_NATIVE
41
+ # elif defined(SIMDE_ARCH_ARM_NEON) && !defined(SIMDE_FMA_NO_NEON) && !defined(SIMDE_NO_NEON)
42
+ # define SIMDE_FMA_NEON
43
+ # endif
44
+
45
+ # if defined(SIMDE_FMA_NATIVE) && !defined(SIMDE_AVX_NATIVE)
46
+ # if defined(SIMDE_FMA_FORCE_NATIVE)
47
+ # error Native FMA support requires native AVX support
48
+ # else
49
+ HEDLEY_WARNING("Native FMA support requires native AVX support, disabling")
50
+ # undef SIMDE_FMA_NATIVE
51
+ # endif
52
+ # elif defined(SIMDE_FMA_NEON) && !defined(SIMDE_AVX_NEON)
53
+ HEDLEY_WARNING("FMA NEON support requires AVX NEON support, disabling")
54
+ # undef SIMDE_AVX_NEON
55
+ # endif
56
+
57
+ # if defined(SIMDE_FMA_NATIVE)
58
+ # include <immintrin.h>
59
+ # endif
60
+
61
+ # if !defined(SIMDE_FMA_NATIVE) && defined(SIMDE_ENABLE_NATIVE_ALIASES)
62
+ # define SIMDE_FMA_ENABLE_NATIVE_ALIASES
63
+ # endif
64
+
65
+ SIMDE__BEGIN_DECLS
66
+
67
+ SIMDE__FUNCTION_ATTRIBUTES
68
+ simde__m128d
69
+ simde_mm_fmadd_pd (simde__m128d a, simde__m128d b, simde__m128d c) {
70
+ #if defined(SIMDE_FMA_NATIVE)
71
+ return _mm_fmadd_pd(a, b, c);
72
+ #else
73
+ return simde_mm_add_pd(simde_mm_mul_pd(a, b), c);
74
+ #endif
75
+ }
76
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
77
+ # define _mm_fmadd_pd(a, b, c) simde_mm_fmadd_pd(a, b, c)
78
+ #endif
79
+
80
+ SIMDE__FUNCTION_ATTRIBUTES
81
+ simde__m256d
82
+ simde_mm256_fmadd_pd (simde__m256d a, simde__m256d b, simde__m256d c) {
83
+ #if defined(SIMDE_FMA_NATIVE)
84
+ return _mm256_fmadd_pd(a, b, c);
85
+ #else
86
+ return simde_mm256_add_pd(simde_mm256_mul_pd(a, b), c);
87
+ #endif
88
+ }
89
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
90
+ # define _mm_fmadd_pd(a, b, c) simde_mm_fmadd_pd(a, b, c)
91
+ #endif
92
+
93
+ SIMDE__FUNCTION_ATTRIBUTES
94
+ simde__m128
95
+ simde_mm_fmadd_ps (simde__m128 a, simde__m128 b, simde__m128 c) {
96
+ #if defined(SIMDE_FMA_NATIVE)
97
+ return _mm_fmadd_ps(a, b, c);
98
+ #else
99
+ return simde_mm_add_ps(simde_mm_mul_ps(a, b), c);
100
+ #endif
101
+ }
102
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
103
+ # define _mm_fmadd_ps(a, b, c) simde_mm_fmadd_ps(a, b, c)
104
+ #endif
105
+
106
+ SIMDE__FUNCTION_ATTRIBUTES
107
+ simde__m256
108
+ simde_mm256_fmadd_ps (simde__m256 a, simde__m256 b, simde__m256 c) {
109
+ #if defined(SIMDE_FMA_NATIVE)
110
+ return _mm256_fmadd_ps(a, b, c);
111
+ #else
112
+ return simde_mm256_add_ps(simde_mm256_mul_ps(a, b), c);
113
+ #endif
114
+ }
115
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
116
+ # define _mm_fmadd_ps(a, b, c) simde_mm_fmadd_ps(a, b, c)
117
+ #endif
118
+
119
+ SIMDE__FUNCTION_ATTRIBUTES
120
+ simde__m128d
121
+ simde_mm_fmadd_sd (simde__m128d a, simde__m128d b, simde__m128d c) {
122
+ #if defined(SIMDE_FMA_NATIVE)
123
+ return _mm_fmadd_sd(a, b, c);
124
+ #else
125
+ return simde_mm_add_sd(simde_mm_mul_sd(a, b), c);
126
+ #endif
127
+ }
128
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
129
+ # define _mm_fmadd_sd(a, b, c) simde_mm_fmadd_sd(a, b, c)
130
+ #endif
131
+
132
+ SIMDE__FUNCTION_ATTRIBUTES
133
+ simde__m128
134
+ simde_mm_fmadd_ss (simde__m128 a, simde__m128 b, simde__m128 c) {
135
+ #if defined(SIMDE_FMA_NATIVE)
136
+ return _mm_fmadd_ss(a, b, c);
137
+ #else
138
+ return simde_mm_add_ss(simde_mm_mul_ss(a, b), c);
139
+ #endif
140
+ }
141
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
142
+ # define _mm_fmadd_ss(a, b, c) simde_mm_fmadd_ss(a, b, c)
143
+ #endif
144
+
145
+ SIMDE__FUNCTION_ATTRIBUTES
146
+ simde__m128d
147
+ simde_mm_fmaddsub_pd (simde__m128d a, simde__m128d b, simde__m128d c) {
148
+ #if defined(SIMDE_FMA_NATIVE)
149
+ return _mm_fmaddsub_pd(a, b, c);
150
+ #else
151
+ return simde_mm_addsub_pd(simde_mm_mul_pd(a, b), c);
152
+ #endif
153
+ }
154
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
155
+ # define _mm_fmaddsub_pd(a, b, c) simde_mm_fmaddsub_pd(a, b, c)
156
+ #endif
157
+
158
+ SIMDE__FUNCTION_ATTRIBUTES
159
+ simde__m256d
160
+ simde_mm256_fmaddsub_pd (simde__m256d a, simde__m256d b, simde__m256d c) {
161
+ #if defined(SIMDE_FMA_NATIVE)
162
+ return _mm256_fmaddsub_pd(a, b, c);
163
+ #else
164
+ return simde_mm256_addsub_pd(simde_mm256_mul_pd(a, b), c);
165
+ #endif
166
+ }
167
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
168
+ # define _mm_fmaddsub_pd(a, b, c) simde_mm_fmaddsub_pd(a, b, c)
169
+ #endif
170
+
171
+ SIMDE__FUNCTION_ATTRIBUTES
172
+ simde__m128
173
+ simde_mm_fmaddsub_ps (simde__m128 a, simde__m128 b, simde__m128 c) {
174
+ #if defined(SIMDE_FMA_NATIVE)
175
+ return _mm_fmaddsub_ps(a, b, c);
176
+ #else
177
+ return simde_mm_addsub_ps(simde_mm_mul_ps(a, b), c);
178
+ #endif
179
+ }
180
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
181
+ # define _mm_fmaddsub_ps(a, b, c) simde_mm_fmaddsub_ps(a, b, c)
182
+ #endif
183
+
184
+ SIMDE__FUNCTION_ATTRIBUTES
185
+ simde__m256
186
+ simde_mm256_fmaddsub_ps (simde__m256 a, simde__m256 b, simde__m256 c) {
187
+ #if defined(SIMDE_FMA_NATIVE)
188
+ return _mm256_fmaddsub_ps(a, b, c);
189
+ #else
190
+ return simde_mm256_addsub_ps(simde_mm256_mul_ps(a, b), c);
191
+ #endif
192
+ }
193
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
194
+ # define _mm_fmaddsub_ps(a, b, c) simde_mm_fmaddsub_ps(a, b, c)
195
+ #endif
196
+
197
+ SIMDE__FUNCTION_ATTRIBUTES
198
+ simde__m128d
199
+ simde_mm_fmsub_pd (simde__m128d a, simde__m128d b, simde__m128d c) {
200
+ #if defined(SIMDE_FMA_NATIVE)
201
+ return _mm_fmsub_pd(a, b, c);
202
+ #else
203
+ return simde_mm_sub_pd(simde_mm_mul_pd(a, b), c);
204
+ #endif
205
+ }
206
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
207
+ # define _mm_fmsub_pd(a, b, c) simde_mm_fmsub_pd(a, b, c)
208
+ #endif
209
+
210
+ SIMDE__FUNCTION_ATTRIBUTES
211
+ simde__m256d
212
+ simde_mm256_fmsub_pd (simde__m256d a, simde__m256d b, simde__m256d c) {
213
+ #if defined(SIMDE_FMA_NATIVE)
214
+ return _mm256_fmsub_pd(a, b, c);
215
+ #else
216
+ return simde_mm256_sub_pd(simde_mm256_mul_pd(a, b), c);
217
+ #endif
218
+ }
219
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
220
+ # define _mm_fmsub_pd(a, b, c) simde_mm_fmsub_pd(a, b, c)
221
+ #endif
222
+
223
+ SIMDE__FUNCTION_ATTRIBUTES
224
+ simde__m128
225
+ simde_mm_fmsub_ps (simde__m128 a, simde__m128 b, simde__m128 c) {
226
+ #if defined(SIMDE_FMA_NATIVE)
227
+ return _mm_fmsub_ps(a, b, c);
228
+ #else
229
+ return simde_mm_sub_ps(simde_mm_mul_ps(a, b), c);
230
+ #endif
231
+ }
232
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
233
+ # define _mm_fmsub_ps(a, b, c) simde_mm_fmsub_ps(a, b, c)
234
+ #endif
235
+
236
+ SIMDE__FUNCTION_ATTRIBUTES
237
+ simde__m256
238
+ simde_mm256_fmsub_ps (simde__m256 a, simde__m256 b, simde__m256 c) {
239
+ #if defined(SIMDE_FMA_NATIVE)
240
+ return _mm256_fmsub_ps(a, b, c);
241
+ #else
242
+ return simde_mm256_sub_ps(simde_mm256_mul_ps(a, b), c);
243
+ #endif
244
+ }
245
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
246
+ # define _mm_fmsub_ps(a, b, c) simde_mm_fmsub_ps(a, b, c)
247
+ #endif
248
+
249
+ SIMDE__FUNCTION_ATTRIBUTES
250
+ simde__m128d
251
+ simde_mm_fmsub_sd (simde__m128d a, simde__m128d b, simde__m128d c) {
252
+ #if defined(SIMDE_FMA_NATIVE)
253
+ return _mm_fmsub_sd(a, b, c);
254
+ #else
255
+ return simde_mm_sub_sd(simde_mm_mul_sd(a, b), c);
256
+ #endif
257
+ }
258
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
259
+ # define _mm_fmsub_sd(a, b, c) simde_mm_fmsub_sd(a, b, c)
260
+ #endif
261
+
262
+ SIMDE__FUNCTION_ATTRIBUTES
263
+ simde__m128
264
+ simde_mm_fmsub_ss (simde__m128 a, simde__m128 b, simde__m128 c) {
265
+ #if defined(SIMDE_FMA_NATIVE)
266
+ return _mm_fmsub_ss(a, b, c);
267
+ #else
268
+ return simde_mm_sub_ss(simde_mm_mul_ss(a, b), c);
269
+ #endif
270
+ }
271
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
272
+ # define _mm_fmsub_ss(a, b, c) simde_mm_fmsub_ss(a, b, c)
273
+ #endif
274
+
275
+ SIMDE__FUNCTION_ATTRIBUTES
276
+ simde__m128d
277
+ simde_mm_fmsubadd_pd (simde__m128d a, simde__m128d b, simde__m128d c) {
278
+ #if defined(SIMDE_FMA_NATIVE)
279
+ return _mm_fmsubadd_pd(a, b, c);
280
+ #else
281
+ simde__m128d_private
282
+ r_,
283
+ a_ = simde__m128d_to_private(a),
284
+ b_ = simde__m128d_to_private(b),
285
+ c_ = simde__m128d_to_private(c);
286
+
287
+ SIMDE__VECTORIZE
288
+ for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i += 2) {
289
+ r_.f64[ i ] = (a_.f64[ i ] * b_.f64[ i ]) + c_.f64[ i ];
290
+ r_.f64[i + 1] = (a_.f64[i + 1] * b_.f64[i + 1]) - c_.f64[i + 1];
291
+ }
292
+
293
+ return simde__m128d_from_private(r_);
294
+ #endif
295
+ }
296
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
297
+ # define _mm_fmsubadd_pd(a, b, c) simde_mm_fmsubadd_pd(a, b, c)
298
+ #endif
299
+
300
+ SIMDE__FUNCTION_ATTRIBUTES
301
+ simde__m256d
302
+ simde_mm256_fmsubadd_pd (simde__m256d a, simde__m256d b, simde__m256d c) {
303
+ #if defined(SIMDE_FMA_NATIVE)
304
+ return _mm256_fmsubadd_pd(a, b, c);
305
+ #else
306
+ simde__m256d_private
307
+ r_,
308
+ a_ = simde__m256d_to_private(a),
309
+ b_ = simde__m256d_to_private(b),
310
+ c_ = simde__m256d_to_private(c);
311
+
312
+ SIMDE__VECTORIZE
313
+ for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i += 2) {
314
+ r_.f64[ i ] = (a_.f64[ i ] * b_.f64[ i ]) + c_.f64[ i ];
315
+ r_.f64[i + 1] = (a_.f64[i + 1] * b_.f64[i + 1]) - c_.f64[i + 1];
316
+ }
317
+
318
+ return simde__m256d_from_private(r_);
319
+ #endif
320
+ }
321
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
322
+ # define _mm_fmsubadd_pd(a, b, c) simde_mm_fmsubadd_pd(a, b, c)
323
+ #endif
324
+
325
+ SIMDE__FUNCTION_ATTRIBUTES
326
+ simde__m128
327
+ simde_mm_fmsubadd_ps (simde__m128 a, simde__m128 b, simde__m128 c) {
328
+ #if defined(SIMDE_FMA_NATIVE)
329
+ return _mm_fmsubadd_ps(a, b, c);
330
+ #else
331
+ simde__m128_private
332
+ r_,
333
+ a_ = simde__m128_to_private(a),
334
+ b_ = simde__m128_to_private(b),
335
+ c_ = simde__m128_to_private(c);
336
+
337
+ SIMDE__VECTORIZE
338
+ for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i += 2) {
339
+ r_.f32[ i ] = (a_.f32[ i ] * b_.f32[ i ]) + c_.f32[ i ];
340
+ r_.f32[i + 1] = (a_.f32[i + 1] * b_.f32[i + 1]) - c_.f32[i + 1];
341
+ }
342
+
343
+ return simde__m128_from_private(r_);
344
+ #endif
345
+ }
346
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
347
+ # define _mm_fmsubadd_ps(a, b, c) simde_mm_fmsubadd_ps(a, b, c)
348
+ #endif
349
+
350
+ SIMDE__FUNCTION_ATTRIBUTES
351
+ simde__m256
352
+ simde_mm256_fmsubadd_ps (simde__m256 a, simde__m256 b, simde__m256 c) {
353
+ #if defined(SIMDE_FMA_NATIVE)
354
+ return _mm256_fmsubadd_ps(a, b, c);
355
+ #else
356
+ simde__m256_private
357
+ r_,
358
+ a_ = simde__m256_to_private(a),
359
+ b_ = simde__m256_to_private(b),
360
+ c_ = simde__m256_to_private(c);
361
+
362
+ SIMDE__VECTORIZE
363
+ for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i += 2) {
364
+ r_.f32[ i ] = (a_.f32[ i ] * b_.f32[ i ]) + c_.f32[ i ];
365
+ r_.f32[i + 1] = (a_.f32[i + 1] * b_.f32[i + 1]) - c_.f32[i + 1];
366
+ }
367
+
368
+ return simde__m256_from_private(r_);
369
+ #endif
370
+ }
371
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
372
+ # define _mm_fmsubadd_ps(a, b, c) simde_mm_fmsubadd_ps(a, b, c)
373
+ #endif
374
+
375
+ SIMDE__FUNCTION_ATTRIBUTES
376
+ simde__m128d
377
+ simde_mm_fnmadd_pd (simde__m128d a, simde__m128d b, simde__m128d c) {
378
+ #if defined(SIMDE_FMA_NATIVE)
379
+ return _mm_fnmadd_pd(a, b, c);
380
+ #else
381
+ simde__m128d_private
382
+ r_,
383
+ a_ = simde__m128d_to_private(a),
384
+ b_ = simde__m128d_to_private(b),
385
+ c_ = simde__m128d_to_private(c);
386
+
387
+ SIMDE__VECTORIZE
388
+ for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) {
389
+ r_.f64[i] = -(a_.f64[i] * b_.f64[i]) + c_.f64[i];
390
+ }
391
+
392
+ return simde__m128d_from_private(r_);
393
+ #endif
394
+ }
395
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
396
+ # define _mm_fnmadd_pd(a, b, c) simde_mm_fnmadd_pd(a, b, c)
397
+ #endif
398
+
399
+ SIMDE__FUNCTION_ATTRIBUTES
400
+ simde__m256d
401
+ simde_mm256_fnmadd_pd (simde__m256d a, simde__m256d b, simde__m256d c) {
402
+ #if defined(SIMDE_FMA_NATIVE)
403
+ return _mm256_fnmadd_pd(a, b, c);
404
+ #else
405
+ simde__m256d_private
406
+ r_,
407
+ a_ = simde__m256d_to_private(a),
408
+ b_ = simde__m256d_to_private(b),
409
+ c_ = simde__m256d_to_private(c);
410
+
411
+ SIMDE__VECTORIZE
412
+ for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) {
413
+ r_.f64[i] = -(a_.f64[i] * b_.f64[i]) + c_.f64[i];
414
+ }
415
+
416
+ return simde__m256d_from_private(r_);
417
+ #endif
418
+ }
419
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
420
+ # define _mm_fnmadd_pd(a, b, c) simde_mm_fnmadd_pd(a, b, c)
421
+ #endif
422
+
423
+ SIMDE__FUNCTION_ATTRIBUTES
424
+ simde__m128
425
+ simde_mm_fnmadd_ps (simde__m128 a, simde__m128 b, simde__m128 c) {
426
+ #if defined(SIMDE_FMA_NATIVE)
427
+ return _mm_fnmadd_ps(a, b, c);
428
+ #else
429
+ simde__m128_private
430
+ r_,
431
+ a_ = simde__m128_to_private(a),
432
+ b_ = simde__m128_to_private(b),
433
+ c_ = simde__m128_to_private(c);
434
+
435
+ SIMDE__VECTORIZE
436
+ for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) {
437
+ r_.f32[i] = -(a_.f32[i] * b_.f32[i]) + c_.f32[i];
438
+ }
439
+
440
+ return simde__m128_from_private(r_);
441
+ #endif
442
+ }
443
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
444
+ # define _mm_fnmadd_ps(a, b, c) simde_mm_fnmadd_ps(a, b, c)
445
+ #endif
446
+
447
+ SIMDE__FUNCTION_ATTRIBUTES
448
+ simde__m256
449
+ simde_mm256_fnmadd_ps (simde__m256 a, simde__m256 b, simde__m256 c) {
450
+ #if defined(SIMDE_FMA_NATIVE)
451
+ return _mm256_fnmadd_ps(a, b, c);
452
+ #else
453
+ simde__m256_private
454
+ r_,
455
+ a_ = simde__m256_to_private(a),
456
+ b_ = simde__m256_to_private(b),
457
+ c_ = simde__m256_to_private(c);
458
+
459
+ SIMDE__VECTORIZE
460
+ for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) {
461
+ r_.f32[i] = -(a_.f32[i] * b_.f32[i]) + c_.f32[i];
462
+ }
463
+
464
+ return simde__m256_from_private(r_);
465
+ #endif
466
+ }
467
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
468
+ # define _mm_fnmadd_ps(a, b, c) simde_mm_fnmadd_ps(a, b, c)
469
+ #endif
470
+
471
+ SIMDE__FUNCTION_ATTRIBUTES
472
+ simde__m128d
473
+ simde_mm_fnmadd_sd (simde__m128d a, simde__m128d b, simde__m128d c) {
474
+ #if defined(SIMDE_FMA_NATIVE)
475
+ return _mm_fnmadd_sd(a, b, c);
476
+ #else
477
+ simde__m128d_private
478
+ r_,
479
+ a_ = simde__m128d_to_private(a),
480
+ b_ = simde__m128d_to_private(b),
481
+ c_ = simde__m128d_to_private(c);
482
+
483
+ r_ = a_;
484
+ r_.f64[0] = -(a_.f64[0] * b_.f64[0]) + c_.f64[0];
485
+
486
+ return simde__m128d_from_private(r_);
487
+ #endif
488
+ }
489
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
490
+ # define _mm_fnmadd_sd(a, b, c) simde_mm_fnmadd_sd(a, b, c)
491
+ #endif
492
+
493
+ SIMDE__FUNCTION_ATTRIBUTES
494
+ simde__m128
495
+ simde_mm_fnmadd_ss (simde__m128 a, simde__m128 b, simde__m128 c) {
496
+ #if defined(SIMDE_FMA_NATIVE)
497
+ return _mm_fnmadd_ss(a, b, c);
498
+ #else
499
+ simde__m128_private
500
+ r_,
501
+ a_ = simde__m128_to_private(a),
502
+ b_ = simde__m128_to_private(b),
503
+ c_ = simde__m128_to_private(c);
504
+
505
+ r_ = a_;
506
+ r_.f32[0] = -(a_.f32[0] * b_.f32[0]) + c_.f32[0];
507
+
508
+ return simde__m128_from_private(r_);
509
+ #endif
510
+ }
511
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
512
+ # define _mm_fnmadd_ss(a, b, c) simde_mm_fnmadd_ss(a, b, c)
513
+ #endif
514
+
515
+ SIMDE__FUNCTION_ATTRIBUTES
516
+ simde__m128d
517
+ simde_mm_fnmsub_pd (simde__m128d a, simde__m128d b, simde__m128d c) {
518
+ #if defined(SIMDE_FMA_NATIVE)
519
+ return _mm_fnmsub_pd(a, b, c);
520
+ #else
521
+ simde__m128d_private
522
+ r_,
523
+ a_ = simde__m128d_to_private(a),
524
+ b_ = simde__m128d_to_private(b),
525
+ c_ = simde__m128d_to_private(c);
526
+
527
+ SIMDE__VECTORIZE
528
+ for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) {
529
+ r_.f64[i] = -(a_.f64[i] * b_.f64[i]) - c_.f64[i];
530
+ }
531
+
532
+ return simde__m128d_from_private(r_);
533
+ #endif
534
+ }
535
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
536
+ # define _mm_fnmsub_pd(a, b, c) simde_mm_fnmsub_pd(a, b, c)
537
+ #endif
538
+
539
+ SIMDE__FUNCTION_ATTRIBUTES
540
+ simde__m256d
541
+ simde_mm256_fnmsub_pd (simde__m256d a, simde__m256d b, simde__m256d c) {
542
+ #if defined(SIMDE_FMA_NATIVE)
543
+ return _mm256_fnmsub_pd(a, b, c);
544
+ #else
545
+ simde__m256d_private
546
+ r_,
547
+ a_ = simde__m256d_to_private(a),
548
+ b_ = simde__m256d_to_private(b),
549
+ c_ = simde__m256d_to_private(c);
550
+
551
+ SIMDE__VECTORIZE
552
+ for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) {
553
+ r_.f64[i] = -(a_.f64[i] * b_.f64[i]) - c_.f64[i];
554
+ }
555
+
556
+ return simde__m256d_from_private(r_);
557
+ #endif
558
+ }
559
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
560
+ # define _mm_fnmsub_pd(a, b, c) simde_mm_fnmsub_pd(a, b, c)
561
+ #endif
562
+
563
+ SIMDE__FUNCTION_ATTRIBUTES
564
+ simde__m128
565
+ simde_mm_fnmsub_ps (simde__m128 a, simde__m128 b, simde__m128 c) {
566
+ #if defined(SIMDE_FMA_NATIVE)
567
+ return _mm_fnmsub_ps(a, b, c);
568
+ #else
569
+ simde__m128_private
570
+ r_,
571
+ a_ = simde__m128_to_private(a),
572
+ b_ = simde__m128_to_private(b),
573
+ c_ = simde__m128_to_private(c);
574
+
575
+ SIMDE__VECTORIZE
576
+ for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) {
577
+ r_.f32[i] = -(a_.f32[i] * b_.f32[i]) - c_.f32[i];
578
+ }
579
+
580
+ return simde__m128_from_private(r_);
581
+ #endif
582
+ }
583
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
584
+ # define _mm_fnmsub_ps(a, b, c) simde_mm_fnmsub_ps(a, b, c)
585
+ #endif
586
+
587
+ SIMDE__FUNCTION_ATTRIBUTES
588
+ simde__m256
589
+ simde_mm256_fnmsub_ps (simde__m256 a, simde__m256 b, simde__m256 c) {
590
+ #if defined(SIMDE_FMA_NATIVE)
591
+ return _mm256_fnmsub_ps(a, b, c);
592
+ #else
593
+ simde__m256_private
594
+ r_,
595
+ a_ = simde__m256_to_private(a),
596
+ b_ = simde__m256_to_private(b),
597
+ c_ = simde__m256_to_private(c);
598
+
599
+ SIMDE__VECTORIZE
600
+ for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) {
601
+ r_.f32[i] = -(a_.f32[i] * b_.f32[i]) - c_.f32[i];
602
+ }
603
+
604
+ return simde__m256_from_private(r_);
605
+ #endif
606
+ }
607
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
608
+ # define _mm_fnmsub_ps(a, b, c) simde_mm_fnmsub_ps(a, b, c)
609
+ #endif
610
+
611
+ SIMDE__FUNCTION_ATTRIBUTES
612
+ simde__m128d
613
+ simde_mm_fnmsub_sd (simde__m128d a, simde__m128d b, simde__m128d c) {
614
+ #if defined(SIMDE_FMA_NATIVE)
615
+ return _mm_fnmsub_sd(a, b, c);
616
+ #else
617
+ simde__m128d_private
618
+ r_,
619
+ a_ = simde__m128d_to_private(a),
620
+ b_ = simde__m128d_to_private(b),
621
+ c_ = simde__m128d_to_private(c);
622
+
623
+ r_ = a_;
624
+ r_.f64[0] = -(a_.f64[0] * b_.f64[0]) - c_.f64[0];
625
+
626
+ return simde__m128d_from_private(r_);
627
+ #endif
628
+ }
629
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
630
+ # define _mm_fnmsub_sd(a, b, c) simde_mm_fnmsub_sd(a, b, c)
631
+ #endif
632
+
633
+ SIMDE__FUNCTION_ATTRIBUTES
634
+ simde__m128
635
+ simde_mm_fnmsub_ss (simde__m128 a, simde__m128 b, simde__m128 c) {
636
+ #if defined(SIMDE_FMA_NATIVE)
637
+ return _mm_fnmsub_ss(a, b, c);
638
+ #else
639
+ simde__m128_private
640
+ r_,
641
+ a_ = simde__m128_to_private(a),
642
+ b_ = simde__m128_to_private(b),
643
+ c_ = simde__m128_to_private(c);
644
+
645
+ r_ = simde__m128_to_private(a);
646
+ r_.f32[0] = -(a_.f32[0] * b_.f32[0]) - c_.f32[0];
647
+
648
+ return simde__m128_from_private(r_);
649
+ #endif
650
+ }
651
+ #if defined(SIMDE_FMA_ENABLE_NATIVE_ALIASES)
652
+ # define _mm_fnmsub_ss(a, b, c) simde_mm_fnmsub_ss(a, b, c)
653
+ #endif
654
+
655
+ SIMDE__END_DECLS
656
+
657
+ HEDLEY_DIAGNOSTIC_POP
658
+
659
+ #endif /* !defined(SIMDE__FMA_H) */