mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 16:52:25 +00:00
Remove GC blocking IF test, add abstract comment to each compiler mod.
This commit is contained in:
parent
63008f6d30
commit
c9b56ea10e
6 changed files with 37 additions and 28 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
|
(* Oberon Portable build parse tree (front end) *)
|
||||||
MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
|
MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
|
||||||
(* build parse tree *)
|
|
||||||
|
|
||||||
IMPORT OPT, OPS, OPM, SYSTEM;
|
IMPORT OPT, OPS, OPM, SYSTEM;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
(* OPP - Oberon Portable Parser (front end) *)
|
||||||
MODULE OPP; (* NW, RC 6.3.89 / 10.2.94 *) (* object model 4.12.93 *)
|
MODULE OPP; (* NW, RC 6.3.89 / 10.2.94 *) (* object model 4.12.93 *)
|
||||||
|
|
||||||
IMPORT
|
IMPORT
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
(* Oberon Portable Scanner (front end) *)
|
||||||
MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *)
|
MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *)
|
||||||
|
|
||||||
IMPORT OPM, SYSTEM;
|
IMPORT OPM, SYSTEM;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
(* OPT - Oberon Portable Symbol Table (front end) *)
|
||||||
MODULE OPT; (* NW, RC 6.3.89 / 23.1.92 *) (* object model 24.2.94 *)
|
MODULE OPT; (* NW, RC 6.3.89 / 23.1.92 *) (* object model 24.2.94 *)
|
||||||
|
|
||||||
(*
|
(*
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
(* OPV - parse tree traverser (back end) *)
|
||||||
MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
MODULE OPV; (* J. Templ 16.2.95 / 3.7.96
|
||||||
|
|
||||||
26.7.2002 jt bug fix OPS.in Len: wrong result if called for fixed OPT.Array
|
26.7.2002 jt bug fix OPS.in Len: wrong result if called for fixed OPT.Array
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ MODULE Heap;
|
||||||
(* finalization candidates *)
|
(* finalization candidates *)
|
||||||
fin: FinNode;
|
fin: FinNode;
|
||||||
|
|
||||||
(* garbage collector locking *)
|
(* garbage collector busy flag *)
|
||||||
lockdepth: INTEGER;
|
lockdepth: INTEGER;
|
||||||
interrupted: BOOLEAN;
|
interrupted: BOOLEAN;
|
||||||
|
|
||||||
|
|
@ -549,6 +549,8 @@ MODULE Heap;
|
||||||
END
|
END
|
||||||
END MarkStack;
|
END MarkStack;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE GC*(markStack: BOOLEAN);
|
PROCEDURE GC*(markStack: BOOLEAN);
|
||||||
VAR
|
VAR
|
||||||
m: Module;
|
m: Module;
|
||||||
|
|
@ -556,34 +558,37 @@ MODULE Heap;
|
||||||
i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23: S.ADDRESS;
|
i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23: S.ADDRESS;
|
||||||
cand: ARRAY 10000 OF S.ADDRESS;
|
cand: ARRAY 10000 OF S.ADDRESS;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF (lockdepth = 0) OR (lockdepth = 1) & ~markStack THEN
|
Lock();
|
||||||
Lock();
|
m := S.VAL(Module, modules);
|
||||||
m := S.VAL(Module, modules);
|
WHILE m # NIL DO
|
||||||
WHILE m # NIL DO
|
IF m.enumPtrs # NIL THEN m.enumPtrs(MarkP) END;
|
||||||
IF m.enumPtrs # NIL THEN m.enumPtrs(MarkP) END;
|
m := m^.next
|
||||||
m := m^.next
|
END;
|
||||||
|
IF markStack THEN
|
||||||
|
(* generate register pressure to force callee saved registers to memory;
|
||||||
|
may be simplified by inlining OS calls or processor specific instructions
|
||||||
|
*)
|
||||||
|
i0 := -100; i1 := -101; i2 := -102; i3 := -103; i4 := -104; i5 := -105; i6 := -106; i7 := -107;
|
||||||
|
i8 := 1; i9 := 2; i10 := 3; i11 := 4; i12 := 5; i13 := 6; i14 := 7; i15 := 8;
|
||||||
|
i16 := 9; i17 := 10; i18 := 11; i19 := 12; i20 := 13; i21 := 14; i22 := 15; i23 := 16;
|
||||||
|
LOOP
|
||||||
|
INC(i0, 1); INC(i1, 2); INC(i2, 3); INC(i3, 4); INC(i4, 5); INC(i5, 6); INC(i6, 7); INC(i7, 8);
|
||||||
|
INC(i8, 9); INC(i9, 10); INC(i10, 11); INC(i11, 12); INC(i12, 13); INC(i13, 14); INC(i14, 15); INC(i15, 16);
|
||||||
|
INC(i16, 17); INC(i17, 18); INC(i18, 19); INC(i19, 20); INC(i20, 21); INC(i21, 22); INC(i22, 23); INC(i23, 24);
|
||||||
|
IF (i0 = -99) & (i15 = 24) THEN (* True at first iteration *)
|
||||||
|
MarkStack(32, cand); EXIT
|
||||||
|
END
|
||||||
END;
|
END;
|
||||||
IF markStack THEN
|
IF i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 (* use all variables *)
|
||||||
(* generate register pressure to force callee saved registers to memory;
|
+ i8 + i9 + i10 + i11 + i12 + i13 + i14 + i15
|
||||||
may be simplified by inlining OS calls or processor specific instructions
|
+ i16 + i17 + i18 + i19 + i20 + i21 + i22 + i23 > 10000 THEN (* Always false *)
|
||||||
*)
|
RETURN
|
||||||
i0 := -100; i1 := -101; i2 := -102; i3 := -103; i4 := -104; i5 := -105; i6 := -106; i7 := -107;
|
|
||||||
i8 := 1; i9 := 2; i10 := 3; i11 := 4; i12 := 5; i13 := 6; i14 := 7; i15 := 8;
|
|
||||||
i16 := 9; i17 := 10; i18 := 11; i19 := 12; i20 := 13; i21 := 14; i22 := 15; i23 := 16;
|
|
||||||
LOOP INC(i0, 1); INC(i1, 2); INC(i2, 3); INC(i3, 4); INC(i4, 5); INC(i5, 6); INC(i6, 7); INC(i7, 8);
|
|
||||||
INC(i8, 9); INC(i9, 10); INC(i10, 11); INC(i11, 12); INC(i12, 13); INC(i13, 14); INC(i14, 15); INC(i15, 16);
|
|
||||||
INC(i16, 17); INC(i17, 18); INC(i18, 19); INC(i19, 20); INC(i20, 21); INC(i21, 22); INC(i22, 23); INC(i23, 24);
|
|
||||||
IF (i0 = -99) & (i15 = 24) THEN MarkStack(32, cand); EXIT END
|
|
||||||
END;
|
|
||||||
IF i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + i12 + i13 + i14 + i15
|
|
||||||
+ i16 + i17 + i18 + i19 + i20 + i21 + i22 + i23 > 10000 THEN RETURN (* use all variables *)
|
|
||||||
END;
|
|
||||||
END;
|
END;
|
||||||
CheckFin;
|
END;
|
||||||
Scan;
|
CheckFin;
|
||||||
Finalize;
|
Scan;
|
||||||
Unlock()
|
Finalize;
|
||||||
END
|
Unlock()
|
||||||
END GC;
|
END GC;
|
||||||
|
|
||||||
PROCEDURE RegisterFinalizer*(obj: S.PTR; finalize: Finalizer);
|
PROCEDURE RegisterFinalizer*(obj: S.PTR; finalize: Finalizer);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue