-#if !HAVE_FAST_UNALIGNED
- if((long)src2 & (sizeof(long)-1)){
- for(i=0; i+3<w; i+=4){
- dst[i+0] = (src1[i+0]-src2[i+0]) & mask;
- dst[i+1] = (src1[i+1]-src2[i+1]) & mask;
- dst[i+2] = (src1[i+2]-src2[i+2]) & mask;
- dst[i+3] = (src1[i+3]-src2[i+3]) & mask;
- }
- }else
-#endif
- {
- unsigned long pw_lsb = (mask >> 1) * 0x0001000100010001ULL;
- unsigned long pw_msb = pw_lsb + 0x0001000100010001ULL;
-
- for (i = 0; i <= w - (int)sizeof(long)/2; i += sizeof(long)/2) {
- long a = *(long*)(src1+i);
- long b = *(long*)(src2+i);
- *(long*)(dst+i) = ((a|pw_msb) - (b&pw_lsb)) ^ ((a^b^pw_msb)&pw_msb);
- }
+
+ for (i = 0; i <= w - (int) sizeof(long); i += sizeof(long)) {
+ long a = *(long *) (src + i);
+ long b = *(long *) (dst + i);
+ *(long *) (dst + i) = ((a & pb_7f) + (b & pb_7f)) ^ ((a ^ b) & pb_80);