We may want to break this patch into smaller independent pieces but it's easier to have the full perspective first.
- Type punning is used throughout llvmlibc but this is undefined behavior in C++ (e.g. FPUtils using FP/Integral union)
- Clang is happy with vector type conversions in elements_x86.h but vector types are slightly different in GCC and so bit casting is necessary.
- Some compilation options were only available in Clang, preventing compilation with GCC.
I still have compilation issues with an asm statement and link errors so I'll iterate a bit more on the patch.
Nit: alignment