| //===-- generic/include/clc/misc/shuffle.h ------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #define _CLC_SHUFFLE_DECL(TYPE, MASKTYPE, RETTYPE) \ |
| _CLC_OVERLOAD _CLC_DECL RETTYPE shuffle(TYPE x, MASKTYPE mask); |
| |
| //Return type is same base type as the input type, with the same vector size as the mask. |
| //Elements in the mask must be the same size (number of bits) as the input value. |
| //E.g. char8 ret = shuffle(char2 x, uchar8 mask); |
| |
| #define _CLC_VECTOR_SHUFFLE_MASKSIZE(INBASE, INTYPE, MASKTYPE) \ |
| _CLC_SHUFFLE_DECL(INTYPE, MASKTYPE##2, INBASE##2) \ |
| _CLC_SHUFFLE_DECL(INTYPE, MASKTYPE##4, INBASE##4) \ |
| _CLC_SHUFFLE_DECL(INTYPE, MASKTYPE##8, INBASE##8) \ |
| _CLC_SHUFFLE_DECL(INTYPE, MASKTYPE##16, INBASE##16) \ |
| |
| #define _CLC_VECTOR_SHUFFLE_INSIZE(TYPE, MASKTYPE) \ |
| _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, TYPE##2, MASKTYPE) \ |
| _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, TYPE##4, MASKTYPE) \ |
| _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, TYPE##8, MASKTYPE) \ |
| _CLC_VECTOR_SHUFFLE_MASKSIZE(TYPE, TYPE##16, MASKTYPE) \ |
| |
| _CLC_VECTOR_SHUFFLE_INSIZE(char, uchar) |
| _CLC_VECTOR_SHUFFLE_INSIZE(short, ushort) |
| _CLC_VECTOR_SHUFFLE_INSIZE(int, uint) |
| _CLC_VECTOR_SHUFFLE_INSIZE(long, ulong) |
| _CLC_VECTOR_SHUFFLE_INSIZE(uchar, uchar) |
| _CLC_VECTOR_SHUFFLE_INSIZE(ushort, ushort) |
| _CLC_VECTOR_SHUFFLE_INSIZE(uint, uint) |
| _CLC_VECTOR_SHUFFLE_INSIZE(ulong, ulong) |
| _CLC_VECTOR_SHUFFLE_INSIZE(float, uint) |
| #ifdef cl_khr_fp64 |
| _CLC_VECTOR_SHUFFLE_INSIZE(double, ulong) |
| #endif |
| #ifdef cl_khr_fp16 |
| _CLC_VECTOR_SHUFFLE_INSIZE(half, ushort) |
| #endif |
| |
| #undef _CLC_SHUFFLE_DECL |
| #undef _CLC_VECTOR_SHUFFLE_MASKSIZE |
| #undef _CLC_VECTOR_SHUFFLE_INSIZE |