Mercurial > vec
diff README @ 0:02a517e4c492
*: initial commit
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Tue, 22 Oct 2024 01:22:41 -0400 |
parents | |
children | f12b5dd4e18c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README Tue Oct 22 01:22:41 2024 -0400 @@ -0,0 +1,46 @@ +vec - a tiny SIMD vector header-only library written in C99 + +it comes with an extremely basic (and somewhat lacking) API, +where there are eight supported vector types, all 128-bit: + + vint8x16 - 16 signed 8-bit integers + vint16x8 - 8 signed 16-bit integers + vint32x4 - 4 signed 32-bit integers + vint64x2 - 2 signed 64-bit integers + vuint8x16 - 16 unsigned 8-bit integers + vuint16x8 - 8 unsigned 16-bit integers + vuint32x4 - 4 unsigned 32-bit integers + vuint32x4 - 2 unsigned 64-bit integers + +all of these have many operations that are prefixed with the +name of the type and an underscore, for example: + + vint8x16 vint8x16_splat(uint8_t x) + - creates a vint8x16 where all of the values are filled + with the value of `x' + +the current supported operations are: + + v[u]intAxB splat([u]intA_t x) + creates a vector with all of the values are filled with + the value of `x' + + v[u]intAxB load(const [u]intA_t x[B]) + copies the values from the memory address stored at `x'; + the address is NOT required to be aligned + + void store(v[u]intAxB vec, [u]intA_t x[B]) + copies the values from the vector into the memory address + stored at `x' + + like with load(), this does not require address alignment + + v[u]intAxB add(v[u]intAxB vec1, v[u]intAxB vec2) + adds the value of `vec1' and `vec2' and returns it + + v[u]intAxB sub(v[u]intAxB vec1, v[u]intAxB vec2) + subtracts the value of `vec2' from `vec1' and returns it + + v[u]intAxB mul(v[u]intAxB vec1, v[u]intAxB vec2) + multiplies the values of `vec1' and `vec2' together and + returns it