cd5c5cd
--- vhdl/libraries/ieee/math_real.vhdl.orig	2009-04-01 19:21:58.000000000 +0200
cd5c5cd
+++ vhdl/libraries/ieee/math_real.vhdl	2009-04-02 12:21:52.000000000 +0200
cd5c5cd
@@ -102,16 +102,21 @@
cd5c5cd
     	-- returns integer FLOOR(X + 0.5) if X > 0;
cd5c5cd
     	-- return integer CEIL(X - 0.5) if X < 0
cd5c5cd
 
cd5c5cd
-    -- IAC: we are missing the function TRUNC
cd5c5cd
-    -- IAC: we are missing the function MOD
cd5c5cd
-    -- IAC: functions FMAX and FMIN should be renamed REALMAX and REALMIN
cd5c5cd
-    
cd5c5cd
-    function FMAX (X, Y : real ) return real;
cd5c5cd
-    attribute foreign of fmax : function is "VHPIDIRECT fmax"; 
cd5c5cd
+    function TRUNC (X : real ) return real;
cd5c5cd
+    attribute foreign of trunc : function is "VHPIDIRECT trunc"; 
cd5c5cd
+    	-- returns integer FLOOR(X) if X > 0;
cd5c5cd
+    	-- return integer CEIL(X) if X < 0
cd5c5cd
+
cd5c5cd
+    function "MOD" (X, Y : real ) return real;
cd5c5cd
+    attribute foreign of "mod" : function is "VHPIDIRECT fmod"; 
cd5c5cd
+    	-- returns the floating point modulus of X/Y
cd5c5cd
+
cd5c5cd
+    function REALMAX (X, Y : real ) return real;
cd5c5cd
+    attribute foreign of realmax : function is "VHPIDIRECT fmax"; 
cd5c5cd
     	-- returns the algebraically larger of X and Y
cd5c5cd
 
cd5c5cd
-    function FMIN (X, Y : real ) return real;
cd5c5cd
-    attribute foreign of fmin : function is "VHPIDIRECT fmin"; 
cd5c5cd
+    function REALMIN (X, Y : real ) return real;
cd5c5cd
+    attribute foreign of realmin : function is "VHPIDIRECT fmin"; 
cd5c5cd
     	-- returns the algebraically smaller of X and Y
cd5c5cd
 
cd5c5cd
     procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real);
cd5c5cd
@@ -203,25 +208,17 @@
cd5c5cd
     	-- returns tan X; X in radians
cd5c5cd
     	-- X /= ((2k+1) * PI/2), where k is an integer
cd5c5cd
 
cd5c5cd
-    -- IAC: function should be called ARCSIN
cd5c5cd
-    
cd5c5cd
-    function  ASIN (X : real ) return real; 
cd5c5cd
+    function  ARCSIN (X : real ) return real; 
cd5c5cd
     	-- returns  -PI/2 < asin X < PI/2; | X | <= 1
cd5c5cd
 
cd5c5cd
-    -- IAC: function should be called ARCCOS
cd5c5cd
-    
cd5c5cd
-    function  ACOS (X : real ) return real;
cd5c5cd
+    function  ARCCOS (X : real ) return real;
cd5c5cd
     	-- returns  0 < acos X < PI; | X | <= 1
cd5c5cd
 
cd5c5cd
-    
cd5c5cd
-    -- IAC: function should be called ARCTAN
cd5c5cd
-    
cd5c5cd
-    function  ATAN (X : real) return real;
cd5c5cd
-    attribute foreign of atan : function is "VHPIDIRECT atan"; 
cd5c5cd
+    function  ARCTAN (X : real) return real;
cd5c5cd
+    attribute foreign of arctan : function is "VHPIDIRECT atan"; 
cd5c5cd
     	-- returns  -PI/2 < atan X < PI/2
cd5c5cd
 
cd5c5cd
-    -- IAC: function ATAN2 should not exist
cd5c5cd
-    function  ATAN2 (X : real; Y : real) return real;
cd5c5cd
+    function  ARCTAN (X : real; Y : real) return real;
cd5c5cd
     	-- returns  atan (X/Y); -PI < atan2(X,Y) < PI; Y /= 0.0
cd5c5cd
 
cd5c5cd
     function SINH (X : real) return real;
cd5c5cd
@@ -236,20 +233,35 @@
cd5c5cd
     attribute foreign of tanh : function is "VHPIDIRECT tanh"; 
