blob: 2c233b36cc73c93f33b410206ac6901a5895b2e7 [file]
//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
#include "clc/utils.h"
#ifndef __CLC_IMPL_FUNCTION
#define __CLC_IMPL_FUNCTION __CLC_FUNCTION
#endif
#ifndef __CLC_RET_SCALAR_TYPE
#define __CLC_RET_SCALAR_TYPE __CLC_SCALAR_GENTYPE
#endif
#ifndef __CLC_ARG1_SCALAR_TYPE
#define __CLC_ARG1_SCALAR_TYPE __CLC_SCALAR_GENTYPE
#endif
#ifndef __CLC_ARG2_SCALAR_TYPE
#define __CLC_ARG2_SCALAR_TYPE __CLC_SCALAR_GENTYPE
#endif
#ifndef __CLC_OUT_ARG3_SCALAR_TYPE
#define __CLC_OUT_ARG3_SCALAR_TYPE __CLC_SCALAR_GENTYPE
#endif
#define __CLC_RET_TYPE __CLC_XCONCAT(__CLC_RET_SCALAR_TYPE, __CLC_VECSIZE)
#define __CLC_ARG1_TYPE __CLC_XCONCAT(__CLC_ARG1_SCALAR_TYPE, __CLC_VECSIZE)
#define __CLC_ARG2_TYPE __CLC_XCONCAT(__CLC_ARG2_SCALAR_TYPE, __CLC_VECSIZE)
#define __CLC_OUT_ARG3_TYPE \
__CLC_XCONCAT(__CLC_OUT_ARG3_SCALAR_TYPE, __CLC_VECSIZE)
#ifndef __CLC_OUT_ARG3_ADDRESS_SPACE
#define __CLC_OUT_ARG3_ADDRESS_SPACE __private
#endif
#if __CLC_VECSIZE_OR_1 >= 2
_CLC_OVERLOAD _CLC_DEF __CLC_RET_TYPE
__CLC_FUNCTION(__CLC_ARG1_TYPE x, __CLC_ARG2_TYPE y,
__CLC_OUT_ARG3_ADDRESS_SPACE __CLC_OUT_ARG3_TYPE *z) {
union {
__CLC_ARG1_TYPE vec;
__CLC_ARG1_SCALAR_TYPE arr[__CLC_VECSIZE_OR_1];
} u_x;
union {
__CLC_ARG2_TYPE vec;
__CLC_ARG2_SCALAR_TYPE arr[__CLC_VECSIZE_OR_1];
} u_y;
union {
__CLC_RET_TYPE vec;
__CLC_RET_SCALAR_TYPE arr[__CLC_VECSIZE_OR_1];
} u_result0;
union {
__CLC_OUT_ARG3_TYPE vec;
__CLC_OUT_ARG3_SCALAR_TYPE arr[__CLC_VECSIZE_OR_1];
} u_result1;
u_x.vec = x;
u_y.vec = y;
for (int i = 0; i < __CLC_VECSIZE_OR_1; ++i) {
u_result0.arr[i] =
__CLC_IMPL_FUNCTION(u_x.arr[i], u_y.arr[i], &u_result1.arr[i]);
}
*z = u_result1.vec;
return u_result0.vec;
}
#endif // __CLC_VECSIZE_OR_1 >= 2
#undef __CLC_RET_TYPE
#undef __CLC_ARG1_TYPE
#undef __CLC_ARG2_TYPE
#undef __CLC_OUT_ARG3_TYPE