This patch adds a new macro _LIBCPP_HAS_NO_VECTOR_EXTENSION for detecting
whether a vector extension (\_\_attribute\_\_((vector_size(num_bytes)))) is
available.
On the top of that, this patch implements the following API:
- all constructors
- operator[]
- copy_from
- copy_to
It also defines simd_abi::native to use vector extension, if available.
In GCC and Clang, certain values with vector extension are passed by registers,
instead of memory.
Based on D41148.
We ususally organize these into "chunks", one per compiler.
The "Clang chunk" starts on 159, and goes to 483.
The "GCC chunk" starts on 484 and goes to 575.
It would match the organization better if you put this line:
in the file twice - once in the Clang chunk and once in the GCC chunk.
See _LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS for an example of this.