- 09 Jan, 2021 2 commits
-
-
Evan Nemerson authored
-
Evan Nemerson authored
-
- 08 Jan, 2021 3 commits
-
-
Evan Nemerson authored
-
Evan Nemerson authored
-
Evan Nemerson authored
-
- 07 Jan, 2021 3 commits
-
-
Evan Nemerson authored
This isn't complete, it's just to the point I got tired of working on it.
-
Evan Nemerson authored
XOP was an AMD ISA extension which Intel never adopted. It is present on heavy-equipment CPUs (bulldozer, piledriver, etc.), but no longer supported on Zen. It never really attained widespread use, but this could still be useful. Huge thanks to Jan Ringoš (@tringi) for testing this during development; I don't have access to any hardware that supports XOP so Jan's involvement was absolutely critical. This is just the portable version; we still need to go through and add accelerated implementations. Fixes #678
-
Evan Nemerson authored
The vector types have alignment requirements, but these functions are specifically for storing *unaligned* data. Some compilers (such as clang 11) have started to generate bad code for the old versions, but switching over to void* fixes that. This also moves the _mm_loadu_epi{8,16,32,64} functions from AVX-512 over to SSE2 (for 128-bit) and AVX (for 256-bit), effectively replacing the simde_x_mm*_loadu_* functions which are now simply aliases for the AVX-512 functions. The only real issue here is that our loadu_si* function take a void* instead of a __m128i* or __m256i*, making them more permissive. Code written against SIMDe will allow you to pass, for example, int8_t* data to these functions without warning, whereas the _loadu_si* functions will likely trigger a diagnostic. The solution for this is for code using SIMDe to call functions like _mm_loadu_epi8 instead of _mm_loadu_si128, even if they don't want to use AVX-512. On SSE2, this will simply become a cast and call to _mm_loadu_si128 and all is good. On other architectures we avoid undefined behavior becous void* has no alignment requirements. That means the only *real* problem is code which ifdefs SIMDe usage. In C I would suggest casting to void* instead of __m128i* or __m256i* when calling _mm_loadu_si128 or _mm_loadu_si256; everything will work as expected. In C++, though, that will still generate a warning… probably the best (well, least bad at least) solution there would be to define a macro to use instead of _mm_loadu_si128/_mm256_loadu_si256 and use an ifdef to define it differently depending on whether you're using SIMDe or not.
-
- 04 Jan, 2021 2 commits
-
-
Evan Nemerson authored
Fixes #691
-
Evan Nemerson authored
This allows us to to only include it from files which really need it (of which there aren't many; currently only SVML), which is important since it can pull in a lot of extra headers and dramatically increase compilation time.
-
- 02 Jan, 2021 1 commit
-
-
Michael R. Crusoe authored
Fixes #693
-
- 01 Jan, 2021 1 commit
-
-
Evan Nemerson authored
-
- 31 Dec, 2020 2 commits
-
-
Evan Nemerson authored
-
Evan Nemerson authored
For value outside of (INT32_MIN, INT32_MAX), as well as NaNs, x86 returns INT32_MIN. I added a SIMDE_FAST_CONVERSION_RANGE macro (which is defined by default if SIMDE_FAST_MATH is defined) to opt-out of the more accurate behavior since it's also substantially slower on many platforms. Fixes #685
-
- 29 Dec, 2020 5 commits
-
-
Michael R. Crusoe authored
-
Michael R. Crusoe authored
-
Michael R. Crusoe authored
-
Michael R. Crusoe authored
-
Evan Nemerson authored
-
- 28 Dec, 2020 3 commits
-
-
Evan Nemerson authored
-
Evan Nemerson authored
Fixes #682
-
Evan Nemerson authored
These are based on some StackOverflow answers linked to in this here: https://stackoverflow.com/questions/65441496/what-is-the-most-efficient-way-to-do-unsigned-64-bit-comparison-on-sse2
-
- 26 Dec, 2020 2 commits
-
-
Michael R. Crusoe authored
Oops, forgot this for the 0.6.0 release!
-
rosbif authored
Add _mm{,256}_{,mask_,mask2_,maskz_}permutex2var_epi{8,16,32,64} intrinsics to permutex2var.[ch] Add _mm{,256}_{,mask_,mask2_,maskz_}permutex2var_{pd,ps} intrinsics to permutex2var.[ch] Add AVX, SSE, NEON, Altivec and Wasm translations for most intrinsics.
-
- 24 Dec, 2020 1 commit
-
-
Michael R. Crusoe authored
* operationalize clang bug 44589 * remove unused bug references
-
- 23 Dec, 2020 3 commits
-
-
Evan Nemerson authored
This is basically the same false positive as #657. As of GCC 10 the diagnostic is no longer emitted in C mode, but it is still emitted in C++ mode, so I'm removing the version check from the ld3 code, too. Fixes #676
-
Evan Nemerson authored
-
Evan Nemerson authored
_mm_prefetch is supposed to take an int, but when optimization enabled GCC uses an enum _mm_hint instead. Without optimization _mm_prefetch is defined as a macro (as it is on clang) since there is no constant propagation. Since we can't rely on all hints being defined on all platforms we define our own, which are not part of the enum _mm_hint. So, on GCC we cast each of the hints to enum _mm_hint to avoid a warning about an invalid conversion. IMHO this is technically a bug in the GCC API, but I appreciate the effort at getting the compiler to validate the input so I'm not going to complain to the GCC folks as long as this doesn't cause additional breakage. Fixes #673
-
- 22 Dec, 2020 8 commits
-
-
Evan Nemerson authored
-
Christopher Moore authored
Add the following intrinsics to permutexvar.[ch] : - _mm_{,mask_,maskz_}permutexvar_epi{8,16} - _mm256_{,mask_,maskz_}permutexvar_epi{8,16,32,64} - _mm256_{,mask_,maskz_}permutexvar_{pd,ps} Add translations to AVX, SSE, NEON, Altivec and WASM -
Christopher Moore authored
Fixes #670
-
Evan Nemerson authored
-
Evan Nemerson authored
-
Evan Nemerson authored
This should just be slightly easier (less difficult) for compilers since they may be able to convert this to a gather operation on some architectures. I'm not going to hold my breath, though.
-
Evan Nemerson authored
Fixes #657
-
Evan Nemerson authored
Fixes #656
-
- 21 Dec, 2020 4 commits
-
-
Michael R. Crusoe authored
Remove useless for-loops Remove redundant to_private/from_private Remove redundant defined(SIMDE_ARM_NEON_A32V7_NATIVE) when we already check for SIMDE_NATURAL_VECTOR_SIZE_LE(128)
-
Hidayat Khan authored
-
Hidayat Khan authored
-
Hidayat Khan authored
-