anchor.diff:  {$IFDEF CPU64BITS}
     Carry := Carry64;
   {$ENDIF}
  -
     while LTail > 0 do
     begin
  +{$IFDEF CPU64BITS}
       Sum := Left[0] + Right[0];
       InterCarry := TLimb(Sum < Left[0]);
       Inc(Sum, Carry);
       Result[0] := Sum;
  -    Carry := TLimb(Sum < Carry) or InterCarry;
  +    Carry := InterCarry or TLimb(Sum < Carry);
  +{$ELSE}
  +    Sum := PUInt16(Left)[0] + PUInt16(Right)[0] + Carry;
  +    PUInt16(Result)[0] := UInt16(Sum);
  +    Carry := Sum shr 16;
  +
  +    Sum := PUInt16(Left)[1] + PUInt16(Right)[1] + Carry;
  +    PUInt16(Result)[1] := UInt16(Sum);
  +    Carry := Sum shr 16;
  +{$ENDIF}
   
       Inc(Left);
       Inc(Right);
  
positive.code:     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);
  {$ENDIF}
  
      Inc(Left, CUnrollIncrement);
  
negative.code:   if Shift > CMaxShift then
      Shift := CMaxShift;
  
    // Guard, Round and Sticky bits are used to determine rounding.
    Guard := False;
    Round := False;
    Sticky := False;
  