Reintroduce `ext` for _mm_alignr_epi8 implementation
Reintroduce `ext` for _mm_alignr_epi8 implementation

Use a vector extract to perform _mm_alignr_epi8 instead of storing and
loading from memory. Add additional ternary operators to safeguard
against compiler errors at lower optimisation levels (prevents
recurrence of #482).

This performs significantly better than the memory approach.

Example codegen for _mm_alignr_epi8(a, b, 11) with GCC 11.2.0 (-O3):

Prior to commit:
    stp     q1, q0, [sp]
    ldur    q0, [sp, 11]

After commit:
    ext     v0.16b, v1.16b, v0.16b, 11

DLTcollab/sse2neon,DLTcollab/sse2neon,DLTcollab/sse2neon