Code drop from //branches/cupcake/...@124589
diff --git a/tools/dexpreopt/dexpreopt.py b/tools/dexpreopt/dexpreopt.py
index 74523b1..8a80e06 100755
--- a/tools/dexpreopt/dexpreopt.py
+++ b/tools/dexpreopt/dexpreopt.py
@@ -520,7 +520,11 @@
       buf.fromfile(ep.stdout, 4)
       (adler32,) = struct.unpack('>i', buf)  # adler32 wants a signed int ('i')
       data_adler32 = zlib.adler32(data)
-      if adler32 != data_adler32:
+      # Because of a difference in behavior of zlib.adler32 on 32-bit and 64-bit
+      # systems (one returns signed values, the other unsigned), we take the
+      # modulo 2**32 of the checksums, and compare those.
+      # See also http://bugs.python.org/issue1202
+      if (adler32 % (2**32)) != (data_adler32 % (2**32)):
         Trace('adler32 does not match: calculated 0x%08x != expected 0x%08x' %
               (data_adler32, adler32))
         return False