diff --git a/ghc/compiler/basicTypes/Literal.lhs b/ghc/compiler/basicTypes/Literal.lhs
index 3d53165f2d5b9d1ba9bda74b20e16587cfc23066..b8f495eddf3305c4971234d8769621e047d7130c 100644
--- a/ghc/compiler/basicTypes/Literal.lhs
+++ b/ghc/compiler/basicTypes/Literal.lhs
@@ -152,7 +152,7 @@ word2IntLit, int2WordLit, char2IntLit, int2CharLit,
  addr2IntLit, int2AddrLit, float2DoubleLit, double2FloatLit :: Literal -> Literal
 
 word2IntLit (MachWord w) 
-  | w > tARGET_MAX_INT = MachInt ((-1) + tARGET_MAX_WORD - w)
+  | w > tARGET_MAX_INT = MachInt (w - tARGET_MAX_WORD - 1)
   | otherwise	       = MachInt w
 
 int2WordLit (MachInt i)