diff options
author | yann.collet.73@gmail.com <yann.collet.73@gmail.com@650e7d94-2a16-8b24-b05c-7c0b3f6821cd> | 2012-03-16 19:50:58 (GMT) |
---|---|---|
committer | yann.collet.73@gmail.com <yann.collet.73@gmail.com@650e7d94-2a16-8b24-b05c-7c0b3f6821cd> | 2012-03-16 19:50:58 (GMT) |
commit | fd281f8e5d8822b0f2178d63c80315869c42cc58 (patch) | |
tree | 51f319119bf0663547ae0b259b56433dc0dd45a8 | |
parent | ad59ba1cfad62af37c44ded985fe1e2a0dffae05 (diff) | |
download | lz4-fd281f8e5d8822b0f2178d63c80315869c42cc58.zip lz4-fd281f8e5d8822b0f2178d63c80315869c42cc58.tar.gz lz4-fd281f8e5d8822b0f2178d63c80315869c42cc58.tar.bz2 |
Added : lz4demo : software swap32 backend for compilers which do not support hardware ones. Thanks Dmitry Cherepanov for contribution
git-svn-id: https://lz4.googlecode.com/svn/trunk@60 650e7d94-2a16-8b24-b05c-7c0b3f6821cd
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | lz4.c | 4 | ||||
-rw-r--r-- | lz4demo.c | 11 |
3 files changed, 13 insertions, 4 deletions
@@ -14,7 +14,7 @@ lz4demo64: lz4.c lz4.h bench.c lz4demo.c gcc -O3 -I. -std=c99 -Wall -W -Wundef -Wno-implicit-function-declaration lz4.c bench.c lz4demo.c -o $(OUTPUT64) lz4demo32: lz4.c lz4.h bench.c lz4demo.c - gcc -m32 -O3 -I. -std=c99 -Wall -W -Wundef -Wno-implicit-function-declaration lz4.c bench.c lz4demo.c -o $(OUTPUT32) + gcc -m32 -Os -march=native -I. -std=c99 -Wall -W -Wundef -Wno-implicit-function-declaration lz4.c bench.c lz4demo.c -o $(OUTPUT32) clean: rm -f core *.o $(OUTPUT32) $(OUTPUT64) @@ -215,10 +215,10 @@ typedef struct _U64_S { U64 v; } U64_S; #if (defined(LZ4_BIG_ENDIAN) && !defined(BIG_ENDIAN_NATIVE_BUT_INCOMPATIBLE))
#define LZ4_READ_LITTLEENDIAN_16(d,s,p) { U16 v = A16(p); v = bswap16(v); d = (s) - v; }
-#define LZ4_WRITE_LITTLEENDIAN_16(p,i) { U16 v = (U16)(i); v = bswap16(v); A16(p) = v; p+=2; }
+#define LZ4_WRITE_LITTLEENDIAN_16(p,i) { U16 v = (U16)(i); v = bswap16(v); A16(p) = v; p+=2; }
#else // Little Endian
#define LZ4_READ_LITTLEENDIAN_16(d,s,p) { d = (s) - A16(p); }
-#define LZ4_WRITE_LITTLEENDIAN_16(p,v) { A16(p) = v; p+=2; }
+#define LZ4_WRITE_LITTLEENDIAN_16(p,v) { A16(p) = v; p+=2; }
#endif
@@ -45,10 +45,19 @@ //**************************************
// Compiler functions
//**************************************
+#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+
#if defined(_MSC_VER) // Visual Studio
#define swap32 _byteswap_ulong
-#else // GCC assumed
+#elif GCC_VERSION >= 402
#define swap32 __builtin_bswap32
+#else
+static inline unsigned int swap32(unsigned int x) {
+ return ((x << 24) & 0xff000000 ) |
+ ((x << 8) & 0x00ff0000 ) |
+ ((x >> 8) & 0x0000ff00 ) |
+ ((x >> 24) & 0x000000ff );
+ }
#endif
|