mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 16:52:25 +00:00
183 lines
3.6 KiB
Modula-2
183 lines
3.6 KiB
Modula-2
(* Oberon Library - SunOS 4.1 - AFB 8/90 *)
|
|
(* (c) University of Ulm, Sektion Informatik, D-7900 Ulm *)
|
|
|
|
MODULE ulmMC68881;
|
|
|
|
(* 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 SYS.BYTE);
|
|
BEGIN
|
|
(*SYS.WMOVE(SYS.ADR(real), SYS.ADR(float), floatlen DIV 4);*)
|
|
END RealToFloat;
|
|
|
|
PROCEDURE FloatToReal*(float: ARRAY OF SYS.BYTE; VAR real: LONGREAL);
|
|
BEGIN
|
|
(*SYS.WMOVE(SYS.ADR(float), SYS.ADR(real), floatlen DIV 4);*)
|
|
END FloatToReal;
|
|
|
|
END ulmMC68881.
|