anchor.diff:  var
     LCount, LTail: Integer;
     Sum: NativeUInt;
  +  I: Integer;
  +  L: PLimb;
   begin
     if LSize < RSize then
     begin
  -    Swapper.Swap(Left, Right);
  -    Swapper.Swap(LSize, RSize);
  +    I := LSize;
  +    LSize := RSize;
  +    RSize := I;
  +    L := Left;
  +    Left := Right;
  +    Right := L;
     end;
   
     Sum := 0;
  
positive.code:     // then set ARight to ARight - ALeft (which is even).
      if ALeft > ARight then
      begin
        // Swap ALeft and ARight. Swapper.Swap(ALeft, ARight) has too much overhead.
        Temp := ALeft;
        Aleft := ARight;
        ARight := Temp;
  
negative.code:     Length: NativeInt;
    end;
  
  procedure SwapIntegers(var L, R: Integer); inline;
  var
    Temp: Integer;
  begin
    Temp := L;
    L := R;
    R := Temp;
  end;
  
  procedure SwapPLimbs(var L, R: PLimb); inline;
  var
    Temp: PLimb;
  begin
    Temp := L;
    L := R;
    R := Temp;
  end;
  
  function ActualSize(Limb: PLimb; Size: Integer): Integer;
  {$IFDEF PUREPASCAL}
  begin
    while (Size > 0) and (Limb[Size - 1] = 0) do
  