static void foo1 (short *src, short *dst, unsigned char *mat, int val1) { int i, val; for (i = 1; i < 64; i++) { val = (int) (src[i] * mat[i] * val1) / 16; if ((val & 1) == 0 && val != 0) val += (val > 0) ? -1 : 1; dst[i] = (val > 2047) ? 2047 : ((val < -2048) ? -2048 : val); } } void foo (short *src, short *dst, unsigned char *mat, int val1) { int i, val, sum; foo1 (src, dst, mat, val1); for (i = 1; i < 64; i++) { val = (int) (src[i] * mat[i] * val1) / 16; sum += dst[i] = (val > 2047) ? 2047 : ((val < -2048) ? -2048 : val); } dst[63] ^= 1; }