|
|
@@ -47,8 +47,8 @@ CONST
|
|
|
that case; the fill checks below make any future overflow a HALT instead
|
|
|
of wrong code. tests/check_runtime.py's branch-boundary check is what
|
|
|
caught this one. *)
|
|
|
- MaxLbl = 96 ;
|
|
|
- MaxFix = 512 ;
|
|
|
+ MaxLbl = 160 ; (* the MBF core's labels took the count past 96 *)
|
|
|
+ MaxFix = 768 ;
|
|
|
MaxNm = 15 ;
|
|
|
|
|
|
(* Offsets inside the runtime's own data block. These must agree with the
|
|
|
@@ -70,7 +70,13 @@ CONST
|
|
|
word is 0 exactly when the slot is empty - a NUL in
|
|
|
the input would otherwise be indistinguishable from
|
|
|
"nothing pushed back". Byte 30 is unused. *)
|
|
|
- D_END = 31 ; (* the block is padded to here *)
|
|
|
+ D_RSIGN = 30 ; (* 2 bytes: the result sign word; D_RESAVE (31) is its
|
|
|
+ high byte, which is the sign the reference keeps *)
|
|
|
+ D_RESAVE = 31 ; (* the high byte of D_RSIGN: the saved sign *)
|
|
|
+ D_RMANT = 32 ; (* 2 bytes: the second operand's saved MSB *)
|
|
|
+ D_RMANT1 = 33 ; (* its high byte, mixed with operand 1's sign *)
|
|
|
+ D_CVDEC = 34 ; (* 1 byte: the second exponent during alignment *)
|
|
|
+ D_END = 35 ; (* the block is padded to here *)
|
|
|
|
|
|
(* THE LOAD BIAS. Everything above is an offset into the image as this
|
|
|
compiler numbers it: the entry JMP is at image 0. But a DOS .COM is
|
|
|
@@ -127,7 +133,7 @@ VAR
|
|
|
dataAt : CARDINAL ;
|
|
|
rtBase : CARDINAL ;
|
|
|
built : BOOLEAN ;
|
|
|
- entNm : ARRAY [0..21] OF ARRAY [0..MaxNm] OF CHAR ;
|
|
|
+ entNm : ARRAY [0..23] OF ARRAY [0..MaxNm] OF CHAR ;
|
|
|
|
|
|
(* ---------------------------------------------------------------- *)
|
|
|
(* name helpers *)
|
|
|
@@ -577,6 +583,103 @@ PROCEDURE CmpDx0 ; BEGIN B (83H) ; B (0FAH) ; B (0) END CmpDx0 ; (* 83 FA 00 *
|
|
|
PROCEDURE CmpAl0 ; BEGIN B (3CH) ; B (0) END CmpAl0 ; (* 3C 00 *)
|
|
|
PROCEDURE AndDhImm (v : CARDINAL) ;
|
|
|
BEGIN B (80H) ; B (0E6H) ; B (v MOD 256) END AndDhImm ; (* 80 E6 imm *)
|
|
|
+
|
|
|
+(* --- the MBF core's register moves and flag helpers --------------------- *)
|
|
|
+PROCEDURE MovAxCx ; BEGIN B (89H) ; B (0C8H) END MovAxCx ; (* AX:=CX *)
|
|
|
+PROCEDURE MovBxSi ; BEGIN B (89H) ; B (0F3H) END MovBxSi ; (* BX:=SI *)
|
|
|
+PROCEDURE MovDxDi ; BEGIN B (89H) ; B (0FAH) END MovDxDi ; (* DX:=DI *)
|
|
|
+PROCEDURE MovBxCx ; BEGIN B (89H) ; B (0CBH) END MovBxCx ; (* BX:=CX *)
|
|
|
+PROCEDURE MovBxDx ; BEGIN B (89H) ; B (0D3H) END MovBxDx ; (* BX:=DX *)
|
|
|
+PROCEDURE MovAhBh ; BEGIN B (88H) ; B (0FCH) END MovAhBh ; (* AH:=BH *)
|
|
|
+PROCEDURE MovAhBl ; BEGIN B (88H) ; B (0DCH) END MovAhBl ; (* AH:=BL *)
|
|
|
+PROCEDURE MovBlBh ; BEGIN B (88H) ; B (0FBH) END MovBlBh ; (* BL:=BH *)
|
|
|
+PROCEDURE MovBhDl ; BEGIN B (88H) ; B (0D7H) END MovBhDl ; (* BH:=DL *)
|
|
|
+PROCEDURE MovDlDh ; BEGIN B (88H) ; B (0F2H) END MovDlDh ; (* DL:=DH *)
|
|
|
+PROCEDURE MovDhDl ; BEGIN B (88H) ; B (0D6H) END MovDhDl ; (* DH:=DL *)
|
|
|
+PROCEDURE MovDlBh ; BEGIN B (88H) ; B (0FAH) END MovDlBh ; (* DL:=BH *)
|
|
|
+PROCEDURE MovBlAh ; BEGIN B (88H) ; B (0E3H) END MovBlAh ; (* BL:=AH *)
|
|
|
+PROCEDURE XchgAxCx ; BEGIN B (91H) END XchgAxCx ; (* XCHG AX,CX *)
|
|
|
+PROCEDURE XchgBxSi ; BEGIN B (87H) ; B (0F3H) END XchgBxSi ;
|
|
|
+PROCEDURE XchgDxDi ; BEGIN B (87H) ; B (0FAH) END XchgDxDi ;
|
|
|
+PROCEDURE XchgAhCh ; BEGIN B (86H) ; B (0ECH) END XchgAhCh ;
|
|
|
+PROCEDURE XorDhDh ; BEGIN B (30H) ; B (0F6H) END XorDhDh ; (* XOR DH,DH *)
|
|
|
+PROCEDURE XorAhAh ; BEGIN B (30H) ; B (0E4H) END XorAhAh ; (* XOR AH,AH *)
|
|
|
+PROCEDURE NotAh ; BEGIN B (0F6H) ; B (0D4H) END NotAh ; (* NOT AH *)
|
|
|
+PROCEDURE NotBx ; BEGIN B (0F7H) ; B (0D3H) END NotBx ; (* NOT BX *)
|
|
|
+PROCEDURE NotDx ; BEGIN B (0F7H) ; B (0D2H) END NotDx ; (* NOT DX *)
|
|
|
+PROCEDURE ShrDx1 ; BEGIN B (0D1H) ; B (0EAH) END ShrDx1 ; (* SHR DX,1 *)
|
|
|
+PROCEDURE RcrBx1 ; BEGIN B (0D1H) ; B (0DBH) END RcrBx1 ; (* RCR BX,1 *)
|
|
|
+PROCEDURE RcrDx1 ; BEGIN B (0D1H) ; B (0DAH) END RcrDx1 ; (* RCR DX,1 *)
|
|
|
+PROCEDURE RcrAh1 ; BEGIN B (0D0H) ; B (0DCH) END RcrAh1 ; (* RCR AH,1 *)
|
|
|
+PROCEDURE RclBx1 ; BEGIN B (0D1H) ; B (0D3H) END RclBx1 ; (* RCL BX,1 *)
|
|
|
+PROCEDURE RclDx1 ; BEGIN B (0D1H) ; B (0D2H) END RclDx1 ; (* RCL DX,1 *)
|
|
|
+PROCEDURE ShlAh1 ; BEGIN B (0D0H) ; B (0E4H) END ShlAh1 ; (* SHL AH,1 *)
|
|
|
+PROCEDURE IncAl ; BEGIN B (0FEH) ; B (0C0H) END IncAl ; (* INC AL *)
|
|
|
+PROCEDURE DecCl ; BEGIN B (0FEH) ; B (0C9H) END DecCl ; (* DEC CL *)
|
|
|
+PROCEDURE Stc ; BEGIN B (0F9H) END Stc ; (* STC *)
|
|
|
+PROCEDURE CmpAlCl ; BEGIN B (38H) ; B (0C8H) END CmpAlCl ; (* CMP AL,CL *)
|
|
|
+PROCEDURE CmpCl0 ; BEGIN B (80H) ; B (0F9H) ; B (0) END CmpCl0 ; (* 80 F9 00 *)
|
|
|
+PROCEDURE MovBhBl ; BEGIN B (88H) ; B (0DFH) END MovBhBl ; (* BH:=BL *)
|
|
|
+PROCEDURE SubAhCh ; BEGIN B (28H) ; B (0ECH) END SubAhCh ; (* AH:=AH-CH *)
|
|
|
+PROCEDURE MovClImm (v : CARDINAL) ;
|
|
|
+BEGIN B (0B1H) ; B (v MOD 256) END MovClImm ;
|
|
|
+PROCEDURE CmpClImm (v : CARDINAL) ;
|
|
|
+BEGIN B (80H) ; B (0F9H) ; B (v MOD 256) END CmpClImm ;
|
|
|
+PROCEDURE SubClAl ; BEGIN B (28H) ; B (0C1H) END SubClAl ; (* CL:=CL-AL *)
|
|
|
+PROCEDURE SubClImm (v : CARDINAL) ;
|
|
|
+BEGIN B (80H) ; B (0E9H) ; B (v MOD 256) END SubClImm ;
|
|
|
+PROCEDURE AddAhCh ; BEGIN B (00H) ; B (0ECH) END AddAhCh ; (* AH:=AH+CH *)
|
|
|
+PROCEDURE AddAhImm (v : CARDINAL) ;
|
|
|
+BEGIN B (80H) ; B (0C4H) ; B (v MOD 256) END AddAhImm ;
|
|
|
+PROCEDURE AdcBxSi ; BEGIN B (11H) ; B (0F3H) END AdcBxSi ;
|
|
|
+PROCEDURE AdcDxDi ; BEGIN B (11H) ; B (0FAH) END AdcDxDi ;
|
|
|
+PROCEDURE AdcBxImm (v : CARDINAL) ;
|
|
|
+BEGIN B (83H) ; B (0D3H) ; B (v MOD 256) END AdcBxImm ;
|
|
|
+PROCEDURE AdcDxImm (v : CARDINAL) ;
|
|
|
+BEGIN B (83H) ; B (0D2H) ; B (v MOD 256) END AdcDxImm ;
|
|
|
+PROCEDURE SbbBxSi ; BEGIN B (19H) ; B (0F3H) END SbbBxSi ;
|
|
|
+PROCEDURE SbbDxDi ; BEGIN B (19H) ; B (0FAH) END SbbDxDi ;
|
|
|
+PROCEDURE OrDiImm (v : CARDINAL) ;
|
|
|
+BEGIN B (81H) ; B (0CFH) ; W (v) END OrDiImm ; (* DI:=DI OR imm16 *)
|
|
|
+PROCEDURE OrDhImm (v : CARDINAL) ;
|
|
|
+BEGIN B (80H) ; B (0CEH) ; B (v MOD 256) END OrDhImm ;
|
|
|
+PROCEDURE TestDhImm (v : CARDINAL) ;
|
|
|
+BEGIN B (0F6H) ; B (0C6H) ; B (v MOD 256) END TestDhImm ;
|
|
|
+PROCEDURE StDataImm (delta, v : CARDINAL) ;
|
|
|
+BEGIN B (0C7H) ; B (06H) ; Dd (delta) ; W (v) END StDataImm ;
|
|
|
+PROCEDURE StDataCl (delta : CARDINAL) ;
|
|
|
+BEGIN B (88H) ; B (0EH) ; Dd (delta) END StDataCl ;
|
|
|
+PROCEDURE StDataDi (delta : CARDINAL) ;
|
|
|
+BEGIN B (89H) ; B (3EH) ; Dd (delta) END StDataDi ;
|
|
|
+PROCEDURE LdAlData (delta : CARDINAL) ;
|
|
|
+BEGIN B (0A0H) ; Dd (delta) END LdAlData ;
|
|
|
+PROCEDURE LdClData (delta : CARDINAL) ;
|
|
|
+BEGIN B (8AH) ; B (0EH) ; Dd (delta) END LdClData ;
|
|
|
+PROCEDURE XorDiData (delta : CARDINAL) ;
|
|
|
+BEGIN B (33H) ; B (3EH) ; Dd (delta) END XorDiData ; (* XOR DI,[Vx] *)
|
|
|
+PROCEDURE XorDataDh (delta : CARDINAL) ;
|
|
|
+BEGIN B (30H) ; B (36H) ; Dd (delta) END XorDataDh ; (* XOR [Vx],DH *)
|
|
|
+PROCEDURE XorDhData (delta : CARDINAL) ;
|
|
|
+BEGIN B (32H) ; B (36H) ; Dd (delta) END XorDhData ; (* XOR DH,[Vx] *)
|
|
|
+PROCEDURE XorDataImm (delta, v : CARDINAL) ;
|
|
|
+BEGIN B (80H) ; B (36H) ; Dd (delta) ; B (v MOD 256) END XorDataImm ;
|
|
|
+PROCEDURE AndDataImm (delta, v : CARDINAL) ;
|
|
|
+BEGIN B (80H) ; B (26H) ; Dd (delta) ; B (v MOD 256) END AndDataImm ;
|
|
|
+PROCEDURE TestDataImm (delta, v : CARDINAL) ;
|
|
|
+BEGIN B (0F6H) ; B (06H) ; Dd (delta) ; B (v MOD 256) END TestDataImm ;
|
|
|
+PROCEDURE LdCxSiOff (off : CARDINAL) ;
|
|
|
+BEGIN B (8BH) ; B (4CH) ; B (off MOD 256) END LdCxSiOff ;
|
|
|
+PROCEDURE LdDxSiOff (off : CARDINAL) ;
|
|
|
+BEGIN B (8BH) ; B (54H) ; B (off MOD 256) END LdDxSiOff ;
|
|
|
+PROCEDURE LdCxDiOff (off : CARDINAL) ;
|
|
|
+BEGIN B (8BH) ; B (4DH) ; B (off MOD 256) END LdCxDiOff ;
|
|
|
+PROCEDURE LdSiDiOff (off : CARDINAL) ;
|
|
|
+BEGIN B (8BH) ; B (75H) ; B (off MOD 256) END LdSiDiOff ;
|
|
|
+PROCEDURE LdDiDiOff (off : CARDINAL) ;
|
|
|
+BEGIN B (8BH) ; B (7DH) ; B (off MOD 256) END LdDiDiOff ;
|
|
|
+PROCEDURE PushBp4 ; BEGIN B (0FFH) ; B (76H) ; B (4) END PushBp4 ; (* PUSH [BP+4] *)
|
|
|
+PROCEDURE Call (nm : ARRAY OF CHAR) ;
|
|
|
+BEGIN B (0E8H) ; AddFix (1, rpos, nm, 0) ; W (0) END Call ;
|
|
|
PROCEDURE StVxBx (delta : CARDINAL ) ;
|
|
|
(* 89 1E lo hi: MOV [Vx],BX - the mirror of LdBxVx above, and it must use the
|
|
|
same mod=00 / rm=110 and the same Dd fixup kind, or one of the two
|
|
|
@@ -1482,6 +1585,135 @@ BEGIN
|
|
|
MovSpBp ; PopBp ; RetR
|
|
|
END EmitRealFromInt ;
|
|
|
|
|
|
+PROCEDURE EmitRealAddSub ;
|
|
|
+(* readd/resub, TPSRC2 1421-1530, transcribed.
|
|
|
+
|
|
|
+ ABI: [BP+4] is the address of a 12-byte block holding a (6 bytes) then b
|
|
|
+ (6 bytes); the result overwrites a. Both operands are read before the
|
|
|
+ result is written, so the in-place destination is safe. The reference
|
|
|
+ keeps a in AX/BX/DX and b in CX/SI/DI, with AL the exponent, AH+BX the low
|
|
|
+ mantissa and DX the high 16 carrying the sign in DH bit 7. The scratch
|
|
|
+ bytes are the reference's own (resign/resave, remant/remant1, cvdecexp).
|
|
|
+
|
|
|
+ The sign of b is toggled for subtraction with XOR DI,resign, exactly as
|
|
|
+ resub does, and the rest is one shared core. An exponent overflow leaves
|
|
|
+ through the reference's STC + RET; no caller consumes that yet. *)
|
|
|
+BEGIN
|
|
|
+ M ("real_add") ;
|
|
|
+ PushBp ; MovBpSp ;
|
|
|
+ PushBx ; PushDx ; PushSi ; PushDi ;
|
|
|
+ PushBp4 ; (* keep the block address for the store *)
|
|
|
+ MovSiBp4 ;
|
|
|
+ LdAxSi ;
|
|
|
+ LdCxSiOff (2) ; LdDxSiOff (4) ;
|
|
|
+ MovBxCx ;
|
|
|
+ MovDiSi ;
|
|
|
+ LdCxDiOff (6) ; LdSiDiOff (8) ; LdDiDiOff (10) ;
|
|
|
+ StDataImm (D_RSIGN, 0) ;
|
|
|
+ Call ("rd_core") ;
|
|
|
+ PopDi ;
|
|
|
+ StDiAx ; StDiOffBx (2) ; StDiOffDx (4) ;
|
|
|
+ PopDi ; PopSi ; PopDx ; PopBx ;
|
|
|
+ MovSpBp ; PopBp ; RetR ;
|
|
|
+
|
|
|
+ M ("real_sub") ;
|
|
|
+ PushBp ; MovBpSp ;
|
|
|
+ PushBx ; PushDx ; PushSi ; PushDi ;
|
|
|
+ PushBp4 ;
|
|
|
+ MovSiBp4 ;
|
|
|
+ LdAxSi ;
|
|
|
+ LdCxSiOff (2) ; LdDxSiOff (4) ;
|
|
|
+ MovBxCx ;
|
|
|
+ MovDiSi ;
|
|
|
+ LdCxDiOff (6) ; LdSiDiOff (8) ; LdDiDiOff (10) ;
|
|
|
+ StDataImm (D_RSIGN, 8000H) ;
|
|
|
+ Call ("rd_core") ;
|
|
|
+ PopDi ;
|
|
|
+ StDiAx ; StDiOffBx (2) ; StDiOffDx (4) ;
|
|
|
+ PopDi ; PopSi ; PopDx ; PopBx ;
|
|
|
+ MovSpBp ; PopBp ; RetR ;
|
|
|
+
|
|
|
+ M ("rd_core") ;
|
|
|
+ CmpCl0 ;
|
|
|
+ Je8 ("raret") ;
|
|
|
+ XorDiData (D_RSIGN) ;
|
|
|
+ CmpAl0 ;
|
|
|
+ Jne8 ("ranotriv") ;
|
|
|
+ M ("raretn2") ;
|
|
|
+ MovAxCx ; MovBxSi ; MovDxDi ;
|
|
|
+ M ("raret") ;
|
|
|
+ RetR ;
|
|
|
+ M ("ranotriv") ;
|
|
|
+ CmpAlCl ;
|
|
|
+ Jbe8 ("ranoswap") ;
|
|
|
+ XchgAxCx ; XchgBxSi ; XchgDxDi ;
|
|
|
+ M ("ranoswap") ;
|
|
|
+ StDataCl (D_CVDEC) ;
|
|
|
+ SubClAl ;
|
|
|
+ CmpClImm (28H) ;
|
|
|
+ Jb8 ("ranoundr") ;
|
|
|
+ LdClData (D_CVDEC) ;
|
|
|
+ Jmp8 ("raretn2") ;
|
|
|
+ M ("ranoundr") ;
|
|
|
+ StDataDi (D_RSIGN) ; (* resign; D_RESAVE is its high byte *)
|
|
|
+ AndDataImm (D_RESAVE, 80H) ;
|
|
|
+ StDataDi (D_RMANT) ;
|
|
|
+ XorDataDh (D_RMANT1) ; (* sign1 XOR sign2 in the high byte *)
|
|
|
+ OrDiImm (8000H) ; (* b's hidden 1 *)
|
|
|
+ OrDhImm (80H) ; (* a's hidden 1 *)
|
|
|
+ M ("raadj16l") ;
|
|
|
+ CmpClImm (10H) ;
|
|
|
+ Jb8 ("raadj8") ;
|
|
|
+ MovAhBh ; MovBxDx ; XorDxDx ; SubClImm (10H) ;
|
|
|
+ Jmp8 ("raadj16l") ;
|
|
|
+ M ("raadj8") ;
|
|
|
+ CmpClImm (08H) ;
|
|
|
+ Jb8 ("raadj8l") ;
|
|
|
+ MovAhBl ; MovBlBh ; MovBhDl ; MovDlDh ; XorDhDh ; SubClImm (08H) ;
|
|
|
+ M ("raadj8l") ;
|
|
|
+ CmpCl0 ;
|
|
|
+ Je8 ("raadjend") ;
|
|
|
+ M ("raadj1l") ;
|
|
|
+ ShrDx1 ; RcrBx1 ; RcrAh1 ; DecCl ; Jne8 ("raadj1l") ;
|
|
|
+ M ("raadjend") ;
|
|
|
+ LdAlData (D_CVDEC) ;
|
|
|
+ TestDataImm (D_RMANT1, 80H) ;
|
|
|
+ Jne8 ("radosub") ;
|
|
|
+ AddAhCh ; AdcBxSi ; AdcDxDi ;
|
|
|
+ Jae8 ("rasign") ;
|
|
|
+ RcrDx1 ; RcrBx1 ; RcrAh1 ; IncAl ; Jne8 ("rasign") ;
|
|
|
+ Stc ; RetR ;
|
|
|
+ M ("radosub") ;
|
|
|
+ XchgAhCh ; XchgBxSi ; XchgDxDi ;
|
|
|
+ SubAhCh ; SbbBxSi ; SbbDxDi ;
|
|
|
+ Jae8 ("ranoneg") ;
|
|
|
+ XorDataImm (D_RESAVE, 80H) ;
|
|
|
+ NotAh ; NotBx ; NotDx ;
|
|
|
+ AddAhImm (1) ; AdcBxImm (0) ; AdcDxImm (0) ;
|
|
|
+ M ("ranoneg") ;
|
|
|
+ MovClImm (5) ;
|
|
|
+ M ("ranrm8l") ;
|
|
|
+ CmpDh0 ;
|
|
|
+ Jne8 ("ranrm1l") ;
|
|
|
+ MovDhDl ; MovDlBh ; MovBhBl ; MovBlAh ; XorAhAh ;
|
|
|
+ SubAl (08H) ;
|
|
|
+ Jb8 ("razero") ;
|
|
|
+ DecCl ;
|
|
|
+ Jne8 ("ranrm8l") ;
|
|
|
+ Jmp8 ("razero") ;
|
|
|
+ M ("ranrm1l") ;
|
|
|
+ TestDhImm (80H) ;
|
|
|
+ Jne8 ("rasign") ;
|
|
|
+ ShlAh1 ; RclBx1 ; RclDx1 ; DecAl ; Jne8 ("ranrm1l") ;
|
|
|
+ M ("razero") ;
|
|
|
+ XorAxAx ; XorBxBx ; XorDxDx ;
|
|
|
+ RetR ;
|
|
|
+ M ("rasign") ;
|
|
|
+ AndDhImm (7FH) ;
|
|
|
+ XorDhData (D_RESAVE) ;
|
|
|
+ RetR
|
|
|
+END EmitRealAddSub ;
|
|
|
+
|
|
|
PROCEDURE EmitData ;
|
|
|
(* The runtime's data block. The D_ constants name the offsets in it and are
|
|
|
ASSERTED against what is emitted here, three ways: the starting offset of
|
|
|
@@ -1518,6 +1750,18 @@ BEGIN
|
|
|
HALT
|
|
|
END ;
|
|
|
B (0) ; B (0) ; (* the pushback slot, empty to begin with *)
|
|
|
+ IF dataAt + D_RSIGN # rpos THEN
|
|
|
+ HALT
|
|
|
+ END ;
|
|
|
+ B (0) ; B (0) ; (* resign/resave *)
|
|
|
+ IF dataAt + D_RMANT # rpos THEN
|
|
|
+ HALT
|
|
|
+ END ;
|
|
|
+ B (0) ; B (0) ; (* remant/remant1 *)
|
|
|
+ IF dataAt + D_CVDEC # rpos THEN
|
|
|
+ HALT
|
|
|
+ END ;
|
|
|
+ B (0) ;
|
|
|
WHILE rpos < dataAt + D_END DO
|
|
|
B (0)
|
|
|
END ;
|
|
|
@@ -1578,7 +1822,7 @@ BEGIN
|
|
|
EmitRdChar ; EmitRdBool ; EmitRdLn ;
|
|
|
EmitGetCh ; EmitUnGetCh ;
|
|
|
EmitRdStr ; EmitStrStore ; EmitCmpStr ; EmitStrCat ;
|
|
|
- EmitRealFromInt ;
|
|
|
+ EmitRealFromInt ; EmitRealAddSub ;
|
|
|
EmitData ;
|
|
|
FixUp ;
|
|
|
SetStr (entNm [0], "initmem") ;
|
|
|
@@ -1603,6 +1847,8 @@ BEGIN
|
|
|
SetStr (entNm [19], "strcat") ;
|
|
|
SetStr (entNm [20], "wrintw") ;
|
|
|
SetStr (entNm [21], "real_from_int") ;
|
|
|
+ SetStr (entNm [22], "real_add") ;
|
|
|
+ SetStr (entNm [23], "real_sub") ;
|
|
|
built := TRUE
|
|
|
END RT_Build ;
|
|
|
|
|
|
@@ -1630,7 +1876,7 @@ BEGIN
|
|
|
IF NOT built THEN
|
|
|
RT_Build (0)
|
|
|
END ;
|
|
|
- IF i > 21 THEN
|
|
|
+ IF i > 23 THEN
|
|
|
RETURN 0
|
|
|
END ;
|
|
|
RETURN rtBase + LblOff (entNm [i])
|