diff options
| author | Markus F.X.J. Oberhumer <markus@oberhumer.com> | 2013-02-04 02:26:14 +0100 |
|---|---|---|
| committer | Moyster <oysterized@gmail.com> | 2018-11-29 15:15:08 +0100 |
| commit | f86db0c1a3a79216ebba4a84ae09f579da96f427 (patch) | |
| tree | 23e9bc8e63b03e2f3d01200ba106ab36c6255bf9 /lib/lzo | |
| parent | 7235b78a49580832e9519a22c46ee7d9b1501e0e (diff) | |
lib/lzo: huge LZO decompression speedup on ARM by using unaligned access
Change-Id: Ie9ded24e1e23580fdba479273f213ef65aff13fc
Signed-off-by: Markus F.X.J. Oberhumer <markus@oberhumer.com>
Diffstat (limited to 'lib/lzo')
| -rw-r--r-- | lib/lzo/lzo1x_decompress_safe.c | 4 | ||||
| -rw-r--r-- | lib/lzo/lzodefs.h | 6 |
2 files changed, 10 insertions, 0 deletions
diff --git a/lib/lzo/lzo1x_decompress_safe.c b/lib/lzo/lzo1x_decompress_safe.c index a1c387f6a..0875a8e6e 100644 --- a/lib/lzo/lzo1x_decompress_safe.c +++ b/lib/lzo/lzo1x_decompress_safe.c @@ -89,9 +89,11 @@ copy_literal_run: COPY8(op, ip); op += 8; ip += 8; +# if !defined(__arm__) COPY8(op, ip); op += 8; ip += 8; +# endif } while (ip < ie); ip = ie; op = oe; @@ -190,9 +192,11 @@ copy_literal_run: COPY8(op, m_pos); op += 8; m_pos += 8; +# if !defined(__arm__) COPY8(op, m_pos); op += 8; m_pos += 8; +# endif } while (op < oe); op = oe; if (HAVE_IP(6)) { diff --git a/lib/lzo/lzodefs.h b/lib/lzo/lzodefs.h index 6710b83ce..db756ccb2 100644 --- a/lib/lzo/lzodefs.h +++ b/lib/lzo/lzodefs.h @@ -12,8 +12,14 @@ */ +#if 1 && defined(__arm__) && ((__LINUX_ARM_ARCH__ >= 6) || defined(__ARM_FEATURE_UNALIGNED)) +#define CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 1 +#define COPY4(dst, src) \ + * (u32 *) (void *) (dst) = * (const u32 *) (const void *) (src) +#else #define COPY4(dst, src) \ put_unaligned(get_unaligned((const u32 *)(src)), (u32 *)(dst)) +#endif #if defined(__x86_64__) #define COPY8(dst, src) \ put_unaligned(get_unaligned((const u64 *)(src)), (u64 *)(dst)) |
