- Pascal-FC for IBM PC compatibles - 
- Compiler Version P5.2

G L Davies  &  A Burns, University of Bradford

Compiler listing

    1     0 program dekkinc;
    2     0 var
    3     0     turn : integer;
    4     0     c1,c2 : integer;
    5     0     proceed : boolean;
    6     0 
    7     0     p1count,p2count,total : integer;
    8     0 
    9     0 process proc1;
   10     0 begin
   11     0     repeat
   12     0         c1 := 0;
   13     3         while c2=0 do
   14     7             if turn=2 then
   15    11               begin
   16    11                 c1 := 1;
   17    14                 while turn=2 do
   18    18                     ;                (* busy wait *)
   19    19                 c1 := 0;
   20    22               end;
   21    23 
   22    23          p1count := p1count + 1;
   23    28          total := total + 1;
   24    33 
   25    33          turn := 2;
   26    36          c1 := 1;
   27    39 
   28    39     until (p1count > 100);
   29    43 end;    (* proc1 *)
   30    44 
   31    44 process proc2;
   32    44 begin
   33    44     repeat
   34    44         c2 := 0;
   35    47         while c1=0 do
   36    51             if turn=1 then
   37    55               begin
   38    55                 c2 := 1;
   39    58                 while turn=1 do
   40    62                     ;                (* busy wait *)
   41    63                 c2 := 0;
   42    66               end;
   43    67 
   44    67          p2count := p2count + 1;
   45    72          total := total + 1;
   46    77 
   47    77          turn := 1;
   48    80          c2 := 1;
   49    83 
   50    83     until (p2count > 100);
   51    87 end;    (* proc2 *)
   52    88 
   53    88 begin   (* MAIN *)
   54    88 
   55    88     proceed := true;
   56    91     c1 := 1;
   57    94     c2 := 1;
   58    97     turn := 1;
   59   100 
   60   100     p1count := 0;
   61   103     p2count := 0;
   62   106     total := 0;
   63   109 
   64   109     cobegin
   65   110         proc1; proc2;
   66   118     coend;
   67   119 
   68   119     writeln('p1count = ',p1count,'    p2count = ',p2count);
   69   128     writeln('total = ',total)
   70   132 end.



Symbol table

    name       link      object       type         ref      nrm  lev  adr  aux

 45 _main        44     procedure   notyp           2     TRUE     0   88    0
 46 any           0     variable    synch           0     TRUE     1    5    0
 47 turn         46     variable    integer         0     TRUE     1    5    0
 48 c1           47     variable    integer         0     TRUE     1    6    0
 49 c2           48     variable    integer         0     TRUE     1    7    0
 50 proceed      49     variable    boolean         0     TRUE     1    8    0
 51 p1count      50     variable    integer         0     TRUE     1    9    0
 52 p2count      51     variable    integer         0     TRUE     1   10    0
 53 total        52     variable    integer         0     TRUE     1   11    0
 54 proc1        53     variable    process         3     TRUE     1   12    0
 55 $            54     type id     process         3     TRUE     1    0    0
 56 proc2        55     variable    process         4     TRUE     1   13    0
 57 $            56     type id     process         4     TRUE     1   44    0

