=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/array.c,v retrieving revision 1.72 retrieving revision 1.74 diff -u -p -r1.72 -r1.74 --- OpenXM_contrib2/asir2000/builtin/array.c 2017/08/31 08:08:25 1.72 +++ OpenXM_contrib2/asir2000/builtin/array.c 2017/09/15 01:52:51 1.74 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.71 2017/02/21 09:20:23 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.73 2017/09/14 01:34:53 noro Exp $ */ #include "ca.h" #include "base.h" @@ -2355,6 +2355,24 @@ void red_by_vect(int m,unsigned int *p,unsigned int *r *p = lo; } } + +#if defined(__GNUC__) +/* 64bit vector += UNIT vector(normalized) */ + +void red_by_vect64(int m, U64 *p,unsigned int *c,U64 *r,unsigned int hc,int len) +{ + U64 t; + + /* (p[0],c[0]) is normalized */ + *p++ = 0; *c++ = 0; r++; len--; + for ( ; len; len--, r++, p++, c++ ) + if ( *r ) { + t = (*p)+(*r)*hc; + if ( t < *p ) (*c)++; + *p = t; + } +} +#endif void red_by_vect_sf(int m,unsigned int *p,unsigned int *r,unsigned int hc,int len) {