cd5c5cd
     	-- hyperbolic tangent; -- returns (e**X - e**(-X))/(e**X + e**(-X))
cd5c5cd
 
cd5c5cd
-    -- IAC: function should be called ARCSINH
cd5c5cd
-    
cd5c5cd
-    function ASINH (X : real) return real;
cd5c5cd
-    attribute foreign of asinh : function is "VHPIDIRECT asinh"; 
cd5c5cd
+    function ARCSINH (X : real) return real;
cd5c5cd
+    attribute foreign of arcsinh : function is "VHPIDIRECT asinh"; 
cd5c5cd
     	-- returns ln( X + sqrt( X**2 + 1))
cd5c5cd
 
cd5c5cd
-    -- IAC: function should be called ARCCOSH
cd5c5cd
-
cd5c5cd
-    function ACOSH (X : real) return real;
cd5c5cd
+    function ARCCOSH (X : real) return real;
cd5c5cd
     	-- returns ln( X + sqrt( X**2 - 1));   X >= 1
cd5c5cd
 
cd5c5cd
-    -- IAC: function should be called ARCTANH
cd5c5cd
-    
cd5c5cd
-    function ATANH (X : real) return real;
cd5c5cd
+    function ARCTANH (X : real) return real;
cd5c5cd
     	-- returns (ln( (1 + X)/(1 - X)))/2 ; | X | < 1
cd5c5cd
 
cd5c5cd
+
cd5c5cd
+    -- Compatibility; will be removed in the future!
cd5c5cd
+    impure function FMAX (X, Y : real ) return real;
cd5c5cd
+
cd5c5cd
+    impure function FMIN (X, Y : real ) return real;
cd5c5cd
+
cd5c5cd
+    impure function ASIN (X : real ) return real; 
cd5c5cd
+
cd5c5cd
+    impure function ACOS (X : real ) return real;
cd5c5cd
+
cd5c5cd
+    impure function ATAN (X : real) return real;
cd5c5cd
+
cd5c5cd
+    impure function ATAN2 (X : real; Y : real) return real;
cd5c5cd
+
cd5c5cd
+    impure function ASINH (X : real) return real;
cd5c5cd
+
cd5c5cd
+    impure function ACOSH (X : real) return real;
cd5c5cd
+
cd5c5cd
+    impure function ATANH (X : real) return real;
cd5c5cd
+
cd5c5cd
+
cd5c5cd
 end  MATH_REAL;
cd5c5cd
--- vhdl/libraries/ieee/math_real-body.vhdl.orig	2009-04-01 19:22:04.000000000 +0200
cd5c5cd
+++ vhdl/libraries/ieee/math_real-body.vhdl	2009-04-02 12:27:15.000000000 +0200
cd5c5cd
@@ -72,16 +72,41 @@
cd5c5cd
     begin
cd5c5cd
         assert false severity failure;
cd5c5cd
     end ROUND;
cd5c5cd
-    
cd5c5cd
-    function FMAX (X, Y : real ) return real is
cd5c5cd
+
cd5c5cd
+    function TRUNC (X : real ) return real is
cd5c5cd
     begin
cd5c5cd
         assert false severity failure;
cd5c5cd
-    end FMAX;
cd5c5cd
+    end TRUNC;
cd5c5cd
 
cd5c5cd
-    function FMIN (X, Y : real ) return real is
cd5c5cd
+    function c_mod (x : real; y : real) return real;
cd5c5cd
+    attribute foreign of c_mod : function is "VHPIDIRECT fmod"; 
cd5c5cd
+
cd5c5cd
+    function c_mod (x : real; y: real) return real is
cd5c5cd
     begin
cd5c5cd
         assert false severity failure;
cd5c5cd
-    end FMIN;
cd5c5cd
+    end c_mod; 
cd5c5cd
+
cd5c5cd
+    function "MOD" (X, Y : real ) return real is
cd5c5cd
+    begin
cd5c5cd
+        if y = 0.0 then 
cd5c5cd
+            assert false 
cd5c5cd
+                report "MOD(X, 0.0) is undefined" 
cd5c5cd
+                severity ERROR;
cd5c5cd
+            return 0.0; 
cd5c5cd
+        else
cd5c5cd
+            return c_mod(x,y);
cd5c5cd
+        end if;     
cd5c5cd
+    end "MOD";
cd5c5cd
+
cd5c5cd
+    function REALMAX (X, Y : real ) return real is
cd5c5cd
+    begin
cd5c5cd
+        assert false severity failure;
cd5c5cd
+    end REALMAX;
cd5c5cd
+
cd5c5cd
+    function REALMIN (X, Y : real ) return real is
cd5c5cd
+    begin
cd5c5cd
+        assert false severity failure;
cd5c5cd
+    end REALMIN;
cd5c5cd
 
