anchor.diff:      PUInt64(Result)[1] := Sum64;
       Carry64 := Ord(Sum64 < Carry64);
   {$ELSE}
  -    Sum := Left[0] + Carry;
  -    Result[0] := Sum;
  -    Carry := TLimb(Sum < Carry);
  -
  -    Sum := Left[1] + Carry;
  -    Result[1] := Sum;
  -    Carry := TLimb(Sum < Carry);
  -
  -    Sum := Left[2] + Carry;
  -    Result[2] := Sum;
  -    Carry := TLimb(Sum < Carry);
  -
  -    Sum := Left[3] + Carry;
  -    Result[3] := Sum;
  -    Carry := TLimb(Sum < Carry);
  +    Sum := PUInt16(Left)[0] + Carry;
  +    PUInt16(Result)[0] := UInt16(Sum);
  +    Carry := Sum shr 16;
  +
  +    Sum := PUInt16(Left)[1] + Carry;
  +    PUInt16(Result)[1] := UInt16(Sum);
  +    Carry := Sum shr 16;
  +
  +    Sum := PUInt16(Left)[2] + Carry;
  +    PUInt16(Result)[2] := UInt16(Sum);
  +    Carry := Sum shr 16;
  +
  +    Sum := PUInt16(Left)[3] + Carry;
  +    PUInt16(Result)[3] := UInt16(Sum);
  +    Carry := Sum shr 16;
  +
  +    Sum := PUInt16(Left)[4] + Carry;
  +    PUInt16(Result)[4] := UInt16(Sum);
  +    Carry := Sum shr 16;
  +
  +    Sum := PUInt16(Left)[5] + Carry;
  +    PUInt16(Result)[5] := UInt16(Sum);
  +    Carry := Sum shr 16;
  +
  +    Sum := PUInt16(Left)[6] + Carry;
  +    PUInt16(Result)[6] := UInt16(Sum);
  +    Carry := Sum shr 16;
  +
  +    Sum := PUInt16(Left)[7] + Carry;
  +    PUInt16(Result)[7] := UInt16(Sum);
  +    Carry := Sum shr 16;
   {$ENDIF}
   
       Inc(Left, CUnrollIncrement);
  
positive.code:   if Shift > CMaxShift then
      Shift := CMaxShift;
  
    // Guard, Round and Sticky bits are used to determine rounding, see comments in function AsDouble.
    Guard := False;
    Round := False;
    Sticky := False;
  
negative.code:   Sum: TLimb;
  {$IFDEF CPU64BITS}
    Left64, Sum64, Carry64, InterCarry64: UInt64;
  {$ENDIF}
  begin
    if LSize < RSize then
  