For all of the following functions, all arguments that are specified as being specialized to <machine-word> accept an instance of <abstract-integer>, which is then coerced to a <machine-word> before performing the operation.
Function
u%+ (m1 :: machine-word, m2 :: machine-word) => (sum :: machine-word, carry :: machine-word)
carry is either 0 or 1.
Function
u%- (m1 :: machine-word, m2 :: machine-word) => (difference :: machine-word, borrow :: machine-word)
borrow is either 0 or 1.
Function
u%* (m1 :: machine-word, m2 :: machine-word) => (low :: machine-word, high :: machine-word)
Function
u%divide (dividend :: machine-word, divisor :: machine-word) => (quotient :: machine-word, remainder :: machine-word)
(quotient * divisor + remainder = dividend)
divisor is zero.
Function
u%rotate-left (m :: machine-word, count :: integer) => (r :: machine-word)
m by count. An error is signaled unless 0 <= count < $machine-word-size.
Function
u%rotate-right (m :: machine-word, count :: integer) => (r :: machine-word)
m by count. An error is signaled unless 0 <= count < $machine-word-size.
Function
u%shift-left (m :: machine-word, count :: integer) => (r :: machine-word)
m by count. An error is signaled unless 0 <= count < $machine-word-size.
Function
u%shift-right (m :: machine-word, count :: integer) => (r :: machine-word)
m by count. An error is signaled unless 0 <= count < $machine-word-size.
Function
u%< (m1 :: machine-word, m2 :: machine-word) => (smaller? :: boolean)