cd5c5cd
     --
cd5c5cd
     -- Pseudo-random number generators
cd5c5cd
@@ -297,18 +322,18 @@
cd5c5cd
         assert false severity failure;
cd5c5cd
     end c_asin; 
cd5c5cd
 
cd5c5cd
-    function ASIN (x : real ) return real is
cd5c5cd
+    function ARCSIN (x : real ) return real is
cd5c5cd
         -- returns  -PI/2 < asin X < PI/2; | X | <= 1
cd5c5cd
     begin   
cd5c5cd
         if abs x > 1.0 then 
cd5c5cd
             assert false
cd5c5cd
-                report "Out of range parameter passed to ASIN" 
cd5c5cd
+                report "Out of range parameter passed to ARCSIN" 
cd5c5cd
                 severity ERROR;
cd5c5cd
             return x;
cd5c5cd
         else
cd5c5cd
             return c_asin(x);
cd5c5cd
         end if; 
cd5c5cd
-    end ASIN; 
cd5c5cd
+    end ARCSIN; 
cd5c5cd
    
cd5c5cd
     function c_acos (x : real ) return real;
cd5c5cd
     attribute foreign of c_acos : function is "VHPIDIRECT acos"; 
cd5c5cd
@@ -318,24 +343,24 @@
cd5c5cd
         assert false severity failure;
cd5c5cd
     end c_acos; 
cd5c5cd
 
cd5c5cd
-    function ACOS (x : REAL) return REAL is
cd5c5cd
+    function ARCCOS (x : REAL) return REAL is
cd5c5cd
     	-- returns  0 < acos X < PI; | X | <= 1
cd5c5cd
     begin  
cd5c5cd
       if abs x > 1.0 then 
cd5c5cd
          assert false 
cd5c5cd
-            report "Out of range parameter passed to ACOS" 
cd5c5cd
+            report "Out of range parameter passed to ARCCOS" 
cd5c5cd
 			severity ERROR; 
cd5c5cd
          return x;
cd5c5cd
       else
cd5c5cd
          return c_acos(x);
cd5c5cd
       end if;
cd5c5cd
-    end ACOS; 
cd5c5cd
+    end ARCCOS; 
cd5c5cd
    
cd5c5cd
-   function ATAN (x : REAL) return REAL is
cd5c5cd
+    function ARCTAN (x : REAL) return REAL is
cd5c5cd
     	-- returns  -PI/2 < atan X < PI/2
cd5c5cd
-   begin
cd5c5cd
+    begin
cd5c5cd
         assert false severity failure;
cd5c5cd
-   end ATAN; 
cd5c5cd
+    end ARCTAN; 
cd5c5cd
 
cd5c5cd
     function c_atan2 (x : real; y : real) return real;
cd5c5cd
     attribute foreign of c_atan2 : function is "VHPIDIRECT atan2"; 
cd5c5cd
@@ -345,7 +370,7 @@
cd5c5cd
         assert false severity failure;
cd5c5cd
     end c_atan2; 
cd5c5cd
 
cd5c5cd
-    function ATAN2 (x : REAL; y : REAL) return REAL is 
cd5c5cd
+    function ARCTAN (x : REAL; y : REAL) return REAL is 
cd5c5cd
         -- returns  atan (X/Y); -PI < atan2(X,Y) < PI; Y /= 0.0
cd5c5cd
     begin   
cd5c5cd
         if y = 0.0 and x = 0.0 then 
cd5c5cd
@@ -356,7 +381,7 @@
cd5c5cd
         else
cd5c5cd
             return c_atan2(x,y);
cd5c5cd
         end if;     
cd5c5cd
-    end ATAN2; 
cd5c5cd
+    end ARCTAN; 
cd5c5cd
 
cd5c5cd
 
cd5c5cd
     function SINH (X : real) return real is
cd5c5cd
@@ -377,11 +402,11 @@
cd5c5cd
         assert false severity failure;
cd5c5cd
     end TANH;
cd5c5cd
     
cd5c5cd
-    function ASINH (X : real) return real is
cd5c5cd
+    function ARCSINH (X : real) return real is
cd5c5cd
     	-- returns ln( X + sqrt( X**2 + 1))
