Standalone SIMD library

Portable 128-bit SIMD for Ada.

Flyology SIMD provides explicit integer and floating-point vector operations for ordinary Ada programs. The scalar backend defines each result. NEON and x86 backends implement the same semantics behind private representations.

Experimental v0.1 API. GCC-based GNAT is the verified compiler family.

U8x16 registerlane 0 is the first loaded element
2F2E2D2C2B2A29282726252423222120
compare “ ”
0000 0000 0000 0001
portable meaningprivate backendmachine code
10 vector familiesAll 128-bit signed, unsigned, and IEEE floating families.
Zero runtime dependenciesNo Flyology runtime, heap allocation, tasking, I/O, locks, or waits.
Coarse dispatchFeature selection occurs once for a complete buffer algorithm.
Portable means three things

Semantics first. Mechanism private.

The same operation contract applies on every target. Scalar source keeps programs buildable where no SIMD backend exists. Target-specific backends provide efficient code generation where the compiler and instruction set have been verified.

  1. 01Identical public semantics

    Wrapping, saturation, shifts, masks, floating-point edge cases, and memory extent have defined results.

  2. 02Scalar source portability

    The authoritative backend runs on every supported GCC-based GNAT target.

  3. 03Efficient target code

    AArch64 NEON and x86-64 SSE2 implement the complete 128-bit family. AVX2 accelerates selected buffer loops.

Fixed-width family

Types carry the lane shape.

Signed, unsigned, floating-point, and mask values do not convert implicitly. Operations such as Add_Wrap, Add_Saturate, Min_Number, and Load_Partial state their portable behavior.

Inspect the type family
U8x1616 × 8
I8x1616 × 8
U16x88 × 16
I16x88 × 16
U32x44 × 32
I32x44 × 32
U64x22 × 64
I64x22 × 64
F32x44 × 32
F64x22 × 64