diff options
Diffstat (limited to 'lib/lzo/lzo1x_compress.c')
| -rw-r--r-- | lib/lzo/lzo1x_compress.c | 14 | 
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/lzo/lzo1x_compress.c b/lib/lzo/lzo1x_compress.c index ba16c08e8cb9..717c940112f9 100644 --- a/lib/lzo/lzo1x_compress.c +++ b/lib/lzo/lzo1x_compress.c @@ -83,17 +83,19 @@ next:  					ALIGN((uintptr_t)ir, 4)) &&  					(ir < limit) && (*ir == 0))  				ir++; -			for (; (ir + 4) <= limit; ir += 4) { -				dv = *((u32 *)ir); -				if (dv) { +			if (IS_ALIGNED((uintptr_t)ir, 4)) { +				for (; (ir + 4) <= limit; ir += 4) { +					dv = *((u32 *)ir); +					if (dv) {  #  if defined(__LITTLE_ENDIAN) -					ir += __builtin_ctz(dv) >> 3; +						ir += __builtin_ctz(dv) >> 3;  #  elif defined(__BIG_ENDIAN) -					ir += __builtin_clz(dv) >> 3; +						ir += __builtin_clz(dv) >> 3;  #  else  #    error "missing endian definition"  #  endif -					break; +						break; +					}  				}  			}  #endif  |