cd5c5cd
     begin
cd5c5cd
         assert false severity failure;
cd5c5cd
-    end ASINH;
cd5c5cd
+    end ARCSINH;
cd5c5cd
 
cd5c5cd
     function c_acosh (x : real ) return real;
cd5c5cd
     attribute foreign of c_acosh : function is "VHPIDIRECT acosh"; 
cd5c5cd
@@ -391,16 +416,16 @@
cd5c5cd
         assert false severity failure;
cd5c5cd
     end c_acosh;
cd5c5cd
 
cd5c5cd
-    function ACOSH (X : real) return real is
cd5c5cd
+    function ARCCOSH (X : real) return real is
cd5c5cd
     	-- returns ln( X + sqrt( X**2 - 1));   X >= 1
cd5c5cd
     begin
cd5c5cd
       	if abs x >= 1.0 then 
cd5c5cd
-         	assert false report "Out of range parameter passed to ACOSH" 
cd5c5cd
+         	assert false report "Out of range parameter passed to ARCCOSH" 
cd5c5cd
 			severity ERROR; 
cd5c5cd
          	return x;
cd5c5cd
       	end if; 
cd5c5cd
         return c_acosh(x);
cd5c5cd
-    end ACOSH;
cd5c5cd
+    end ARCCOSH;
cd5c5cd
 
cd5c5cd
     function c_atanh (x : real ) return real;
cd5c5cd
     attribute foreign of c_atanh : function is "VHPIDIRECT atanh"; 
cd5c5cd
@@ -410,15 +435,107 @@
cd5c5cd
         assert false severity failure;
cd5c5cd
     end c_atanh;
cd5c5cd
 
cd5c5cd
-    function ATANH (X : real) return real is
cd5c5cd
+    function ARCTANH (X : real) return real is
cd5c5cd
     	-- returns (ln( (1 + X)/(1 - X)))/2 ; | X | < 1
cd5c5cd
     begin
cd5c5cd
       	if abs x < 1.0 then 
cd5c5cd
-        	assert false report "Out of range parameter passed to ATANH" 
cd5c5cd
+        	assert false report "Out of range parameter passed to ARCTANH" 
cd5c5cd
 			severity ERROR; 
cd5c5cd
         	return x;
cd5c5cd
       	end if; 
cd5c5cd
         return c_atanh(x);
