sl@0: /* sl@0: * LIBOIL - Library of Optimized Inner Loops sl@0: * Copyright (c) 2003,2004 David A. Schleef sl@0: * All rights reserved. sl@0: * sl@0: * Redistribution and use in source and binary forms, with or without sl@0: * modification, are permitted provided that the following conditions sl@0: * are met: sl@0: * 1. Redistributions of source code must retain the above copyright sl@0: * notice, this list of conditions and the following disclaimer. sl@0: * 2. Redistributions in binary form must reproduce the above copyright sl@0: * notice, this list of conditions and the following disclaimer in the sl@0: * documentation and/or other materials provided with the distribution. sl@0: * sl@0: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR sl@0: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED sl@0: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE sl@0: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, sl@0: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES sl@0: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR sl@0: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) sl@0: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, sl@0: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING sl@0: * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE sl@0: * POSSIBILITY OF SUCH DAMAGE. sl@0: */ sl@0: //Portions Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. sl@0: sl@0: #ifdef HAVE_CONFIG_H sl@0: #include "config.h" sl@0: #endif sl@0: sl@0: #include "liboil/liboilfunction.h" sl@0: #include "liboil/liboiltest.h" sl@0: sl@0: /** sl@0: * SECTION:liboilfuncs-doc: sl@0: * @title: Miscellaneous sl@0: * @short_description: Miscellaneous functions sl@0: */ sl@0: #define CLIP_DEFINE_REF(type) \ sl@0: static void clip_ ## type ## _ref ( \ sl@0: oil_type_ ## type *dest, \ sl@0: int dstr, \ sl@0: oil_type_ ## type *src, \ sl@0: int sstr, int n, \ sl@0: oil_type_ ## type *min, oil_type_ ## type *max) \ sl@0: { \ sl@0: int i; \ sl@0: oil_type_ ## type x; \ sl@0: for(i=0;i*max) x = *max; \ sl@0: OIL_GET(dest,i*dstr,oil_type_ ## type) = x; \ sl@0: } \ sl@0: } \ sl@0: static void clip_ ## type ## _test (OilTest *test) \ sl@0: { \ sl@0: oil_type_ ## type *lo = (oil_type_ ## type *) \ sl@0: oil_test_get_source_data (test, OIL_ARG_SRC2); \ sl@0: oil_type_ ## type *hi = (oil_type_ ## type *) \ sl@0: oil_test_get_source_data (test, OIL_ARG_SRC3); \ sl@0: if (*lo > *hi) { \ sl@0: oil_type_ ## type tmp; \ sl@0: tmp = *lo; \ sl@0: *lo = *hi; \ sl@0: *hi = tmp; \ sl@0: } \ sl@0: } \ sl@0: OIL_DEFINE_CLASS_FULL(clip_ ## type, \ sl@0: "oil_type_" #type " *dest, " \ sl@0: "int dstr, " \ sl@0: "oil_type_" #type " *src, " \ sl@0: "int sstr, int n, " \ sl@0: "oil_type_" #type " *s2_1, oil_type_" #type " *s3_1", \ sl@0: clip_ ## type ## _test); \ sl@0: OIL_DEFINE_IMPL_REF(clip_ ## type ## _ref, clip_ ## type) sl@0: sl@0: CLIP_DEFINE_REF (s8); sl@0: CLIP_DEFINE_REF (u8); sl@0: CLIP_DEFINE_REF (s16); sl@0: CLIP_DEFINE_REF (u16); sl@0: CLIP_DEFINE_REF (s32); sl@0: CLIP_DEFINE_REF (u32); sl@0: CLIP_DEFINE_REF (f32); sl@0: CLIP_DEFINE_REF (f64); sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionClass* __oil_function_class_clip_u8() { sl@0: return &_oil_function_class_clip_u8; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionClass* __oil_function_class_clip_s8() { sl@0: return &_oil_function_class_clip_s8; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionClass* __oil_function_class_clip_s16() { sl@0: return &_oil_function_class_clip_s16; sl@0: } sl@0: #endif sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionClass* __oil_function_class_clip_u16() { sl@0: return &_oil_function_class_clip_u16; sl@0: } sl@0: #endif sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionClass* __oil_function_class_clip_s32() { sl@0: return &_oil_function_class_clip_s32; sl@0: } sl@0: #endif sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionClass* __oil_function_class_clip_u32() { sl@0: return &_oil_function_class_clip_u32; sl@0: } sl@0: #endif sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionClass* __oil_function_class_clip_f32() { sl@0: return &_oil_function_class_clip_f32; sl@0: } sl@0: #endif sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionClass* __oil_function_class_clip_f64() { sl@0: return &_oil_function_class_clip_f64; sl@0: } sl@0: #endif sl@0: /** sl@0: * oil_clip_s8: sl@0: * @dest: sl@0: * @dstr: sl@0: * @src: sl@0: * @sstr: sl@0: * @n: sl@0: * @s2_1: sl@0: * @s3_1: sl@0: * sl@0: * Clips each value in @src to the range [@s2_1,@s3_1] and places sl@0: * the result in @dest. sl@0: */ sl@0: sl@0: /** sl@0: * oil_clip_u8: sl@0: * @dest: sl@0: * @dstr: sl@0: * @src: sl@0: * @sstr: sl@0: * @n: sl@0: * @s2_1: sl@0: * @s3_1: sl@0: * sl@0: * Clips each value in @src to the range [@s2_1,@s3_1] and places sl@0: * the result in @dest. sl@0: */ sl@0: sl@0: /** sl@0: * oil_clip_s16: sl@0: * @dest: sl@0: * @dstr: sl@0: * @src: sl@0: * @sstr: sl@0: * @n: sl@0: * @s2_1: sl@0: * @s3_1: sl@0: * sl@0: * Clips each value in @src to the range [@s2_1,@s3_1] and places sl@0: * the result in @dest. sl@0: */ sl@0: sl@0: /** sl@0: * oil_clip_u16: sl@0: * @dest: sl@0: * @dstr: sl@0: * @src: sl@0: * @sstr: sl@0: * @n: sl@0: * @s2_1: sl@0: * @s3_1: sl@0: * sl@0: * Clips each value in @src to the range [@s2_1,@s3_1] and places sl@0: * the result in @dest. sl@0: */ sl@0: sl@0: /** sl@0: * oil_clip_s32: sl@0: * @dest: sl@0: * @dstr: sl@0: * @src: sl@0: * @sstr: sl@0: * @n: sl@0: * @s2_1: sl@0: * @s3_1: sl@0: * sl@0: * Clips each value in @src to the range [@s2_1,@s3_1] and places sl@0: * the result in @dest. sl@0: */ sl@0: sl@0: /** sl@0: * oil_clip_u32: sl@0: * @dest: sl@0: * @dstr: sl@0: * @src: sl@0: * @sstr: sl@0: * @n: sl@0: * @s2_1: sl@0: * @s3_1: sl@0: * sl@0: * Clips each value in @src to the range [@s2_1,@s3_1] and places sl@0: * the result in @dest. sl@0: */ sl@0: sl@0: /** sl@0: * oil_clip_f32: sl@0: * @dest: sl@0: * @dstr: sl@0: * @src: sl@0: * @sstr: sl@0: * @n: sl@0: * @s2_1: sl@0: * @s3_1: sl@0: * sl@0: * Clips each value in @src to the range [@s2_1,@s3_1] and places sl@0: * the result in @dest. sl@0: */ sl@0: sl@0: /** sl@0: * oil_clip_f64: sl@0: * @dest: sl@0: * @dstr: sl@0: * @src: sl@0: * @sstr: sl@0: * @n: sl@0: * @s2_1: sl@0: * @s3_1: sl@0: * sl@0: * Clips each value in @src to the range [@s2_1,@s3_1] and places sl@0: * the result in @dest. sl@0: */ sl@0: sl@0: sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionImpl* __oil_function_impl_clip_s8_ref() { sl@0: return &_oil_function_impl_clip_s8_ref; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionImpl* __oil_function_impl_clip_u8_ref() { sl@0: return &_oil_function_impl_clip_u8_ref; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionImpl* __oil_function_impl_clip_s16_ref() { sl@0: return &_oil_function_impl_clip_s16_ref; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionImpl* __oil_function_impl_clip_u16_ref() { sl@0: return &_oil_function_impl_clip_u16_ref; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionImpl* __oil_function_impl_clip_s32_ref() { sl@0: return &_oil_function_impl_clip_s32_ref; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionImpl* __oil_function_impl_clip_u32_ref() { sl@0: return &_oil_function_impl_clip_u32_ref; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionImpl* __oil_function_impl_clip_f32_ref() { sl@0: return &_oil_function_impl_clip_f32_ref; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: OilFunctionImpl* __oil_function_impl_clip_f64_ref() { sl@0: return &_oil_function_impl_clip_f64_ref; sl@0: } sl@0: #endif sl@0: sl@0: sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: EXPORT_C void** _oil_function_class_ptr_clip_u8 () { sl@0: oil_function_class_ptr_clip_u8 = __oil_function_class_clip_u8(); sl@0: return &oil_function_class_ptr_clip_u8->func; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: EXPORT_C void** _oil_function_class_ptr_clip_s8 () { sl@0: oil_function_class_ptr_clip_s8 = __oil_function_class_clip_s8(); sl@0: return &oil_function_class_ptr_clip_s8->func; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: EXPORT_C void** _oil_function_class_ptr_clip_s16 () { sl@0: oil_function_class_ptr_clip_s16 = __oil_function_class_clip_s16(); sl@0: return &oil_function_class_ptr_clip_s16->func; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: EXPORT_C void** _oil_function_class_ptr_clip_u16 () { sl@0: oil_function_class_ptr_clip_u16 = __oil_function_class_clip_u16(); sl@0: return &oil_function_class_ptr_clip_u16->func; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: EXPORT_C void** _oil_function_class_ptr_clip_s32 () { sl@0: oil_function_class_ptr_clip_s32 = __oil_function_class_clip_s32(); sl@0: return &oil_function_class_ptr_clip_s32->func; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: EXPORT_C void** _oil_function_class_ptr_clip_u32 () { sl@0: oil_function_class_ptr_clip_u32 = __oil_function_class_clip_u32(); sl@0: return &oil_function_class_ptr_clip_u32->func; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: EXPORT_C void** _oil_function_class_ptr_clip_f32 () { sl@0: oil_function_class_ptr_clip_f32 = __oil_function_class_clip_f32(); sl@0: return &oil_function_class_ptr_clip_f32->func; sl@0: } sl@0: #endif sl@0: sl@0: #ifdef __SYMBIAN32__ sl@0: sl@0: EXPORT_C void** _oil_function_class_ptr_clip_f64 () { sl@0: oil_function_class_ptr_clip_f64 = __oil_function_class_clip_f64(); sl@0: return &oil_function_class_ptr_clip_f64->func; sl@0: } sl@0: #endif sl@0: