xref: /llvm-project/libclc/generic/include/clc/misc/shuffle2.h (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
10bf96b17SAaron Watry //===-- generic/include/clc/misc/shuffle2.h ------------------------------===//
20bf96b17SAaron Watry //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60bf96b17SAaron Watry //
70bf96b17SAaron Watry //===----------------------------------------------------------------------===//
80bf96b17SAaron Watry 
90bf96b17SAaron Watry #define _CLC_SHUFFLE2_DECL(TYPE, MASKTYPE, RETTYPE) \
100bf96b17SAaron Watry   _CLC_OVERLOAD _CLC_DECL RETTYPE shuffle2(TYPE x, TYPE y, MASKTYPE mask);
110bf96b17SAaron Watry 
120bf96b17SAaron Watry //Return type is same base type as the input type, with the same vector size as the mask.
130bf96b17SAaron Watry //Elements in the mask must be the same size (number of bits) as the input value.
140bf96b17SAaron Watry //E.g. char8 ret = shuffle2(char2 x, char2 y, uchar8 mask);
150bf96b17SAaron Watry 
160bf96b17SAaron Watry #define _CLC_VECTOR_SHUFFLE2_MASKSIZE(INBASE, INTYPE, MASKTYPE) \
170bf96b17SAaron Watry   _CLC_SHUFFLE2_DECL(INTYPE, MASKTYPE##2, INBASE##2) \
180bf96b17SAaron Watry   _CLC_SHUFFLE2_DECL(INTYPE, MASKTYPE##4, INBASE##4) \
190bf96b17SAaron Watry   _CLC_SHUFFLE2_DECL(INTYPE, MASKTYPE##8, INBASE##8) \
200bf96b17SAaron Watry   _CLC_SHUFFLE2_DECL(INTYPE, MASKTYPE##16, INBASE##16) \
210bf96b17SAaron Watry 
220bf96b17SAaron Watry #define _CLC_VECTOR_SHUFFLE2_INSIZE(TYPE, MASKTYPE) \
230bf96b17SAaron Watry   _CLC_VECTOR_SHUFFLE2_MASKSIZE(TYPE, TYPE##2, MASKTYPE) \
240bf96b17SAaron Watry   _CLC_VECTOR_SHUFFLE2_MASKSIZE(TYPE, TYPE##4, MASKTYPE) \
250bf96b17SAaron Watry   _CLC_VECTOR_SHUFFLE2_MASKSIZE(TYPE, TYPE##8, MASKTYPE) \
260bf96b17SAaron Watry   _CLC_VECTOR_SHUFFLE2_MASKSIZE(TYPE, TYPE##16, MASKTYPE) \
270bf96b17SAaron Watry 
280bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(char, uchar)
290bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(short, ushort)
300bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(int, uint)
310bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(long, ulong)
320bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(uchar, uchar)
330bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(ushort, ushort)
340bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(uint, uint)
350bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(ulong, ulong)
360bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(float, uint)
370bf96b17SAaron Watry #ifdef cl_khr_fp64
380bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(double, ulong)
390bf96b17SAaron Watry #endif
400bf96b17SAaron Watry #ifdef cl_khr_fp16
410bf96b17SAaron Watry _CLC_VECTOR_SHUFFLE2_INSIZE(half, ushort)
420bf96b17SAaron Watry #endif
430bf96b17SAaron Watry 
440bf96b17SAaron Watry #undef _CLC_SHUFFLE_DECL
450bf96b17SAaron Watry #undef _CLC_VECTOR_SHUFFLE2_MASKSIZE
460bf96b17SAaron Watry #undef _CLC_VECTOR_SHUFFLE2_INSIZE
47