diff --git a/libclc/clc/include/clc/integer/clc_bit_reverse.h b/libclc/clc/include/clc/integer/clc_bit_reverse.h new file mode 100644 index 0000000000000..c945e326c74fa --- /dev/null +++ b/libclc/clc/include/clc/integer/clc_bit_reverse.h @@ -0,0 +1,19 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_INTEGER_CLC_BIT_REVERSE_H__ +#define __CLC_INTEGER_CLC_BIT_REVERSE_H__ + +#define FUNCTION __clc_bit_reverse +#define __CLC_BODY + +#include + +#undef FUNCTION + +#endif // __CLC_INTEGER_CLC_BIT_REVERSE_H__ diff --git a/libclc/clc/include/clc/integer/clc_bitfield_extract_decl.inc b/libclc/clc/include/clc/integer/clc_bitfield_extract_decl.inc new file mode 100644 index 0000000000000..c93eff08de0bc --- /dev/null +++ b/libclc/clc/include/clc/integer/clc_bitfield_extract_decl.inc @@ -0,0 +1,10 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +_CLC_OVERLOAD _CLC_DECL __RETTYPE FUNCTION(__CLC_GENTYPE base, uint offset, + uint count); diff --git a/libclc/clc/include/clc/integer/clc_bitfield_extract_signed.h b/libclc/clc/include/clc/integer/clc_bitfield_extract_signed.h new file mode 100644 index 0000000000000..9c2e047b8be00 --- /dev/null +++ b/libclc/clc/include/clc/integer/clc_bitfield_extract_signed.h @@ -0,0 +1,23 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_INTEGER_CLC_BITFIELD_EXTRACT_SIGNED_H__ +#define __CLC_INTEGER_CLC_BITFIELD_EXTRACT_SIGNED_H__ + +#include + +#define FUNCTION __clc_bitfield_extract_signed +#define __RETTYPE __CLC_S_GENTYPE + +#define __CLC_BODY +#include + +#undef __RETTYPE +#undef FUNCTION + +#endif // __CLC_INTEGER_CLC_BITFIELD_EXTRACT_SIGNED_H__ diff --git a/libclc/clc/include/clc/integer/clc_bitfield_extract_unsigned.h b/libclc/clc/include/clc/integer/clc_bitfield_extract_unsigned.h new file mode 100644 index 0000000000000..95305a3027e5d --- /dev/null +++ b/libclc/clc/include/clc/integer/clc_bitfield_extract_unsigned.h @@ -0,0 +1,23 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_INTEGER_CLC_BITFIELD_EXTRACT_SIGNED_H__ +#define __CLC_INTEGER_CLC_BITFIELD_EXTRACT_SIGNED_H__ + +#include + +#define FUNCTION __clc_bitfield_extract_unsigned +#define __RETTYPE __CLC_U_GENTYPE + +#define __CLC_BODY +#include + +#undef __RETTYPE +#undef FUNCTION + +#endif // __CLC_INTEGER_CLC_BITFIELD_EXTRACT_SIGNED_H__ diff --git a/libclc/clc/include/clc/integer/clc_bitfield_insert.h b/libclc/clc/include/clc/integer/clc_bitfield_insert.h new file mode 100644 index 0000000000000..f4d36b2ad2d2e --- /dev/null +++ b/libclc/clc/include/clc/integer/clc_bitfield_insert.h @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_INTEGER_CLC_BITFIELD_INSERT_H__ +#define __CLC_INTEGER_CLC_BITFIELD_INSERT_H__ + +#include + +#define FUNCTION __clc_bitfield_insert +#define __CLC_BODY +#include + +#endif // __CLC_INTEGER_CLC_BITFIELD_INSERT_H__ diff --git a/libclc/clc/include/clc/integer/clc_bitfield_insert.inc b/libclc/clc/include/clc/integer/clc_bitfield_insert.inc new file mode 100644 index 0000000000000..22f58bdc09830 --- /dev/null +++ b/libclc/clc/include/clc/integer/clc_bitfield_insert.inc @@ -0,0 +1,11 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE FUNCTION(__CLC_GENTYPE base, + __CLC_GENTYPE insert, + uint offset, uint count); diff --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES index bf8736a726315..9d792c4b3d28d 100644 --- a/libclc/clc/lib/generic/SOURCES +++ b/libclc/clc/lib/generic/SOURCES @@ -15,6 +15,10 @@ geometric/clc_normalize.cl integer/clc_abs.cl integer/clc_abs_diff.cl integer/clc_add_sat.cl +integer/clc_bitfield_extract_signed.cl +integer/clc_bitfield_extract_unsigned.cl +integer/clc_bitfield_insert.cl +integer/clc_bit_reverse.cl integer/clc_clz.cl integer/clc_ctz.cl integer/clc_hadd.cl diff --git a/libclc/clc/lib/generic/integer/clc_bit_reverse.cl b/libclc/clc/lib/generic/integer/clc_bit_reverse.cl new file mode 100644 index 0000000000000..439957383f583 --- /dev/null +++ b/libclc/clc/lib/generic/integer/clc_bit_reverse.cl @@ -0,0 +1,15 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +#define FUNCTION __clc_bit_reverse +#define __IMPL_FUNCTION(x) __builtin_elementwise_bitreverse +#define __CLC_BODY + +#include diff --git a/libclc/clc/lib/generic/integer/clc_bitfield_extract_signed.cl b/libclc/clc/lib/generic/integer/clc_bitfield_extract_signed.cl new file mode 100644 index 0000000000000..d779ed6a43593 --- /dev/null +++ b/libclc/clc/lib/generic/integer/clc_bitfield_extract_signed.cl @@ -0,0 +1,12 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +#define __CLC_BODY +#include diff --git a/libclc/clc/lib/generic/integer/clc_bitfield_extract_signed.inc b/libclc/clc/lib/generic/integer/clc_bitfield_extract_signed.inc new file mode 100644 index 0000000000000..84cae2166f7ce --- /dev/null +++ b/libclc/clc/lib/generic/integer/clc_bitfield_extract_signed.inc @@ -0,0 +1,19 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +_CLC_OVERLOAD _CLC_DEF __CLC_S_GENTYPE +__clc_bitfield_extract_signed(__CLC_GENTYPE base, uint offset, uint count) { + if (count == 0) + return 0; + __CLC_U_GENTYPE x = __CLC_AS_U_GENTYPE(base) + << (__CLC_GENSIZE - offset - count); + // Implement an arithmetic shift right. + __CLC_U_GENTYPE s = -(x >> (__CLC_GENSIZE - 1)); + __CLC_U_GENTYPE result = ((s ^ x) >> (__CLC_GENSIZE - count)) ^ s; + return __CLC_AS_S_GENTYPE(result); +} diff --git a/libclc/clc/lib/generic/integer/clc_bitfield_extract_unsigned.cl b/libclc/clc/lib/generic/integer/clc_bitfield_extract_unsigned.cl new file mode 100644 index 0000000000000..bf7db401034dc --- /dev/null +++ b/libclc/clc/lib/generic/integer/clc_bitfield_extract_unsigned.cl @@ -0,0 +1,12 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +#define __CLC_BODY +#include diff --git a/libclc/clc/lib/generic/integer/clc_bitfield_extract_unsigned.inc b/libclc/clc/lib/generic/integer/clc_bitfield_extract_unsigned.inc new file mode 100644 index 0000000000000..bc81ce5c98b09 --- /dev/null +++ b/libclc/clc/lib/generic/integer/clc_bitfield_extract_unsigned.inc @@ -0,0 +1,16 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +_CLC_OVERLOAD _CLC_DEF __CLC_U_GENTYPE +__clc_bitfield_extract_unsigned(__CLC_GENTYPE base, uint offset, uint count) { + if (count == 0) + return 0; + __CLC_U_GENTYPE result = __CLC_AS_U_GENTYPE(base) + << (__CLC_GENSIZE - offset - count); + return result >> (__CLC_GENSIZE - count); +} diff --git a/libclc/clc/lib/generic/integer/clc_bitfield_insert.cl b/libclc/clc/lib/generic/integer/clc_bitfield_insert.cl new file mode 100644 index 0000000000000..a40fc804f2187 --- /dev/null +++ b/libclc/clc/lib/generic/integer/clc_bitfield_insert.cl @@ -0,0 +1,12 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +#define __CLC_BODY +#include diff --git a/libclc/clc/lib/generic/integer/clc_bitfield_insert.inc b/libclc/clc/lib/generic/integer/clc_bitfield_insert.inc new file mode 100644 index 0000000000000..ad8dac28750cc --- /dev/null +++ b/libclc/clc/lib/generic/integer/clc_bitfield_insert.inc @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_bitfield_insert(__CLC_GENTYPE base, + __CLC_GENTYPE insert, + uint offset, + uint count) { + __CLC_U_GENTYPE u_base = __CLC_AS_U_GENTYPE(base); + __CLC_U_GENTYPE u_insert = __CLC_AS_U_GENTYPE(insert); + __CLC_U_GENTYPE mask = (((__CLC_U_GENTYPE)1 << count) - (__CLC_U_GENTYPE)1) + << offset; + mask = count < __CLC_GENSIZE ? mask : ~(__CLC_U_GENTYPE)0; + __CLC_U_GENTYPE result = ((u_insert << offset) & mask) | (u_base & ~mask); + return __CLC_AS_GENTYPE(result); +} diff --git a/libclc/opencl/include/clc/opencl/integer/bit_reverse.h b/libclc/opencl/include/clc/opencl/integer/bit_reverse.h new file mode 100644 index 0000000000000..46b589557631d --- /dev/null +++ b/libclc/opencl/include/clc/opencl/integer/bit_reverse.h @@ -0,0 +1,25 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_OPENCL_INTEGER_BIT_REVERSE_H__ +#define __CLC_OPENCL_INTEGER_BIT_REVERSE_H__ + +#ifdef cl_khr_extended_bit_ops + +#include + +#define FUNCTION bit_reverse +#define __CLC_BODY + +#include + +#undef FUNCTION + +#endif // cl_khr_extended_bit_ops + +#endif // __CLC_OPENCL_INTEGER_BIT_REVERSE_H__ diff --git a/libclc/opencl/include/clc/opencl/integer/bitfield_extract_signed.h b/libclc/opencl/include/clc/opencl/integer/bitfield_extract_signed.h new file mode 100644 index 0000000000000..0a902b2a21d6d --- /dev/null +++ b/libclc/opencl/include/clc/opencl/integer/bitfield_extract_signed.h @@ -0,0 +1,27 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_OPENCL_INTEGER_BITFIELD_EXTRACT_SIGNED_H__ +#define __CLC_OPENCL_INTEGER_BITFIELD_EXTRACT_SIGNED_H__ + +#ifdef cl_khr_extended_bit_ops + +#include + +#define FUNCTION bitfield_extract_signed +#define __RETTYPE __CLC_S_GENTYPE + +#define __CLC_BODY +#include + +#undef __RETTYPE +#undef FUNCTION + +#endif // cl_khr_extended_bit_ops + +#endif // __CLC_OPENCL_INTEGER_BITFIELD_EXTRACT_SIGNED_H__ diff --git a/libclc/opencl/include/clc/opencl/integer/bitfield_extract_unsigned.h b/libclc/opencl/include/clc/opencl/integer/bitfield_extract_unsigned.h new file mode 100644 index 0000000000000..28064c08b113e --- /dev/null +++ b/libclc/opencl/include/clc/opencl/integer/bitfield_extract_unsigned.h @@ -0,0 +1,27 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_OPENCL_INTEGER_BITFIELD_EXTRACT_UNSIGNED_H__ +#define __CLC_OPENCL_INTEGER_BITFIELD_EXTRACT_UNSIGNED_H__ + +#ifdef cl_khr_extended_bit_ops + +#include + +#define FUNCTION bitfield_extract_unsigned +#define __RETTYPE __CLC_U_GENTYPE + +#define __CLC_BODY +#include + +#undef __RETTYPE +#undef FUNCTION + +#endif // cl_khr_extended_bit_ops + +#endif // __CLC_OPENCL_INTEGER_BITFIELD_EXTRACT_UNSIGNED_H__ diff --git a/libclc/opencl/include/clc/opencl/integer/bitfield_insert.h b/libclc/opencl/include/clc/opencl/integer/bitfield_insert.h new file mode 100644 index 0000000000000..e77d7a4f0b957 --- /dev/null +++ b/libclc/opencl/include/clc/opencl/integer/bitfield_insert.h @@ -0,0 +1,23 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_OPENCL_INTEGER_BITFIELD_INSERT_H__ +#define __CLC_OPENCL_INTEGER_BITFIELD_INSERT_H__ + +#ifdef cl_khr_extended_bit_ops + +#include + +#define __CLC_BODY +#include + +#undef FUNCTION + +#endif // cl_khr_extended_bit_ops + +#endif // __CLC_OPENCL_INTEGER_BITFIELD_INSERT_H__ diff --git a/libclc/opencl/lib/generic/SOURCES b/libclc/opencl/lib/generic/SOURCES index 46ce6d6e36c24..a59a82ee325ec 100644 --- a/libclc/opencl/lib/generic/SOURCES +++ b/libclc/opencl/lib/generic/SOURCES @@ -43,6 +43,10 @@ geometric/normalize.cl integer/abs.cl integer/abs_diff.cl integer/add_sat.cl +integer/bitfield_extract_signed.cl +integer/bitfield_extract_unsigned.cl +integer/bitfield_insert.cl +integer/bit_reverse.cl integer/clz.cl integer/ctz.cl integer/hadd.cl diff --git a/libclc/opencl/lib/generic/integer/bit_reverse.cl b/libclc/opencl/lib/generic/integer/bit_reverse.cl new file mode 100644 index 0000000000000..23181b6b3eba5 --- /dev/null +++ b/libclc/opencl/lib/generic/integer/bit_reverse.cl @@ -0,0 +1,19 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifdef cl_khr_extended_bit_ops + +#include +#include + +#define FUNCTION bit_reverse +#define __CLC_BODY + +#include + +#endif // cl_khr_extended_bit_ops diff --git a/libclc/opencl/lib/generic/integer/bitfield_extract_def.inc b/libclc/opencl/lib/generic/integer/bitfield_extract_def.inc new file mode 100644 index 0000000000000..0262f67732afc --- /dev/null +++ b/libclc/opencl/lib/generic/integer/bitfield_extract_def.inc @@ -0,0 +1,16 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __IMPL_FUNCTION +#define __IMPL_FUNCTION(x) __CLC_CONCAT(__clc_, x) +#endif + +_CLC_OVERLOAD _CLC_DEF __RETTYPE FUNCTION(__CLC_GENTYPE base, uint offset, + uint count) { + return __IMPL_FUNCTION(FUNCTION)(base, offset, count); +} diff --git a/libclc/opencl/lib/generic/integer/bitfield_extract_signed.cl b/libclc/opencl/lib/generic/integer/bitfield_extract_signed.cl new file mode 100644 index 0000000000000..eaa4ac779cfd1 --- /dev/null +++ b/libclc/opencl/lib/generic/integer/bitfield_extract_signed.cl @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifdef cl_khr_extended_bit_ops + +#include +#include + +#define FUNCTION bitfield_extract_signed +#define __RETTYPE __CLC_S_GENTYPE + +#define __CLC_BODY +#include + +#endif // cl_khr_extended_bit_ops diff --git a/libclc/opencl/lib/generic/integer/bitfield_extract_unsigned.cl b/libclc/opencl/lib/generic/integer/bitfield_extract_unsigned.cl new file mode 100644 index 0000000000000..fd63d5d6dee30 --- /dev/null +++ b/libclc/opencl/lib/generic/integer/bitfield_extract_unsigned.cl @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifdef cl_khr_extended_bit_ops + +#include +#include + +#define FUNCTION bitfield_extract_unsigned +#define __RETTYPE __CLC_U_GENTYPE + +#define __CLC_BODY +#include + +#endif // cl_khr_extended_bit_ops diff --git a/libclc/opencl/lib/generic/integer/bitfield_insert.cl b/libclc/opencl/lib/generic/integer/bitfield_insert.cl new file mode 100644 index 0000000000000..6b441155f393b --- /dev/null +++ b/libclc/opencl/lib/generic/integer/bitfield_insert.cl @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifdef cl_khr_extended_bit_ops + +#include +#include + +#define FUNCTION bitfield_insert +#define __CLC_BODY +#include + +#endif // cl_khr_extended_bit_ops diff --git a/libclc/opencl/lib/generic/integer/bitfield_insert.inc b/libclc/opencl/lib/generic/integer/bitfield_insert.inc new file mode 100644 index 0000000000000..b1f45907a4361 --- /dev/null +++ b/libclc/opencl/lib/generic/integer/bitfield_insert.inc @@ -0,0 +1,13 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE bitfield_insert(__CLC_GENTYPE base, + __CLC_GENTYPE insert, + uint offset, uint count) { + return __clc_bitfield_insert(base, insert, offset, count); +}