forked from OSchip/llvm-project
Add insert/extract_ps and related random macros.
llvm-svn: 98114
This commit is contained in:
parent
05c37d2800
commit
1dca62055a
|
@ -179,6 +179,27 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
|
|||
return (__m128i) __builtin_ia32_pmaxud128((__v4si) __V1, (__v4si) __V2);
|
||||
}
|
||||
|
||||
/* SSE4 Insertion and Extraction from XMM Register Instructions. */
|
||||
#define _mm_insert_ps(X, Y, N) __builtin_ia32_insertps128((X), (Y), (N))
|
||||
#define _mm_extract_ps(X, N) (__extension__ \
|
||||
({ union { int i; float f; } __t; \
|
||||
__v4sf __a = (__v4sf)X; \
|
||||
__t.f = __a[N]; \
|
||||
__t.i;}))
|
||||
|
||||
/* Miscellaneous insert and extract macros. */
|
||||
/* Extract a single-precision float from X at index N into D. */
|
||||
#define _MM_EXTRACT_FLOAT(D, X, N) (__extension__ ({ __v4sf __a = (__v4sf)X; \
|
||||
(D) = __a[N]; }))
|
||||
|
||||
/* Or together 2 sets of indexes (X and Y) with the zeroing bits (Z) to create
|
||||
an index suitable for _mm_insert_ps. */
|
||||
#define _MM_MK_INSERTPS_NDX(X, Y, Z) (((X) << 6) | ((Y) << 4) | (Z))
|
||||
|
||||
/* Extract a float from X at index N into the first index of the return. */
|
||||
#define _MM_PICK_OUT_PS(X, N) _mm_insert_ps (_mm_setzero_ps(), (X), \
|
||||
_MM_MK_INSERTPS_NDX((N), 0, 0x0e))
|
||||
|
||||
#endif /* __SSE4_1__ */
|
||||
|
||||
#endif /* _SMMINTRIN_H */
|
||||
|
|
Loading…
Reference in New Issue