summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-02-26 07:49:21 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-02-26 07:49:21 +0000
commitd191b742bd0c1c9145023768ffd6e6d93f2b6077 (patch)
tree8dc54855941f346614e2afff78d576583bc70231
parentaec58680ecaa5fbfac0e2219fb6df422ce48b124 (diff)
* pack.c (swap64): fix for VC6.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--pack.c28
2 files changed, 16 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index 293270e16b..e6583f402e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Fri Feb 26 16:49:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (swap64): fix for VC6.
+
Fri Feb 26 14:17:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* pack.c (pack_pack, pack_unpack): suppressed warnings.
diff --git a/pack.c b/pack.c
index 5b37b394f8..94fa5b59a2 100644
--- a/pack.c
+++ b/pack.c
@@ -84,23 +84,19 @@ TOKEN_PASTE(swap,x)(xtype z) \
#ifndef swap64
# if SIZEOF_LONG == 8
-# define swap64(x) ((((x)&0x00000000000000FFL)<<56) \
- |(((x)>>56)&0xFF) \
- |(((x)&0x000000000000FF00L)<<40) \
- |(((x)&0x00FF000000000000L)>>40) \
- |(((x)&0x0000000000FF0000L)<<24) \
- |(((x)&0x0000FF0000000000L)>>24) \
- |(((x)&0x00000000FF000000L)<<8) \
- |(((x)&0x000000FF00000000L)>>8))
+# define byte_in_64bit(n) ((unsigned long)0xff << n)
# elif defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8
-# define swap64(x) ((((x)&0x00000000000000FFLL)<<56) \
- |(((x)>>56)&0xFF) \
- |(((x)&0x000000000000FF00LL)<<40) \
- |(((x)&0x00FF000000000000LL)>>40) \
- |(((x)&0x0000000000FF0000LL)<<24) \
- |(((x)&0x0000FF0000000000LL)>>24) \
- |(((x)&0x00000000FF000000LL)<<8) \
- |(((x)&0x000000FF00000000LL)>>8))
+# define byte_in_64bit(n) ((LONG_LONG)0xff << n)
+# endif
+# ifdef byte_in_64bit
+# define swap64(x) ((((x)&byte_in_64bit(0))<<56) \
+ |(((x)>>56)&0xFF) \
+ |(((x)&byte_in_64bit(8))<<40) \
+ |(((x)&byte_in_64bit(48))>>40) \
+ |(((x)&byte_in_64bit(16))<<24) \
+ |(((x)&byte_in_64bit(40))>>24) \
+ |(((x)&byte_in_64bit(24))<<8) \
+ |(((x)&byte_in_64bit(32))>>8))
# endif
#endif