| Copyright | (c) Galois Inc. 2020 |
|---|---|
| License | BSD-3 |
| Maintainer | Ben Selfridge <benselfridge@galois.com> |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.BitVector.Sized.Overflow
Description
This module provides alternative definitions of certain bitvector functions that might produce signed or unsigned overflow. Instead of producing a pure value, these versions produce the same value along with overflow flags. We only provide definitions for operators that might actually overflow.
Synopsis
- data Overflow a = Overflow UnsignedOverflow SignedOverflow a
- data UnsignedOverflow
- data SignedOverflow
- ofUnsigned :: Overflow a -> Bool
- ofSigned :: Overflow a -> Bool
- ofResult :: Overflow a -> a
- shlOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> Natural -> Overflow (BV w)
- addOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- subOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- mulOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- squotOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- sremOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- sdivOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- smodOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
Documentation
A value annotated with overflow information.
Constructors
| Overflow UnsignedOverflow SignedOverflow a |
Instances
data UnsignedOverflow Source #
Datatype representing the possibility of unsigned overflow.
Constructors
| UnsignedOverflow | |
| NoUnsignedOverflow |
Instances
| Monoid UnsignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods mempty :: UnsignedOverflow Source # mappend :: UnsignedOverflow -> UnsignedOverflow -> UnsignedOverflow Source # mconcat :: [UnsignedOverflow] -> UnsignedOverflow Source # | |
| Semigroup UnsignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods (<>) :: UnsignedOverflow -> UnsignedOverflow -> UnsignedOverflow Source # sconcat :: NonEmpty UnsignedOverflow -> UnsignedOverflow Source # stimes :: Integral b => b -> UnsignedOverflow -> UnsignedOverflow Source # | |
| Show UnsignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow | |
| Eq UnsignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods (==) :: UnsignedOverflow -> UnsignedOverflow -> Bool Source # (/=) :: UnsignedOverflow -> UnsignedOverflow -> Bool Source # | |
data SignedOverflow Source #
Datatype representing the possibility of signed overflow.
Constructors
| SignedOverflow | |
| NoSignedOverflow |
Instances
| Monoid SignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods mempty :: SignedOverflow Source # mappend :: SignedOverflow -> SignedOverflow -> SignedOverflow Source # mconcat :: [SignedOverflow] -> SignedOverflow Source # | |
| Semigroup SignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods (<>) :: SignedOverflow -> SignedOverflow -> SignedOverflow Source # sconcat :: NonEmpty SignedOverflow -> SignedOverflow Source # stimes :: Integral b => b -> SignedOverflow -> SignedOverflow Source # | |
| Show SignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow | |
| Eq SignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods (==) :: SignedOverflow -> SignedOverflow -> Bool Source # (/=) :: SignedOverflow -> SignedOverflow -> Bool Source # | |
Overflowing bitwise operators
shlOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> Natural -> Overflow (BV w) Source #
Left shift by positive Natural.
Overflowing arithmetic operators
addOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w) Source #
Bitvector add.
subOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w) Source #
Bitvector subtract.
mulOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w) Source #
Bitvector multiply.
squotOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w) Source #
Bitvector division (signed). Rounds to zero. Division by zero yields a runtime error.
sremOf :: forall (w :: Natural). 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w) Source #
Bitvector remainder after division (signed), when rounded to zero. Division by zero yields a runtime error.