From memory:
| :cpp:func:`load` | load values from memory (optionally masked) [1] |
| :cpp:func:`load_aligned` | load values from aligned memory |
| :cpp:func:`load_unaligned` | load values from unaligned memory |
| :cpp:func:`load_as` | load values, forcing a type conversion |
From a scalar:
| :cpp:func:`broadcast` | broadcasting a value to all slots |
| :cpp:func:`broadcast_as` | broadcasting a value, forcing a type conversion |
To memory:
| :cpp:func:`store` | store values to memory (optionally masked) [1] |
| :cpp:func:`store_aligned` | store values to aligned memory |
| :cpp:func:`store_unaligned` | store values to unaligned memory |
| :cpp:func:`store_as` | store values, forcing a type conversion |
In place:
| :cpp:func:`swizzle` | rearrange slots within the batch |
| :cpp:func:`slide_left` | bitwise shift the whole batch to the left |
| :cpp:func:`slide_right` | bitwise shift the whole batch to the right |
| :cpp:func:`rotate_left` | bitwise rotate the whole batch to the left |
| :cpp:func:`rotate_right` | bitwise rotate the whole batch to the right |
| :cpp:func:`insert` | modify a single batch slot |
| :cpp:func:`compress` | pack elements according to a mask |
| :cpp:func:`expand` | select contiguous elements from the batch |
Between batches:
| :cpp:func:`transpose` | tranpose a matrix as an array of batches |
| :cpp:func:`zip_lo` | interleave low halves of two batches |
| :cpp:func:`zip_hi` | interleave high halves of two batches |
.. doxygengroup:: batch_data_transfer :project: xsimd :content-only:
The following empty types are used for tag dispatching:
.. doxygenstruct:: xsimd::aligned_mode :project: xsimd
.. doxygenstruct:: xsimd::unaligned_mode :project: xsimd
Footnotes
| [1] | (1, 2) Masked load / store come in two flavours. The
:cpp:class:`batch_bool_constant` overload encodes the mask in the type and
is resolved at compile time. The runtime :cpp:class:`batch_bool` overload
accepts a mask computed at runtime. Prefer the compile-time mask whenever
the selection is known at compile time. |