minimap2 0.2.24.3 → 0.2.24.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/ext/minimap2/lib/simde/CONTRIBUTING.md +114 -0
  3. data/ext/minimap2/lib/simde/COPYING +20 -0
  4. data/ext/minimap2/lib/simde/README.md +333 -0
  5. data/ext/minimap2/lib/simde/amalgamate.py +58 -0
  6. data/ext/minimap2/lib/simde/meson.build +33 -0
  7. data/ext/minimap2/lib/simde/netlify.toml +20 -0
  8. data/ext/minimap2/lib/simde/simde/arm/neon/float32x2.h +140 -0
  9. data/ext/minimap2/lib/simde/simde/arm/neon/float32x4.h +137 -0
  10. data/ext/minimap2/lib/simde/simde/arm/neon/float64x1.h +142 -0
  11. data/ext/minimap2/lib/simde/simde/arm/neon/float64x2.h +145 -0
  12. data/ext/minimap2/lib/simde/simde/arm/neon/int16x4.h +140 -0
  13. data/ext/minimap2/lib/simde/simde/arm/neon/int16x8.h +145 -0
  14. data/ext/minimap2/lib/simde/simde/arm/neon/int32x2.h +140 -0
  15. data/ext/minimap2/lib/simde/simde/arm/neon/int32x4.h +143 -0
  16. data/ext/minimap2/lib/simde/simde/arm/neon/int64x1.h +137 -0
  17. data/ext/minimap2/lib/simde/simde/arm/neon/int64x2.h +141 -0
  18. data/ext/minimap2/lib/simde/simde/arm/neon/int8x16.h +147 -0
  19. data/ext/minimap2/lib/simde/simde/arm/neon/int8x8.h +141 -0
  20. data/ext/minimap2/lib/simde/simde/arm/neon/uint16x4.h +134 -0
  21. data/ext/minimap2/lib/simde/simde/arm/neon/uint16x8.h +138 -0
  22. data/ext/minimap2/lib/simde/simde/arm/neon/uint32x2.h +134 -0
  23. data/ext/minimap2/lib/simde/simde/arm/neon/uint32x4.h +137 -0
  24. data/ext/minimap2/lib/simde/simde/arm/neon/uint64x1.h +131 -0
  25. data/ext/minimap2/lib/simde/simde/arm/neon/uint64x2.h +135 -0
  26. data/ext/minimap2/lib/simde/simde/arm/neon/uint8x16.h +141 -0
  27. data/ext/minimap2/lib/simde/simde/arm/neon/uint8x8.h +135 -0
  28. data/ext/minimap2/lib/simde/simde/arm/neon.h +97 -0
  29. data/ext/minimap2/lib/simde/simde/check.h +267 -0
  30. data/ext/minimap2/lib/simde/simde/debug-trap.h +83 -0
  31. data/ext/minimap2/lib/simde/simde/hedley.h +1899 -0
  32. data/ext/minimap2/lib/simde/simde/simde-arch.h +445 -0
  33. data/ext/minimap2/lib/simde/simde/simde-common.h +697 -0
  34. data/ext/minimap2/lib/simde/simde/x86/avx.h +5385 -0
  35. data/ext/minimap2/lib/simde/simde/x86/avx2.h +2402 -0
  36. data/ext/minimap2/lib/simde/simde/x86/avx512bw.h +391 -0
  37. data/ext/minimap2/lib/simde/simde/x86/avx512f.h +3389 -0
  38. data/ext/minimap2/lib/simde/simde/x86/avx512vl.h +112 -0
  39. data/ext/minimap2/lib/simde/simde/x86/fma.h +659 -0
  40. data/ext/minimap2/lib/simde/simde/x86/mmx.h +2210 -0
  41. data/ext/minimap2/lib/simde/simde/x86/sse.h +3696 -0
  42. data/ext/minimap2/lib/simde/simde/x86/sse2.h +5991 -0
  43. data/ext/minimap2/lib/simde/simde/x86/sse3.h +343 -0
  44. data/ext/minimap2/lib/simde/simde/x86/sse4.1.h +1783 -0
  45. data/ext/minimap2/lib/simde/simde/x86/sse4.2.h +105 -0
  46. data/ext/minimap2/lib/simde/simde/x86/ssse3.h +1053 -0
  47. data/ext/minimap2/lib/simde/simde/x86/svml.h +543 -0
  48. data/ext/minimap2/lib/simde/test/CMakeLists.txt +166 -0
  49. data/ext/minimap2/lib/simde/test/arm/meson.build +4 -0
  50. data/ext/minimap2/lib/simde/test/arm/neon/meson.build +23 -0
  51. data/ext/minimap2/lib/simde/test/arm/neon/skel.c +871 -0
  52. data/ext/minimap2/lib/simde/test/arm/neon/test-neon-internal.h +134 -0
  53. data/ext/minimap2/lib/simde/test/arm/neon/test-neon.c +39 -0
  54. data/ext/minimap2/lib/simde/test/arm/neon/test-neon.h +10 -0
  55. data/ext/minimap2/lib/simde/test/arm/neon/vadd.c +1260 -0
  56. data/ext/minimap2/lib/simde/test/arm/neon/vdup_n.c +873 -0
  57. data/ext/minimap2/lib/simde/test/arm/neon/vmul.c +1084 -0
  58. data/ext/minimap2/lib/simde/test/arm/neon/vsub.c +1260 -0
  59. data/ext/minimap2/lib/simde/test/arm/test-arm-internal.h +18 -0
  60. data/ext/minimap2/lib/simde/test/arm/test-arm.c +20 -0
  61. data/ext/minimap2/lib/simde/test/arm/test-arm.h +8 -0
  62. data/ext/minimap2/lib/simde/test/cmake/AddCompilerFlags.cmake +171 -0
  63. data/ext/minimap2/lib/simde/test/cmake/ExtraWarningFlags.cmake +68 -0
  64. data/ext/minimap2/lib/simde/test/meson.build +64 -0
  65. data/ext/minimap2/lib/simde/test/munit/COPYING +21 -0
  66. data/ext/minimap2/lib/simde/test/munit/Makefile +55 -0
  67. data/ext/minimap2/lib/simde/test/munit/README.md +54 -0
  68. data/ext/minimap2/lib/simde/test/munit/example.c +351 -0
  69. data/ext/minimap2/lib/simde/test/munit/meson.build +37 -0
  70. data/ext/minimap2/lib/simde/test/munit/munit.c +2055 -0
  71. data/ext/minimap2/lib/simde/test/munit/munit.h +535 -0
  72. data/ext/minimap2/lib/simde/test/run-tests.c +20 -0
  73. data/ext/minimap2/lib/simde/test/run-tests.h +260 -0
  74. data/ext/minimap2/lib/simde/test/x86/avx.c +13752 -0
  75. data/ext/minimap2/lib/simde/test/x86/avx2.c +9977 -0
  76. data/ext/minimap2/lib/simde/test/x86/avx512bw.c +2664 -0
  77. data/ext/minimap2/lib/simde/test/x86/avx512f.c +10416 -0
  78. data/ext/minimap2/lib/simde/test/x86/avx512vl.c +210 -0
  79. data/ext/minimap2/lib/simde/test/x86/fma.c +2557 -0
  80. data/ext/minimap2/lib/simde/test/x86/meson.build +33 -0
  81. data/ext/minimap2/lib/simde/test/x86/mmx.c +2878 -0
  82. data/ext/minimap2/lib/simde/test/x86/skel.c +2984 -0
  83. data/ext/minimap2/lib/simde/test/x86/sse.c +5121 -0
  84. data/ext/minimap2/lib/simde/test/x86/sse2.c +9860 -0
  85. data/ext/minimap2/lib/simde/test/x86/sse3.c +486 -0
  86. data/ext/minimap2/lib/simde/test/x86/sse4.1.c +3446 -0
  87. data/ext/minimap2/lib/simde/test/x86/sse4.2.c +101 -0
  88. data/ext/minimap2/lib/simde/test/x86/ssse3.c +2084 -0
  89. data/ext/minimap2/lib/simde/test/x86/svml.c +1545 -0
  90. data/ext/minimap2/lib/simde/test/x86/test-avx.h +16 -0
  91. data/ext/minimap2/lib/simde/test/x86/test-avx512.h +25 -0
  92. data/ext/minimap2/lib/simde/test/x86/test-mmx.h +13 -0
  93. data/ext/minimap2/lib/simde/test/x86/test-sse.h +13 -0
  94. data/ext/minimap2/lib/simde/test/x86/test-sse2.h +13 -0
  95. data/ext/minimap2/lib/simde/test/x86/test-x86-internal.h +196 -0
  96. data/ext/minimap2/lib/simde/test/x86/test-x86.c +48 -0
  97. data/ext/minimap2/lib/simde/test/x86/test-x86.h +8 -0
  98. data/lib/minimap2/aligner.rb +2 -2
  99. data/lib/minimap2/ffi/constants.rb +3 -0
  100. data/lib/minimap2/version.rb +1 -1
  101. metadata +99 -3
