genericopenlibs/liboil/src/ref/multsum_ref.c
branchRCL_3
changeset 56 acd3cd4aaceb
equal deleted inserted replaced
54:4332f0f7be53 56:acd3cd4aaceb
       
     1 /*
       
     2  * LIBOIL - Library of Optimized Inner Loops
       
     3  * Copyright (c) 2003,2004 David A. Schleef <ds@schleef.org>
       
     4  * All rights reserved.
       
     5  *
       
     6  * Redistribution and use in source and binary forms, with or without
       
     7  * modification, are permitted provided that the following conditions
       
     8  * are met:
       
     9  * 1. Redistributions of source code must retain the above copyright
       
    10  *    notice, this list of conditions and the following disclaimer.
       
    11  * 2. Redistributions in binary form must reproduce the above copyright
       
    12  *    notice, this list of conditions and the following disclaimer in the
       
    13  *    documentation and/or other materials provided with the distribution.
       
    14  * 
       
    15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
       
    16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
    17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
       
    18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
       
    19  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
       
    20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
       
    21  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
       
    22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
       
    23  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
       
    24  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
       
    25  * POSSIBILITY OF SUCH DAMAGE.
       
    26  */
       
    27 //Portions Copyright (c)  2008-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. 
       
    28 
       
    29 #ifdef HAVE_CONFIG_H
       
    30 #include "config.h"
       
    31 #endif
       
    32 
       
    33 #include <liboil/liboilfunction.h>
       
    34 #include "liboil/simdpack/simdpack.h"
       
    35 #include <math.h>
       
    36 
       
    37 
       
    38 #define MULTSUM_DEFINE_REF(type)	\
       
    39 static void multsum_ ## type ## _ref(	\
       
    40     oil_type_ ## type *dest,		\
       
    41     oil_type_ ## type *src1, int sstr1,	\
       
    42     oil_type_ ## type *src2, int sstr2,	\
       
    43     int n)				\
       
    44 {					\
       
    45   int i;				\
       
    46   double sum = 0;			\
       
    47   double errsum = 0;			\
       
    48   for(i=0;i<n;i++){			\
       
    49     oil_type_ ## type x;                    \
       
    50     oil_type_ ## type tmp;                  \
       
    51     x = OIL_GET(src1,sstr1*i,oil_type_ ## type) * OIL_GET(src2,sstr2*i,oil_type_ ## type);		\
       
    52     tmp = sum;				\
       
    53     sum += x;				\
       
    54     errsum += (tmp - sum) + x;		\
       
    55   }					\
       
    56   *dest = sum + errsum;			\
       
    57 }					\
       
    58 OIL_DEFINE_IMPL_REF (multsum_ ## type ## _ref, multsum_ ## type); \
       
    59 OIL_DEFINE_CLASS (multsum_ ## type, \
       
    60     "oil_type_" #type " *dest, "		\
       
    61     "oil_type_" #type " *src1, int sstr1, "	\
       
    62     "oil_type_" #type " *src2, int sstr2, "	\
       
    63     "int n")
       
    64 
       
    65 /**
       
    66  * oil_multsum_f32:
       
    67  * @dest:
       
    68  * @src1:
       
    69  * @sstr1:
       
    70  * @src2:
       
    71  * @sstr2:
       
    72  * @n:
       
    73  *
       
    74  * Multiplies each element in @src1 and @src2 and sums the results
       
    75  * over the entire array, and places the sum into @dest.
       
    76  */
       
    77 MULTSUM_DEFINE_REF(f32);
       
    78 /**
       
    79  * oil_multsum_f64:
       
    80  * @dest:
       
    81  * @src1:
       
    82  * @sstr1:
       
    83  * @src2:
       
    84  * @sstr2:
       
    85  * @n:
       
    86  *
       
    87  * Multiplies each element in @src1 and @src2 and sums the results
       
    88  * over the entire array, and places the sum into @dest.
       
    89  */
       
    90 MULTSUM_DEFINE_REF(f64);
       
    91 
       
    92 #ifdef	__SYMBIAN32__
       
    93  
       
    94 OilFunctionClass* __oil_function_class_multsum_f64() {
       
    95         return &_oil_function_class_multsum_f64;
       
    96 }
       
    97 #endif
       
    98 
       
    99 #ifdef	__SYMBIAN32__
       
   100  
       
   101 OilFunctionClass* __oil_function_class_multsum_f32() {
       
   102         return &_oil_function_class_multsum_f32;
       
   103 }
       
   104 #endif
       
   105 
       
   106 
       
   107 
       
   108 #ifdef	__SYMBIAN32__
       
   109  
       
   110 OilFunctionImpl* __oil_function_impl_multsum_f32_ref() {
       
   111 		return &_oil_function_impl_multsum_f32_ref;
       
   112 }
       
   113 #endif
       
   114 
       
   115 #ifdef	__SYMBIAN32__
       
   116  
       
   117 OilFunctionImpl* __oil_function_impl_multsum_f64_ref() {
       
   118 		return &_oil_function_impl_multsum_f64_ref;
       
   119 }
       
   120 #endif
       
   121 
       
   122 
       
   123 
       
   124 #ifdef	__SYMBIAN32__
       
   125  
       
   126 EXPORT_C void** _oil_function_class_ptr_multsum_f64 ()	{
       
   127 	oil_function_class_ptr_multsum_f64 = __oil_function_class_multsum_f64();
       
   128 	return &oil_function_class_ptr_multsum_f64->func;
       
   129 	}
       
   130 #endif
       
   131 
       
   132 #ifdef	__SYMBIAN32__
       
   133  
       
   134 EXPORT_C void** _oil_function_class_ptr_multsum_f32 ()	{
       
   135 	oil_function_class_ptr_multsum_f32 = __oil_function_class_multsum_f32();
       
   136 	return &oil_function_class_ptr_multsum_f32->func;
       
   137 	}
       
   138 #endif
       
   139