mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 23:52:25 +00:00
MC68881, Reals, StreamDisciplines
This commit is contained in:
parent
ab6cd805d5
commit
577a398bfb
3 changed files with 510 additions and 14 deletions
183
src/lib/ulm/ulmMC68881.Mod
Normal file
183
src/lib/ulm/ulmMC68881.Mod
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
(* Oberon Library - SunOS 4.1 - AFB 8/90 *)
|
||||
(* (c) University of Ulm, Sektion Informatik, D-7900 Ulm *)
|
||||
|
||||
MODULE MC68881;
|
||||
|
||||
(* library interface to MC68881 instructions *)
|
||||
|
||||
IMPORT SYS := SYSTEM;
|
||||
|
||||
CONST
|
||||
available* = FALSE; (* TRUE if MC68881 present *)
|
||||
|
||||
(* rounding modes *)
|
||||
toNearest* = 0;
|
||||
towardZero* = 1;
|
||||
towardMinusInfinity* = 2;
|
||||
towardPlusInfinity* = 3;
|
||||
|
||||
(* rounding precision *)
|
||||
extended* = 0;
|
||||
single* = 1;
|
||||
double* = 2;
|
||||
|
||||
(* exceptions *)
|
||||
branchOnUnordered* = 0;
|
||||
signalingNotANumber* = 1;
|
||||
operandError* = 2;
|
||||
overflow* = 3;
|
||||
underflow* = 4;
|
||||
divideByZero* = 5;
|
||||
inexactOperation* = 6;
|
||||
inexactDecimalInput* = 7;
|
||||
|
||||
CONST
|
||||
floatlen* = 4; (* length of a single precision real number *)
|
||||
|
||||
(* monadic operations *)
|
||||
|
||||
PROCEDURE FACOS*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FACOS;
|
||||
|
||||
PROCEDURE FASIN*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FASIN;
|
||||
|
||||
PROCEDURE FATAN*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FATAN;
|
||||
|
||||
PROCEDURE FATANH*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FATANH;
|
||||
|
||||
PROCEDURE FCOS*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FCOS;
|
||||
|
||||
PROCEDURE FCOSH*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FCOSH;
|
||||
|
||||
PROCEDURE FETOX*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FETOX;
|
||||
|
||||
PROCEDURE FETOXM1*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FETOXM1;
|
||||
|
||||
PROCEDURE FGETEXP*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FGETEXP;
|
||||
|
||||
PROCEDURE FGETMAN*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FGETMAN;
|
||||
|
||||
PROCEDURE FLOG10*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FLOG10;
|
||||
|
||||
PROCEDURE FLOG2*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FLOG2;
|
||||
|
||||
PROCEDURE FLOGN*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FLOGN;
|
||||
|
||||
PROCEDURE FLOGNP1*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FLOGNP1;
|
||||
|
||||
PROCEDURE FSIN*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FSIN;
|
||||
|
||||
PROCEDURE FSINH*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FSINH;
|
||||
|
||||
PROCEDURE FSQRT*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FSQRT;
|
||||
|
||||
PROCEDURE FTAN*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FTAN;
|
||||
|
||||
PROCEDURE FTANH*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FTANH;
|
||||
|
||||
PROCEDURE FTENTOX*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FTENTOX;
|
||||
|
||||
PROCEDURE FTWOTOX*(x: LONGREAL) : LONGREAL;
|
||||
BEGIN
|
||||
RETURN ABS(x)
|
||||
END FTWOTOX;
|
||||
|
||||
|
||||
PROCEDURE GetExceptionEnable*(VAR exceptions: SET);
|
||||
BEGIN
|
||||
exceptions := {};
|
||||
END GetExceptionEnable;
|
||||
|
||||
PROCEDURE SetExceptionEnable*(exceptions: SET);
|
||||
BEGIN
|
||||
exceptions := {};
|
||||
END SetExceptionEnable;
|
||||
|
||||
|
||||
PROCEDURE GetRoundingMode*(VAR precision, mode: INTEGER);
|
||||
BEGIN
|
||||
precision := 1;
|
||||
mode := 2;
|
||||
END GetRoundingMode;
|
||||
|
||||
PROCEDURE SetRoundingMode*(precision, mode: INTEGER);
|
||||
BEGIN
|
||||
precision := 1;
|
||||
mode := 2;
|
||||
END SetRoundingMode;
|
||||
|
||||
|
||||
(* conversions to and from single precision (C's float);
|
||||
float must consist of at least floatlen bytes
|
||||
*)
|
||||
|
||||
PROCEDURE RealToFloat*(real: LONGREAL; VAR float: ARRAY OF BYTE);
|
||||
BEGIN
|
||||
SYS.WMOVE(SYS.ADR(real), SYS.ADR(float), floatlen DIV 4);
|
||||
END RealToFloat;
|
||||
|
||||
PROCEDURE FloatToReal*(float: ARRAY OF BYTE; VAR real: LONGREAL);
|
||||
BEGIN
|
||||
SYS.WMOVE(SYS.ADR(float), SYS.ADR(real), floatlen DIV 4);
|
||||
END FloatToReal;
|
||||
|
||||
END MC68881.
|
||||
Loading…
Add table
Add a link
Reference in a new issue