14e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi/* Compute the sum of the squares of a vector of signed shorts
24e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi
34e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi * Copyright 2004 Phil Karn, KA9Q
44e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi * May be used under the terms of the GNU Lesser General Public License (LGPL)
54e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi */
64e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi
74e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#include <stdlib.h>
84e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#include "fec.h"
94e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi
104e213d510f437769f8a28578dd4f786fb7d16c4Bill Yiunsigned long long sumsq_port(signed short *,int);
114e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi
124e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#ifdef __i386__
134e213d510f437769f8a28578dd4f786fb7d16c4Bill Yiunsigned long long sumsq_mmx(signed short *,int);
144e213d510f437769f8a28578dd4f786fb7d16c4Bill Yiunsigned long long sumsq_sse(signed short *,int);
154e213d510f437769f8a28578dd4f786fb7d16c4Bill Yiunsigned long long sumsq_sse2(signed short *,int);
164e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#endif
174e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi
184e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#ifdef __VEC__
194e213d510f437769f8a28578dd4f786fb7d16c4Bill Yiunsigned long long sumsq_av(signed short *,int);
204e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#endif
214e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi
224e213d510f437769f8a28578dd4f786fb7d16c4Bill Yiunsigned long long sumsq(signed short *in,int cnt){
234e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi  switch(Cpu_mode){
244e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi  case PORT:
254e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi  default:
264e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi    return sumsq_port(in,cnt);
274e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#ifdef __i386__
284e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi  case SSE:
294e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi  case MMX:
304e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi    return sumsq_mmx(in,cnt);
314e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi  case SSE2:
324e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi    return sumsq_sse2(in,cnt);
334e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#endif
344e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi
354e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#ifdef __VEC__
364e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi  case ALTIVEC:
374e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi    return sumsq_av(in,cnt);
384e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi#endif
394e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi  }
404e213d510f437769f8a28578dd4f786fb7d16c4Bill Yi}
41