[Ada] Add support for 128-bit integer types to GNAT.Random_Numbers
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 12 Oct 2020 19:12:56 +0000 (21:12 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 25 Nov 2020 13:22:27 +0000 (08:22 -0500)
gcc/ada/

* libgnat/g-rannum.ads (Random): New functions returning 128-bit.
* libgnat/g-rannum.adb (Random): Implement them and alphabetize.
(To_Signed): New unchecked conversion function for 128-bit.

gcc/ada/libgnat/g-rannum.adb
gcc/ada/libgnat/g-rannum.ads

index b7ef7d19d078ee02901a1ae283fb97bedae798c8..3895cdd0548b384ed1cf3823ab4ccded7a3898ec 100644 (file)
@@ -58,6 +58,8 @@ is
      new Ada.Unchecked_Conversion (Unsigned_32, Integer_32);
    function To_Signed is
      new Ada.Unchecked_Conversion (Unsigned_64, Integer_64);
+   function To_Signed is
+     new Ada.Unchecked_Conversion (Unsigned_128, Integer_128);
 
    ------------------
    -- Insert_Image --
@@ -147,9 +149,9 @@ is
       return Random (Gen.Rep);
    end Random;
 
-   function Random (Gen : Generator) return Integer_64 is
+   function Random (Gen : Generator) return Interfaces.Unsigned_128 is
    begin
-      return To_Signed (Unsigned_64'(Random (Gen)));
+      return Random (Gen.Rep);
    end Random;
 
    function Random (Gen : Generator) return Integer_32 is
@@ -157,6 +159,16 @@ is
       return To_Signed (Unsigned_32'(Random (Gen)));
    end Random;
 
+   function Random (Gen : Generator) return Integer_64 is
+   begin
+      return To_Signed (Unsigned_64'(Random (Gen)));
+   end Random;
+
+   function Random (Gen : Generator) return Integer_128 is
+   begin
+      return To_Signed (Unsigned_128'(Random (Gen)));
+   end Random;
+
    function Random (Gen : Generator) return Long_Integer is
       function Random_Long_Integer is new Random_Discrete (Long_Integer);
    begin
index 5b633ff913ba9c4decb0d8f8d7134b5f59af6dc8..f795ae09aec67c9a76748038cab11961ba264ebd 100644 (file)
@@ -69,6 +69,8 @@ is
    function Random (Gen : Generator) return Interfaces.Unsigned_32;
    function Random (Gen : Generator) return Interfaces.Integer_64;
    function Random (Gen : Generator) return Interfaces.Unsigned_64;
+   function Random (Gen : Generator) return Interfaces.Integer_128;
+   function Random (Gen : Generator) return Interfaces.Unsigned_128;
    function Random (Gen : Generator) return Integer;
    function Random (Gen : Generator) return Long_Integer;
    --  Return pseudo-random numbers uniformly distributed on T'First .. T'Last