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