|
@@ -2,9 +2,9 @@ MODULE ARMRuntime;
|
|
IMPORT SYSTEM, FPE64;
|
|
IMPORT SYSTEM, FPE64;
|
|
|
|
|
|
CONST
|
|
CONST
|
|
- B = 127;
|
|
|
|
- C = 800000H;
|
|
|
|
- E = 100H;
|
|
|
|
|
|
+ B = 127;
|
|
|
|
+ C = 800000H;
|
|
|
|
+ E = 100H;
|
|
S = LONGINT(80000000H); (* used by VFP unit emulation *)
|
|
S = LONGINT(80000000H); (* used by VFP unit emulation *)
|
|
MAXREAL = LONGINT(7F7FFFFFH);
|
|
MAXREAL = LONGINT(7F7FFFFFH);
|
|
|
|
|
|
@@ -327,7 +327,7 @@ TYPE
|
|
BIC R0, R0, #S ; clear the sign bit
|
|
BIC R0, R0, #S ; clear the sign bit
|
|
END AbsF32;
|
|
END AbsF32;
|
|
|
|
|
|
- PROCEDURE AddF32*(x, y: FLOAT32): FLOAT32;
|
|
|
|
|
|
+ PROCEDURE AddF32*(x, y: FLOAT32): FLOAT32;
|
|
VAR xe, ye, s: LONGINT;
|
|
VAR xe, ye, s: LONGINT;
|
|
BEGIN
|
|
BEGIN
|
|
IF SYSTEM.NULL(x) = TRUE THEN x := y
|
|
IF SYSTEM.NULL(x) = TRUE THEN x := y
|
|
@@ -394,8 +394,8 @@ TYPE
|
|
BEGIN RETURN FPE64.Fix(SYSTEM.VAL(FPE64.Float64,x))
|
|
BEGIN RETURN FPE64.Fix(SYSTEM.VAL(FPE64.Float64,x))
|
|
END ConvS32F64;
|
|
END ConvS32F64;
|
|
|
|
|
|
- PROCEDURE ConvF32F64*(x: FLOAT64): REAL;
|
|
|
|
- BEGIN RETURN FPE64.Single(SYSTEM.VAL(FPE64.Float64,x))
|
|
|
|
|
|
+ PROCEDURE ConvF32F64*(x: FLOAT64): FLOAT32;
|
|
|
|
+ BEGIN RETURN SYSTEM.VAL(FLOAT32, FPE64.Single(SYSTEM.VAL(FPE64.Float64,x)))
|
|
END ConvF32F64;
|
|
END ConvF32F64;
|
|
|
|
|
|
PROCEDURE ConvF64F32*(x: REAL): FLOAT64;
|
|
PROCEDURE ConvF64F32*(x: REAL): FLOAT64;
|
|
@@ -403,6 +403,12 @@ TYPE
|
|
BEGIN FPE64.Double(x,SYSTEM.VAL(FPE64.Float64,z)); RETURN z
|
|
BEGIN FPE64.Double(x,SYSTEM.VAL(FPE64.Float64,z)); RETURN z
|
|
END ConvF64F32;
|
|
END ConvF64F32;
|
|
|
|
|
|
|
|
+ PROCEDURE ConvF64S64*(x: HUGEINT): FLOAT64;
|
|
|
|
+ VAR flt: FLOAT64;
|
|
|
|
+ BEGIN
|
|
|
|
+ FPE64.FloatInt64(x, SYSTEM.VAL(FPE64.Float64, flt)); RETURN flt
|
|
|
|
+ END ConvF64S64;
|
|
|
|
+
|
|
PROCEDURE ConvF64S32*(x: LONGINT): FLOAT64;
|
|
PROCEDURE ConvF64S32*(x: LONGINT): FLOAT64;
|
|
VAR flt: FLOAT64;
|
|
VAR flt: FLOAT64;
|
|
BEGIN FPE64.Float(x, SYSTEM.VAL(FPE64.Float64,flt)); RETURN flt
|
|
BEGIN FPE64.Float(x, SYSTEM.VAL(FPE64.Float64,flt)); RETURN flt
|
|
@@ -542,6 +548,11 @@ TYPE
|
|
RETURN x
|
|
RETURN x
|
|
END ConvF32S32;
|
|
END ConvF32S32;
|
|
|
|
|
|
|
|
+ PROCEDURE ConvF32S64*(x: HUGEINT): FLOAT32;
|
|
|
|
+ BEGIN
|
|
|
|
+ RETURN ConvF32F64(ConvF64S64(x))
|
|
|
|
+ END ConvF32S64;
|
|
|
|
+
|
|
(* ---- STRING OPERATIONS ---- *)
|
|
(* ---- STRING OPERATIONS ---- *)
|
|
|
|
|
|
(** compare two strings
|
|
(** compare two strings
|