This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Ada] Define versions of dimension system for Float and Long_Float


The dimension system in System.Dim.Mks is based on Long_Long_Float,
which may not be convenient to people who want to use Float or
Long_Float as basis. These new files provide units that define the
dimension system based on Float in System.Dim.Float_Mks and on
Long_Float in System.Dim.Long_Mks.

Child packages Other_Prefixes and Mks_IO are also defined appropriately,
with new instantiations for the various sizes of floating-point types.

Tested on x86_64-pc-linux-gnu, committed on trunk

2018-08-21  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* doc/gnat_ugn/gnat_and_program_execution.rst: Update
	documentation of dimensionality analysis.
	* gnat_ugn.texi: Regenerate.
	* Makefile.rtl, impunit.adb: Consider the new units.
	* libgnat/s-dfmkio.ads, libgnat/s-dfmopr.ads,
	libgnat/s-diflmk.ads: New units based on Float.
	* libgnat/s-dilomk.ads, libgnat/s-dlmkio.ads,
	libgnat/s-dlmopr.ads: New units based on Long_Float.
	* libgnat/s-dmotpr.ads: Rename to libgnat/s-dgmgop.ads and turn
	into an instance of
	System.Dim.Generic_Mks.Generic_Other_Prefixes.
	* libgnat/s-dimmks.ads: Rename to libgnat/s-digemk.ads and turn
	into an instance of System.Dim.Generic_Mks.
--- gcc/ada/Makefile.rtl
+++ gcc/ada/Makefile.rtl
@@ -523,12 +523,20 @@ GNATRTL_NONTASKING_OBJS= \
   s-conca9$(objext) \
   s-crc32$(objext)  \
   s-crtl$(objext)   \
+  s-dfmkio$(objext) \
+  s-dfmopr$(objext) \
+  s-dgmgop$(objext) \
+  s-dlmopr$(objext) \
   s-diflio$(objext) \
+  s-diflmk$(objext) \
+  s-digemk$(objext) \
   s-diinio$(objext) \
+  s-dilomk$(objext) \
   s-dim$(objext)    \
   s-dimkio$(objext) \
   s-dimmks$(objext) \
   s-direio$(objext) \
+  s-dlmkio$(objext) \
   s-dmotpr$(objext) \
   s-dsaser$(objext) \
   s-elaall$(objext) \
@@ -2762,4 +2770,3 @@ a-tags.o  : a-tags.adb a-tags.ads
 s-memory.o  : s-memory.adb s-memory.ads
 	$(ADAC) -c $(ALL_ADAFLAGS) $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) \
 	  $< $(OUTPUT_OPTION)
-

--- gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst
+++ gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst
@@ -3280,19 +3280,18 @@ to use the proper subtypes in object declarations.
 .. index:: MKS_Type type
 
 The simplest way to impose dimensionality checking on a computation is to make
-use of the package ``System.Dim.Mks``,
-which is part of the GNAT library. This
-package defines a floating-point type ``MKS_Type``,
-for which a sequence of
-dimension names are specified, together with their conventional abbreviations.
-The following should be read together with the full specification of the
-package, in file :file:`s-dimmks.ads`.
+use of one of the instantiations of the package ``System.Dim.Generic_Mks``, which
+are part of the GNAT library. This generic package defines a floating-point
+type ``MKS_Type``, for which a sequence of dimension names are specified,
+together with their conventional abbreviations.  The following should be read
+together with the full specification of the package, in file
+:file:`s-digemk.ads`.
 
-  .. index:: s-dimmks.ads file
+  .. index:: s-digemk.ads file
 
   .. code-block:: ada
 
