diff -r e4d67989cc36 -r 47c74d1534e1 genericopenlibs/liboil/src/conv/conv_c.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/liboil/src/conv/conv_c.c Fri Apr 16 16:46:38 2010 +0300 @@ -0,0 +1,2172 @@ +/* + * LIBOIL - Library of Optimized Inner Loops + * Copyright (c) 2001,2003,2004 David A. Schleef + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +//Portions Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include "liboil/conv/conv.h" + +#include + +#ifdef __SYMBIAN32__ +#ifdef __WINSCW__ +#pragma warn_emptydecl off +#endif//__WINSCW__ +#endif//__SYMBIAN32__ + +#define CONV_DEFINE_CAST(desttype,srctype) \ +static void conv_ ## desttype ## _ ## srctype ## _c ( \ + oil_type_ ## desttype *dest, \ + int dest_stride, \ + const oil_type_ ## srctype *src, \ + int src_stride, int n) \ +{ \ + int i; \ + for(i=0;ioil_type_max_ ## desttype) x=oil_type_max_ ## desttype; \ + *dest = x; \ + dest = OIL_OFFSET(dest, dest_stride); \ + src = OIL_OFFSET(src, src_stride); \ + } \ +} \ +OIL_DEFINE_IMPL(clipconv_ ## desttype ## _ ## srctype ## _c, \ + clipconv_ ## desttype ## _ ## srctype); + +#define CLIPCONV_DEFINE_UPPER(desttype,srctype) \ +static void clipconv_ ## desttype ## _ ## srctype ## _c ( \ + oil_type_ ## desttype *dest, \ + int dest_stride, \ + const oil_type_ ## srctype *src, \ + int src_stride, int n) \ +{ \ + int i; \ + oil_type_ ## srctype x; \ + for(i=0;ioil_type_max_ ## desttype) x=oil_type_max_ ## desttype; \ + *dest = x; \ + dest = OIL_OFFSET(dest, dest_stride); \ + src = OIL_OFFSET(src, src_stride); \ + } \ +} \ +OIL_DEFINE_IMPL(clipconv_ ## desttype ## _ ## srctype ## _c, \ + clipconv_ ## desttype ## _ ## srctype); + +#define CLIPCONV_DEFINE_LOWER(desttype,srctype) \ +static void clipconv_ ## desttype ## _ ## srctype ## _c ( \ + oil_type_ ## desttype *dest, \ + int dest_stride, \ + const oil_type_ ## srctype *src, \ + int src_stride, int n) \ +{ \ + int i; \ + oil_type_ ## srctype x; \ + for(i=0;ioil_type_max_ ## desttype) x=oil_type_max_ ## desttype; \ + *dest = rint(x); \ + dest = OIL_OFFSET(dest, dest_stride); \ + src = OIL_OFFSET(src, src_stride); \ + } \ +} \ +OIL_DEFINE_IMPL(clipconv_ ## desttype ## _ ## srctype ## _c, \ + clipconv_ ## desttype ## _ ## srctype); +#else +#define CLIPCONV_DEFINE_FLOAT(desttype,srctype) +#endif + +/* clip upper */ +CLIPCONV_DEFINE_UPPER(s8,u8); +CLIPCONV_DEFINE_UPPER(s8,u16); +CLIPCONV_DEFINE_UPPER(s8,u32); +CLIPCONV_DEFINE_UPPER(u8,u32); +CLIPCONV_DEFINE_UPPER(u8,u16); +CLIPCONV_DEFINE_UPPER(s16,u16); +CLIPCONV_DEFINE_UPPER(s16,u32); +CLIPCONV_DEFINE_UPPER(s32,u32); +CLIPCONV_DEFINE_UPPER(u16,u32); + +/* clip both */ +CLIPCONV_DEFINE_BOTH(s8,s16); +CLIPCONV_DEFINE_BOTH(s8,s32); +CLIPCONV_DEFINE_BOTH(u8,s16); +CLIPCONV_DEFINE_BOTH(u8,s32); +CLIPCONV_DEFINE_BOTH(s16,s32); +CLIPCONV_DEFINE_BOTH(u16,s32); + +/* clip lower */ +CLIPCONV_DEFINE_LOWER(u8,s8); +CLIPCONV_DEFINE_LOWER(u16,s16); +CLIPCONV_DEFINE_LOWER(u32,s32); + +/* clip both, float */ +CLIPCONV_DEFINE_FLOAT(s8,f32); +CLIPCONV_DEFINE_FLOAT(s8,f64); +CLIPCONV_DEFINE_FLOAT(u8,f32); +CLIPCONV_DEFINE_FLOAT(u8,f64); +CLIPCONV_DEFINE_FLOAT(s16,f32); +CLIPCONV_DEFINE_FLOAT(s16,f64); +CLIPCONV_DEFINE_FLOAT(u16,f32); +CLIPCONV_DEFINE_FLOAT(u16,f64); +CLIPCONV_DEFINE_FLOAT(s32,f32); +CLIPCONV_DEFINE_FLOAT(s32,f64); +CLIPCONV_DEFINE_FLOAT(u32,f32); +CLIPCONV_DEFINE_FLOAT(u32,f64); + + + + +#define CONV_DEFINE_CAST_UNROLL2(desttype,srctype) \ +static void conv_ ## desttype ## _ ## srctype ## _unroll2 ( \ + oil_type_ ## desttype *dest, \ + int dest_stride, \ + const oil_type_ ## srctype *src, \ + int src_stride, int n) \ +{ \ + int i; \ + if(n&1){ \ + *dest = *src; \ + dest = OIL_OFFSET(dest, dest_stride); \ + src = OIL_OFFSET(src, src_stride); \ + } \ + n>>=1; \ + for(i=0;i>=1; \ + for(i=0;i>=2; \ + for(i=0;i>=2; \ + for(i=0;i