@@ -0,0 +1,343 @@
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
+ * 2017-2020 Evan Nemerson <evan@nemerson.com>
23
+ */
24
+
25
+ #if !defined(SIMDE__SSE3_H)
26
+ # if !defined(SIMDE__SSE3_H)
27
+ # define SIMDE__SSE3_H
28
+ # endif
29
+ # include "sse2.h"
30
+
31
+ HEDLEY_DIAGNOSTIC_PUSH
32
+ SIMDE_DISABLE_UNWANTED_DIAGNOSTICS
33
+
34
+ # if defined(SIMDE_SSE3_NATIVE)
35
+ # undef SIMDE_SSE3_NATIVE
36
+ # endif
37
+ # if defined(SIMDE_ARCH_X86_SSE3) && !defined(SIMDE_SSE3_NO_NATIVE) && !defined(SIMDE_NO_NATIVE)
38
+ # define SIMDE_SSE3_NATIVE
39
+ # elif defined(SIMDE_ARCH_ARM_NEON) && !defined(SIMDE_SSE3_NO_NEON) && !defined(SIMDE_NO_NEON)
40
+ # define SIMDE_SSE3_NEON
41
+ # endif
42
+
43
+ # if defined(SIMDE_SSE3_NATIVE) && !defined(SIMDE_SSE2_NATIVE)
44
+ # if defined(SIMDE_SSE3_FORCE_NATIVE)
45
+ # error Native SSE3 support requires native SSE2 support
46
+ # else
47
+ HEDLEY_WARNING("Native SSE3 support requires native SSE2 support, disabling")
48
+ # undef SIMDE_SSE3_NATIVE
49
+ # endif
50
+ # elif defined(SIMDE_SSE3_NEON) && !defined(SIMDE_SSE2_NEON)
51
+ HEDLEY_WARNING("SSE3 NEON support requires SSE2 NEON support, disabling")
52
+ # undef SIMDE_SSE3_NEON
53
+ # endif
54
+
55
+ # if defined(SIMDE_SSE3_NATIVE)
56
+ # include <pmmintrin.h>
57
+ # endif
58
+
59
+ #if !defined(SIMDE_SSE3_NATIVE) && defined(SIMDE_ENABLE_NATIVE_ALIASES)
60
+ # define SIMDE_SSE3_ENABLE_NATIVE_ALIASES
61
+ #endif
62
+
63
+ SIMDE__BEGIN_DECLS
64
+
65
+ SIMDE__FUNCTION_ATTRIBUTES
66
+ simde__m128d
67
+ simde_mm_addsub_pd (simde__m128d a, simde__m128d b) {
68
+ #if defined(SIMDE_SSE3_NATIVE)
69
+ return _mm_addsub_pd(a, b);
70
+ #else
71
+ simde__m128d_private
72
+ r_,
73
+ a_ = simde__m128d_to_private(a),
74
+ b_ = simde__m128d_to_private(b);
75
+
76
+ #if defined(SIMDE_ASSUME_VECTORIZATION) && defined(SIMDE__SHUFFLE_VECTOR)
77
+ r_.f64 = SIMDE__SHUFFLE_VECTOR(64, 16, a_.f64 - b_.f64, a_.f64 + b_.f64, 0, 3);
78
+ #else
79
+ for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i += 2) {
80
+ r_.f64[ i ] = a_.f64[ i ] - b_.f64[ i ];
81
+ r_.f64[1 + i] = a_.f64[1 + i] + b_.f64[1 + i];
82
+ }
83
+ #endif
84
+
85
+ return simde__m128d_from_private(r_);
86
+ #endif
87
+ }
88
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
89
+ # define _mm_addsub_pd(a, b) simde_mm_addsub_pd(a, b)
90
+ #endif
91
+
92
+ SIMDE__FUNCTION_ATTRIBUTES
93
+ simde__m128
94
+ simde_mm_addsub_ps (simde__m128 a, simde__m128 b) {
95
+ #if defined(SIMDE_SSE3_NATIVE)
96
+ return _mm_addsub_ps(a, b);
97
+ #else
98
+ simde__m128_private
99
+ r_,
100
+ a_ = simde__m128_to_private(a),
101
+ b_ = simde__m128_to_private(b);
102
+
103
+ #if defined(SIMDE_SSE3_NEON) && defined(SIMDE_ARCH_AARCH64)
104
+ float32x4_t rs = vsubq_f32(a_.neon_f32, b_.neon_f32);
105
+ float32x4_t ra = vaddq_f32(a_.neon_f32, b_.neon_f32);
106
+ return vtrn2q_f32(vreinterpretq_f32_s32(vrev64q_s32(vreinterpretq_s32_f32(rs))), ra);
107
+ #elif defined(SIMDE_ASSUME_VECTORIZATION) && defined(SIMDE__SHUFFLE_VECTOR)
108
+ r_.f32 = SIMDE__SHUFFLE_VECTOR(32, 16, a_.f32 - b_.f32, a_.f32 + b_.f32, 0, 5, 2, 7);
109
+ #else
110
+ for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i += 2) {
111
+ r_.f32[ i ] = a_.f32[ i ] - b_.f32[ i ];
112
+ r_.f32[1 + i] = a_.f32[1 + i] + b_.f32[1 + i];
113
+ }
114
+ #endif
115
+
116
+ return simde__m128_from_private(r_);
117
+ #endif
118
+ }
119
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
120
+ # define _mm_addsub_ps(a, b) simde_mm_addsub_ps(a, b)
121
+ #endif
122
+
123
+ SIMDE__FUNCTION_ATTRIBUTES
124
+ simde__m128d
125
+ simde_mm_hadd_pd (simde__m128d a, simde__m128d b) {
126
+ #if defined(SIMDE_SSE3_NATIVE)
127
+ return _mm_hadd_pd(a, b);
128
+ #else
129
+ simde__m128d_private
130
+ r_,
131
+ a_ = simde__m128d_to_private(a),
132
+ b_ = simde__m128d_to_private(b);
133
+
134
+ #if defined(SIMDE_SSE3_NEON) && defined(SIMDE_ARCH_AARCH64)
135
+ simde_float64 res[2] = { vaddvq_f64(a_.neon_f64), vaddvq_f64(b_.neon_f64)};
136
+ r_.neon_f64 = vld1q_f64(res);
137
+ #elif defined(SIMDE_ASSUME_VECTORIZATION) && defined(SIMDE__SHUFFLE_VECTOR)
138
+ r_.f64 =
139
+ SIMDE__SHUFFLE_VECTOR(64, 16, a_.f64, b_.f64, 0, 2) +
140
+ SIMDE__SHUFFLE_VECTOR(64, 16, a_.f64, b_.f64, 1, 3);
141
+ #else
142
+ r_.f64[0] = a_.f64[0] + a_.f64[1];
143
+ r_.f64[1] = b_.f64[0] + b_.f64[1];
144
+ #endif
145
+
146
+ return simde__m128d_from_private(r_);
147
+ #endif
148
+ }
149
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
150
+ # define _mm_hadd_pd(a, b) simde_mm_hadd_pd(a, b)
151
+ #endif
152
+
153
+ SIMDE__FUNCTION_ATTRIBUTES
154
+ simde__m128
155
+ simde_mm_hadd_ps (simde__m128 a, simde__m128 b) {
156
+ #if defined(SIMDE_SSE3_NATIVE)
157
+ return _mm_hadd_ps(a, b);
158
+ #else
159
+ simde__m128_private
160
+ r_,
161
+ a_ = simde__m128_to_private(a),
162
+ b_ = simde__m128_to_private(b);
163
+
164
+ #if defined(SIMDE_SSE3_NEON) && defined(SIMDE_ARCH_AARCH64)
165
+ r_.f32 = vpaddq_f32(a_.neon_f32, b_.neon_f32);
166
+ #elif defined(SIMDE_ASSUME_VECTORIZATION) && defined(SIMDE__SHUFFLE_VECTOR)
167
+ r_.f32 =
168
+ SIMDE__SHUFFLE_VECTOR(32, 16, a_.f32, b_.f32, 0, 2, 4, 6) +
169
+ SIMDE__SHUFFLE_VECTOR(32, 16, a_.f32, b_.f32, 1, 3, 5, 7);
170
+ #else
171
+ r_.f32[0] = a_.f32[0] + a_.f32[1];
172
+ r_.f32[1] = a_.f32[2] + a_.f32[3];
173
+ r_.f32[2] = b_.f32[0] + b_.f32[1];
174
+ r_.f32[3] = b_.f32[2] + b_.f32[3];
175
+ #endif
176
+
177
+ return simde__m128_from_private(r_);
178
+ #endif
179
+ }
180
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
181
+ # define _mm_hadd_ps(a, b) simde_mm_hadd_ps(a, b)
182
+ #endif
183
+
184
+ SIMDE__FUNCTION_ATTRIBUTES
185
+ simde__m128d
186
+ simde_mm_hsub_pd (simde__m128d a, simde__m128d b) {
187
+ #if defined(SIMDE_SSE3_NATIVE)
188
+ return _mm_hsub_pd(a, b);
189
+ #else
190
+ simde__m128d_private
191
+ r_,
192
+ a_ = simde__m128d_to_private(a),
193
+ b_ = simde__m128d_to_private(b);
194
+
195
+ #if defined(SIMDE_ASSUME_VECTORIZATION) && defined(SIMDE__SHUFFLE_VECTOR)
196
+ r_.f64 =
197
+ SIMDE__SHUFFLE_VECTOR(64, 16, a_.f64, b_.f64, 0, 2) -
198
+ SIMDE__SHUFFLE_VECTOR(64, 16, a_.f64, b_.f64, 1, 3);
199
+ #else
200
+ r_.f64[0] = a_.f64[0] - a_.f64[1];
201
+ r_.f64[1] = b_.f64[0] - b_.f64[1];
202
+ #endif
203
+
204
+ return simde__m128d_from_private(r_);
205
+ #endif
206
+ }
207
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
208
+ # define _mm_hsub_pd(a, b) simde_mm_hsub_pd(a, b)
209
+ #endif
210
+
211
+ SIMDE__FUNCTION_ATTRIBUTES
212
+ simde__m128
213
+ simde_mm_hsub_ps (simde__m128 a, simde__m128 b) {
214
+ #if defined(SIMDE_SSE3_NATIVE)
215
+ return _mm_hsub_ps(a, b);
216
+ #else
217
+ simde__m128_private
218
+ r_,
219
+ a_ = simde__m128_to_private(a),
220
+ b_ = simde__m128_to_private(b);
221
+
222
+ #if defined(SIMDE_SSE3_NEON) && defined(SIMDE_ARCH_AARCH64)
223
+ r_.f32 = vsubq_f32(vuzp1q_f32(a_.neon_f32, b_.neon_f32), vuzp2q_f32(a_.neon_f32, b_.neon_f32));
224
+ #elif defined(SIMDE_ASSUME_VECTORIZATION) && defined(SIMDE__SHUFFLE_VECTOR)
225
+ r_.f32 =
226
+ SIMDE__SHUFFLE_VECTOR(32, 16, a_.f32, b_.f32, 0, 2, 4, 6) -
227
+ SIMDE__SHUFFLE_VECTOR(32, 16, a_.f32, b_.f32, 1, 3, 5, 7);
228
+ #else
229
+ r_.f32[0] = a_.f32[0] - a_.f32[1];
230
+ r_.f32[1] = a_.f32[2] - a_.f32[3];
231
+ r_.f32[2] = b_.f32[0] - b_.f32[1];
232
+ r_.f32[3] = b_.f32[2] - b_.f32[3];
233
+ #endif
234
+
235
+ return simde__m128_from_private(r_);
236
+ #endif
237
+ }
238
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
239
+ # define _mm_hsub_ps(a, b) simde_mm_hsub_ps(a, b)
240
+ #endif
241
+
242
+ SIMDE__FUNCTION_ATTRIBUTES
243
+ simde__m128i
244
+ simde_mm_lddqu_si128 (simde__m128i const* mem_addr) {
245
+ #if defined(SIMDE_SSE3_NATIVE)
246
+ return _mm_lddqu_si128(mem_addr);
247
+ #else
248
+ simde__m128i_private r_;
249
+
250
+ #if defined(SIMDE_SSE3_NEON)
251
+ r_.neon_i32 = vld1q_s32(HEDLEY_REINTERPRET_CAST(int32_t const*, mem_addr));
252
+ #else
253
+ simde_memcpy(&r_, mem_addr, sizeof(r_));
254
+ #endif
255
+
256
+ return simde__m128i_from_private(r_);
257
+ #endif
258
+ }
259
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
260
+ # define _mm_lddqu_si128(mem_addr) simde_mm_lddqu_si128(mem_addr)
261
+ #endif
262
+
263
+ SIMDE__FUNCTION_ATTRIBUTES
264
+ simde__m128d
265
+ simde_mm_movedup_pd (simde__m128d a) {
266
+ #if defined(SIMDE_SSE3_NATIVE)
267
+ return _mm_movedup_pd(a);
268
+ #else
269
+ simde__m128d_private
270
+ r_,
271
+ a_ = simde__m128d_to_private(a);
272
+
273
+ #if defined(SIMDE_VECTOR_SUBSCRIPT_OPS) && defined(SIMDE__SHUFFLE_VECTOR)
274
+ r_.f64 = SIMDE__SHUFFLE_VECTOR(64, 16, a_.f64, a_.f64, 0, 0);
275
+ #else
276
+ r_.f64[0] = a_.f64[0];
277
+ r_.f64[1] = a_.f64[0];
278
+ #endif
279
+
280
+ return simde__m128d_from_private(r_);
281
+ #endif
282
+ }
283
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
284
+ # define _mm_movedup_pd(a) simde_mm_movedup_pd(a)
285
+ #endif
286
+
287
+ SIMDE__FUNCTION_ATTRIBUTES
288
+ simde__m128
289
+ simde_mm_movehdup_ps (simde__m128 a) {
290
+ #if defined(SIMDE_SSE3_NATIVE)
291
+ return _mm_movehdup_ps(a);
292
+ #else
293
+ simde__m128_private
294
+ r_,
295
+ a_ = simde__m128_to_private(a);
296
+
297
+ #if defined(SIMDE_ASSUME_VECTORIZATION) && defined(SIMDE__SHUFFLE_VECTOR)
298
+ r_.f32 = SIMDE__SHUFFLE_VECTOR(32, 16, a_.f32, a_.f32, 1, 1, 3, 3);
299
+ #else
300
+ r_.f32[0] = a_.f32[1];
301
+ r_.f32[1] = a_.f32[1];
302
+ r_.f32[2] = a_.f32[3];
303
+ r_.f32[3] = a_.f32[3];
304
+ #endif
305
+
306
+ return simde__m128_from_private(r_);
307
+ #endif
308
+ }
309
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
310
+ # define _mm_movehdup_ps(a) simde_mm_movehdup_ps(a)
311
+ #endif
312
+
313
+ SIMDE__FUNCTION_ATTRIBUTES
314
+ simde__m128
315
+ simde_mm_moveldup_ps (simde__m128 a) {
316
+ #if defined(SIMDE__SSE3_NATIVE)
317
+ return _mm_moveldup_ps(a);
318
+ #else
319
+ simde__m128_private
320
+ r_,
321
+ a_ = simde__m128_to_private(a);
322
+
323
+ #if defined(SIMDE_ASSUME_VECTORIZATION) && defined(SIMDE__SHUFFLE_VECTOR)
324
+ r_.f32 = SIMDE__SHUFFLE_VECTOR(32, 16, a_.f32, a_.f32, 0, 0, 2, 2);
325
+ #else
326
+ r_.f32[0] = a_.f32[0];
327
+ r_.f32[1] = a_.f32[0];
328
+ r_.f32[2] = a_.f32[2];
329
+ r_.f32[3] = a_.f32[2];
330
+ #endif
331
+
332
+ return simde__m128_from_private(r_);
333
+ #endif
334
+ }
335
+ #if defined(SIMDE_SSE3_ENABLE_NATIVE_ALIASES)
336
+ # define _mm_moveldup_ps(a) simde_mm_moveldup_ps(a)
337
+ #endif
338
+
339
+ SIMDE__END_DECLS
340
+
341
+ HEDLEY_DIAGNOSTIC_POP
342
+
343
+ #endif /* !defined(SIMDE__SSE3_H) */