1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/genericopenlibs/liboil/src/simdpack/scalaradd.c Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,323 @@
1.4 +/*
1.5 + * LIBOIL - Library of Optimized Inner Loops
1.6 + * Copyright (c) 2003,2004 David A. Schleef <ds@schleef.org>
1.7 + * All rights reserved.
1.8 + *
1.9 + * Redistribution and use in source and binary forms, with or without
1.10 + * modification, are permitted provided that the following conditions
1.11 + * are met:
1.12 + * 1. Redistributions of source code must retain the above copyright
1.13 + * notice, this list of conditions and the following disclaimer.
1.14 + * 2. Redistributions in binary form must reproduce the above copyright
1.15 + * notice, this list of conditions and the following disclaimer in the
1.16 + * documentation and/or other materials provided with the distribution.
1.17 + *
1.18 + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1.19 + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
1.20 + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1.21 + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
1.22 + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
1.23 + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
1.24 + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
1.25 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
1.26 + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
1.27 + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
1.28 + * POSSIBILITY OF SUCH DAMAGE.
1.29 + */
1.30 +//Portions Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
1.31 +
1.32 +#ifdef HAVE_CONFIG_H
1.33 +#include "config.h"
1.34 +#endif
1.35 +
1.36 +#include <liboil/liboilfunction.h>
1.37 +#include "liboil/simdpack/simdpack.h"
1.38 +
1.39 +#ifdef __SYMBIAN32__
1.40 +#ifdef __WINSCW__
1.41 +#pragma warn_emptydecl off
1.42 +#endif//__WINSCW__
1.43 +#endif//__SYMBIAN32__
1.44 +
1.45 +#define SCALARADD_DEFINE_UNROLL2(type) \
1.46 +static void scalaradd_ ## type ## _unroll2( \
1.47 + oil_type_ ## type *dest, int dstr, \
1.48 + oil_type_ ## type *src, int sstr, \
1.49 + oil_type_ ## type *val, int n) \
1.50 +{ \
1.51 + if(n&1) { \
1.52 + *dest = *src + *val; \
1.53 + OIL_INCREMENT(dest, dstr); \
1.54 + OIL_INCREMENT(src, sstr); \
1.55 + } \
1.56 + n /= 2; \
1.57 + while(n>0){ \
1.58 + *dest = *src + *val; \
1.59 + OIL_INCREMENT(dest,dstr); \
1.60 + OIL_INCREMENT(src,sstr); \
1.61 + *dest = *src + *val; \
1.62 + OIL_INCREMENT(dest,dstr); \
1.63 + OIL_INCREMENT(src,sstr); \
1.64 + n--; \
1.65 + } \
1.66 +} \
1.67 +OIL_DEFINE_IMPL (scalaradd_ ## type ## _unroll2, scalaradd_ ## type);
1.68 +
1.69 +SCALARADD_DEFINE_UNROLL2 (s8);
1.70 +SCALARADD_DEFINE_UNROLL2 (u8);
1.71 +SCALARADD_DEFINE_UNROLL2 (s16);
1.72 +SCALARADD_DEFINE_UNROLL2 (u16);
1.73 +SCALARADD_DEFINE_UNROLL2 (s32);
1.74 +SCALARADD_DEFINE_UNROLL2 (u32);
1.75 +SCALARADD_DEFINE_UNROLL2 (f32);
1.76 +SCALARADD_DEFINE_UNROLL2 (f64);
1.77 +
1.78 +#define SCALARADD_DEFINE_UNROLL2x(type) \
1.79 +static void scalaradd_ ## type ## _unroll2x( \
1.80 + oil_type_ ## type *dest, int dstr, \
1.81 + oil_type_ ## type *src, int sstr, \
1.82 + oil_type_ ## type *val, int n) \
1.83 +{ \
1.84 + oil_type_ ## type *dest2; \
1.85 + oil_type_ ## type *src2; \
1.86 + int i; \
1.87 + if(n&1) { \
1.88 + *dest = *src + *val; \
1.89 + OIL_INCREMENT(dest, dstr); \
1.90 + OIL_INCREMENT(src, sstr); \
1.91 + } \
1.92 + src2 = OIL_OFFSET(src, sstr); \
1.93 + dest2 = OIL_OFFSET(dest, dstr); \
1.94 + n /= 2; \
1.95 + sstr *= 2; \
1.96 + dstr *= 2; \
1.97 + for(i=0;i<n;i++){ \
1.98 + OIL_GET(dest,dstr*i, oil_type_ ## type) = OIL_GET(src,sstr*i, oil_type_ ## type) + *val; \
1.99 + OIL_GET(dest2,dstr*i, oil_type_ ## type) = OIL_GET(src2,sstr*i, oil_type_ ## type) + *val; \
1.100 + } \
1.101 +} \
1.102 +OIL_DEFINE_IMPL (scalaradd_ ## type ## _unroll2x, scalaradd_ ## type);
1.103 +
1.104 +SCALARADD_DEFINE_UNROLL2x (s8);
1.105 +SCALARADD_DEFINE_UNROLL2x (u8);
1.106 +SCALARADD_DEFINE_UNROLL2x (s16);
1.107 +SCALARADD_DEFINE_UNROLL2x (u16);
1.108 +SCALARADD_DEFINE_UNROLL2x (s32);
1.109 +SCALARADD_DEFINE_UNROLL2x (u32);
1.110 +SCALARADD_DEFINE_UNROLL2x (f32);
1.111 +SCALARADD_DEFINE_UNROLL2x (f64);
1.112 +
1.113 +#define SCALARADD_DEFINE_UNROLL4(type) \
1.114 +static void scalaradd_ ## type ## _unroll4( \
1.115 + oil_type_ ## type *dest, int dstr, \
1.116 + oil_type_ ## type *src, int sstr, \
1.117 + oil_type_ ## type *val, int n) \
1.118 +{ \
1.119 + if(n&1) { \
1.120 + *dest = *src + *val; \
1.121 + OIL_INCREMENT(dest, dstr); \
1.122 + OIL_INCREMENT(src, sstr); \
1.123 + } \
1.124 + if(n&2) { \
1.125 + *dest = *src + *val; \
1.126 + OIL_INCREMENT(dest, dstr); \
1.127 + OIL_INCREMENT(src, sstr); \
1.128 + *dest = *src + *val; \
1.129 + OIL_INCREMENT(dest, dstr); \
1.130 + OIL_INCREMENT(src, sstr); \
1.131 + } \
1.132 + n /= 4; \
1.133 + while(n>0){ \
1.134 + *dest = *src + *val; \
1.135 + OIL_INCREMENT(dest,dstr); \
1.136 + OIL_INCREMENT(src,sstr); \
1.137 + *dest = *src + *val; \
1.138 + OIL_INCREMENT(dest,dstr); \
1.139 + OIL_INCREMENT(src,sstr); \
1.140 + *dest = *src + *val; \
1.141 + OIL_INCREMENT(dest,dstr); \
1.142 + OIL_INCREMENT(src,sstr); \
1.143 + *dest = *src + *val; \
1.144 + OIL_INCREMENT(dest,dstr); \
1.145 + OIL_INCREMENT(src,sstr); \
1.146 + n--; \
1.147 + } \
1.148 +} \
1.149 +OIL_DEFINE_IMPL (scalaradd_ ## type ## _unroll4, scalaradd_ ## type);
1.150 +
1.151 +SCALARADD_DEFINE_UNROLL4 (s8);
1.152 +SCALARADD_DEFINE_UNROLL4 (u8);
1.153 +SCALARADD_DEFINE_UNROLL4 (s16);
1.154 +SCALARADD_DEFINE_UNROLL4 (u16);
1.155 +SCALARADD_DEFINE_UNROLL4 (s32);
1.156 +SCALARADD_DEFINE_UNROLL4 (u32);
1.157 +SCALARADD_DEFINE_UNROLL4 (f32);
1.158 +SCALARADD_DEFINE_UNROLL4 (f64);
1.159 +
1.160 +
1.161 +#ifdef __SYMBIAN32__
1.162 +
1.163 +OilFunctionImpl* __oil_function_impl_scalaradd_s8_unroll2() {
1.164 + return &_oil_function_impl_scalaradd_s8_unroll2;
1.165 +}
1.166 +#endif
1.167 +
1.168 +#ifdef __SYMBIAN32__
1.169 +
1.170 +OilFunctionImpl* __oil_function_impl_scalaradd_u8_unroll2() {
1.171 + return &_oil_function_impl_scalaradd_u8_unroll2;
1.172 +}
1.173 +#endif
1.174 +
1.175 +#ifdef __SYMBIAN32__
1.176 +
1.177 +OilFunctionImpl* __oil_function_impl_scalaradd_s16_unroll2() {
1.178 + return &_oil_function_impl_scalaradd_s16_unroll2;
1.179 +}
1.180 +#endif
1.181 +
1.182 +#ifdef __SYMBIAN32__
1.183 +
1.184 +OilFunctionImpl* __oil_function_impl_scalaradd_u16_unroll2() {
1.185 + return &_oil_function_impl_scalaradd_u16_unroll2;
1.186 +}
1.187 +#endif
1.188 +
1.189 +#ifdef __SYMBIAN32__
1.190 +
1.191 +OilFunctionImpl* __oil_function_impl_scalaradd_s32_unroll2() {
1.192 + return &_oil_function_impl_scalaradd_s32_unroll2;
1.193 +}
1.194 +#endif
1.195 +
1.196 +#ifdef __SYMBIAN32__
1.197 +
1.198 +OilFunctionImpl* __oil_function_impl_scalaradd_u32_unroll2() {
1.199 + return &_oil_function_impl_scalaradd_u32_unroll2;
1.200 +}
1.201 +#endif
1.202 +
1.203 +#ifdef __SYMBIAN32__
1.204 +
1.205 +OilFunctionImpl* __oil_function_impl_scalaradd_f32_unroll2() {
1.206 + return &_oil_function_impl_scalaradd_f32_unroll2;
1.207 +}
1.208 +#endif
1.209 +
1.210 +#ifdef __SYMBIAN32__
1.211 +
1.212 +OilFunctionImpl* __oil_function_impl_scalaradd_f64_unroll2() {
1.213 + return &_oil_function_impl_scalaradd_f64_unroll2;
1.214 +}
1.215 +#endif
1.216 +
1.217 +#ifdef __SYMBIAN32__
1.218 +
1.219 +OilFunctionImpl* __oil_function_impl_scalaradd_s8_unroll4() {
1.220 + return &_oil_function_impl_scalaradd_s8_unroll4;
1.221 +}
1.222 +#endif
1.223 +#ifdef __SYMBIAN32__
1.224 +
1.225 +OilFunctionImpl* __oil_function_impl_scalaradd_u8_unroll4() {
1.226 + return &_oil_function_impl_scalaradd_u8_unroll4;
1.227 +}
1.228 +#endif
1.229 +
1.230 +#ifdef __SYMBIAN32__
1.231 +
1.232 +OilFunctionImpl* __oil_function_impl_scalaradd_s16_unroll4() {
1.233 + return &_oil_function_impl_scalaradd_s16_unroll4;
1.234 +}
1.235 +#endif
1.236 +
1.237 +#ifdef __SYMBIAN32__
1.238 +
1.239 +OilFunctionImpl* __oil_function_impl_scalaradd_u16_unroll4() {
1.240 + return &_oil_function_impl_scalaradd_u16_unroll4;
1.241 +}
1.242 +#endif
1.243 +
1.244 +#ifdef __SYMBIAN32__
1.245 +
1.246 +OilFunctionImpl* __oil_function_impl_scalaradd_s32_unroll4() {
1.247 + return &_oil_function_impl_scalaradd_s32_unroll4;
1.248 +}
1.249 +#endif
1.250 +
1.251 +#ifdef __SYMBIAN32__
1.252 +
1.253 +OilFunctionImpl* __oil_function_impl_scalaradd_u32_unroll4() {
1.254 + return &_oil_function_impl_scalaradd_u32_unroll4;
1.255 +}
1.256 +#endif
1.257 +
1.258 +#ifdef __SYMBIAN32__
1.259 +
1.260 +OilFunctionImpl* __oil_function_impl_scalaradd_f32_unroll4() {
1.261 + return &_oil_function_impl_scalaradd_f32_unroll4;
1.262 +}
1.263 +#endif
1.264 +
1.265 +#ifdef __SYMBIAN32__
1.266 +
1.267 +OilFunctionImpl* __oil_function_impl_scalaradd_f64_unroll4() {
1.268 + return &_oil_function_impl_scalaradd_f64_unroll4;
1.269 +}
1.270 +#endif
1.271 +
1.272 +#ifdef __SYMBIAN32__
1.273 +
1.274 +OilFunctionImpl* __oil_function_impl_scalaradd_s8_unroll2x() {
1.275 + return &_oil_function_impl_scalaradd_s8_unroll2x;
1.276 +}
1.277 +#endif
1.278 +
1.279 +#ifdef __SYMBIAN32__
1.280 +
1.281 +OilFunctionImpl* __oil_function_impl_scalaradd_u8_unroll2x() {
1.282 + return &_oil_function_impl_scalaradd_u8_unroll2x;
1.283 +}
1.284 +#endif
1.285 +
1.286 +#ifdef __SYMBIAN32__
1.287 +
1.288 +OilFunctionImpl* __oil_function_impl_scalaradd_s16_unroll2x() {
1.289 + return &_oil_function_impl_scalaradd_s16_unroll2x;
1.290 +}
1.291 +#endif
1.292 +
1.293 +#ifdef __SYMBIAN32__
1.294 +
1.295 +OilFunctionImpl* __oil_function_impl_scalaradd_u16_unroll2x() {
1.296 + return &_oil_function_impl_scalaradd_u16_unroll2x;
1.297 +}
1.298 +#endif
1.299 +
1.300 +#ifdef __SYMBIAN32__
1.301 +
1.302 +OilFunctionImpl* __oil_function_impl_scalaradd_s32_unroll2x() {
1.303 + return &_oil_function_impl_scalaradd_s32_unroll2x;
1.304 +}
1.305 +#endif
1.306 +
1.307 +#ifdef __SYMBIAN32__
1.308 +
1.309 +OilFunctionImpl* __oil_function_impl_scalaradd_u32_unroll2x() {
1.310 + return &_oil_function_impl_scalaradd_u32_unroll2x;
1.311 +}
1.312 +#endif
1.313 +
1.314 +#ifdef __SYMBIAN32__
1.315 +
1.316 +OilFunctionImpl* __oil_function_impl_scalaradd_f32_unroll2x() {
1.317 + return &_oil_function_impl_scalaradd_f32_unroll2x;
1.318 +}
1.319 +#endif
1.320 +
1.321 +#ifdef __SYMBIAN32__
1.322 +
1.323 +OilFunctionImpl* __oil_function_impl_scalaradd_f64_unroll2x() {
1.324 + return &_oil_function_impl_scalaradd_f64_unroll2x;
1.325 +}
1.326 +#endif