in renderscript-toolkit/src/main/cpp/Blur.cpp [260:311]
static void OneVFU1(float* out, const uchar* ptrIn, int iStride, const float* gPtr, int ct, int len,
bool usesSimd) {
int x1 = 0;
while((len > x1) && (((uintptr_t)ptrIn) & 0x3)) {
const uchar *pi = ptrIn;
float blurredPixel = 0;
const float* gp = gPtr;
for (int r = 0; r < ct; r++) {
float pf = (float)pi[0];
blurredPixel += pf * gp[0];
pi += iStride;
gp++;
}
out[0] = blurredPixel;
x1++;
out++;
ptrIn++;
len--;
}
#if defined(ARCH_X86_HAVE_SSSE3)
if (usesSimd && (len > x1)) {
int t = (len - x1) >> 2;
t &= ~1;
if (t) {
rsdIntrinsicBlurVFU4_K(out, ptrIn, iStride, gPtr, ct, 0, t );
len -= t << 2;
ptrIn += t << 2;
out += t << 2;
}
}
#else
(void) usesSimd; // Avoid unused parameter warning.
#endif
while(len > 0) {
const uchar *pi = ptrIn;
float blurredPixel = 0;
const float* gp = gPtr;
for (int r = 0; r < ct; r++) {
float pf = (float)pi[0];
blurredPixel += pf * gp[0];
pi += iStride;
gp++;
}
out[0] = blurredPixel;
len--;
out++;
ptrIn++;
}
}