-- | -- Module : Cryptol.Eval.Arch -- Copyright : (c) 2014-2016 Galois, Inc. -- License : BSD3 -- Maintainer : cryptol@galois.com -- Stability : provisional -- Portability : portable -- -- Architecture-specific parts of the concrete evaluator go here. {-# LANGUAGE CPP #-} module Cryptol.Eval.Arch where -- | This is the widest word we can have before gmp will fail to -- allocate and bring down the whole program. According to -- <https://gmplib.org/list-archives/gmp-bugs/2009-July/001538.html> -- the sizes are 2^32-1 for 32-bit, and 2^37 for 64-bit, however -- experiments show that it's somewhere under 2^37 at least on 64-bit -- Mac OS X. maxBigIntWidth :: Integer #if i386_HOST_ARCH maxBigIntWidth = 2^(32 :: Integer) - 0x1 #elif x86_64_HOST_ARCH maxBigIntWidth = 2^(37 :: Integer) - 0x100 #else -- Because GHC doesn't seem to define a CPP macro that will portably -- tell us the bit width we're compiling for, fall back on a safe choice -- for other architectures. If we care about large words on another -- architecture, we can add a special case for it. maxBigIntWidth = 2^(32 :: Integer) - 0x1 #endif