ppad-fixed-0.1.0: Large fixed-width words and constant-time arithmetic.
Copyright(c) 2025 Jared Tobin
LicenseMIT
MaintainerJared Tobin <jared@ppad.tech>
Safe HaskellNone
LanguageHaskell2010

Data.Word.Wide

Description

Wide words, consisting of two Limbs.

Synopsis

Wide Words

data Wide Source #

Little-endian wide words.

Constructors

Wide !(# Limb, Limb #) 

Instances

Instances details
Num Wide Source # 
Instance details

Defined in Data.Word.Wide

Methods

(+) :: Wide -> Wide -> Wide #

(-) :: Wide -> Wide -> Wide #

(*) :: Wide -> Wide -> Wide #

negate :: Wide -> Wide #

abs :: Wide -> Wide #

signum :: Wide -> Wide #

fromInteger :: Integer -> Wide #

Show Wide Source # 
Instance details

Defined in Data.Word.Wide

Methods

showsPrec :: Int -> Wide -> ShowS #

show :: Wide -> String #

showList :: [Wide] -> ShowS #

NFData Wide Source # 
Instance details

Defined in Data.Word.Wide

Methods

rnf :: Wide -> () #

Construction, Conversion

wide :: Word -> Word -> Wide Source #

Construct a Wide word from low and high Words.

to :: Integer -> Wide Source #

Convert an Integer to a Wide word.

from :: Wide -> Integer Source #

Convert a Wide word to an Integer.

Bit Manipulation

or :: Wide -> Wide -> Wide Source #

or# :: Word# -> Word# -> Word# #

Comparison

eq_vartime :: Wide -> Wide -> Bool Source #

Compare Wide words for equality in variable time.

Arithmetic

add :: Wide -> Wide -> Wide Source #

Wrapping addition on Wide words, computing 'a + b'.

add_o Source #

Arguments

:: Wide

augend

-> Wide

addend

-> (Wide, Word)

(sum, carry)

Overflowing addition on Wide words, computing 'a + b', returning the sum and carry.

sub :: Wide -> Wide -> Wide Source #

Wrapping subtraction on Wide words, computing 'a - b'.

mul :: Wide -> Wide -> Wide Source #

Wrapping multiplication on Wide words.

neg Source #

Arguments

:: Wide

argument

-> Wide

(wrapping) additive inverse

Unboxed Arithmetic

add_o# Source #

Arguments

:: (# Limb, Limb #)

augend

-> (# Limb, Limb #)

addend

-> (# (# Limb, Limb #), Limb #)

(# sum, carry bit #)

Overflowing addition, computing 'a + b', returning the sum and a carry bit.

add_w# Source #

Arguments

:: (# Limb, Limb #)

augend

-> (# Limb, Limb #)

addend

-> (# Limb, Limb #)

sum

Wrapping addition, computing 'a + b'.

sub_b# Source #

Arguments

:: (# Limb, Limb #)

minuend

-> (# Limb, Limb #)

subtrahend

-> (# (# Limb, Limb #), Limb #)

(# difference, borrow mask #)

Borrowing subtraction, computing 'a - b' and returning the difference with a borrow mask.

sub_w# Source #

Arguments

:: (# Limb, Limb #)

minuend

-> (# Limb, Limb #)

subtrahend

-> (# Limb, Limb #)

difference

Wrapping subtraction, computing 'a - b'.

mul_w# Source #

Arguments

:: (# Limb, Limb #)

multiplicand

-> (# Limb, Limb #)

multiplier

-> (# Limb, Limb #)

product

Wrapping multiplication, computing 'a b'.

neg# Source #

Arguments

:: (# Limb, Limb #)

argument

-> (# Limb, Limb #)

(wrapping) additive inverse