#include #include #include #define SIMD_SIZE 8 inline double sqr(double x) { return x*x; } size_t foo(double x[], double y[], size_t n, double tourx, double toury) { double closedist[SIMD_SIZE]; size_t closeidx[SIMD_SIZE]; double dist[SIMD_SIZE]; size_t i, j, simd_size; assert(n>0); for (i=0; iclosedist[i+simd_size]) { closeidx[i]=closeidx[i+simd_size]; closedist[i]=closedist[i+simd_size]; } simd_size=SIMD_SIZE/4; for (i=0; iclosedist[i+simd_size]) { closeidx[i]=closeidx[i+simd_size]; closedist[i]=closedist[i+simd_size]; } simd_size=SIMD_SIZE/8; double cd = closedist[0]; size_t ci = closeidx[0]; if (cd>closedist[1]) { ci=closeidx[1]; cd=closedist[1]; } return ci; }