-     type Mks_Type is new Long_Long_Float
+     type Mks_Type is new Float_Type
        with
         Dimension_System => (
           (Unit_Name => Meter,    Unit_Symbol => 'm',   Dim_Symbol => 'L'),
@@ -3336,10 +3335,16 @@ as well as useful multiples of these units:
      day : constant Time   := 60.0 * 24.0 * min;
     ...
 
-Using this package, you can then define a derived unit by
-providing the aspect that
-specifies its dimensions within the MKS system, as well as the string to
-be used for output of a value of that unit:
+There are three instantiations of ``System.Dim.Generic_Mks`` defined in the
+GNAT library:
+
+* ``System.Dim.Float_Mks`` based on ``Float`` defined in :file:`s-diflmk.ads`.
+* ``System.Dim.Long_Mks`` based on ``Long_Float`` defined in :file:`s-dilomk.ads`.
+* ``System.Dim.Mks`` based on ``Long_Long_Float`` defined in :file:`s-dimmks.ads`.
+
+Using one of these packages, you can then define a derived unit by providing
+the aspect that specifies its dimensions within the MKS system, as well as the
+string to be used for output of a value of that unit:
 
   .. code-block:: ada
 

--- gcc/ada/gnat_ugn.texi
+++ gcc/ada/gnat_ugn.texi
@@ -21,7 +21,7 @@
 
 @copying
 @quotation
-GNAT User's Guide for Native Platforms , Jul 13, 2018
+GNAT User's Guide for Native Platforms , Aug 17, 2018
 
 AdaCore
 
@@ -22606,20 +22606,19 @@ to use the proper subtypes in object declarations.
 @geindex MKS_Type type
 
 The simplest way to impose dimensionality checking on a computation is to make
-use of the package @code{System.Dim.Mks},
-which is part of the GNAT library. This
-package defines a floating-point type @code{MKS_Type},
-for which a sequence of
-dimension names are specified, together with their conventional abbreviations.
-The following should be read together with the full specification of the
-package, in file @code{s-dimmks.ads}.
+use of one of the instantiations of the package @code{System.Dim.Generic_Mks}, which
+are part of the GNAT library. This generic package defines a floating-point
+type @code{MKS_Type}, for which a sequence of dimension names are specified,
+together with their conventional abbreviations.  The following should be read
+together with the full specification of the package, in file
+@code{s-digemk.ads}.
 
 @quotation
 
-@geindex s-dimmks.ads file
+@geindex s-digemk.ads file
 
 @example
-type Mks_Type is new Long_Long_Float
+type Mks_Type is new Float_Type
   with
    Dimension_System => (
      (Unit_Name => Meter,    Unit_Symbol => 'm',   Dim_Symbol => 'L'),
@@ -22674,10 +22673,25 @@ as well as useful multiples of these units:
 @end example
 @end quotation
 
-Using this package, you can then define a derived unit by
-providing the aspect that
-specifies its dimensions within the MKS system, as well as the string to
-be used for output of a value of that unit:
+There are three instantiations of @code{System.Dim.Generic_Mks} defined in the
+GNAT library:
+
+
+@itemize *
+
+@item 
+@code{System.Dim.Float_Mks} based on @code{Float} defined in @code{s-diflmk.ads}.
+
+@item 
+@code{System.Dim.Long_Mks} based on @code{Long_Float} defined in @code{s-dilomk.ads}.
+
+@item 
+@code{System.Dim.Mks} based on @code{Long_Long_Float} defined in @code{s-dimmks.ads}.
+@end itemize
+
+Using one of these packages, you can then define a derived unit by providing
+the aspect that specifies its dimensions within the MKS system, as well as the
+string to be used for output of a value of that unit:
 
 @quotation
 

--- gcc/ada/impunit.adb
+++ gcc/ada/impunit.adb
@@ -373,10 +373,18 @@ package body Impunit is
     ("s-addima", F),  -- System.Address_Image
     ("s-atocou", F),  -- System.Atomic_Counters
     ("s-assert", F),  -- System.Assertions
+    ("s-dfmkio", F),  -- System.Dim.Float_Mks_IO
+    ("s-dfmopr", F),  -- System.Dim.Float_Mks.Other_Prefixes
+    ("s-dgmgop", F),  -- System.Dim.Generic_Mks.Generic_Other_Prefixes
+    ("s-dlmopr", F),  -- System.Dim.Long_Mks.Other_Prefixes
     ("s-diflio", F),  -- System.Dim.Float_IO
+    ("s-diflmk", F),  -- System.Dim.Float_Mks
+    ("s-digemk", F),  -- System.Dim.Generic_Mks
     ("s-diinio", F),  -- System.Dim.Integer_IO
+    ("s-dilomk", F),  -- System.Dim.Long_Mks
     ("s-dimkio", F),  -- System.Dim.Mks_IO
     ("s-dimmks", F),  -- System.Dim.Mks
+    ("s-dlmkio", F),  -- System.Dim.Long_Mks_IO
     ("s-dmotpr", F),  -- System.Dim.Mks.Other_Prefixes
     ("s-memory", F),  -- System.Memory
     ("s-parint", F),  -- System.Partition_Interface

--- /dev/null
new file mode 100644
+++ gcc/ada/libgnat/s-dfmkio.ads
@@ -0,0 +1,38 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--               S Y S T E M . D I M . F L O A T _ M K S _ I O              --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--             Copyright (C) 2018, Free Software Foundation, Inc.           --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  Provides output facilities for the Float MKS dimension system (see
+--  System.Dim.Float_Mks and System.Dim.Float_IO).
+
+with System.Dim.Float_Mks; use System.Dim.Float_Mks;
+with System.Dim.Float_IO;
+
+package System.Dim.Float_Mks_IO is new System.Dim.Float_IO (Mks_Type);

--- /dev/null
new file mode 100644
+++ gcc/ada/libgnat/s-dfmopr.ads
@@ -0,0 +1,35 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--   S Y S T E M . D I M . F L O A T _ M K S . O T H E R _ P R E F I X E S  --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--              Copyright (C) 2018, Free Software Foundation, Inc.          --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with System.Dim.Generic_Mks.Generic_Other_Prefixes;
+
+package System.Dim.Float_Mks.Other_Prefixes is
+   new System.Dim.Float_Mks.Generic_Other_Prefixes;

--- /dev/null
new file mode 100644
+++ gcc/ada/libgnat/s-dgmgop.ads
@@ -0,0 +1,174 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--              S Y S T E M . D I M . G E N E R I C _ M K S                 --
+--            . G E N E R I C _ O T H E R _ P R E F I X E S                 --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--           Copyright (C) 2011-2018, Free Software Foundation, Inc.        --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  Package that defines some other prefixes for the MKS base unit system.
+
+--  These prefixes have been defined in a child package in order to avoid too
+--  many constant declarations in System.Dim.Generic_Mks.
+
+generic
+package System.Dim.Generic_Mks.Generic_Other_Prefixes is
+
+   --  SI prefixes for Meter
+
+   pragma Warnings (Off);
+   --  Turn off the all the dimension warnings
+
+   ym  : constant Length := 1.0E-24;  -- yocto
+   zm  : constant Length := 1.0E-21;  -- zepto
+   am  : constant Length := 1.0E-18;  -- atto
+   fm  : constant Length := 1.0E-15;  -- femto
+   pm  : constant Length := 1.0E-12;  -- pico
+   nm  : constant Length := 1.0E-09;  -- nano
+   Gm  : constant Length := 1.0E+09;  -- giga
+   Tm  : constant Length := 1.0E+12;  -- tera
+   Pem : constant Length := 1.0E+15;  -- peta
+   Em  : constant Length := 1.0E+18;  -- exa
+   Zem : constant Length := 1.0E+21;  -- zetta
+   Yom : constant Length := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Kilogram
+
+   yg  : constant Mass := 1.0E-27;  -- yocto
+   zg  : constant Mass := 1.0E-24;  -- zepto
+   ag  : constant Mass := 1.0E-21;  -- atto
+   fg  : constant Mass := 1.0E-18;  -- femto
+   pg  : constant Mass := 1.0E-15;  -- pico
+   ng  : constant Mass := 1.0E-12;  -- nano
+   Gg  : constant Mass := 1.0E+06;  -- giga
+   Tg  : constant Mass := 1.0E+09;  -- tera
+   Peg : constant Mass := 1.0E+13;  -- peta
+   Eg  : constant Mass := 1.0E+15;  -- exa
+   Zeg : constant Mass := 1.0E+18;  -- zetta
+   Yog : constant Mass := 1.0E+21;  -- yotta
+
+   --  SI prefixes for Second
+
+   ys  : constant Time := 1.0E-24;  -- yocto
+   zs  : constant Time := 1.0E-21;  -- zepto
+   as  : constant Time := 1.0E-18;  -- atto
+   fs  : constant Time := 1.0E-15;  -- femto
+   ps  : constant Time := 1.0E-12;  -- pico
+   ns  : constant Time := 1.0E-09;  -- nano
+   Gs  : constant Time := 1.0E+09;  -- giga
+   Ts  : constant Time := 1.0E+12;  -- tera
+   Pes : constant Time := 1.0E+15;  -- peta
+   Es  : constant Time := 1.0E+18;  -- exa
+   Zes : constant Time := 1.0E+21;  -- zetta
+   Yos : constant Time := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Ampere
+
+   yA  : constant Electric_Current := 1.0E-24;  -- yocto
+   zA  : constant Electric_Current := 1.0E-21;  -- zepto
+   aA  : constant Electric_Current := 1.0E-18;  -- atto
+   fA  : constant Electric_Current := 1.0E-15;  -- femto
+   nA  : constant Electric_Current := 1.0E-09;  -- nano
+   uA  : constant Electric_Current := 1.0E-06;  -- micro (u)
+   GA  : constant Electric_Current := 1.0E+09;  -- giga
+   TA  : constant Electric_Current := 1.0E+12;  -- tera
+   PeA : constant Electric_Current := 1.0E+15;  -- peta
+   EA  : constant Electric_Current := 1.0E+18;  -- exa
+   ZeA : constant Electric_Current := 1.0E+21;  -- zetta
+   YoA : constant Electric_Current := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Kelvin
+
+   yK  : constant Thermodynamic_Temperature := 1.0E-24;  -- yocto
+   zK  : constant Thermodynamic_Temperature := 1.0E-21;  -- zepto
+   aK  : constant Thermodynamic_Temperature := 1.0E-18;  -- atto
+   fK  : constant Thermodynamic_Temperature := 1.0E-15;  -- femto
+   pK  : constant Thermodynamic_Temperature := 1.0E-12;  -- pico
+   nK  : constant Thermodynamic_Temperature := 1.0E-09;  -- nano
+   uK  : constant Thermodynamic_Temperature := 1.0E-06;  -- micro (u)
+   mK  : constant Thermodynamic_Temperature := 1.0E-03;  -- milli
+   cK  : constant Thermodynamic_Temperature := 1.0E-02;  -- centi
+   dK  : constant Thermodynamic_Temperature := 1.0E-01;  -- deci
+   daK : constant Thermodynamic_Temperature := 1.0E+01;  -- deka
+   hK  : constant Thermodynamic_Temperature := 1.0E+02;  -- hecto
+   kK  : constant Thermodynamic_Temperature := 1.0E+03;  -- kilo
+   MeK : constant Thermodynamic_Temperature := 1.0E+06;  -- mega
+   GK  : constant Thermodynamic_Temperature := 1.0E+09;  -- giga
+   TK  : constant Thermodynamic_Temperature := 1.0E+12;  -- tera
+   PeK : constant Thermodynamic_Temperature := 1.0E+15;  -- peta
+   EK  : constant Thermodynamic_Temperature := 1.0E+18;  -- exa
+   ZeK : constant Thermodynamic_Temperature := 1.0E+21;  -- zetta
+   YoK : constant Thermodynamic_Temperature := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Mole
+
+   ymol  : constant Amount_Of_Substance := 1.0E-24;  -- yocto
+   zmol  : constant Amount_Of_Substance := 1.0E-21;  -- zepto
+   amol  : constant Amount_Of_Substance := 1.0E-18;  -- atto
+   fmol  : constant Amount_Of_Substance := 1.0E-15;  -- femto
+   pmol  : constant Amount_Of_Substance := 1.0E-12;  -- pico
+   nmol  : constant Amount_Of_Substance := 1.0E-09;  -- nano
+   umol  : constant Amount_Of_Substance := 1.0E-06;  -- micro (u)
+   mmol  : constant Amount_Of_Substance := 1.0E-03;  -- milli
+   cmol  : constant Amount_Of_Substance := 1.0E-02;  -- centi
+   dmol  : constant Amount_Of_Substance := 1.0E-01;  -- deci
+   damol : constant Amount_Of_Substance := 1.0E+01;  -- deka
+   hmol  : constant Amount_Of_Substance := 1.0E+02;  -- hecto
+   kmol  : constant Amount_Of_Substance := 1.0E+03;  -- kilo
+   Memol : constant Amount_Of_Substance := 1.0E+06;  -- mega
+   Gmol  : constant Amount_Of_Substance := 1.0E+09;  -- giga
+   Tmol  : constant Amount_Of_Substance := 1.0E+12;  -- tera
+   Pemol : constant Amount_Of_Substance := 1.0E+15;  -- peta
+   Emol  : constant Amount_Of_Substance := 1.0E+18;  -- exa
+   Zemol : constant Amount_Of_Substance := 1.0E+21;  -- zetta
+   Yomol : constant Amount_Of_Substance := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Candela
+
+   ycd  : constant Luminous_Intensity := 1.0E-24;  -- yocto
+   zcd  : constant Luminous_Intensity := 1.0E-21;  -- zepto
+   acd  : constant Luminous_Intensity := 1.0E-18;  -- atto
+   fcd  : constant Luminous_Intensity := 1.0E-15;  -- femto
+   pcd  : constant Luminous_Intensity := 1.0E-12;  -- pico
+   ncd  : constant Luminous_Intensity := 1.0E-09;  -- nano
+   ucd  : constant Luminous_Intensity := 1.0E-06;  -- micro (u)
+   mcd  : constant Luminous_Intensity := 1.0E-03;  -- milli
+   ccd  : constant Luminous_Intensity := 1.0E-02;  -- centi
+   dcd  : constant Luminous_Intensity := 1.0E-01;  -- deci
+   dacd : constant Luminous_Intensity := 1.0E+01;  -- deka
+   hcd  : constant Luminous_Intensity := 1.0E+02;  -- hecto
+   kcd  : constant Luminous_Intensity := 1.0E+03;  -- kilo
+   Mecd : constant Luminous_Intensity := 1.0E+06;  -- mega
+   Gcd  : constant Luminous_Intensity := 1.0E+09;  -- giga
+   Tcd  : constant Luminous_Intensity := 1.0E+12;  -- tera
+   Pecd : constant Luminous_Intensity := 1.0E+15;  -- peta
+   Ecd  : constant Luminous_Intensity := 1.0E+18;  -- exa
+   Zecd : constant Luminous_Intensity := 1.0E+21;  -- zetta
+   Yocd : constant Luminous_Intensity := 1.0E+24;  -- yotta
+
+   pragma Warnings (On);
+end System.Dim.Generic_Mks.Generic_Other_Prefixes;

--- /dev/null
new file mode 100644
+++ gcc/ada/libgnat/s-diflmk.ads
@@ -0,0 +1,34 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                  S Y S T E M . D I M . F L O A T _ M K S                 --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--             Copyright (C) 2018, Free Software Foundation, Inc.           --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with System.Dim.Generic_Mks;
+
+package System.Dim.Float_Mks is new System.Dim.Generic_Mks (Float);

--- /dev/null
new file mode 100644
+++ gcc/ada/libgnat/s-digemk.ads
@@ -0,0 +1,396 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--               S Y S T E M . D I M . G E N E R I C _ M K S                --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--          Copyright (C) 2011-2018, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  Defines the MKS dimension system which is the SI system of units
+
+--  Some other prefixes of this system are defined in a child package (see
+--  System.Dim.Generic_Mks.Generic_Other_Prefixes) in order to avoid too many
+--  constant declarations in this package.
+
+--  The dimension terminology is defined in System.Dim package
+
+with Ada.Numerics;
+
+generic
+   type Float_Type is digits <>;
+
+package System.Dim.Generic_Mks is
+
+   e  : constant := Ada.Numerics.e;
+   Pi : constant := Ada.Numerics.Pi;
+
+   --  Dimensioned type Mks_Type
+
+   type Mks_Type is new Float_Type
+     with
+      Dimension_System => (
+        (Unit_Name => Meter,    Unit_Symbol => 'm',   Dim_Symbol => 'L'),
+        (Unit_Name => Kilogram, Unit_Symbol => "kg",  Dim_Symbol => 'M'),
+        (Unit_Name => Second,   Unit_Symbol => 's',   Dim_Symbol => 'T'),
+        (Unit_Name => Ampere,   Unit_Symbol => 'A',   Dim_Symbol => 'I'),
+        (Unit_Name => Kelvin,   Unit_Symbol => 'K',   Dim_Symbol => '@'),
+        (Unit_Name => Mole,     Unit_Symbol => "mol", Dim_Symbol => 'N'),
+        (Unit_Name => Candela,  Unit_Symbol => "cd",  Dim_Symbol => 'J'));
+
+   --  SI Base dimensioned subtypes
+
+   subtype Length is Mks_Type
+     with
+      Dimension => (Symbol => 'm',
+        Meter  => 1,
+        others => 0);
+
+   subtype Mass is Mks_Type
+     with
+      Dimension => (Symbol => "kg",
+        Kilogram => 1,
+        others   => 0);
+
+   subtype Time is Mks_Type
+     with
+      Dimension => (Symbol => 's',
+        Second => 1,
+        others => 0);
+
+   subtype Electric_Current is Mks_Type
+     with
+      Dimension => (Symbol => 'A',
+        Ampere => 1,
+        others => 0);
+
+   subtype Thermodynamic_Temperature is Mks_Type
+     with
+      Dimension => (Symbol => 'K',
+        Kelvin => 1,
+        others => 0);
+
+   subtype Amount_Of_Substance is Mks_Type
+     with
+      Dimension => (Symbol => "mol",
+        Mole   => 1,
+        others => 0);
+
+   subtype Luminous_Intensity is Mks_Type
+     with
+      Dimension => (Symbol => "cd",
+        Candela => 1,
+        others  => 0);
+
+   --  Initialize SI Base unit values
+
+   --  Turn off the all the dimension warnings for these basic assignments
+   --  since otherwise we would get complaints about assigning dimensionless
+   --  values to dimensioned subtypes (we can't assign 1.0*m to m).
+
+   pragma Warnings (Off, "*assumed to be*");
+
+   m   : constant Length                    := 1.0;
+   kg  : constant Mass                      := 1.0;
+   s   : constant Time                      := 1.0;
+   A   : constant Electric_Current          := 1.0;
+   K   : constant Thermodynamic_Temperature := 1.0;
+   mol : constant Amount_Of_Substance       := 1.0;
+   cd  : constant Luminous_Intensity        := 1.0;
+
+   pragma Warnings (On, "*assumed to be*");
+
+   --  SI Derived dimensioned subtypes
+
+   subtype Absorbed_Dose is Mks_Type
+     with
+      Dimension => (Symbol => "Gy",
+        Meter  =>  2,
+        Second => -2,
+        others =>  0);
+
+   subtype Angle is Mks_Type
+     with
+      Dimension => (Symbol => "rad",
+        others => 0);
+
+   subtype Area is Mks_Type
+     with
+      Dimension => (
+        Meter  => 2,
+        others => 0);
+
+   subtype Catalytic_Activity is Mks_Type
+     with
+      Dimension => (Symbol => "kat",
+        Second => -1,
+        Mole   => 1,
+        others => 0);
+
+   subtype Celsius_Temperature is Mks_Type
+     with
+      Dimension => (Symbol => "°C",
+        Kelvin => 1,
+        others => 0);
+
+   subtype Electric_Capacitance is Mks_Type
+     with
+      Dimension => (Symbol => 'F',
+        Meter    => -2,
+        Kilogram => -1,
+        Second   =>  4,
+        Ampere   =>  2,
+        others   =>  0);
+
+   subtype Electric_Charge is Mks_Type
+     with
+      Dimension => (Symbol => 'C',
+        Second => 1,
+        Ampere => 1,
+        others => 0);
+
+   subtype Electric_Conductance is Mks_Type
+     with
+      Dimension => (Symbol => 'S',
+        Meter    => -2,
+        Kilogram => -1,
+        Second   =>  3,
+        Ampere   =>  2,
+        others   =>  0);
+
+   subtype Electric_Potential_Difference is Mks_Type
+     with
+      Dimension => (Symbol => 'V',
+        Meter    =>  2,
+        Kilogram =>  1,
+        Second   => -3,
+        Ampere   => -1,
+        others   =>  0);
+
+   --  Note the type punning below. The Symbol is a single "ohm" character
+   --  encoded in UTF-8 (ce a9 in hexadecimal), but this file is not compiled
+   --  with -gnatW8, so we're treating the string literal as a two-character
+   --  String.
+
+   subtype Electric_Resistance is Mks_Type
+     with
+      Dimension => (Symbol => "Ω",
+        Meter    =>  2,
+        Kilogram =>  1,
+        Second   => -3,
+        Ampere   => -2,
+        others   =>  0);
+
+   subtype Energy is Mks_Type
+     with
+      Dimension => (Symbol => 'J',
+        Meter    =>  2,
+        Kilogram =>  1,
+        Second   => -2,
+        others   =>  0);
+
+   subtype Equivalent_Dose is Mks_Type
+     with
+      Dimension => (Symbol => "Sv",
+        Meter  =>  2,
+        Second => -2,
+        others =>  0);
+
+   subtype Force is Mks_Type
+     with
+      Dimension => (Symbol => 'N',
+        Meter    => 1,
+        Kilogram => 1,
+        Second   => -2,
+        others   => 0);
+
+   subtype Frequency is Mks_Type
+     with
+      Dimension => (Symbol => "Hz",
+        Second => -1,
+        others =>  0);
+
+   subtype Illuminance is Mks_Type
+     with
+      Dimension => (Symbol => "lx",
+        Meter   => -2,
+        Candela =>  1,
+        others  =>  0);
+
+   subtype Inductance is Mks_Type
+     with
+      Dimension => (Symbol => 'H',
+        Meter    =>  2,
+        Kilogram =>  1,
+        Second   => -2,
+        Ampere   => -2,
+        others   =>  0);
+
+   subtype Luminous_Flux is Mks_Type
+     with
+      Dimension => (Symbol => "lm",
+        Candela => 1,
+        others  => 0);
+
+   subtype Magnetic_Flux is Mks_Type
+     with
+      Dimension => (Symbol => "Wb",
+        Meter    =>  2,
+        Kilogram =>  1,
+        Second   => -2,
+        Ampere   => -1,
+        others   =>  0);
+
+   subtype Magnetic_Flux_Density is Mks_Type
+     with
+      Dimension => (Symbol => 'T',
+        Kilogram =>  1,
+        Second   => -2,
+        Ampere   => -1,
+        others   =>  0);
+
+   subtype Power is Mks_Type
+     with
+      Dimension => (Symbol => 'W',
+        Meter    =>  2,
+        Kilogram =>  1,
+        Second   => -3,
+        others   =>  0);
+
+   subtype Pressure is Mks_Type
+     with
+      Dimension => (Symbol => "Pa",
+        Meter    => -1,
+        Kilogram =>  1,
+        Second   => -2,
+        others   =>  0);
+
+   subtype Radioactivity is Mks_Type
+     with
+      Dimension => (Symbol => "Bq",
+        Second => -1,
+        others =>  0);
+
+   subtype Solid_Angle is Mks_Type
+     with
+      Dimension => (Symbol => "sr",
+        others => 0);
+
+   subtype Speed is Mks_Type
+     with
+      Dimension => (
+        Meter  =>  1,
+        Second => -1,
+        others =>  0);
+
+   subtype Volume is Mks_Type
+     with
+      Dimension => (
+        Meter  => 3,
+        others => 0);
+
+   --  Initialize derived dimension values
+
+   --  Turn off the all the dimension warnings for these basic assignments
+   --  since otherwise we would get complaints about assigning dimensionless
+   --  values to dimensioned subtypes.
+
+   pragma Warnings (Off, "*assumed to be*");
+
+   rad : constant Angle                         := 1.0;
+   sr  : constant Solid_Angle                   := 1.0;
+   Hz  : constant Frequency                     := 1.0;
+   N   : constant Force                         := 1.0;
+   Pa  : constant Pressure                      := 1.0;
+   J   : constant Energy                        := 1.0;
+   W   : constant Power                         := 1.0;
+   C   : constant Electric_Charge               := 1.0;
+   V   : constant Electric_Potential_Difference := 1.0;
+   F   : constant Electric_Capacitance          := 1.0;
+   Ohm : constant Electric_Resistance           := 1.0;
+   Si  : constant Electric_Conductance          := 1.0;
+   Wb  : constant Magnetic_Flux                 := 1.0;
+   T   : constant Magnetic_Flux_Density         := 1.0;
+   H   : constant Inductance                    := 1.0;
+   dC  : constant Celsius_Temperature           := 273.15;
+   lm  : constant Luminous_Flux                 := 1.0;
+   lx  : constant Illuminance                   := 1.0;
+   Bq  : constant Radioactivity                 := 1.0;
+   Gy  : constant Absorbed_Dose                 := 1.0;
+   Sv  : constant Equivalent_Dose               := 1.0;
+   kat : constant Catalytic_Activity            := 1.0;
+
+   --  SI prefixes for Meter
+
+   um  : constant Length := 1.0E-06;  -- micro (u)
+   mm  : constant Length := 1.0E-03;  -- milli
+   cm  : constant Length := 1.0E-02;  -- centi
+   dm  : constant Length := 1.0E-01;  -- deci
+   dam : constant Length := 1.0E+01;  -- deka
+   hm  : constant Length := 1.0E+02;  -- hecto
+   km  : constant Length := 1.0E+03;  -- kilo
+   Mem : constant Length := 1.0E+06;  -- mega
+
+   --  SI prefixes for Kilogram
+
+   ug  : constant Mass := 1.0E-09;  -- micro (u)
+   mg  : constant Mass := 1.0E-06;  -- milli
+   cg  : constant Mass := 1.0E-05;  -- centi
+   dg  : constant Mass := 1.0E-04;  -- deci
+   g   : constant Mass := 1.0E-03;  -- gram
+   dag : constant Mass := 1.0E-02;  -- deka
+   hg  : constant Mass := 1.0E-01;  -- hecto
+   Meg : constant Mass := 1.0E+03;  -- mega
+
+   --  SI prefixes for Second
+
+   us  : constant Time := 1.0E-06;  -- micro (u)
+   ms  : constant Time := 1.0E-03;  -- milli
+   cs  : constant Time := 1.0E-02;  -- centi
+   ds  : constant Time := 1.0E-01;  -- deci
+   das : constant Time := 1.0E+01;  -- deka
+   hs  : constant Time := 1.0E+02;  -- hecto
+   ks  : constant Time := 1.0E+03;  -- kilo
+   Mes : constant Time := 1.0E+06;  -- mega
+
+   --  Other constants for Second
+
+   min  : constant Time := 60.0 * s;
+   hour : constant Time := 60.0 * min;
+   day  : constant Time := 24.0 * hour;
+   year : constant Time := 365.25 * day;
+
+   --  SI prefixes for Ampere
+
+   mA  : constant Electric_Current := 1.0E-03;  -- milli
+   cA  : constant Electric_Current := 1.0E-02;  -- centi
+   dA  : constant Electric_Current := 1.0E-01;  -- deci
+   daA : constant Electric_Current := 1.0E+01;  -- deka
+   hA  : constant Electric_Current := 1.0E+02;  -- hecto
+   kA  : constant Electric_Current := 1.0E+03;  -- kilo
+   MeA : constant Electric_Current := 1.0E+06;  -- mega
+
+   pragma Warnings (On, "*assumed to be*");
+end System.Dim.Generic_Mks;

--- /dev/null
new file mode 100644
+++ gcc/ada/libgnat/s-dilomk.ads
@@ -0,0 +1,34 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                   S Y S T E M . D I M . L O N G _ M K S                  --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--             Copyright (C) 2018, Free Software Foundation, Inc.           --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with System.Dim.Generic_Mks;
+
+package System.Dim.Long_Mks is new System.Dim.Generic_Mks (Long_Float);

--- gcc/ada/libgnat/s-dimmks.ads
+++ gcc/ada/libgnat/s-dimmks.ads
@@ -29,365 +29,6 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  Defines the MKS dimension system which is the SI system of units
+with System.Dim.Generic_Mks;
 
---  Some other prefixes of this system are defined in a child package (see
---  System.Dim_Mks.Other_Prefixes) in order to avoid too many constant
---  declarations in this package.
-
---  The dimension terminology is defined in System.Dim_IO package
-
-with Ada.Numerics;
-
-package System.Dim.Mks is
-
-   e  : constant := Ada.Numerics.e;
-   Pi : constant := Ada.Numerics.Pi;
-
-   --  Dimensioned type Mks_Type
-
-   type Mks_Type is new Long_Long_Float
-     with
-      Dimension_System => (
-        (Unit_Name => Meter,    Unit_Symbol => 'm',   Dim_Symbol => 'L'),
-        (Unit_Name => Kilogram, Unit_Symbol => "kg",  Dim_Symbol => 'M'),
-        (Unit_Name => Second,   Unit_Symbol => 's',   Dim_Symbol => 'T'),
-        (Unit_Name => Ampere,   Unit_Symbol => 'A',   Dim_Symbol => 'I'),
-        (Unit_Name => Kelvin,   Unit_Symbol => 'K',   Dim_Symbol => '@'),
-        (Unit_Name => Mole,     Unit_Symbol => "mol", Dim_Symbol => 'N'),
-        (Unit_Name => Candela,  Unit_Symbol => "cd",  Dim_Symbol => 'J'));
-
-   --  SI Base dimensioned subtypes
-
-   subtype Length is Mks_Type
-     with
-      Dimension => (Symbol => 'm',
-        Meter  => 1,
-        others => 0);
-
-   subtype Mass is Mks_Type
-     with
-      Dimension => (Symbol => "kg",
-        Kilogram => 1,
-        others   => 0);
-
-   subtype Time is Mks_Type
-     with
-      Dimension => (Symbol => 's',
-        Second => 1,
-        others => 0);
-
-   subtype Electric_Current is Mks_Type
-     with
-      Dimension => (Symbol => 'A',
-        Ampere => 1,
-        others => 0);
-
-   subtype Thermodynamic_Temperature is Mks_Type
-     with
-      Dimension => (Symbol => 'K',
-        Kelvin => 1,
-        others => 0);
-
-   subtype Amount_Of_Substance is Mks_Type
-     with
-      Dimension => (Symbol => "mol",
-        Mole   => 1,
-        others => 0);
-
-   subtype Luminous_Intensity is Mks_Type
-     with
-      Dimension => (Symbol => "cd",
-        Candela => 1,
-        others  => 0);
-
-   --  Initialize SI Base unit values
-
-   --  Turn off the all the dimension warnings for these basic assignments
-   --  since otherwise we would get complaints about assigning dimensionless
-   --  values to dimensioned subtypes (we can't assign 1.0*m to m).
-
-   pragma Warnings (Off, "*assumed to be*");
-
-   m   : constant Length                    := 1.0;
-   kg  : constant Mass                      := 1.0;
-   s   : constant Time                      := 1.0;
-   A   : constant Electric_Current          := 1.0;
-   K   : constant Thermodynamic_Temperature := 1.0;
-   mol : constant Amount_Of_Substance       := 1.0;
-   cd  : constant Luminous_Intensity        := 1.0;
-
-   pragma Warnings (On, "*assumed to be*");
-
-   --  SI Derived dimensioned subtypes
-
-   subtype Absorbed_Dose is Mks_Type
-     with
-      Dimension => (Symbol => "Gy",
-        Meter  =>  2,
-        Second => -2,
-        others =>  0);
-
-   subtype Angle is Mks_Type
-     with
-      Dimension => (Symbol => "rad",
-        others => 0);
-
-   subtype Area is Mks_Type
-     with
-      Dimension => (
-        Meter  => 2,
-        others => 0);
-
-   subtype Catalytic_Activity is Mks_Type
-     with
-      Dimension => (Symbol => "kat",
-        Second => -1,
-        Mole   => 1,
-        others => 0);
-
-   subtype Celsius_Temperature is Mks_Type
-     with
-      Dimension => (Symbol => "°C",
-        Kelvin => 1,
-        others => 0);
-
-   subtype Electric_Capacitance is Mks_Type
-     with
-      Dimension => (Symbol => 'F',
-        Meter    => -2,
-        Kilogram => -1,
-        Second   =>  4,
-        Ampere   =>  2,
-        others   =>  0);
-
-   subtype Electric_Charge is Mks_Type
-     with
-      Dimension => (Symbol => 'C',
-        Second => 1,
-        Ampere => 1,
-        others => 0);
-
-   subtype Electric_Conductance is Mks_Type
-     with
-      Dimension => (Symbol => 'S',
-        Meter    => -2,
-        Kilogram => -1,
-        Second   =>  3,
-        Ampere   =>  2,
-        others   =>  0);
-
-   subtype Electric_Potential_Difference is Mks_Type
-     with
-      Dimension => (Symbol => 'V',
-        Meter    =>  2,
-        Kilogram =>  1,
-        Second   => -3,
-        Ampere   => -1,
-        others   =>  0);
-
-   --  Note the type punning below. The Symbol is a single "ohm" character
-   --  encoded in UTF-8 (ce a9 in hexadecimal), but this file is not compiled
-   --  with -gnatW8, so we're treating the string literal as a two-character
-   --  String.
-
-   subtype Electric_Resistance is Mks_Type
-     with
-      Dimension => (Symbol => "Ω",
-        Meter    =>  2,
-        Kilogram =>  1,
-        Second   => -3,
-        Ampere   => -2,
-        others   =>  0);
-
-   subtype Energy is Mks_Type
-     with
-      Dimension => (Symbol => 'J',
-        Meter    =>  2,
-        Kilogram =>  1,
-        Second   => -2,
-        others   =>  0);
-
-   subtype Equivalent_Dose is Mks_Type
-     with
-      Dimension => (Symbol => "Sv",
-        Meter  =>  2,
-        Second => -2,
-        others =>  0);
-
-   subtype Force is Mks_Type
-     with
-      Dimension => (Symbol => 'N',
-        Meter    => 1,
-        Kilogram => 1,
-        Second   => -2,
-        others   => 0);
-
-   subtype Frequency is Mks_Type
-     with
-      Dimension => (Symbol => "Hz",
-        Second => -1,
-        others =>  0);
-
-   subtype Illuminance is Mks_Type
-     with
-      Dimension => (Symbol => "lx",
-        Meter   => -2,
-        Candela =>  1,
-        others  =>  0);
-
-   subtype Inductance is Mks_Type
-     with
-      Dimension => (Symbol => 'H',
-        Meter    =>  2,
-        Kilogram =>  1,
-        Second   => -2,
-        Ampere   => -2,
-        others   =>  0);
-
-   subtype Luminous_Flux is Mks_Type
-     with
-      Dimension => (Symbol => "lm",
-        Candela => 1,
-        others  => 0);
-
-   subtype Magnetic_Flux is Mks_Type
-     with
-      Dimension => (Symbol => "Wb",
-        Meter    =>  2,
-        Kilogram =>  1,
-        Second   => -2,
-        Ampere   => -1,
-        others   =>  0);
-
-   subtype Magnetic_Flux_Density is Mks_Type
-     with
-      Dimension => (Symbol => 'T',
-        Kilogram =>  1,
-        Second   => -2,
-        Ampere   => -1,
-        others   =>  0);
-
-   subtype Power is Mks_Type
-     with
-      Dimension => (Symbol => 'W',
-        Meter    =>  2,
-        Kilogram =>  1,
-        Second   => -3,
-        others   =>  0);
-
-   subtype Pressure is Mks_Type
-     with
-      Dimension => (Symbol => "Pa",
-        Meter    => -1,
-        Kilogram =>  1,
-        Second   => -2,
-        others   =>  0);
-
-   subtype Radioactivity is Mks_Type
-     with
-      Dimension => (Symbol => "Bq",
-        Second => -1,
-        others =>  0);
-
-   subtype Solid_Angle is Mks_Type
-     with
-      Dimension => (Symbol => "sr",
-        others => 0);
-
-   subtype Speed is Mks_Type
-     with
-      Dimension => (
-        Meter  =>  1,
-        Second => -1,
-        others =>  0);
-
-   subtype Volume is Mks_Type
-     with
-      Dimension => (
-        Meter  => 3,
-        others => 0);
-
-   --  Initialize derived dimension values
-
-   --  Turn off the all the dimension warnings for these basic assignments
-   --  since otherwise we would get complaints about assigning dimensionless
-   --  values to dimensioned subtypes.
-
-   pragma Warnings (Off, "*assumed to be*");
-
-   rad : constant Angle                         := 1.0;
-   sr  : constant Solid_Angle                   := 1.0;
-   Hz  : constant Frequency                     := 1.0;
-   N   : constant Force                         := 1.0;
-   Pa  : constant Pressure                      := 1.0;
-   J   : constant Energy                        := 1.0;
-   W   : constant Power                         := 1.0;
-   C   : constant Electric_Charge               := 1.0;
-   V   : constant Electric_Potential_Difference := 1.0;
-   F   : constant Electric_Capacitance          := 1.0;
-   Ohm : constant Electric_Resistance           := 1.0;
-   Si  : constant Electric_Conductance          := 1.0;
-   Wb  : constant Magnetic_Flux                 := 1.0;
-   T   : constant Magnetic_Flux_Density         := 1.0;
-   H   : constant Inductance                    := 1.0;
-   dC  : constant Celsius_Temperature           := 273.15;
-   lm  : constant Luminous_Flux                 := 1.0;
-   lx  : constant Illuminance                   := 1.0;
-   Bq  : constant Radioactivity                 := 1.0;
-   Gy  : constant Absorbed_Dose                 := 1.0;
-   Sv  : constant Equivalent_Dose               := 1.0;
-   kat : constant Catalytic_Activity            := 1.0;
-
-   --  SI prefixes for Meter
-
-   um  : constant Length := 1.0E-06;  -- micro (u)
-   mm  : constant Length := 1.0E-03;  -- milli
-   cm  : constant Length := 1.0E-02;  -- centi
-   dm  : constant Length := 1.0E-01;  -- deci
-   dam : constant Length := 1.0E+01;  -- deka
-   hm  : constant Length := 1.0E+02;  -- hecto
-   km  : constant Length := 1.0E+03;  -- kilo
-   Mem : constant Length := 1.0E+06;  -- mega
-
-   --  SI prefixes for Kilogram
-
-   ug  : constant Mass := 1.0E-09;  -- micro (u)
-   mg  : constant Mass := 1.0E-06;  -- milli
-   cg  : constant Mass := 1.0E-05;  -- centi
-   dg  : constant Mass := 1.0E-04;  -- deci
-   g   : constant Mass := 1.0E-03;  -- gram
-   dag : constant Mass := 1.0E-02;  -- deka
-   hg  : constant Mass := 1.0E-01;  -- hecto
-   Meg : constant Mass := 1.0E+03;  -- mega
-
-   --  SI prefixes for Second
-
-   us  : constant Time := 1.0E-06;  -- micro (u)
-   ms  : constant Time := 1.0E-03;  -- milli
-   cs  : constant Time := 1.0E-02;  -- centi
-   ds  : constant Time := 1.0E-01;  -- deci
-   das : constant Time := 1.0E+01;  -- deka
-   hs  : constant Time := 1.0E+02;  -- hecto
-   ks  : constant Time := 1.0E+03;  -- kilo
-   Mes : constant Time := 1.0E+06;  -- mega
-
-   --  Other constants for Second
-
-   min  : constant Time := 60.0 * s;
-   hour : constant Time := 60.0 * min;
-   day  : constant Time := 24.0 * hour;
-   year : constant Time := 365.25 * day;
-
-   --  SI prefixes for Ampere
-
-   mA  : constant Electric_Current := 1.0E-03;  -- milli
-   cA  : constant Electric_Current := 1.0E-02;  -- centi
-   dA  : constant Electric_Current := 1.0E-01;  -- deci
-   daA : constant Electric_Current := 1.0E+01;  -- deka
-   hA  : constant Electric_Current := 1.0E+02;  -- hecto
-   kA  : constant Electric_Current := 1.0E+03;  -- kilo
-   MeA : constant Electric_Current := 1.0E+06;  -- mega
-
-   pragma Warnings (On, "*assumed to be*");
-end System.Dim.Mks;
+package System.Dim.Mks is new System.Dim.Generic_Mks (Long_Long_Float);

--- /dev/null
new file mode 100644
+++ gcc/ada/libgnat/s-dlmkio.ads
@@ -0,0 +1,38 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--                S Y S T E M . D I M . L O N G _ M K S _ I O               --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--             Copyright (C) 2018, Free Software Foundation, Inc.           --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  Provides output facilities for the Long_Float MKS dimension system (see
+--  System.Dim.Long_Mks and System.Dim.Float_IO).
+
+with System.Dim.Long_Mks; use System.Dim.Long_Mks;
+with System.Dim.Float_IO;
+
+package System.Dim.Long_Mks_IO is new System.Dim.Float_IO (Mks_Type);

--- /dev/null
new file mode 100644
+++ gcc/ada/libgnat/s-dlmopr.ads
@@ -0,0 +1,35 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
+--                                                                          --
+--    S Y S T E M . D I M . L O N G _ M K S . O T H E R _ P R E F I X E S   --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--              Copyright (C) 2018, Free Software Foundation, Inc.          --
+--                                                                          --
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
+-- terms of the  GNU General Public License as published  by the Free Soft- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNAT was originally developed  by the GNAT team at  New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
+--                                                                          --
+------------------------------------------------------------------------------
+
+with System.Dim.Generic_Mks.Generic_Other_Prefixes;
+
+package System.Dim.Long_Mks.Other_Prefixes is
+  new System.Dim.Long_Mks.Generic_Other_Prefixes;

--- gcc/ada/libgnat/s-dmotpr.ads
+++ gcc/ada/libgnat/s-dmotpr.ads
@@ -29,144 +29,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  Package that defines some other prefixes for the MKS base unit system.
-
---  These prefixes have been defined in a child package in order to avoid too
---  many constant declarations in System.Dim_Mks.
+with System.Dim.Generic_Mks.Generic_Other_Prefixes;
 
 package System.Dim.Mks.Other_Prefixes is
-
-   --  SI prefixes for Meter
-
-   pragma Warnings (Off);
-   --  Turn off the all the dimension warnings
-
-   ym  : constant Length := 1.0E-24;  -- yocto
-   zm  : constant Length := 1.0E-21;  -- zepto
-   am  : constant Length := 1.0E-18;  -- atto
-   fm  : constant Length := 1.0E-15;  -- femto
-   pm  : constant Length := 1.0E-12;  -- pico
-   nm  : constant Length := 1.0E-09;  -- nano
-   Gm  : constant Length := 1.0E+09;  -- giga
-   Tm  : constant Length := 1.0E+12;  -- tera
-   Pem : constant Length := 1.0E+15;  -- peta
-   Em  : constant Length := 1.0E+18;  -- exa
-   Zem : constant Length := 1.0E+21;  -- zetta
-   Yom : constant Length := 1.0E+24;  -- yotta
-
-   --  SI prefixes for Kilogram
-
-   yg  : constant Mass := 1.0E-27;  -- yocto
-   zg  : constant Mass := 1.0E-24;  -- zepto
-   ag  : constant Mass := 1.0E-21;  -- atto
-   fg  : constant Mass := 1.0E-18;  -- femto
-   pg  : constant Mass := 1.0E-15;  -- pico
-   ng  : constant Mass := 1.0E-12;  -- nano
-   Gg  : constant Mass := 1.0E+06;  -- giga
-   Tg  : constant Mass := 1.0E+09;  -- tera
-   Peg : constant Mass := 1.0E+13;  -- peta
-   Eg  : constant Mass := 1.0E+15;  -- exa
-   Zeg : constant Mass := 1.0E+18;  -- zetta
-   Yog : constant Mass := 1.0E+21;  -- yotta
-
-   --  SI prefixes for Second
-
-   ys  : constant Time := 1.0E-24;  -- yocto
-   zs  : constant Time := 1.0E-21;  -- zepto
-   as  : constant Time := 1.0E-18;  -- atto
-   fs  : constant Time := 1.0E-15;  -- femto
-   ps  : constant Time := 1.0E-12;  -- pico
-   ns  : constant Time := 1.0E-09;  -- nano
-   Gs  : constant Time := 1.0E+09;  -- giga
-   Ts  : constant Time := 1.0E+12;  -- tera
-   Pes : constant Time := 1.0E+15;  -- peta
-   Es  : constant Time := 1.0E+18;  -- exa
-   Zes : constant Time := 1.0E+21;  -- zetta
-   Yos : constant Time := 1.0E+24;  -- yotta
-
-   --  SI prefixes for Ampere
-
-   yA  : constant Electric_Current := 1.0E-24;  -- yocto
-   zA  : constant Electric_Current := 1.0E-21;  -- zepto
-   aA  : constant Electric_Current := 1.0E-18;  -- atto
-   fA  : constant Electric_Current := 1.0E-15;  -- femto
-   nA  : constant Electric_Current := 1.0E-09;  -- nano
-   uA  : constant Electric_Current := 1.0E-06;  -- micro (u)
-   GA  : constant Electric_Current := 1.0E+09;  -- giga
-   TA  : constant Electric_Current := 1.0E+12;  -- tera
-   PeA : constant Electric_Current := 1.0E+15;  -- peta
-   EA  : constant Electric_Current := 1.0E+18;  -- exa
-   ZeA : constant Electric_Current := 1.0E+21;  -- zetta
-   YoA : constant Electric_Current := 1.0E+24;  -- yotta
-
-   --  SI prefixes for Kelvin
-
-   yK  : constant Thermodynamic_Temperature := 1.0E-24;  -- yocto
-   zK  : constant Thermodynamic_Temperature := 1.0E-21;  -- zepto
-   aK  : constant Thermodynamic_Temperature := 1.0E-18;  -- atto
-   fK  : constant Thermodynamic_Temperature := 1.0E-15;  -- femto
-   pK  : constant Thermodynamic_Temperature := 1.0E-12;  -- pico
-   nK  : constant Thermodynamic_Temperature := 1.0E-09;  -- nano
-   uK  : constant Thermodynamic_Temperature := 1.0E-06;  -- micro (u)
-   mK  : constant Thermodynamic_Temperature := 1.0E-03;  -- milli
-   cK  : constant Thermodynamic_Temperature := 1.0E-02;  -- centi
-   dK  : constant Thermodynamic_Temperature := 1.0E-01;  -- deci
-   daK : constant Thermodynamic_Temperature := 1.0E+01;  -- deka
-   hK  : constant Thermodynamic_Temperature := 1.0E+02;  -- hecto
-   kK  : constant Thermodynamic_Temperature := 1.0E+03;  -- kilo
-   MeK : constant Thermodynamic_Temperature := 1.0E+06;  -- mega
-   GK  : constant Thermodynamic_Temperature := 1.0E+09;  -- giga
-   TK  : constant Thermodynamic_Temperature := 1.0E+12;  -- tera
-   PeK : constant Thermodynamic_Temperature := 1.0E+15;  -- peta
-   EK  : constant Thermodynamic_Temperature := 1.0E+18;  -- exa
-   ZeK : constant Thermodynamic_Temperature := 1.0E+21;  -- zetta
-   YoK : constant Thermodynamic_Temperature := 1.0E+24;  -- yotta
-
-   --  SI prefixes for Mole
-
-   ymol  : constant Amount_Of_Substance := 1.0E-24;  -- yocto
-   zmol  : constant Amount_Of_Substance := 1.0E-21;  -- zepto
-   amol  : constant Amount_Of_Substance := 1.0E-18;  -- atto
-   fmol  : constant Amount_Of_Substance := 1.0E-15;  -- femto
-   pmol  : constant Amount_Of_Substance := 1.0E-12;  -- pico
-   nmol  : constant Amount_Of_Substance := 1.0E-09;  -- nano
-   umol  : constant Amount_Of_Substance := 1.0E-06;  -- micro (u)
-   mmol  : constant Amount_Of_Substance := 1.0E-03;  -- milli
-   cmol  : constant Amount_Of_Substance := 1.0E-02;  -- centi
-   dmol  : constant Amount_Of_Substance := 1.0E-01;  -- deci
-   damol : constant Amount_Of_Substance := 1.0E+01;  -- deka
-   hmol  : constant Amount_Of_Substance := 1.0E+02;  -- hecto
-   kmol  : constant Amount_Of_Substance := 1.0E+03;  -- kilo
-   Memol : constant Amount_Of_Substance := 1.0E+06;  -- mega
-   Gmol  : constant Amount_Of_Substance := 1.0E+09;  -- giga
-   Tmol  : constant Amount_Of_Substance := 1.0E+12;  -- tera
-   Pemol : constant Amount_Of_Substance := 1.0E+15;  -- peta
-   Emol  : constant Amount_Of_Substance := 1.0E+18;  -- exa
-   Zemol : constant Amount_Of_Substance := 1.0E+21;  -- zetta
-   Yomol : constant Amount_Of_Substance := 1.0E+24;  -- yotta
-
-   --  SI prefixes for Candela
-
-   ycd  : constant Luminous_Intensity := 1.0E-24;  -- yocto
-   zcd  : constant Luminous_Intensity := 1.0E-21;  -- zepto
-   acd  : constant Luminous_Intensity := 1.0E-18;  -- atto
-   fcd  : constant Luminous_Intensity := 1.0E-15;  -- femto
-   pcd  : constant Luminous_Intensity := 1.0E-12;  -- pico
-   ncd  : constant Luminous_Intensity := 1.0E-09;  -- nano
-   ucd  : constant Luminous_Intensity := 1.0E-06;  -- micro (u)
-   mcd  : constant Luminous_Intensity := 1.0E-03;  -- milli
-   ccd  : constant Luminous_Intensity := 1.0E-02;  -- centi
-   dcd  : constant Luminous_Intensity := 1.0E-01;  -- deci
-   dacd : constant Luminous_Intensity := 1.0E+01;  -- deka
-   hcd  : constant Luminous_Intensity := 1.0E+02;  -- hecto
-   kcd  : constant Luminous_Intensity := 1.0E+03;  -- kilo
-   Mecd : constant Luminous_Intensity := 1.0E+06;  -- mega
-   Gcd  : constant Luminous_Intensity := 1.0E+09;  -- giga
-   Tcd  : constant Luminous_Intensity := 1.0E+12;  -- tera
-   Pecd : constant Luminous_Intensity := 1.0E+15;  -- peta
-   Ecd  : constant Luminous_Intensity := 1.0E+18;  -- exa
-   Zecd : constant Luminous_Intensity := 1.0E+21;  -- zetta
-   Yocd : constant Luminous_Intensity := 1.0E+24;  -- yotta
-
-   pragma Warnings (On);
-end System.Dim.Mks.Other_Prefixes;
+   new System.Dim.Mks.Generic_Other_Prefixes;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]