static void store_slice_c(uint8_t *dst, const int16_t *src, int dst_stride, int src_stride, int width, int height, int log2_scale) { int y, x; #define STORE(pos) do { \ temp = ((src[x + y * src_stride + pos] << log2_scale) + d[pos]) >> 8; \ if (temp & 0x100) temp = ~(temp >> 31); \ dst[x + y * dst_stride + pos] = temp; \ } while (0) for (y = 0; y < height; y++) { const uint8_t *d = dither[y&7]; for (x = 0; x < width; x += 8) { int temp; STORE(0); STORE(1); STORE(2); STORE(3); STORE(4); STORE(5); STORE(6); STORE(7); } } }