cd5c5cd
-    end ATANH; 
cd5c5cd
+    end ARCTANH; 
cd5c5cd
+
cd5c5cd
+    -- Compatibility; will be removed in the future!
cd5c5cd
+    shared variable fmax_compat_warn : boolean := false;
cd5c5cd
+    shared variable fmin_compat_warn : boolean := false;
cd5c5cd
+    shared variable asin_compat_warn : boolean := false;
cd5c5cd
+    shared variable acos_compat_warn : boolean := false;
cd5c5cd
+    shared variable atan_compat_warn : boolean := false;
cd5c5cd
+    shared variable atan2_compat_warn : boolean := false;
cd5c5cd
+    shared variable asinh_compat_warn : boolean := false;
cd5c5cd
+    shared variable acosh_compat_warn : boolean := false;
cd5c5cd
+    shared variable atanh_compat_warn : boolean := false;
cd5c5cd
+
cd5c5cd
+    impure function FMAX (X, Y : real ) return real is
cd5c5cd
+    begin
cd5c5cd
+      assert fmax_compat_warn
cd5c5cd
+        report "MATH_REAL.FMAX is not a standards compliant function and will be removed in the future; use REALMAX instead"
cd5c5cd
+        severity note;
cd5c5cd
+      fmax_compat_warn := true;
cd5c5cd
+      return REALMAX(X, Y);
cd5c5cd
+    end FMAX;
cd5c5cd
+
cd5c5cd
+    impure function FMIN (X, Y : real ) return real is
cd5c5cd
+    begin
cd5c5cd
+      assert fmin_compat_warn
cd5c5cd
+        report "MATH_REAL.FMIN is not a standards compliant function and will be removed in the future; use REALMIN instead"
cd5c5cd
+        severity note;
cd5c5cd
+      fmin_compat_warn := true;
cd5c5cd
+      return REALMIN(X, Y);
cd5c5cd
+    end FMIN;
cd5c5cd
+
cd5c5cd
+    impure function ASIN (X : real ) return real is
cd5c5cd
+    begin
cd5c5cd
+      assert asin_compat_warn
cd5c5cd
+        report "MATH_REAL.ASIN is not a standards compliant function and will be removed in the future; use ARCSIN instead"
cd5c5cd
+        severity note;
cd5c5cd
+      asin_compat_warn := true;
cd5c5cd
+      return ARCSIN(X);
cd5c5cd
+    end ASIN; 
cd5c5cd
+
cd5c5cd
+    impure function ACOS (X : real ) return real is
cd5c5cd
+    begin
cd5c5cd
+      assert acos_compat_warn
cd5c5cd
+        report "MATH_REAL.ACOS is not a standards compliant function and will be removed in the future; use ARCCOS instead"
cd5c5cd
+        severity note;
cd5c5cd
+      acos_compat_warn := true;
cd5c5cd
+      return ARCCOS(X);
cd5c5cd
+    end ACOS;
cd5c5cd
+
cd5c5cd
+    impure function ATAN (X : real) return real is
cd5c5cd
+    begin
cd5c5cd
+      assert atan_compat_warn
cd5c5cd
+        report "MATH_REAL.ATAN is not a standards compliant function and will be removed in the future; use ARCTAN instead"
cd5c5cd
+        severity note;
cd5c5cd
+      atan_compat_warn := true;
cd5c5cd
+      return ARCTAN(X);
cd5c5cd
+    end ATAN;
cd5c5cd
+
cd5c5cd
+    impure function ATAN2 (X : real; Y : real) return real is
cd5c5cd
+    begin
cd5c5cd
+      assert atan2_compat_warn
cd5c5cd
+        report "MATH_REAL.ATAN2 is not a standards compliant function and will be removed in the future; use ARCTAN instead"
cd5c5cd
+        severity note;
cd5c5cd
+      atan2_compat_warn := true;
cd5c5cd
+      return ARCTAN(X, Y);
cd5c5cd
+    end ATAN2;
cd5c5cd
+
cd5c5cd
+    impure function ASINH (X : real) return real is
cd5c5cd
+    begin
cd5c5cd
+      assert asinh_compat_warn
cd5c5cd
+        report "MATH_REAL.ASINH is not a standards compliant function and will be removed in the future; use ARCSINH instead"
cd5c5cd
+        severity note;
cd5c5cd
+      asinh_compat_warn := true;
cd5c5cd
+      return ARCSINH(X);
cd5c5cd
+    end ASINH;
cd5c5cd
+
cd5c5cd
+    impure function ACOSH (X : real) return real is
cd5c5cd
+    begin
cd5c5cd
+      assert acosh_compat_warn
cd5c5cd
+        report "MATH_REAL.ACOSH is not a standards compliant function and will be removed in the future; use ARCCOSH instead"
cd5c5cd
+        severity note;
cd5c5cd
+      acosh_compat_warn := true;
cd5c5cd
+      return ACOSH(X);
cd5c5cd
+    end ACOSH;
cd5c5cd
+
cd5c5cd
+    impure function ATANH (X : real) return real is
cd5c5cd
+    begin
cd5c5cd
+      assert atanh_compat_warn
cd5c5cd
+        report "MATH_REAL.ATANH is not a standards compliant function and will be removed in the future; use ARCTANH instead"
cd5c5cd
+        severity note;
cd5c5cd
+      atanh_compat_warn := true;
cd5c5cd
+      return ARCTANH(X);
cd5c5cd
+    end ATANH;
cd5c5cd
 
cd5c5cd
 end  MATH_REAL;
cd5c5cd
--- vhdl/libraries/ieee/math_complex-body.vhdl.orig	2009-04-02 12:08:47.000000000 +0200
cd5c5cd
+++ vhdl/libraries/ieee/math_complex-body.vhdl	2009-04-02 12:09:18.000000000 +0200
cd5c5cd
@@ -119,7 +119,7 @@
cd5c5cd
     function COMPLEX_TO_POLAR(Z: in complex ) return complex_polar is
cd5c5cd
     	-- converts complex to complex_polar
cd5c5cd
     begin
cd5c5cd
-    		return COMPLEX_POLAR'(sqrt(z.re**2 + z.im**2),atan2(z.re,z.im));
cd5c5cd
+    		return COMPLEX_POLAR'(sqrt(z.re**2 + z.im**2),ARCTAN(z.re,z.im));
cd5c5cd
     end COMPLEX_TO_POLAR;
cd5c5cd
 
cd5c5cd
     function POLAR_TO_COMPLEX(Z: in complex_polar ) return complex is