-- { dg-do compile }
-- { dg-options "-O2" }

function slice1 (Offset : Integer) return String is
   
   Convert : constant String := "0123456789abcdef";
   Buffer  : String (1 .. 32);
   Pos     : Natural := Buffer'Last;
   Value   : Long_Long_Integer := Long_Long_Integer (Offset);

begin
   while Value > 0 loop
      Buffer (Pos) := Convert (Integer (Value mod 16));
      Pos := Pos - 1;
      Value := Value / 16;
   end loop;
   
   return Buffer (Pos + 1 .. Buffer'Last);
end;