|
|
@@ -190,10 +190,10 @@ EXCEPTION errorfound;
|
|
|
|
|
|
(* $[+ remove procedure names *)
|
|
|
|
|
|
-PROCEDURE CodeAssert(param1: BOOLEAN);
|
|
|
+PROCEDURE CodeAssert(cond: BOOLEAN);
|
|
|
EXCEPTION CE;
|
|
|
BEGIN
|
|
|
- IF NOT param1 THEN RAISE CE END;
|
|
|
+ IF NOT cond THEN RAISE CE END;
|
|
|
END CodeAssert;
|
|
|
|
|
|
PROCEDURE FlushCodeWindow;
|
|
|
@@ -207,41 +207,41 @@ END FlushCodeWindow;
|
|
|
|
|
|
PROCEDURE SeekCodeWindow;
|
|
|
VAR
|
|
|
- local2 : CARDINAL;
|
|
|
- local3 : CARDINAL;
|
|
|
- local4 : CARDINAL;
|
|
|
+ baseSec : CARDINAL;
|
|
|
+ alignedBase : CARDINAL;
|
|
|
+ needBytes : CARDINAL;
|
|
|
BEGIN
|
|
|
- local2 := nextEmitPos DIV 512;
|
|
|
- local3 := (local2 - ORD(local2 <> 0)) * 512;
|
|
|
- IF local3 < windowBase THEN
|
|
|
- local4 := windowBase - local3;
|
|
|
+ baseSec := nextEmitPos DIV 512;
|
|
|
+ alignedBase := (baseSec - ORD(baseSec <> 0)) * 512;
|
|
|
+ IF alignedBase < windowBase THEN
|
|
|
+ needBytes := windowBase - alignedBase;
|
|
|
IF nextEmitPos > windowBase THEN
|
|
|
- MOVE(ADDRESS(codeWindow), ADDRESS(codeWindow)+local4, nextEmitPos-windowBase);
|
|
|
+ MOVE(ADDRESS(codeWindow), ADDRESS(codeWindow)+needBytes, nextEmitPos-windowBase);
|
|
|
END;
|
|
|
- Files.SetPos(Scanner.codeFile, LONG(local3));
|
|
|
- CodeAssert(Files.ReadBytes(Scanner.codeFile, ADDRESS(codeWindow), local4) = local4);
|
|
|
- windowBase := local3;
|
|
|
+ Files.SetPos(Scanner.codeFile, LONG(alignedBase));
|
|
|
+ CodeAssert(Files.ReadBytes(Scanner.codeFile, ADDRESS(codeWindow), needBytes) = needBytes);
|
|
|
+ windowBase := alignedBase;
|
|
|
windowLimit := windowBase + 4096;
|
|
|
END;
|
|
|
END SeekCodeWindow;
|
|
|
|
|
|
-PROCEDURE PeekCodeByte(param1: CARDINAL): CARDINAL;
|
|
|
+PROCEDURE PeekCodeByte(pos: CARDINAL): CARDINAL;
|
|
|
VAR byte: BYTE;
|
|
|
BEGIN
|
|
|
- IF param1 >= windowBase THEN RETURN CARDINAL(codeWindow^[param1-windowBase]) END;
|
|
|
- Files.SetPos(Scanner.codeFile, LONG(param1));
|
|
|
+ IF pos >= windowBase THEN RETURN CARDINAL(codeWindow^[pos-windowBase]) END;
|
|
|
+ Files.SetPos(Scanner.codeFile, LONG(pos));
|
|
|
Files.ReadByte(Scanner.codeFile, byte);
|
|
|
RETURN CARDINAL(byte)
|
|
|
END PeekCodeByte;
|
|
|
|
|
|
-PROCEDURE PokeCodeByte(param2: BYTE; param1: CARDINAL);
|
|
|
+PROCEDURE PokeCodeByte(value: BYTE; pos: CARDINAL);
|
|
|
BEGIN
|
|
|
- IF param1 >= windowBase THEN
|
|
|
- codeWindow^[param1-windowBase] := param2;
|
|
|
+ IF pos >= windowBase THEN
|
|
|
+ codeWindow^[pos-windowBase] := value;
|
|
|
RETURN
|
|
|
END;
|
|
|
- Files.SetPos(Scanner.codeFile, LONG(param1));
|
|
|
- Files.WriteByte(Scanner.codeFile, param2);
|
|
|
+ Files.SetPos(Scanner.codeFile, LONG(pos));
|
|
|
+ Files.WriteByte(Scanner.codeFile, value);
|
|
|
END PokeCodeByte;
|
|
|
|
|
|
PROCEDURE CheckCodeOverflow;
|
|
|
@@ -249,37 +249,37 @@ BEGIN
|
|
|
IF nextEmitPos >= codepos THEN RAISE errorfound END;
|
|
|
END CheckCodeOverflow;
|
|
|
|
|
|
-PROCEDURE Emit1(param1: BYTE);
|
|
|
+PROCEDURE Emit1(op: BYTE);
|
|
|
BEGIN
|
|
|
IF nextEmitPos >= windowLimit THEN FlushCodeWindow END;
|
|
|
- codeWindow^[nextEmitPos-windowBase] := param1;
|
|
|
+ codeWindow^[nextEmitPos-windowBase] := op;
|
|
|
INC(nextEmitPos);
|
|
|
IF checkOverflow THEN CheckCodeOverflow END;
|
|
|
END Emit1;
|
|
|
|
|
|
-PROCEDURE Emit2(param2, param1: BYTE);
|
|
|
+PROCEDURE Emit2(op2, op1: BYTE);
|
|
|
BEGIN
|
|
|
IF nextEmitPos + 1 >= windowLimit THEN FlushCodeWindow END;
|
|
|
- codeWindow^[nextEmitPos - windowBase] := param2;
|
|
|
- codeWindow^[nextEmitPos + 1 - windowBase] := param1;
|
|
|
+ codeWindow^[nextEmitPos - windowBase] := op2;
|
|
|
+ codeWindow^[nextEmitPos + 1 - windowBase] := op1;
|
|
|
INC(nextEmitPos, 2);
|
|
|
IF checkOverflow THEN CheckCodeOverflow END;
|
|
|
END Emit2;
|
|
|
|
|
|
-PROCEDURE EmitWord(param1: WORD);
|
|
|
+PROCEDURE EmitWord(w: WORD);
|
|
|
VAR ptr: ADDRESS;
|
|
|
BEGIN
|
|
|
IF nextEmitPos + 1 >= windowLimit THEN FlushCodeWindow END;
|
|
|
ptr := ADDRESS(codeWindow) + (nextEmitPos - windowBase);
|
|
|
- ptr^ := param1;
|
|
|
+ ptr^ := w;
|
|
|
INC(nextEmitPos, 2);
|
|
|
IF checkOverflow THEN CheckCodeOverflow END;
|
|
|
END EmitWord;
|
|
|
|
|
|
-PROCEDURE EmitString(param1: ADDRESS);
|
|
|
+PROCEDURE EmitString(s: ADDRESS);
|
|
|
VAR ptr : POINTER TO ARRAY [0..1] OF BYTE;
|
|
|
BEGIN
|
|
|
- ptr := param1;
|
|
|
+ ptr := s;
|
|
|
REPEAT
|
|
|
Emit1(ptr^[0]);
|
|
|
ptr := ADDRESS(ptr) + 1;
|
|
|
@@ -288,10 +288,10 @@ BEGIN
|
|
|
END EmitString;
|
|
|
|
|
|
PROCEDURE FlushPendingOp;
|
|
|
-VAR local2: CARDINAL;
|
|
|
- PROCEDURE BaseOpCode(param1: CARDINAL): CARDINAL;
|
|
|
+VAR base: CARDINAL;
|
|
|
+ PROCEDURE BaseOpCode(mode: CARDINAL): CARDINAL;
|
|
|
BEGIN
|
|
|
- CASE param1 OF
|
|
|
+ CASE mode OF
|
|
|
| 8 : RETURN 60H
|
|
|
| 9 : RETURN 0ECH
|
|
|
| 1, 5 : RETURN 2CH
|
|
|
@@ -301,10 +301,10 @@ VAR local2: CARDINAL;
|
|
|
END BaseOpCode;
|
|
|
BEGIN
|
|
|
pendActive := FALSE;
|
|
|
- local2 := 0;
|
|
|
+ base := 0;
|
|
|
IF pendMode <> 9 THEN
|
|
|
pendOffset := pendOffset DIV 2;
|
|
|
- local2 := pendMode DIV 4 * (ORD((pendMode MOD 4) <> 3) * 12 + 4);
|
|
|
+ base := pendMode DIV 4 * (ORD((pendMode MOD 4) <> 3) * 12 + 4);
|
|
|
END;
|
|
|
IF pendSize = 4 THEN
|
|
|
IF pendDisp = 1
|
|
|
@@ -321,18 +321,18 @@ BEGIN
|
|
|
IF pendSize = 5 THEN
|
|
|
IF pendMode IN {3,7}
|
|
|
THEN Emit2(pendMode DIV 4 + 8, 0)
|
|
|
- ELSE Emit1(pendMode MOD 4 + local2 + 13)
|
|
|
+ ELSE Emit1(pendMode MOD 4 + base + 13)
|
|
|
END;
|
|
|
ELSE
|
|
|
IF pendMode IN {0,4} THEN INC(pendMode) END;
|
|
|
IF pendSize = 3 THEN
|
|
|
IF (pendOffset <= 15) AND (pendDisp <= 15) AND (pendMode IN {1,5,9})
|
|
|
THEN
|
|
|
- IF pendMode = 9 THEN local2 := 0E4H END;
|
|
|
- Emit2(local2 + 12, pendDisp * 16 + pendOffset);
|
|
|
+ IF pendMode = 9 THEN base := 0E4H END;
|
|
|
+ Emit2(base + 12, pendDisp * 16 + pendOffset);
|
|
|
RETURN
|
|
|
END;
|
|
|
- Emit2(BaseOpCode(pendMode)+local2+3, pendDisp);
|
|
|
+ Emit2(BaseOpCode(pendMode)+base+3, pendDisp);
|
|
|
Emit1(pendOffset);
|
|
|
ELSE
|
|
|
CASE pendMode OF
|
|
|
@@ -346,26 +346,26 @@ BEGIN
|
|
|
IF (pendSize <> 2) OR NOT Compiler.rangeCheckEnabled THEN
|
|
|
IF pendSize = 0 THEN
|
|
|
IF pendOffset <= 7 THEN
|
|
|
- Emit1(pendOffset + local2);
|
|
|
+ Emit1(pendOffset + base);
|
|
|
RETURN
|
|
|
ELSIF pendOffset >= 245 THEN
|
|
|
- Emit1(local2 + 288 - pendOffset);
|
|
|
+ Emit1(base + 288 - pendOffset);
|
|
|
RETURN
|
|
|
END;
|
|
|
ELSE
|
|
|
IF (pendOffset >= (4 - pendSize * 2)) AND (pendOffset <= 15) THEN
|
|
|
- Emit1((pendSize + 1) * 32 + pendOffset + local2);
|
|
|
+ Emit1((pendSize + 1) * 32 + pendOffset + base);
|
|
|
RETURN
|
|
|
END;
|
|
|
END;
|
|
|
END;
|
|
|
| 2, 6:
|
|
|
IF (pendSize = 2) AND (pendOffset = 0) THEN
|
|
|
- Emit1(local2 + (OPLGW2 - 1));
|
|
|
+ Emit1(base + (OPLGW2 - 1));
|
|
|
RETURN
|
|
|
END;
|
|
|
END;
|
|
|
- Emit2(BaseOpCode(pendMode) + pendSize + local2, pendOffset);
|
|
|
+ Emit2(BaseOpCode(pendMode) + pendSize + base, pendOffset);
|
|
|
IF Compiler.rangeCheckEnabled AND (pendMode = 8) AND (pendSize <= 1) THEN
|
|
|
Emit1(pendDisp)
|
|
|
END;
|
|
|
@@ -375,79 +375,79 @@ END FlushPendingOp;
|
|
|
|
|
|
PROCEDURE FlushConstQueue;
|
|
|
VAR
|
|
|
- local2 : CARDINAL;
|
|
|
- local3 : CARDINAL;
|
|
|
- local4 : CARDINAL;
|
|
|
- local5 : POINTER TO Record;
|
|
|
+ idx : CARDINAL;
|
|
|
+ k : CARDINAL;
|
|
|
+ w : CARDINAL;
|
|
|
+ entry : POINTER TO Record;
|
|
|
BEGIN
|
|
|
IF pendActive THEN FlushPendingOp
|
|
|
ELSE
|
|
|
IF fixupCount <> 0 THEN
|
|
|
- local2 := 0;
|
|
|
- WHILE local2 < fixupCount DO
|
|
|
- local5 := ADR(fixupQueue[local2]);
|
|
|
- CASE local5^.word0 OF
|
|
|
+ idx := 0;
|
|
|
+ WHILE idx < fixupCount DO
|
|
|
+ entry := ADR(fixupQueue[idx]);
|
|
|
+ CASE entry^.word0 OF
|
|
|
| 0: (* 02EE *)
|
|
|
- IF local5^.word2 <> 0 THEN Emit2(2, local5^.word2)
|
|
|
- ELSE Emit2(OPCALLREL, Scanner.StrLenHelper(local5^.word1, 128));
|
|
|
- EmitString(local5^.word1);
|
|
|
+ IF entry^.word2 <> 0 THEN Emit2(2, entry^.word2)
|
|
|
+ ELSE Emit2(OPCALLREL, Scanner.StrLenHelper(entry^.word1, 128));
|
|
|
+ EmitString(entry^.word1);
|
|
|
END;
|
|
|
| 1: (* 0308 *)
|
|
|
- IF local5^.word1 <= 255 THEN
|
|
|
- IF local5^.word1 <= 15
|
|
|
- THEN Emit1(local5^.word1 + OPLI0)
|
|
|
- ELSE Emit2(OPLIB, local5^.word1)
|
|
|
+ IF entry^.word1 <= 255 THEN
|
|
|
+ IF entry^.word1 <= 15
|
|
|
+ THEN Emit1(entry^.word1 + OPLI0)
|
|
|
+ ELSE Emit2(OPLIB, entry^.word1)
|
|
|
END;
|
|
|
ELSE (* 0323 *)
|
|
|
Emit1(OPLIW);
|
|
|
- EmitWord(local5^.word1)
|
|
|
+ EmitWord(entry^.word1)
|
|
|
END; (* 0329 *)
|
|
|
| 2: (* 032A *)
|
|
|
Emit1(OPLID);
|
|
|
- EmitWord(local5^.word1);
|
|
|
- EmitWord(local5^.word2);
|
|
|
+ EmitWord(entry^.word1);
|
|
|
+ EmitWord(entry^.word2);
|
|
|
| 3: (* 0334 *)
|
|
|
- local4 := 8;
|
|
|
+ w := 8;
|
|
|
REPEAT (* 0336 *)
|
|
|
- DEC(local4, 4);
|
|
|
+ DEC(w, 4);
|
|
|
Emit1(OPLID);
|
|
|
- local3 := 0;
|
|
|
+ k := 0;
|
|
|
REPEAT (* 033F *)
|
|
|
- Emit1(local5^.ptr1^[local4 + local3]);
|
|
|
- INC(local3);
|
|
|
- UNTIL local3 > 3;
|
|
|
- UNTIL local4 = 0;
|
|
|
+ Emit1(entry^.ptr1^[w + k]);
|
|
|
+ INC(k);
|
|
|
+ UNTIL k > 3;
|
|
|
+ UNTIL w = 0;
|
|
|
IF Compiler.rangeCheckEnabled THEN Emit2(0, 22) END;
|
|
|
| 4: (* 035B *)
|
|
|
- IF CARDINAL(ABS(INTEGER(local5^.word1))) <= 255 THEN
|
|
|
- IF local5^.word1 <> NIL THEN
|
|
|
- IF ABS(INTEGER(local5^.word1)) = 1 THEN
|
|
|
- Emit1(ORD(INTEGER(local5^.word1) < 0) + OPINC)
|
|
|
+ IF CARDINAL(ABS(INTEGER(entry^.word1))) <= 255 THEN
|
|
|
+ IF entry^.word1 <> NIL THEN
|
|
|
+ IF ABS(INTEGER(entry^.word1)) = 1 THEN
|
|
|
+ Emit1(ORD(INTEGER(entry^.word1) < 0) + OPINC)
|
|
|
ELSE (* 0378 *)
|
|
|
- Emit2(ORD(INTEGER(local5^.word1) < 0) + OPADDN,
|
|
|
- ABS(INTEGER(local5^.word1)));
|
|
|
+ Emit2(ORD(INTEGER(entry^.word1) < 0) + OPADDN,
|
|
|
+ ABS(INTEGER(entry^.word1)));
|
|
|
END;
|
|
|
END; (* 0382 *)
|
|
|
ELSE (* 0384 *)
|
|
|
Emit1(OPLIW);
|
|
|
- EmitWord(local5^.word1);
|
|
|
+ EmitWord(entry^.word1);
|
|
|
Emit1(OPADD);
|
|
|
END; (* 038d *)
|
|
|
(* $T+ generates ELSE RAISE CaseSelectError *)
|
|
|
END; (* CASE *)
|
|
|
- INC(local2);
|
|
|
+ INC(idx);
|
|
|
END; (* 03A8 *)
|
|
|
fixupCount := 0;
|
|
|
END (* 03AA *)
|
|
|
END (* 03aa *);
|
|
|
END FlushConstQueue;
|
|
|
|
|
|
-PROCEDURE Reserved33(param1: WORD);
|
|
|
+PROCEDURE Reserved33(dummy: WORD);
|
|
|
BEGIN
|
|
|
(* commented contents ? *)
|
|
|
END Reserved33;
|
|
|
|
|
|
-PROCEDURE Reserved34(param2, param1: WORD);
|
|
|
+PROCEDURE Reserved34(a, b: WORD);
|
|
|
VAR unused: WORD;
|
|
|
BEGIN
|
|
|
(* commented contents ? *)
|
|
|
@@ -462,22 +462,22 @@ BEGIN
|
|
|
END;
|
|
|
END DiscardPending;
|
|
|
|
|
|
-PROCEDURE SetPendingOp(param4, param3, param2, param1: CARDINAL);
|
|
|
+PROCEDURE SetPendingOp(mode, size, disp, off: CARDINAL);
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
FlushConstQueue;
|
|
|
- pendMode := param4;
|
|
|
- pendSize := param3;
|
|
|
- pendDisp := param2;
|
|
|
- pendOffset := param1;
|
|
|
+ pendMode := mode;
|
|
|
+ pendSize := size;
|
|
|
+ pendDisp := disp;
|
|
|
+ pendOffset := off;
|
|
|
pendActive := TRUE;
|
|
|
- IF param4 IN {4,5,6,7,9} THEN FlushPendingOp END;
|
|
|
+ IF mode IN {4,5,6,7,9} THEN FlushPendingOp END;
|
|
|
END;
|
|
|
END SetPendingOp;
|
|
|
|
|
|
(* $T- *)
|
|
|
|
|
|
-PROCEDURE QueueConst(param1: CARDINAL);
|
|
|
+PROCEDURE QueueConst(value: CARDINAL);
|
|
|
VAR ptr : POINTER TO Record;
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
@@ -485,30 +485,30 @@ BEGIN
|
|
|
IF fixupCount >= 16 THEN Scanner.ScannerError(90) END;
|
|
|
ptr := ADR(fixupQueue[fixupCount]);
|
|
|
ptr^.word0 := 1;
|
|
|
- ptr^.word1 := param1;
|
|
|
+ ptr^.word1 := value;
|
|
|
INC(fixupCount);
|
|
|
END;
|
|
|
END QueueConst;
|
|
|
|
|
|
-PROCEDURE QueueLongConst(param3: CARDINAL; param1: LONGINT);
|
|
|
+PROCEDURE QueueLongConst(kind: CARDINAL; value: LONGINT);
|
|
|
VAR ptr : POINTER TO Record;
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
IF pendActive THEN FlushPendingOp END;
|
|
|
IF fixupCount >= 16 THEN Scanner.ScannerError(90) END;
|
|
|
ptr := ADR(fixupQueue[fixupCount]);
|
|
|
- ptr^.word0 := param3;
|
|
|
- ptr^.long1 := param1;
|
|
|
+ ptr^.word0 := kind;
|
|
|
+ ptr^.long1 := value;
|
|
|
INC(fixupCount);
|
|
|
END;
|
|
|
END QueueLongConst;
|
|
|
|
|
|
-PROCEDURE EmitTypedOp(param2, param1 : CARDINAL);
|
|
|
-VAR ptr: POINTER TO Record;
|
|
|
- local3 : CARDINAL;
|
|
|
- ptr2: POINTER TO Record;
|
|
|
+PROCEDURE EmitTypedOp(subOp, typeKind : CARDINAL);
|
|
|
+VAR lastEntry: POINTER TO Record;
|
|
|
+ extBase : CARDINAL;
|
|
|
+ prevEntry: POINTER TO Record;
|
|
|
|
|
|
- PROCEDURE IsPowerOfTwo(param1: CARDINAL): BOOLEAN;
|
|
|
+ PROCEDURE IsPowerOfTwo(target: CARDINAL): BOOLEAN;
|
|
|
VAR
|
|
|
i: CARDINAL;
|
|
|
j: CARDINAL;
|
|
|
@@ -516,7 +516,7 @@ VAR ptr: POINTER TO Record;
|
|
|
j := 1;
|
|
|
i := 0;
|
|
|
REPEAT
|
|
|
- IF j = param1 THEN ptr := ADDRESS(i); RETURN TRUE END;
|
|
|
+ IF j = target THEN lastEntry := ADDRESS(i); RETURN TRUE END;
|
|
|
j := j * 2;
|
|
|
INC(i);
|
|
|
UNTIL i > 14;
|
|
|
@@ -531,36 +531,36 @@ VAR ptr: POINTER TO Record;
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
IF fixupCount <> 0 THEN
|
|
|
- ptr2 := ADR(fixupQueue[fixupCount - 1]);
|
|
|
- IF ptr2^.word0 = 1 THEN
|
|
|
- IF (param2 IN {6,7}) AND (param1 <= 1) THEN
|
|
|
- IF param2 = 7 THEN ptr2^.word1 := -INTEGER(ptr2^.word1) END;
|
|
|
+ prevEntry := ADR(fixupQueue[fixupCount - 1]);
|
|
|
+ IF prevEntry^.word0 = 1 THEN
|
|
|
+ IF (subOp IN {6,7}) AND (typeKind <= 1) THEN
|
|
|
+ IF subOp = 7 THEN prevEntry^.word1 := -INTEGER(prevEntry^.word1) END;
|
|
|
IF fixupCount > 1 THEN
|
|
|
IF fixupQueue[fixupCount - 2].word0 IN {1,4} THEN
|
|
|
- INC(fixupQueue[fixupCount - 2].word1, ptr2^.word1);
|
|
|
+ INC(fixupQueue[fixupCount - 2].word1, prevEntry^.word1);
|
|
|
DEC(fixupCount);
|
|
|
END; (* 04A9 *)
|
|
|
END; (* 04A9 *)
|
|
|
- ptr2^.word0 := 4;
|
|
|
+ prevEntry^.word0 := 4;
|
|
|
RETURN;
|
|
|
ELSE (* 04AF *)
|
|
|
- IF (param2 IN {8,9}) AND (param1 = 0) AND IsPowerOfTwo(ptr2^.word1) THEN
|
|
|
+ IF (subOp IN {8,9}) AND (typeKind = 0) AND IsPowerOfTwo(prevEntry^.word1) THEN
|
|
|
DEC(fixupCount);
|
|
|
FlushConstQueue;
|
|
|
- IF ptr <> NIL THEN Emit2(param2 + OPMUL, ptr) END; (* 04CE *)
|
|
|
+ IF lastEntry <> NIL THEN Emit2(subOp + OPMUL, lastEntry) END; (* 04CE *)
|
|
|
RETURN
|
|
|
ELSE (* 04D1 *)
|
|
|
- IF (param2 = 10) AND (param1 <= 1) AND IsPowerOfTwo(ptr2^.word1) THEN
|
|
|
- DEC(ptr2^.word1);
|
|
|
+ IF (subOp = 10) AND (typeKind <= 1) AND IsPowerOfTwo(prevEntry^.word1) THEN
|
|
|
+ DEC(prevEntry^.word1);
|
|
|
FlushConstQueue;
|
|
|
Emit1(OPBITAND);
|
|
|
RETURN
|
|
|
ELSE (* 04EE *)
|
|
|
- IF (NOT Compiler.rangeCheckEnabled) AND (ptr2^.word1 = 0)
|
|
|
- AND (param2 IN {0,1,3}) AND (param1 <= ORD(param2 <> 3)) THEN
|
|
|
+ IF (NOT Compiler.rangeCheckEnabled) AND (prevEntry^.word1 = 0)
|
|
|
+ AND (subOp IN {0,1,3}) AND (typeKind <= ORD(subOp <> 3)) THEN
|
|
|
DEC(fixupCount);
|
|
|
FlushConstQueue;
|
|
|
- Emit1(OPEQ0 + ORD(param2 <> 0) * 32);
|
|
|
+ Emit1(OPEQ0 + ORD(subOp <> 0) * 32);
|
|
|
RETURN
|
|
|
END; (* 0512 *)
|
|
|
END; (* 0512 *)
|
|
|
@@ -569,37 +569,37 @@ BEGIN
|
|
|
END; (* 0512 *)
|
|
|
END; (* 0512 *)
|
|
|
FlushConstQueue;
|
|
|
- IF (param1 = 5) OR (param2 = 18) THEN
|
|
|
- local3 := Scanner.EnterModuleSymbol("DOUBLES", 9567H) * 16;
|
|
|
+ IF (typeKind = 5) OR (subOp = 18) THEN
|
|
|
+ extBase := Scanner.EnterModuleSymbol("DOUBLES", 9567H) * 16;
|
|
|
END; (* 0532 *)
|
|
|
- CASE param1 OF
|
|
|
+ CASE typeKind OF
|
|
|
| 0: (* 0536 *)
|
|
|
- IF param2 >= 15 THEN
|
|
|
+ IF subOp >= 15 THEN
|
|
|
IF Compiler.rangeCheckEnabled THEN Emit1(125) ELSE Emit2(144,33) END;
|
|
|
- param1 := 2;
|
|
|
+ typeKind := 2;
|
|
|
END; (* 054b *)
|
|
|
| 1: (* 054c *)
|
|
|
- IF param2 >= 15 THEN
|
|
|
+ IF subOp >= 15 THEN
|
|
|
Emit1(189);
|
|
|
- param1 := 2;
|
|
|
+ typeKind := 2;
|
|
|
ELSE
|
|
|
- IF param2 IN {0,1,6,7,10} THEN param1 := 0
|
|
|
- ELSIF param2 = 11 THEN Emit2(OPCOMPL, OPINC); RETURN
|
|
|
+ IF subOp IN {0,1,6,7,10} THEN typeKind := 0
|
|
|
+ ELSIF subOp = 11 THEN Emit2(OPCOMPL, OPINC); RETURN
|
|
|
END; (* 056E *)
|
|
|
END; (* 056E *)
|
|
|
| 2: (* 056f *)
|
|
|
- IF param2 <= 5 THEN Emit1(OPDCOMP); EmitSystemCall(23); param1 := 0
|
|
|
- ELSIF param2 = 11 THEN
|
|
|
+ IF subOp <= 5 THEN Emit1(OPDCOMP); EmitSystemCall(23); typeKind := 0
|
|
|
+ ELSIF subOp = 11 THEN
|
|
|
Emit2(OPEXTENDED,3); RETURN
|
|
|
END; (* 0589 *)
|
|
|
| 3: (* 058a *)
|
|
|
- IF param2 <= 5 THEN
|
|
|
- Emit1(OPREALCMP); EmitSystemCall(23); param1 := 0
|
|
|
- ELSIF param2 IN {11,12} THEN
|
|
|
- IF Compiler.rangeCheckEnabled THEN Emit1(param2 + OPSSW0)
|
|
|
+ IF subOp <= 5 THEN
|
|
|
+ Emit1(OPREALCMP); EmitSystemCall(23); typeKind := 0
|
|
|
+ ELSIF subOp IN {11,12} THEN
|
|
|
+ IF Compiler.rangeCheckEnabled THEN Emit1(subOp + OPSSW0)
|
|
|
ELSE
|
|
|
Emit1(OPSWAP);
|
|
|
- IF param2 = 11 THEN
|
|
|
+ IF subOp = 11 THEN
|
|
|
Emit2(OPLI15, OPPOWER2); Emit1(OPBITXOR);
|
|
|
ELSE (* 05BD *)
|
|
|
Emit1(OPLIW); EmitWord(7FFFH); Emit1(OPBITAND);
|
|
|
@@ -607,64 +607,64 @@ BEGIN
|
|
|
Emit1(OPSWAP);
|
|
|
END; (* 05ca *)
|
|
|
RETURN
|
|
|
- ELSIF param2 IN {13,14,15} THEN
|
|
|
+ ELSIF subOp IN {13,14,15} THEN
|
|
|
Emit1(OPFLOAT2LG);
|
|
|
- param1 := 2;
|
|
|
+ typeKind := 2;
|
|
|
END; (* 05d9 *)
|
|
|
| 4: (* 05da *)
|
|
|
- IF param2 <= 5 THEN
|
|
|
- IF param2 = 5 THEN
|
|
|
+ IF subOp <= 5 THEN
|
|
|
+ IF subOp = 5 THEN
|
|
|
Emit1(OPSWAP);
|
|
|
- param2 := 4;
|
|
|
+ subOp := 4;
|
|
|
END; (* 05E9 *)
|
|
|
- IF param2 = 4 THEN Emit2(OPCOMPL, OPBITAND); Emit1(OPLI0); param2 := 0 END; (* 05F8 *)
|
|
|
- param1 := 0
|
|
|
- ELSIF param2 = 7 THEN
|
|
|
- Emit1(OPCOMPL); param2 := 8
|
|
|
+ IF subOp = 4 THEN Emit2(OPCOMPL, OPBITAND); Emit1(OPLI0); subOp := 0 END; (* 05F8 *)
|
|
|
+ typeKind := 0
|
|
|
+ ELSIF subOp = 7 THEN
|
|
|
+ Emit1(OPCOMPL); subOp := 8
|
|
|
END; (* 0606 *)
|
|
|
| 5: (* 0607 *)
|
|
|
- IF param2 <> 18 THEN
|
|
|
+ IF subOp <> 18 THEN
|
|
|
Emit1(OPEXTCALL1);
|
|
|
- IF param2 <= 5 THEN Emit1(local3+5); param1 := 0
|
|
|
- ELSIF param2 >= 13 THEN
|
|
|
- param1 := ORD(param2 = 16) + 2;
|
|
|
- Emit1(local3 + param1 - 1);
|
|
|
- ELSE Emit1(local3 + param2)
|
|
|
+ IF subOp <= 5 THEN Emit1(extBase+5); typeKind := 0
|
|
|
+ ELSIF subOp >= 13 THEN
|
|
|
+ typeKind := ORD(subOp = 16) + 2;
|
|
|
+ Emit1(extBase + typeKind - 1);
|
|
|
+ ELSE Emit1(extBase + subOp)
|
|
|
END; (* 0634*)
|
|
|
IF Compiler.rangeCheckEnabled THEN
|
|
|
- Emit2(ORD(param2 <= 9)+1, (ORD(param2 IN {6,7,8,9,10,11,12})+1)*4);
|
|
|
- IF param2 <= 5 THEN EmitSystemCall(23) END;
|
|
|
+ Emit2(ORD(subOp <= 9)+1, (ORD(subOp IN {6,7,8,9,10,11,12})+1)*4);
|
|
|
+ IF subOp <= 5 THEN EmitSystemCall(23) END;
|
|
|
END; (* 064E *)
|
|
|
- IF param1 = 5 THEN RETURN END;
|
|
|
+ IF typeKind = 5 THEN RETURN END;
|
|
|
END; (* 0654 *)
|
|
|
(* $T+ generate CaseSelectError exception *)
|
|
|
END; (* 066c *)
|
|
|
(* $T- *)
|
|
|
- IF param2 <= 12 THEN
|
|
|
- Emit1(param2 + param1 * 16 + 160);
|
|
|
- ELSIF param2 - 13 <> param1 THEN
|
|
|
- IF param2 <= 14 THEN
|
|
|
- IF param1 <= 1 THEN Emit1(221) ELSE Emit1(param2 + 173) END;
|
|
|
- ELSIF param2 <= 16 THEN Emit1(param1 + 188)
|
|
|
+ IF subOp <= 12 THEN
|
|
|
+ Emit1(subOp + typeKind * 16 + 160);
|
|
|
+ ELSIF subOp - 13 <> typeKind THEN
|
|
|
+ IF subOp <= 14 THEN
|
|
|
+ IF typeKind <= 1 THEN Emit1(221) ELSE Emit1(subOp + 173) END;
|
|
|
+ ELSIF subOp <= 16 THEN Emit1(typeKind + 188)
|
|
|
ELSE (* 06A3 *)
|
|
|
- Emit2(OPEXTCALL1, local3 + param1 + 1);
|
|
|
+ Emit2(OPEXTCALL1, extBase + typeKind + 1);
|
|
|
IF Compiler.rangeCheckEnabled THEN Emit2(OPRAISE, 8) END;
|
|
|
END; (* 06B1 *)
|
|
|
END; (* 06B1 *)
|
|
|
END; (* 06b1 *)
|
|
|
END EmitTypedOp;
|
|
|
|
|
|
-PROCEDURE EmitExtendedOp(param2, param1: CARDINAL);
|
|
|
+PROCEDURE EmitExtendedOp(subOp, typeKind: CARDINAL);
|
|
|
BEGIN
|
|
|
- IF emitEnabled THEN FlushConstQueue; Emit1(param1 * 16 + param2 + 186) END;
|
|
|
+ IF emitEnabled THEN FlushConstQueue; Emit1(typeKind * 16 + subOp + 186) END;
|
|
|
END EmitExtendedOp;
|
|
|
|
|
|
|
|
|
-PROCEDURE EmitStandardOp(param1: CARDINAL);
|
|
|
+PROCEDURE EmitStandardOp(stdNo: CARDINAL);
|
|
|
VAR ptr: RecordPtr;
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
- IF (param1 = 0) AND (fixupCount <> 0) THEN
|
|
|
+ IF (stdNo = 0) AND (fixupCount <> 0) THEN
|
|
|
ptr := ADR(fixupQueue[fixupCount-1]);
|
|
|
IF (ptr^.word0 = 1) AND (ptr^.word1 = 0) THEN
|
|
|
DEC(fixupCount);
|
|
|
@@ -674,23 +674,23 @@ BEGIN
|
|
|
END; (* 06EC *)
|
|
|
END; (* 06EC *)
|
|
|
FlushConstQueue;
|
|
|
- IF param1 >= 23 THEN
|
|
|
+ IF stdNo >= 23 THEN
|
|
|
Emit1(OPEXTENDED);
|
|
|
END; (* 06F7 *)
|
|
|
(* $T+ *)
|
|
|
- Emit1( Compiler.keywordTable[param1][0] );
|
|
|
+ Emit1( Compiler.keywordTable[stdNo][0] );
|
|
|
(* $T- *)
|
|
|
END; (* 0701 *)
|
|
|
END EmitStandardOp;
|
|
|
|
|
|
-PROCEDURE EmitMiscOp(param2, param1: CARDINAL);
|
|
|
+PROCEDURE EmitMiscOp(subOp, n: CARDINAL);
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
FlushConstQueue;
|
|
|
- IF param2 = 5 THEN
|
|
|
- IF param1 >= 10 THEN
|
|
|
- Emit2(OPEXTENDED, param1 - 5)
|
|
|
- ELSIF param1 = 6 THEN
|
|
|
+ IF subOp = 5 THEN
|
|
|
+ IF n >= 10 THEN
|
|
|
+ Emit2(OPEXTENDED, n - 5)
|
|
|
+ ELSIF n = 6 THEN
|
|
|
IF Compiler.rangeCheckEnabled THEN Emit1(102)
|
|
|
ELSE
|
|
|
(* generates the bad CAP sequence *)
|
|
|
@@ -699,51 +699,51 @@ BEGIN
|
|
|
END; (* 073D *)
|
|
|
ELSE (* 073F *)
|
|
|
(* $T+ *)
|
|
|
- Emit1(Compiler.keywordTable[param1+27][0]);
|
|
|
+ Emit1(Compiler.keywordTable[n+27][0]);
|
|
|
(* $T- *)
|
|
|
END; (* 074B *)
|
|
|
ELSE (* 074D *)
|
|
|
- IF param2 = 4 THEN
|
|
|
+ IF subOp = 4 THEN
|
|
|
Emit2(OPLONGREAL, 10);
|
|
|
- Emit1(param1);
|
|
|
- ELSIF (param2 = 0) AND (param1 - 128 <= 3) AND (NOT Compiler.rangeCheckEnabled) THEN
|
|
|
- Emit1(param1 + 8)
|
|
|
+ Emit1(n);
|
|
|
+ ELSIF (subOp = 0) AND (n - 128 <= 3) AND (NOT Compiler.rangeCheckEnabled) THEN
|
|
|
+ Emit1(n + 8)
|
|
|
ELSE
|
|
|
- Emit2(param2 + 132, param1)
|
|
|
+ Emit2(subOp + 132, n)
|
|
|
END; (* 0775 *)
|
|
|
END; (* 0775 *)
|
|
|
END; (* 0775 *)
|
|
|
END EmitMiscOp;
|
|
|
|
|
|
-PROCEDURE EmitSystemCall(param1: CARDINAL);
|
|
|
+PROCEDURE EmitSystemCall(sysNo: CARDINAL);
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
FlushConstQueue;
|
|
|
- IF Compiler.rangeCheckEnabled AND (param1 <> 20) THEN Emit2(0,param1) END;
|
|
|
+ IF Compiler.rangeCheckEnabled AND (sysNo <> 20) THEN Emit2(0,sysNo) END;
|
|
|
END;
|
|
|
END EmitSystemCall;
|
|
|
|
|
|
-PROCEDURE EmitExtCall3(param3, param2, param1: CARDINAL);
|
|
|
+PROCEDURE EmitExtCall3(a, b, c: CARDINAL);
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
FlushConstQueue;
|
|
|
IF Compiler.rangeCheckEnabled THEN
|
|
|
- IF param3 <> 19 THEN Emit2(0, param3) END;
|
|
|
- Emit1(param2);
|
|
|
- IF param3 >= 3 THEN Emit1(param1) END;
|
|
|
+ IF a <> 19 THEN Emit2(0, a) END;
|
|
|
+ Emit1(b);
|
|
|
+ IF a >= 3 THEN Emit1(c) END;
|
|
|
END; (* 07aa *)
|
|
|
END;
|
|
|
END EmitExtCall3;
|
|
|
|
|
|
-PROCEDURE OpenFixup(VAR param2: CARDINAL; param1: BOOLEAN);
|
|
|
-VAR local2: CARDINAL;
|
|
|
+PROCEDURE OpenFixup(VAR fixPos: CARDINAL; shortJump: BOOLEAN);
|
|
|
+VAR prevOp: CARDINAL;
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
- param2 := nextEmitPos;
|
|
|
- IF param1 THEN
|
|
|
- local2 := PeekCodeByte(nextEmitPos - 1);
|
|
|
- IF local2 - 224 <= 1 THEN
|
|
|
- PokeCodeByte(local2 + 2, nextEmitPos - 1);
|
|
|
+ fixPos := nextEmitPos;
|
|
|
+ IF shortJump THEN
|
|
|
+ prevOp := PeekCodeByte(nextEmitPos - 1);
|
|
|
+ IF prevOp - 224 <= 1 THEN
|
|
|
+ PokeCodeByte(prevOp + 2, nextEmitPos - 1);
|
|
|
END;
|
|
|
Emit1(0)
|
|
|
ELSE EmitWord(0)
|
|
|
@@ -751,83 +751,83 @@ BEGIN
|
|
|
END;
|
|
|
END OpenFixup;
|
|
|
|
|
|
-PROCEDURE CloseFixup(param2: CARDINAL; param1: BOOLEAN);
|
|
|
+PROCEDURE CloseFixup(fixPos: CARDINAL; shortJump: BOOLEAN);
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
- IF param1 AND (nextEmitPos < param2 + 254) THEN
|
|
|
+ IF shortJump AND (nextEmitPos < fixPos + 254) THEN
|
|
|
PokeCodeByte(PeekCodeByte(nextEmitPos - 1) + 4, nextEmitPos - 1);
|
|
|
- Emit1(nextEmitPos + 1 - param2);
|
|
|
+ Emit1(nextEmitPos + 1 - fixPos);
|
|
|
ELSE
|
|
|
- EmitWord(param2 - (nextEmitPos + 1))
|
|
|
+ EmitWord(fixPos - (nextEmitPos + 1))
|
|
|
END;
|
|
|
END;
|
|
|
END CloseFixup;
|
|
|
|
|
|
|
|
|
-PROCEDURE InsertFixup(param2: CARDINAL; param1: BOOLEAN): BOOLEAN;
|
|
|
+PROCEDURE InsertFixup(fixPos: CARDINAL; shortJump: BOOLEAN): BOOLEAN;
|
|
|
VAR
|
|
|
- local2: BYTE;
|
|
|
- local3: BYTE;
|
|
|
- local4: CARDINAL;
|
|
|
- local5: ADDRESS;
|
|
|
+ holdByte: BYTE;
|
|
|
+ prevByte: BYTE;
|
|
|
+ gapPos: CARDINAL;
|
|
|
+ moveSrc: ADDRESS;
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
FlushConstQueue;
|
|
|
- local4 := param2 + 1;
|
|
|
- IF param1 THEN
|
|
|
- IF nextEmitPos > local4 + 254 THEN
|
|
|
- IF local4 < windowBase THEN
|
|
|
- Files.SetPos(Scanner.codeFile, LONG(local4));
|
|
|
- Files.ReadByte(Scanner.codeFile, local2);
|
|
|
- INC(local4);
|
|
|
- WHILE local4 < windowBase DO
|
|
|
- local3 := local2;
|
|
|
- Files.ReadByte(Scanner.codeFile, local2);
|
|
|
- Files.SetPos(Scanner.codeFile, LONG(local4));
|
|
|
- Files.WriteByte(Scanner.codeFile, local3);
|
|
|
- INC(local4)
|
|
|
+ gapPos := fixPos + 1;
|
|
|
+ IF shortJump THEN
|
|
|
+ IF nextEmitPos > gapPos + 254 THEN
|
|
|
+ IF gapPos < windowBase THEN
|
|
|
+ Files.SetPos(Scanner.codeFile, LONG(gapPos));
|
|
|
+ Files.ReadByte(Scanner.codeFile, holdByte);
|
|
|
+ INC(gapPos);
|
|
|
+ WHILE gapPos < windowBase DO
|
|
|
+ prevByte := holdByte;
|
|
|
+ Files.ReadByte(Scanner.codeFile, holdByte);
|
|
|
+ Files.SetPos(Scanner.codeFile, LONG(gapPos));
|
|
|
+ Files.WriteByte(Scanner.codeFile, prevByte);
|
|
|
+ INC(gapPos)
|
|
|
END; (* 0842 *)
|
|
|
MOVE(codeWindow, ADDRESS(codeWindow) + 1, nextEmitPos - windowBase);
|
|
|
- codeWindow^[0] := local2;
|
|
|
+ codeWindow^[0] := holdByte;
|
|
|
ELSE (* 0850 *)
|
|
|
- local5 := ADDRESS(codeWindow) + local4 - windowBase;
|
|
|
- MOVE(local5, local5 + 1, nextEmitPos - local4);
|
|
|
+ moveSrc := ADDRESS(codeWindow) + gapPos - windowBase;
|
|
|
+ MOVE(moveSrc, moveSrc + 1, nextEmitPos - gapPos);
|
|
|
END; (* 085e *)
|
|
|
INC(nextEmitPos);
|
|
|
- PokeCodeByte( PeekCodeByte(param2 - 1) - 2, param2 - 1);
|
|
|
- PokeCodeByte( (nextEmitPos - local4) MOD 256, param2);
|
|
|
- PokeCodeByte( (nextEmitPos - local4) DIV 256, local4);
|
|
|
+ PokeCodeByte( PeekCodeByte(fixPos - 1) - 2, fixPos - 1);
|
|
|
+ PokeCodeByte( (nextEmitPos - gapPos) MOD 256, fixPos);
|
|
|
+ PokeCodeByte( (nextEmitPos - gapPos) DIV 256, gapPos);
|
|
|
RETURN FALSE
|
|
|
END; (* 087f *)
|
|
|
- PokeCodeByte(nextEmitPos - local4, param2);
|
|
|
+ PokeCodeByte(nextEmitPos - gapPos, fixPos);
|
|
|
ELSE (* 0887 *)
|
|
|
- PokeCodeByte( (nextEmitPos - local4) MOD 256, param2);
|
|
|
- PokeCodeByte( (nextEmitPos - local4) DIV 256, local4);
|
|
|
+ PokeCodeByte( (nextEmitPos - gapPos) MOD 256, fixPos);
|
|
|
+ PokeCodeByte( (nextEmitPos - gapPos) DIV 256, gapPos);
|
|
|
END; (* 0898 *)
|
|
|
END; (* 0898 *)
|
|
|
RETURN TRUE
|
|
|
END InsertFixup;
|
|
|
|
|
|
|
|
|
-PROCEDURE AdjustFixup(param1: CARDINAL);
|
|
|
-VAR local2: CARDINAL;
|
|
|
+PROCEDURE AdjustFixup(fixPos: CARDINAL);
|
|
|
+VAR dist: CARDINAL;
|
|
|
BEGIN
|
|
|
IF emitEnabled THEN
|
|
|
- IF PeekCodeByte(param1 - 1) <= 225 THEN
|
|
|
- local2 := PeekCodeByte(param1) + PeekCodeByte(param1 + 1) * 256;
|
|
|
- IF INTEGER(local2) > 0 THEN INC(local2) ELSE DEC(local2) END;
|
|
|
- PokeCodeByte( local2 MOD 256, param1);
|
|
|
- PokeCodeByte( local2 DIV 256, param1 + 1);
|
|
|
+ IF PeekCodeByte(fixPos - 1) <= 225 THEN
|
|
|
+ dist := PeekCodeByte(fixPos) + PeekCodeByte(fixPos + 1) * 256;
|
|
|
+ IF INTEGER(dist) > 0 THEN INC(dist) ELSE DEC(dist) END;
|
|
|
+ PokeCodeByte( dist MOD 256, fixPos);
|
|
|
+ PokeCodeByte( dist DIV 256, fixPos + 1);
|
|
|
ELSE (* 08D2 *)
|
|
|
- PokeCodeByte( PeekCodeByte(param1) + 1, param1);
|
|
|
+ PokeCodeByte( PeekCodeByte(fixPos) + 1, fixPos);
|
|
|
END; (* 08D9 *)
|
|
|
END; (* 08D9 *)
|
|
|
END AdjustFixup;
|
|
|
|
|
|
|
|
|
-PROCEDURE MarkCodePos(param1: CARDINAL): CARDINAL;
|
|
|
+PROCEDURE MarkCodePos(n: CARDINAL): CARDINAL;
|
|
|
BEGIN
|
|
|
- EmitSystemCall(param1);
|
|
|
+ EmitSystemCall(n);
|
|
|
RETURN nextEmitPos
|
|
|
END MarkCodePos;
|
|
|
|