(a + b) reduced modulo 264, without ever overflowing a signed
64-bit integer. Operands are split into 32-bit halves with ibits, so
each half sum stays below 233.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Variables
Type
Visibility
Attributes
Name
Initial
integer(kind=int64),
private
::
high
integer(kind=int64),
private
::
low
Source Code
pure function u64_add(a,b)result(r)!! `(a + b)` reduced modulo 2**64, without ever overflowing a signed!! 64-bit integer. Operands are split into 32-bit halves with `ibits`, so!! each half sum stays below 2**33.integer(int64),intent(in)::ainteger(int64),intent(in)::binteger(int64)::rinteger(int64)::low,highlow=ibits(a,0,32)+ibits(b,0,32)high=ibits(a,32,32)+ibits(b,32,32)+ibits(low,32,32)r=ior(ishft(iand(high,MASK32),32),iand(low,MASK32))end function u64_add