Bug 1861709 replace AudioCallbackDriver::ThreadRunning() assertions that mean to...
[gecko.git] / third_party / simde / README.md
blob2c3fdd15efbc94838850d7b6e0cb7a8b91ca6c1d
1 # SIMD Everywhere
2 <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
3 [![All Contributors](https://img.shields.io/badge/all_contributors-58-orange.svg?style=flat-square)](#contributors-)
4 <!-- ALL-CONTRIBUTORS-BADGE:END -->
5 [![Chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://matrix.to/#/#simd-everywhere_community:gitter.im)
6 [![codecov](https://codecov.io/gh/simd-everywhere/simde/branch/master/graph/badge.svg?token=jcMBoRk0ui)](https://codecov.io/gh/simd-everywhere/simde)
8 The SIMDe header-only library provides fast, portable implementations of
9 [SIMD intrinsics](https://en.wikipedia.org/wiki/SIMD) on hardware which
10 doesn't natively support them, such as calling [SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions)
11 functions on ARM.  There is no performance penalty if the hardware
12 supports the native implementation (*e.g.*, SSE/[AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions)
13 runs at full speed on [x86](https://en.wikipedia.org/wiki/X86),
14 [NEON](https://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_(Neon)) on [ARM](https://en.wikipedia.org/wiki/ARM_architecture),
15 *etc.*).
17 This makes porting code to other architectures much easier in a few
18 key ways:
20 First, instead of forcing you to rewrite everything for each
21 architecture, SIMDe lets you get a port up and running almost
22 effortlessly.  You can then start working on switching the most
23 performance-critical sections to native intrinsics, improving
24 performance gradually.  SIMDe lets (for example) SSE/AVX and NEON code
25 exist side-by-side, in the same implementation.
27 Second, SIMDe makes it easier to write code targeting [ISA](https://en.wikipedia.org/wiki/Instruction_set_architecture)
28 extensions you don't have convenient access to.  You can run NEON code on your
29 x86 machine *without an emulator*.  Obviously you'll eventually want
30 to test on the actual hardware you're targeting, but for most
31 development, SIMDe can provide a much easier path.
33 SIMDe takes a very different approach from most other SIMD abstraction
34 layers in that it aims to expose the entire functionality of the
35 underlying instruction set.  Instead of limiting functionality to the
36 lowest common denominator, SIMDe tries to minimize the amount of
37 effort required to port while still allowing you the space to optimize
38 as needed.
40 The current focus is on writing complete portable implementations,
41 though a large number of functions already have accelerated
42 implementations using one (or more) of the following:
44  * SIMD intrinsics from other ISA extensions (e.g., using NEON to
45    implement SSE).
46  * Compiler-specific vector extensions and built-ins such as
47    [`__builtin_shufflevector`](http://clang.llvm.org/docs/LanguageExtensions.html#langext-builtin-shufflevector)
48    and
49    [`__builtin_convertvector`](http://clang.llvm.org/docs/LanguageExtensions.html#langext-builtin-convertvector)
50  * Compiler auto-vectorization hints, using:
51    * [OpenMP 4 SIMD](http://www.openmp.org/)
52    * [Cilk Plus](https://www.cilkplus.org/)
53    * [GCC loop-specific pragmas](https://gcc.gnu.org/onlinedocs/gcc/Loop-Specific-Pragmas.html)
54    * [clang pragma loop hint directives](http://llvm.org/docs/Vectorizers.html#pragma-loop-hint-directives)
56 You can [try SIMDe online](https://simde.netlify.app/godbolt/demo)
57 using Compiler Explorer and an amalgamated SIMDe header.
59 If you have any questions, please feel free to use the
60 [issue tracker](https://github.com/simd-everywhere/simde/issues) or the
61 [mailing list](https://groups.google.com/forum/#!forum/simde).
63 ## Current Status
65 There are currently complete implementations of the following instruction
66 set extensions:
68 * x86 / x86_64
69   * [MMX](https://en.wikipedia.org/wiki/MMX_(instruction_set))
70   * [SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions)
71   * [SSE2](https://en.wikipedia.org/wiki/SSE2)
72   * [SSE3](https://en.wikipedia.org/wiki/SSE3)
73   * [SSSE3](https://en.wikipedia.org/wiki/SSSE3)
74   * [SSE4.1](https://en.wikipedia.org/wiki/SSE4#SSE4.1)
75   * [AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions)
76   * [AVX2](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Advanced_Vector_Extensions_2)
77   * [FMA](https://en.wikipedia.org/wiki/FMA_instruction_set)
78   * [GFNI](https://en.wikipedia.org/wiki/AVX-512#GFNI)
79   * [CLMUL](https://en.wikipedia.org/wiki/CLMUL_instruction_set)
80   * [XOP](https://en.wikipedia.org/wiki/XOP_instruction_set)
81   * [SVML](https://software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compiler-reference/intrinsics/intrinsics-for-intel-advanced-vector-extensions-512-intel-avx-512-instructions/intrinsics-for-arithmetic-operations-1/intrinsics-for-short-vector-math-library-svml-operations.html)
82 * WebAssembly
83   * [SIMD128](https://github.com/WebAssembly/simd)
85 As well as partial support for many others, including NEON and SVE in
86 addition to several AVX-512 extensions.  See the
87 [instruction-set-support](https://github.com/simd-everywhere/simde/issues?q=is%3Aissue+is%3Aopen+label%3Ainstruction-set-support+sort%3Aupdated-desc)
88 label in the issue tracker for details on progress.  If you'd like to
89 be notified when an instruction set is available you may subscribe to
90 the relevant issue.
92 If you have a project you're interested in using with SIMDe but we
93 don't yet support all the functions you need, please file an issue
94 with a list of what's missing so we know what to prioritize.
96 The default branch is protected so commits never reach it unless
97 they have passed extensive CI checks.  Status badges don't really
98 make sense since they will always be green, but here are the links:
100 * [GitHub Actions](https://github.com/simd-everywhere/simde/actions)
101 * [Cirrus CI](https://cirrus-ci.com/github/simd-everywhere/simde)
102 * [Semaphore CI](https://nemequ.semaphoreci.com/projects/simde)
103 * [Circle CI](https://app.circleci.com/pipelines/github/simd-everywhere/simde)
104 * [AppVeyor](https://ci.appveyor.com/project/nemequ/simde)
105 * [Azure Pipelines](https://dev.azure.com/simd-everywhere/SIMDe/_build)
106 * [Drone CI](https://cloud.drone.io/simd-everywhere/simde/)
108 If you're adding a new build I suggest Cirrus CI, which is where we
109 currently have the most room given the number of builds currently on
110 the platform and the quotas for free/open-source usage.  Alternately,
111 feel free to set up another provider (such as
112 [Codefresh](https://codefresh.io/),
113 [Shippable](https://www.shippable.com/),
114 [Bitrise](https://www.bitrise.io/),
115 [Werkaer](https://app.wercker.com/), etc.).
117 *Notice*: we plan on changing the name of the default branch from
118 "master" to something else soon; we are just trying to wait to see what
119 name git settles on so we can be consistent.
121 ## Contributing
123 First off, if you're reading this: thank you! Even considering
124 contributing to SIMDe is very much appreciated!
126 SIMDe is a fairly large undertaking; there are a *lot* of functions to
127 get through and a lot of opportunities for optimization on different
128 platforms, so we're very happy for any help you can provide.
130 Programmers of all skill levels are welcome, there are lots of tasks
131 which are pretty straightforward and don't require any special
132 expertise.
134 If you're not sure how you'd like to contribute, please consider taking
135 a look at [the issue tracker](https://github.com/simd-everywhere/simde/issues).
136 There is a [good first issue](https://github.com/simd-everywhere/simde/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
137 tag if you want to ease into a your first contributions, but if you're
138 interested in something else please get in touch via the issue tracker;
139 we're happy to help you get a handle on whatever you are interested in.
141 If you're interested in implementing currently unimplemented functions,
142 there is [a
143 guide](https://github.com/simd-everywhere/simde/wiki/Implementing-a-New-Function)
144 explaining how to add new functions and how to quickly and easily get
145 a test case in place.  It's a bit rough right now, but if anything is
146 unclear please feel free to use the issue tracker to ask about
147 anything you're not clear on.
149 ## Usage
151 First, it is important to note that *you do not need two separate
152 versions* (one using SIMDe, the other native).  If the native functions
153 are available SIMDe will use them, and compilers easily optimize away
154 any overhead from SIMDe; all they have to do is some basic inlining.
155 `-O2` should be enough, but we strongly recommend `-O3` (or whatever
156 flag instructs your compiler to aggressizely optimize) since many of
157 the portable fallbacks are substantially faster with aggressive
158 auto-vectorization that isn't enabled at lower optimization levels.
160 Each instruction set has a separate file; `x86/mmx.h` for MMX,
161 `x86/sse.h` for SSE, `x86/sse2.h` for SSE2, and so on.  Just include
162 the header for whichever instruction set(s) you want *instead of the
163 native version* (if you include the native version after SIMDe it will
164 result in compile-time errors if native aliases are enabled).  SIMDe
165 will provide the fastest implementation it can given which extensions
166 you've enabled in your compiler (i.e., if you want to use NEON to
167 implement SSE, you may need to pass something like `-mfpu=neon`
168 or `-march=armv8-a+simd`.  See
169 [GCC ARM-Options](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html)
170 for more information).
172 If you define `SIMDE_ENABLE_NATIVE_ALIASES` before including SIMDe
173 you can use the same names as the native functions.  Unfortunately,
174 this is somewhat error-prone due to portability issues in the APIs, so
175 it's recommended to only do this for testing.  When
176 `SIMDE_ENABLE_NATIVE_ALIASES` is undefined only the versions prefixed
177 with `simde_` will be available; for example, the MMX `_mm_add_pi8`
178 intrinsic becomes `simde_mm_add_pi8`, and `__m64` becomes `simde__m64`.
180 Since SIMDe is meant to be portable, many functions which assume types
181 are of a specific size have been altered to use fixed-width types
182 instead.  For example, Intel's APIs use `char` for signed 8-bit
183 integers, but `char` on ARM is generally unsigned.  SIMDe uses `int8_t`
184 to make the API portable, but that means your code may require some
185 minor changes (such as using `int8_t` instead of `char`) to work on
186 other platforms.
188 That said, the changes are usually quite minor.  It's often enough to
189 just use search and replace, manual changes are required pretty
190 infrequently.
192 ### OpenMP 4 SIMD
194 SIMDe makes extensive use of annotations to help the compiler vectorize
195 code.  By far the best annotations use the SIMD support built in to
196 OpenMP 4, so if your compiler supports these annotations we strongly
197 recommend you enable them.
199 If you are already using OpenMP, SIMDe will automatically detect it
200 using the `_OPENMP` macro and no further action is required.
202 Some compilers allow you to enable OpenMP SIMD *without* enabling the
203 full OpenMP.  In such cases there is no runtime dependency on OpenMP
204 and no runtime overhead; SIMDe will just be faster.  Unfortunately,
205 SIMDe has no way to detect such situations (the `_OPENMP` macro is not
206 defined), so after enabling it in your compiler you'll need to define
207 `SIMDE_ENABLE_OPENMP` (e.g., by passing `-DSIMDE_ENABLE_OPENMP`) to get
208 SIMDe to output the relevant pragmas.
210 Enabling OpenMP SIMD support varies by compiler:
212  * GCC 4.9+ and clang 6+ support a `-fopenmp-simd` command line flag.
213  * ICC supports a `-qopenmp-simd` command line flag.
214  * MCST's LCC enables OpenMP SIMD by default, so no flags are needed
215    (technically you don't even need to pass `-DSIMDE_ENABLE_OPENMP`).
217 We are not currently aware of any other compilers which allow you to
218 enable OpenMP SIMD support without enabling full OpenMP (if you are
219 please file an issue to let us know).  You should determine whether you
220 wish to enable full OpenMP support on a case-by-case basis, but it is
221 likely that the overhead of linking to (but not using) the OpenMP
222 runtime library will be dwarfed by the performance improvements from
223 using the OpenMP SIMD annotations in SIMDe.
225 If you choose not to use OpenMP SIMD, SIMDe also supports
226 using [Cilk Plus](https://www.cilkplus.org/), [GCC loop-specific
227 pragmas](https://gcc.gnu.org/onlinedocs/gcc/Loop-Specific-Pragmas.html),
228 or [clang pragma loop hint
229 directives](http://llvm.org/docs/Vectorizers.html#pragma-loop-hint-directives),
230 though these are not nearly as effective as OpenMP SIMD and depending
231 on them will likely result in less efficient code.  All of these are
232 detected automatically by SIMDe, so if they are enabled in your
233 compiler nothing more is required.
235 If for some reason you do not wish to enable OpenMP 4 SIMD support even
236 though SIMDe detects it, you should define `SIMDE_DISABLE_OPENMP` prior
237 to including SIMDe.
239 ## Portability
241 ### Compilers
243 SIMDe does depend on some C99 features, though the subset supported by
244 MSVC also works.  While we do our best to make sure we provide optimized
245 implementations where they are supported, SIMDe does contain portable
246 fallbacks which are designed to work on any C99 compiler.
248 Every commit is tested in CI on multiple compilers, platforms, and
249 configurations, and our test coverage is extremely extensive.
250 Currently tested compilers include:
252  * GCC versions back to 4.8
253  * Clang versions back to 3.8
254  * Microsoft Visual Studio back to 12 (2013)
255  * IBM XL C/C++
256  * Intel C/C++ Compiler (ICC)
258 I'm generally willing to accept patches to add support for other
259 compilers, as long as they're not too disruptive, *especially* if we
260 can get CI support going.  If using one of our existing CI providers
261 isn't an option then other CI platforms can be added.
263 ### Hardware
265 The following architectures are tested in CI for every commit:
267  * x86_64
268  * x86
269  * AArch64
270  * ARMv8
271  * ARMv7
272  * PPC64
273  * MIPS Loongson
275 We would love to add more, so patches are extremely welcome!
277 ## Related Projects
279  * The "builtins" module in
280    [portable-snippets](https://github.com/nemequ/portable-snippets)
281    does much the same thing, but for compiler-specific intrinsics
282    (think `__builtin_clz` and `_BitScanForward`), **not** SIMD
283    intrinsics.
284  * Intel offers an emulator, the [Intel® Software Development
285    Emulator](https://software.intel.com/en-us/articles/intel-software-development-emulator/)
286    which can be used to develop software which uses Intel intrinsics
287    without having to own hardware which supports them, though it
288    doesn't help for deployment.
289  * [Iris](https://github.com/AlexYaruki/iris) is the only other project
290    I'm aware of which is attempting to create portable implementations
291    like SIMDe.  SIMDe is much further along on the Intel side, but Iris
292    looks to be in better shape on ARM.  C++-only, Apache 2.0 license.
293    AFAICT there are no accelerated fallbacks, nor is there a good way to
294    add them since it relies extensively on templates.
295  * There are a few projects trying to implement one set with another:
296    * [ARM_NEON_2_x86_SSE](https://github.com/intel/ARM_NEON_2_x86_SSE)
297      — implementing NEON using SSE.  Quite extensive, Apache 2.0
298      license.
299    * [sse2neon](https://github.com/jratcliff63367/sse2neon) —
300      implementing SSE using NEON.  This code has already been merged
301      into SIMDe.
302    * [veclib](https://github.com/IvantheDugtrio/veclib) — implementing
303      SSE2 using AltiVec/VMX, using a non-free IBM library called
304      [powerveclib](https://www.ibm.com/developerworks/community/groups/community/powerveclib/)
305    * [SSE-to-NEON](https://github.com/otim/SSE-to-NEON) — implementing
306      SSE with NEON.  Non-free, C++.
307  * [arm-neon-tests](https://github.com/christophe-lyon/arm-neon-tests)
308    contains tests to verify NEON implementations.
310 If you know of any other related projects, please [let us
311 know](https://github.com/simd-everywhere/simde/issues/new)!
313 ## Caveats
315 Sometime features can't be emulated.  If SIMDe is operating in native
316 mode the functions will work as expected, but if there is no native
317 support some caveats apply:
319  * Many functions require <math.h> and/or <fenv.h>.  SIMDe will still
320    work without those headers, but the results of those functions are
321    undefined.
322  * x86 / x86_64
323    * SSE
324      * `SIMDE_MM_SET_ROUNDING_MODE()` will use `fesetround()`, altering
325        the global rounding mode.
326      * `simde_mm_getcsr` and `simde_mm_setcsr` only implement bits 13
327        and 14 (rounding mode).
328    * AVX
329      * `simde_mm256_test*` do not set the CF/ZF registers as there is
330        no portable way to implement that functionality.
331      * `simde_mm256_zeroall` and `simde_mm256_zeroupper` are not
332        implemented as there is no portable way to implement that
333        functionality.
335 Additionally, there are some known limitations which apply when using
336 native aliases (`SIMDE_ENABLE_NATIVE_ALIASES`):
338 * On Windows x86 (but not x86_64), some MMX functions and SSE/SSE2
339   functions which use MMX types (__m64) other than for pointers may
340   return incorrect results.
342 Also, as mentioned earlier, while some APIs make assumptions about
343 basic types (*e.g.*, `int` is 32 bits), SIMDe does not, so many types
344 have been altered to use portable fixed-width versions such as
345 `int32_t`.
347 If you find any other differences, please file an issue so we can either fix
348 it or add it to the list above.
350 ## Benefactors
352 SIMDe uses resources provided for free by a number of organizations.
353 While this shouldn't be taken to imply endorsement of SIMDe, we're
354 tremendously grateful for their support:
356  * [IntegriCloud](https://integricloud.com/) — provides access to a very
357    fast POWER9 server for developing AltiVec/VMX support.
358  * [GCC Compile Farm](https://gcc.gnu.org/wiki/CompileFarm) — provides
359    access to a wide range of machines with different architectures for
360    developing support for various ISA extensions.
361  * [CodeCov.io](https://codecov.io/) — provides code coverage analysis
362    for our test cases.
363  * [Google](https://www.google.com/) ­— financing
364    [Summer of Code](https://summerofcode.withgoogle.com/), substantial
365    amounts of code (Sean Maher's contributions), and an [Open Source Peer
366    Bonus](https://opensource.google/docs/growing/peer-bonus/).
368 Without such organizations donating resources, SIMDe wouldn't be nearly
369 as useful or usable as it is today.
371 We would also like to thank anyone who has helped develop the myriad
372 of software on which SIMDe relies, including compilers and analysis
373 tools.
375 Finally, a special thank you to
376 [anyone who has contributed](https://github.com/simd-everywhere/simde/graphs/contributors)
377 to SIMDe, filed bugs, provided suggestions, or helped with SIMDe
378 development in any way.
380 ## License
382 SIMDe is distributed under an MIT-style license; see COPYING for
383 details.
385 ## Contributors ✨
387 Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
389 <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
390 <!-- prettier-ignore-start -->
391 <!-- markdownlint-disable -->
392 <table>
393   <tr>
394     <td align="center"><a href="https://nemequ.github.io/"><img src="https://avatars0.githubusercontent.com/u/1151?v=4" width="100px;" alt=""/><br /><sub><b>Evan Nemerson</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=nemequ" title="Code">💻</a> <a href="#content-nemequ" title="Content">🖋</a> <a href="https://github.com/nemequ/simde/commits?author=nemequ" title="Documentation">📖</a> <a href="#example-nemequ" title="Examples">💡</a> <a href="#ideas-nemequ" title="Ideas, Planning, & Feedback">🤔</a> <a href="#question-nemequ" title="Answering Questions">💬</a> <a href="https://github.com/nemequ/simde/pulls?q=is%3Apr+reviewed-by%3Anemequ" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/nemequ/simde/commits?author=nemequ" title="Tests">⚠️</a> <a href="#tutorial-nemequ" title="Tutorials">✅</a> <a href="#talk-nemequ" title="Talks">📢</a> <a href="https://github.com/nemequ/simde/issues?q=author%3Anemequ" title="Bug reports">🐛</a> <a href="#infra-nemequ" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-nemequ" title="Maintenance">🚧</a> <a href="#projectManagement-nemequ" title="Project Management">📆</a></td>
395     <td align="center"><a href="https://orcid.org/0000-0002-2961-9670"><img src="https://avatars3.githubusercontent.com/u/1330696?v=4" width="100px;" alt=""/><br /><sub><b>Michael R. Crusoe</b></sub></a><br /><a href="https://github.com/nemequ/simde/issues?q=author%3Amr-c" title="Bug reports">🐛</a> <a href="https://github.com/nemequ/simde/commits?author=mr-c" title="Code">💻</a> <a href="#eventOrganizing-mr-c" title="Event Organizing">📋</a> <a href="#fundingFinding-mr-c" title="Funding Finding">🔍</a> <a href="#ideas-mr-c" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-mr-c" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#platform-mr-c" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/nemequ/simde/commits?author=mr-c" title="Tests">⚠️</a></td>
396     <td align="center"><a href="https://github.com/himanshi18037"><img src="https://avatars1.githubusercontent.com/u/43923076?v=4" width="100px;" alt=""/><br /><sub><b>HIMANSHI MATHUR</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=himanshi18037" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=himanshi18037" title="Tests">⚠️</a></td>
397     <td align="center"><a href="https://github.com/masterchef2209"><img src="https://avatars0.githubusercontent.com/u/27916352?v=4" width="100px;" alt=""/><br /><sub><b>Hidayat Khan</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=masterchef2209" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=masterchef2209" title="Tests">⚠️</a></td>
398     <td align="center"><a href="https://github.com/rosbif"><img src="https://avatars1.githubusercontent.com/u/553899?v=4" width="100px;" alt=""/><br /><sub><b>rosbif</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=rosbif" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=rosbif" title="Tests">⚠️</a> <a href="https://github.com/nemequ/simde/issues?q=author%3Arosbif" title="Bug reports">🐛</a> <a href="#ideas-rosbif" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/nemequ/simde/commits?author=rosbif" title="Documentation">📖</a></td>
399     <td align="center"><a href="http://junaruga.hatenablog.com/"><img src="https://avatars2.githubusercontent.com/u/121989?v=4" width="100px;" alt=""/><br /><sub><b>Jun Aruga</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=junaruga" title="Code">💻</a> <a href="#ideas-junaruga" title="Ideas, Planning, & Feedback">🤔</a> <a href="#platform-junaruga" title="Packaging/porting to new platform">📦</a> <a href="#infra-junaruga" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-junaruga" title="Maintenance">🚧</a> <a href="https://github.com/nemequ/simde/commits?author=junaruga" title="Tests">⚠️</a> <a href="https://github.com/nemequ/simde/issues?q=author%3Ajunaruga" title="Bug reports">🐛</a></td>
400     <td align="center"><a href="https://github.com/marmeladema"><img src="https://avatars2.githubusercontent.com/u/1629419?v=4" width="100px;" alt=""/><br /><sub><b>Élie ROUDNINSKI</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=marmeladema" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=marmeladema" title="Tests">⚠️</a></td>
401   </tr>
402   <tr>
403     <td align="center"><a href="http://www.bache.name"><img src="https://avatars3.githubusercontent.com/u/7937081?v=4" width="100px;" alt=""/><br /><sub><b>Jesper Storm Bache</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=jsbache" title="Code">💻</a></td>
404     <td align="center"><a href="https://github.com/jeffdaily"><img src="https://avatars1.githubusercontent.com/u/904248?v=4" width="100px;" alt=""/><br /><sub><b>Jeff Daily</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=jeffdaily" title="Code">💻</a> <a href="#infra-jeffdaily" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
405     <td align="center"><a href="https://github.com/yekm"><img src="https://avatars2.githubusercontent.com/u/205196?v=4" width="100px;" alt=""/><br /><sub><b>Pavel</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=yekm" title="Code">💻</a></td>
406     <td align="center"><a href="https://github.com/sabarishbollapragada"><img src="https://avatars3.githubusercontent.com/u/36379720?v=4" width="100px;" alt=""/><br /><sub><b>Sabarish Bollapragada</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=sabarishbollapragada" title="Code">💻</a></td>
407     <td align="center"><a href="http://www.thegavinli.com/"><img src="https://avatars2.githubusercontent.com/u/371529?v=4" width="100px;" alt=""/><br /><sub><b>Gavin Li</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=gh2o" title="Code">💻</a></td>
408     <td align="center"><a href="http://www.yiningkarlli.com"><img src="https://avatars0.githubusercontent.com/u/1057198?v=4" width="100px;" alt=""/><br /><sub><b>Yining Karl Li</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=betajippity" title="Code">💻</a></td>
409     <td align="center"><a href="https://www.facebook.com/anirbandey303"><img src="https://avatars1.githubusercontent.com/u/29774651?v=4" width="100px;" alt=""/><br /><sub><b>Anirban Dey</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=anirbandey303" title="Documentation">📖</a></td>
410   </tr>
411   <tr>
412     <td align="center"><a href="https://github.com/Un1Gfn"><img src="https://avatars3.githubusercontent.com/u/28521292?v=4" width="100px;" alt=""/><br /><sub><b>Darren Ng</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=Un1Gfn" title="Documentation">📖</a></td>
413     <td align="center"><a href="https://github.com/FaresSalem"><img src="https://avatars0.githubusercontent.com/u/7736245?v=4" width="100px;" alt=""/><br /><sub><b>FaresSalem</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=FaresSalem" title="Documentation">📖</a></td>
414     <td align="center"><a href="https://github.com/GorePradnyesh"><img src="https://avatars0.githubusercontent.com/u/843197?v=4" width="100px;" alt=""/><br /><sub><b>Pradnyesh Gore</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=GorePradnyesh" title="Code">💻</a></td>
415     <td align="center"><a href="https://github.com/seanptmaher"><img src="https://avatars0.githubusercontent.com/u/39571964?v=4" width="100px;" alt=""/><br /><sub><b>Sean Maher</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=seanptmaher" title="Code">💻</a></td>
416     <td align="center"><a href="https://zh.wikipedia.org/wiki/User:Artoria2e5"><img src="https://avatars.githubusercontent.com/u/6459309?v=4" width="100px;" alt=""/><br /><sub><b>Mingye Wang</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=Artoria2e5" title="Documentation">📖</a></td>
417     <td align="center"><a href="http://www.ngzhian.com"><img src="https://avatars.githubusercontent.com/u/1749303?v=4" width="100px;" alt=""/><br /><sub><b>Ng Zhi An</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=ngzhian" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=ngzhian" title="Documentation">📖</a></td>
418     <td align="center"><a href="https://github.com/Glitch18"><img src="https://avatars.githubusercontent.com/u/30515829?v=4" width="100px;" alt=""/><br /><sub><b>Atharva Nimbalkar</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=Glitch18" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=Glitch18" title="Tests">⚠️</a></td>
419   </tr>
420   <tr>
421     <td align="center"><a href="https://github.com/simba611"><img src="https://avatars.githubusercontent.com/u/59763921?v=4" width="100px;" alt=""/><br /><sub><b>simba611</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=simba611" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=simba611" title="Tests">⚠️</a></td>
422     <td align="center"><a href="https://ashnewmanjones.com"><img src="https://avatars.githubusercontent.com/u/29983014?v=4" width="100px;" alt=""/><br /><sub><b>Ashleigh Newman-Jones</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=ashnewmanjones" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=ashnewmanjones" title="Tests">⚠️</a></td>
423     <td align="center"><a href="https://alum.mit.edu/www/wrv/"><img src="https://avatars.githubusercontent.com/u/5039686?v=4" width="100px;" alt=""/><br /><sub><b>Willy R. Vasquez</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=wrv" title="Code">💻</a> <a href="#maintenance-wrv" title="Maintenance">🚧</a> <a href="https://github.com/nemequ/simde/commits?author=wrv" title="Tests">⚠️</a></td>
424     <td align="center"><a href="https://cs.stanford.edu/~keithw"><img src="https://avatars.githubusercontent.com/u/208955?v=4" width="100px;" alt=""/><br /><sub><b>Keith Winstein</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=keithw" title="Code">💻</a> <a href="#maintenance-keithw" title="Maintenance">🚧</a> <a href="https://github.com/nemequ/simde/commits?author=keithw" title="Tests">⚠️</a></td>
425     <td align="center"><a href="https://github.com/SoapGentoo"><img src="https://avatars.githubusercontent.com/u/16636962?v=4" width="100px;" alt=""/><br /><sub><b>David Seifert</b></sub></a><br /><a href="#maintenance-SoapGentoo" title="Maintenance">🚧</a></td>
426     <td align="center"><a href="https://mirdita.de"><img src="https://avatars.githubusercontent.com/u/63657?v=4" width="100px;" alt=""/><br /><sub><b>Milot Mirdita</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=milot-mirdita" title="Code">💻</a> <a href="#maintenance-milot-mirdita" title="Maintenance">🚧</a> <a href="https://github.com/nemequ/simde/commits?author=milot-mirdita" title="Tests">⚠️</a></td>
427     <td align="center"><a href="http://bitpatch.com"><img src="https://avatars.githubusercontent.com/u/4021602?v=4" width="100px;" alt=""/><br /><sub><b>aqrit</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=aqrit" title="Code">💻</a> <a href="#maintenance-aqrit" title="Maintenance">🚧</a></td>
428   </tr>
429   <tr>
430     <td align="center"><a href="https://github.com/dgazzoni"><img src="https://avatars.githubusercontent.com/u/17934171?v=4" width="100px;" alt=""/><br /><sub><b>Décio Luiz Gazzoni Filho</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=dgazzoni" title="Code">💻</a> <a href="#maintenance-dgazzoni" title="Maintenance">🚧</a> <a href="https://github.com/nemequ/simde/commits?author=dgazzoni" title="Tests">⚠️</a></td>
431     <td align="center"><a href="http://vk.com/muzzdiez"><img src="https://avatars.githubusercontent.com/u/16463967?v=4" width="100px;" alt=""/><br /><sub><b>Igor Molchanov</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=makise-homura" title="Code">💻</a> <a href="#maintenance-makise-homura" title="Maintenance">🚧</a> <a href="#platform-makise-homura" title="Packaging/porting to new platform">📦</a></td>
432     <td align="center"><a href="https://github.com/anrodrig"><img src="https://avatars.githubusercontent.com/u/35815808?v=4" width="100px;" alt=""/><br /><sub><b>Andrew Rodriguez</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=anrodrig" title="Code">💻</a> <a href="#maintenance-anrodrig" title="Maintenance">🚧</a> <a href="https://github.com/nemequ/simde/commits?author=anrodrig" title="Tests">⚠️</a></td>
433     <td align="center"><a href="https://github.com/Changqing-JING"><img src="https://avatars.githubusercontent.com/u/59640930?v=4" width="100px;" alt=""/><br /><sub><b>Changqing  Jing</b></sub></a><br /><a href="#maintenance-Changqing-JING" title="Maintenance">🚧</a></td>
434     <td align="center"><a href="http://jpcima.sdf1.org/"><img src="https://avatars.githubusercontent.com/u/17614485?v=4" width="100px;" alt=""/><br /><sub><b>JP Cimalando</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=jpcima" title="Code">💻</a> <a href="#infra-jpcima" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
435     <td align="center"><a href="https://flygoat.com/"><img src="https://avatars.githubusercontent.com/u/5955297?v=4" width="100px;" alt=""/><br /><sub><b>Jiaxun Yang</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=FlyGoat" title="Code">💻</a> <a href="#platform-FlyGoat" title="Packaging/porting to new platform">📦</a></td>
436     <td align="center"><a href="https://github.com/ktgw0316"><img src="https://avatars.githubusercontent.com/u/3116763?v=4" width="100px;" alt=""/><br /><sub><b>Masahiro Kitagawa</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=ktgw0316" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=ktgw0316" title="Tests">⚠️</a></td>
437   </tr>
438   <tr>
439     <td align="center"><a href="https://github.com/operasfantom"><img src="https://avatars.githubusercontent.com/u/31903947?v=4" width="100px;" alt=""/><br /><sub><b>Pavel Iatchenii</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=operasfantom" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=operasfantom" title="Tests">⚠️</a></td>
440     <td align="center"><a href="https://tommyvct.tk"><img src="https://avatars.githubusercontent.com/u/7903172?v=4" width="100px;" alt=""/><br /><sub><b>Tommy Vercetti</b></sub></a><br /><a href="#maintenance-tommyvct" title="Maintenance">🚧</a></td>
441     <td align="center"><a href="https://github.com/rscohn2"><img src="https://avatars.githubusercontent.com/u/1936730?v=4" width="100px;" alt=""/><br /><sub><b>Robert Cohn</b></sub></a><br /><a href="#maintenance-rscohn2" title="Maintenance">🚧</a></td>
442     <td align="center"><a href="https://github.com/adamnovak"><img src="https://avatars.githubusercontent.com/u/5062495?v=4" width="100px;" alt=""/><br /><sub><b>Adam Novak</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=adamnovak" title="Documentation">📖</a></td>
443     <td align="center"><a href="https://github.com/boris-kuz"><img src="https://avatars.githubusercontent.com/u/18011434?v=4" width="100px;" alt=""/><br /><sub><b>boris-kuz</b></sub></a><br /><a href="#maintenance-boris-kuz" title="Maintenance">🚧</a></td>
444     <td align="center"><a href="https://github.com/Epixu"><img src="https://avatars.githubusercontent.com/u/1529601?v=4" width="100px;" alt=""/><br /><sub><b>Dimo Markov</b></sub></a><br /><a href="#maintenance-Epixu" title="Maintenance">🚧</a></td>
445     <td align="center"><a href="https://dhbloo.github.io/"><img src="https://avatars.githubusercontent.com/u/32353216?v=4" width="100px;" alt=""/><br /><sub><b>dblue</b></sub></a><br /><a href="#maintenance-dhbloo" title="Maintenance">🚧</a></td>
446   </tr>
447   <tr>
448     <td align="center"><a href="https://github.com/zekehul"><img src="https://avatars.githubusercontent.com/u/8780526?v=4" width="100px;" alt=""/><br /><sub><b>zekehul</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=zekehul" title="Code">💻</a> <a href="#maintenance-zekehul" title="Maintenance">🚧</a></td>
449     <td align="center"><a href="https://open-cells.com"><img src="https://avatars.githubusercontent.com/u/40661368?v=4" width="100px;" alt=""/><br /><sub><b>Laurent Thomas</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=LaurentThomas" title="Code">💻</a></td>
450     <td align="center"><a href="https://github.com/maxbachmann"><img src="https://avatars.githubusercontent.com/u/44199644?v=4" width="100px;" alt=""/><br /><sub><b>Max Bachmann</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=maxbachmann" title="Documentation">📖</a></td>
451     <td align="center"><a href="https://github.com/psaab"><img src="https://avatars.githubusercontent.com/u/196946?v=4" width="100px;" alt=""/><br /><sub><b>psaab</b></sub></a><br /><a href="#maintenance-psaab" title="Maintenance">🚧</a></td>
452     <td align="center"><a href="http://superduper.net/"><img src="https://avatars.githubusercontent.com/u/515813?v=4" width="100px;" alt=""/><br /><sub><b>Sam Clegg</b></sub></a><br /><a href="#maintenance-sbc100" title="Maintenance">🚧</a></td>
453     <td align="center"><a href="https://twitter.com/tlively52"><img src="https://avatars.githubusercontent.com/u/7121787?v=4" width="100px;" alt=""/><br /><sub><b>Thomas Lively</b></sub></a><br /><a href="https://github.com/nemequ/simde/issues?q=author%3Atlively" title="Bug reports">🐛</a> <a href="#ideas-tlively" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-tlively" title="Maintenance">🚧</a></td>
454     <td align="center"><a href="http://blog.coderzh.com/"><img src="https://avatars.githubusercontent.com/u/329164?v=4" width="100px;" alt=""/><br /><sub><b>coderzh</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=coderzh" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=coderzh" title="Tests">⚠️</a></td>
455   </tr>
456   <tr>
457     <td align="center"><a href="https://github.com/k-dominik"><img src="https://avatars.githubusercontent.com/u/24434157?v=4" width="100px;" alt=""/><br /><sub><b>Dominik Kutra</b></sub></a><br /><a href="https://github.com/nemequ/simde/commits?author=k-dominik" title="Code">💻</a> <a href="https://github.com/nemequ/simde/commits?author=k-dominik" title="Tests">⚠️</a></td>
458     <td align="center"><a href="https://github.com/Lithrein"><img src="https://avatars.githubusercontent.com/u/207981?v=4" width="100px;" alt=""/><br /><sub><b>Lithrein</b></sub></a><br /><a href="#maintenance-Lithrein" title="Maintenance">🚧</a></td>
459     <td align="center"><a href="https://github.com/quyykk"><img src="https://avatars.githubusercontent.com/u/85879619?v=4" width="100px;" alt=""/><br /><sub><b>Nick</b></sub></a><br /><a href="#maintenance-quyykk" title="Maintenance">🚧</a></td>
460     <td align="center"><a href="https://github.com/thomasdwu"><img src="https://avatars.githubusercontent.com/u/6819659?v=4" width="100px;" alt=""/><br /><sub><b>thomasdwu</b></sub></a><br /><a href="#maintenance-thomasdwu" title="Maintenance">🚧</a></td>
461     <td align="center"><a href="https://github.com/Remnant44"><img src="https://avatars.githubusercontent.com/u/54461740?v=4" width="100px;" alt=""/><br /><sub><b>Stephen</b></sub></a><br /><a href="https://github.com/nemequ/simde/issues?q=author%3ARemnant44" title="Bug reports">🐛</a></td>
462     <td align="center"><a href="https://github.com/johnplatts"><img src="https://avatars.githubusercontent.com/u/28941113?v=4" width="100px;" alt=""/><br /><sub><b>John Platts</b></sub></a><br /><a href="https://github.com/nemequ/simde/issues?q=author%3Ajohnplatts" title="Bug reports">🐛</a></td>
463     <td align="center"><a href="https://github.com/tycho"><img src="https://avatars.githubusercontent.com/u/29616?v=4" width="100px;" alt=""/><br /><sub><b>Steven Noonan</b></sub></a><br /><a href="https://github.com/nemequ/simde/issues?q=author%3Atycho" title="Bug reports">🐛</a></td>
464   </tr>
465   <tr>
466     <td align="center"><a href="https://github.com/p0nce"><img src="https://avatars.githubusercontent.com/u/1067485?v=4" width="100px;" alt=""/><br /><sub><b>p0nce </b></sub></a><br /><a href="https://github.com/nemequ/simde/issues?q=author%3Ap0nce" title="Bug reports">🐛</a></td>
467     <td align="center"><a href="https://bonedaddy.net/pabs3/"><img src="https://avatars.githubusercontent.com/u/328602?v=4" width="100px;" alt=""/><br /><sub><b>Paul Wise</b></sub></a><br /><a href="https://github.com/nemequ/simde/issues?q=author%3Apabs3" title="Bug reports">🐛</a></td>
468   </tr>
469 </table>
471 <!-- markdownlint-enable -->
472 <!-- prettier-ignore-end -->
473 <!-- ALL-CONTRIBUTORS-LIST:END -->
475 This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind are welcome!