Added : lz4demo : software swap32 backend for compilers which do not support hardware...
authoryann.collet.73@gmail.com <yann.collet.73@gmail.com@650e7d94-2a16-8b24-b05c-7c0b3f6821cd>
Fri, 16 Mar 2012 19:50:58 +0000 (19:50 +0000)
committeryann.collet.73@gmail.com <yann.collet.73@gmail.com@650e7d94-2a16-8b24-b05c-7c0b3f6821cd>
Fri, 16 Mar 2012 19:50:58 +0000 (19:50 +0000)
git-svn-id: https://lz4.googlecode.com/svn/trunk@60 650e7d94-2a16-8b24-b05c-7c0b3f6821cd

Makefile
lz4.c
lz4demo.c

index 76f3163..62fe2a6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -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)
diff --git a/lz4.c b/lz4.c
index df62be6..952d58d 100644 (file)
--- a/lz4.c
+++ b/lz4.c
@@ -215,10 +215,10 @@ typedef struct _U64_S { U64 v; } U64_S;
 \r
 #if (defined(LZ4_BIG_ENDIAN) && !defined(BIG_ENDIAN_NATIVE_BUT_INCOMPATIBLE))\r
 #define LZ4_READ_LITTLEENDIAN_16(d,s,p) { U16 v = A16(p); v = bswap16(v); d = (s) - v; }\r
-#define LZ4_WRITE_LITTLEENDIAN_16(p,i) { U16 v = (U16)(i); v = bswap16(v); A16(p) = v; p+=2; }\r
+#define LZ4_WRITE_LITTLEENDIAN_16(p,i)  { U16 v = (U16)(i); v = bswap16(v); A16(p) = v; p+=2; }\r
 #else          // Little Endian\r
 #define LZ4_READ_LITTLEENDIAN_16(d,s,p) { d = (s) - A16(p); }\r
-#define LZ4_WRITE_LITTLEENDIAN_16(p,v) { A16(p) = v; p+=2; }\r
+#define LZ4_WRITE_LITTLEENDIAN_16(p,v)  { A16(p) = v; p+=2; }\r
 #endif\r
 \r
 \r
index 0d7b020..61bf75c 100644 (file)
--- a/lz4demo.c
+++ b/lz4demo.c
 //**************************************\r
 // Compiler functions\r
 //**************************************\r
+#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)\r
+\r
 #if defined(_MSC_VER)    // Visual Studio \r
 #define swap32 _byteswap_ulong\r
-#else    // GCC assumed\r
+#elif GCC_VERSION >= 402\r
 #define swap32 __builtin_bswap32\r
+#else\r
+static inline unsigned int swap32(unsigned int x) {\r
+                       return  ((x << 24) & 0xff000000 ) |\r
+                               ((x <<  8) & 0x00ff0000 ) |\r
+                               ((x >>  8) & 0x0000ff00 ) |\r
+                               ((x >> 24) & 0x000000ff );\r
+                }\r
 #endif\r
 \r
 \r