Generated P-code

    0     ldadr        1         6          ;11
    1     ldcon.i      0         0          ;12
    2     store.i      0         0          ;12
    3     ldval.i      1         7          ;13
    4     ldcon.i      0         0          ;13
    5     releq.i      0         0          ;13
    6     jmpiz        0        23          ;13
    7     ldval.i      1         5          ;14
    8     ldcon.i      0         2          ;14
    9     releq.i      0         0          ;14
   10     jmpiz        0        22          ;14
   11     ldadr        1         6          ;15
   12     ldcon.i      0         1          ;16
   13     store.i      0         0          ;16
   14     ldval.i      1         5          ;17
   15     ldcon.i      0         2          ;17
   16     releq.i      0         0          ;17
   17     jmpiz        0        19          ;17
   18     jmpuc        0        14          ;17
   19     ldadr        1         6          ;18
   20     ldcon.i      0         0          ;19
   21     store.i      0         0          ;19
   22     jmpuc        0         3          ;19
   23     ldadr        1         9          ;20
   24     ldval.i      1         9          ;22
   25     ldcon.i      0         1          ;22
   26     addop.i      0         0          ;22
   27     store.i      0         0          ;22
   28     ldadr        1        11          ;22
   29     ldval.i      1        11          ;23
   30     ldcon.i      0         1          ;23
   31     addop.i      0         0          ;23
   32     store.i      0         0          ;23
   33     ldadr        1         5          ;23
   34     ldcon.i      0         2          ;25
   35     store.i      0         0          ;25
   36     ldadr        1         6          ;25
   37     ldcon.i      0         1          ;26
   38     store.i      0         0          ;26
   39     ldval.i      1         9          ;28
   40     ldcon.i      0       100          ;28
   41     relgt.i      0         0          ;28
   42     jmpiz        0         0          ;28
   43     rproc        1         0          ;28
   44     ldadr        1         7          ;33
   45     ldcon.i      0         0          ;34
   46     store.i      0         0          ;34
   47     ldval.i      1         6          ;35
   48     ldcon.i      0         0          ;35
   49     releq.i      0         0          ;35
   50     jmpiz        0        67          ;35
   51     ldval.i      1         5          ;36
   52     ldcon.i      0         1          ;36
   53     releq.i      0         0          ;36
   54     jmpiz        0        66          ;36
   55     ldadr        1         7          ;37
   56     ldcon.i      0         1          ;38
   57     store.i      0         0          ;38
   58     ldval.i      1         5          ;39
   59     ldcon.i      0         1          ;39
   60     releq.i      0         0          ;39
   61     jmpiz        0        63          ;39
   62     jmpuc        0        58          ;39
   63     ldadr        1         7          ;40
   64     ldcon.i      0         0          ;41
   65     store.i      0         0          ;41
   66     jmpuc        0        47          ;41
   67     ldadr        1        10          ;42
   68     ldval.i      1        10          ;44
   69     ldcon.i      0         1          ;44
   70     addop.i      0         0          ;44
   71     store.i      0         0          ;44
   72     ldadr        1        11          ;44
   73     ldval.i      1        11          ;45
   74     ldcon.i      0         1          ;45
   75     addop.i      0         0          ;45
   76     store.i      0         0          ;45
   77     ldadr        1         5          ;45
   78     ldcon.i      0         1          ;47
   79     store.i      0         0          ;47
   80     ldadr        1         7          ;47
   81     ldcon.i      0         1          ;48
   82     store.i      0         0          ;48
   83     ldval.i      1        10          ;50
   84     ldcon.i      0       100          ;50
   85     relgt.i      0         0          ;50
   86     jmpiz        0        44          ;50
   87     rproc        1         0          ;50
   88     ldadr        1         8          ;53
   89     ldcon.b      0         1          ;55
   90     store.b      0         0          ;55
   91     ldadr        1         6          ;55
   92     ldcon.i      0         1          ;56
   93     store.i      0         0          ;56
   94     ldadr        1         7          ;56
   95     ldcon.i      0         1          ;57
   96     store.i      0         0          ;57
   97     ldadr        1         5          ;57
   98     ldcon.i      0         1          ;58
   99     store.i      0         0          ;58
  100     ldadr        1         9          ;58
  101     ldcon.i      0         0          ;60
  102     store.i      0         0          ;60
  103     ldadr        1        10          ;60
  104     ldcon.i      0         0          ;61
  105     store.i      0         0          ;61
  106     ldadr        1        11          ;61
  107     ldcon.i      0         0          ;62
  108     store.i      0         0          ;62
  109     cobeg        0         0          ;62
  110     mkstk        1        55          ;64
  111     ldadr        1        12          ;64
  112     procv        0         0          ;64
  113     calls        1         4          ;64
  114     mkstk        1        57          ;65
  115     ldadr        1        13          ;65
  116     procv        0         0          ;65
  117     calls        1         4          ;65
  118     coend        0         0          ;65
  119     ldcon.i      0        10          ;68
  120     wrstr        0         0          ;68
  121     ldval.i      1         9          ;68
  122     wrval.i      0         0          ;68
  123     ldcon.i      0        14          ;68
  124     wrstr        0        10          ;68
  125     ldval.i      1        10          ;68
  126     wrval.i      0         0          ;68
  127     wrlin        0         0          ;68
  128     ldcon.i      0         8          ;69
  129     wrstr        0        24          ;69
  130     ldval.i      1        11          ;69
  131     wrval.i      0         0          ;69
  132     wrlin        0         0          ;69
  133     stopx        0         0          ;69
