aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/openieee/math_real-body.vhdl
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2015-12-20 13:56:08 +0100
committerTristan Gingold <gingold@adacore.com>2015-12-20 13:58:11 +0100
commit92ac42fcf39d5dac4529d939a49437b2a7afe4c2 (patch)
tree2ec07dca7950bdc9ab67bba23700ccc42f8c2385 /libraries/openieee/math_real-body.vhdl
parentd3623693949f9bcfe7917f9d059e839a95843519 (diff)
downloadghdl-92ac42fcf39d5dac4529d939a49437b2a7afe4c2.tar.gz
ghdl-92ac42fcf39d5dac4529d939a49437b2a7afe4c2.tar.bz2
ghdl-92ac42fcf39d5dac4529d939a49437b2a7afe4c2.zip
openieee: complete math_real (and fix uniform).
Diffstat (limited to 'libraries/openieee/math_real-body.vhdl')
-rw-r--r--libraries/openieee/math_real-body.vhdl155
1 files changed, 146 insertions, 9 deletions
diff --git a/libraries/openieee/math_real-body.vhdl b/libraries/openieee/math_real-body.vhdl
index 1d7a154af..e825a7801 100644
--- a/libraries/openieee/math_real-body.vhdl
+++ b/libraries/openieee/math_real-body.vhdl
@@ -46,22 +46,60 @@ package body MATH_REAL is
function TRUNC (X : REAL) return REAL is
begin
assert false severity failure;
- end TRUNC;
+ end;
+
+ function fmod (X, Y : REAL) return REAL;
+ attribute foreign of fmod : function is "VHPIDIRECT fmod";
+
+ function fmod (X, Y : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function "mod" (X, Y : REAL) return REAL
+ is
+ variable res : real;
+ begin
+ assert y /= 0.0 report "ieee.math_real.""mod"": dividend is 0.0"
+ severity failure;
+ res := fmod (x, y);
+ if res /= 0.0 then
+ if x > 0.0 xor y > 0.0 then
+ res := res + y;
+ end if;
+ end if;
+ return res;
+ end "mod";
+
+ function REALMAX (X, Y : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function REALMIN (X, Y : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
procedure UNIFORM (SEED1, SEED2 : inout POSITIVE; X : out REAL)
is
variable z, k : Integer;
+ variable s1, s2 : Integer;
begin
k := seed1 / 53668;
- seed1 := 40014 * (seed1 - k * 53668) - k * 12211;
- if seed1 < 0 then
- seed1 := seed1 + 2147483563;
+ s1 := 40014 * (seed1 - k * 53668) - k * 12211;
+ if s1 < 0 then
+ seed1 := s1 + 2147483563;
+ else
+ seed1 := s1;
end if;
k := seed2 / 52774;
- seed2 := 40692 * (seed2 - k * 52774) - k * 3791;
- if seed2 < 0 then
- seed2 := seed2 + 2147483399;
+ s2 := 40692 * (seed2 - k * 52774) - k * 3791;
+ if s2 < 0 then
+ seed2 := s2 + 2147483399;
+ else
+ seed2 := s2;
end if;
z := seed1 - seed2;
@@ -72,15 +110,114 @@ package body MATH_REAL is
x := real (z) * 4.656613e-10;
end UNIFORM;
+ function SQRT (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function CBRT (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function "**" (X : INTEGER; Y : REAL) return REAL is
+ begin
+ return real (x) ** y;
+ end "**";
+
+ function "**" (X : REAL; Y : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function EXP (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function LOG (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function LOG2 (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function LOG10 (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function LOG (X : REAL; BASE : REAL) return REAL is
+ begin
+ return log (x) / log (base);
+ end log;
+
function SIN (X : REAL) return REAL is
begin
assert false severity failure;
- end SIN;
+ end;
function COS (X : REAL) return REAL is
begin
assert false severity failure;
- end COS;
+ end;
+
+ function TAN (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function ARCSIN (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function ARCCOS (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function ARCTAN (Y : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function ARCTAN (Y, X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function SINH (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function COSH (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function TANH (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+ function ARCSINH (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function ARCCOSH (X : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
+
+ function ARCTANH (Y : REAL) return REAL is
+ begin
+ assert false severity failure;
+ end;
end MATH_REAL;