DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦97090a173⟧ TextFile

    Length: 94464 (0x17100)
    Types: TextFile
    Names: »algpass73tx «

Derivation

└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »algpass73tx « 

TextFile



; jz.fgs 1987.06.10                               algol 8, pass 7, page 1

; to be blamed: jz



k=e0

s. b170, c100, d59, f39, g30, h30, i172, j6 ;
w.                                         ;

; use of names:

; a: local points in internal blocks
; b: output bytes + a few input byte values
; c: conditional actions or switching actions, literal actions.
;    i.e. all actions which do not neccessarily continue with
;    the next byte in the main table.
; d: unconditional actions, i.e. actions which continue with
;    the next byte in the main table, possibly after using parameters.
; e: pass 0 names
; f: variables, constants, full word masks
; g: tables and points in tables
; h: definitions of halfword masks and constants.
; i: points in the main table, referenced by the input byte table.
; j: odd addresses in the code

g1=k                    ;
w.            g2        ; no of bytes in pass 7
h.        4   , 7<1 + 0 ; entry=4, passno=7, direction=forwards
g3=e1+2046              ; reference base for initpass7
w.    al. w1  g3.       ; w1 := reference base;
      jl      x1+g4     ; goto initpass7;  (at the end)


; zone descriptor sizes,
; used by declaration of and references to zones and zonearrays.
h0=e48     ; base buffer, relative to record base
h4=e54     ; block proc ,    -      -    -    -
h5=e52     ; zone descriptor size
h6=h0+h5   ; record base, relative to top descriptor
h7=h4+h5+2 ; blockproc  ,    -      -   -     -

\f

                                                                                                                    

; jz.fgs 1987.06.10                               algol 8, pass 7, page 2

; output byte values

; modifications added to the basic byte values to give shown actions:
b0= -3<9+1 ; output byte, next
b1= -1<9+1 ; output byte, return
b2= -4<9+1 ; output byte, outopand, next
b3= -2<9+1 ; output byte, outopand, return

; basic outbyte values
b10=36     , b11=b10+2  , b12=b10+4  ; bz         , rl          , dl
b13=42     , b14=74     , b15=b14+2  ; loadpoint  , hs          , rs
b16=b14+4  , b17=16     , b18=14     ; ds         , shortlit    , medlit
b19=12     , b20=8      , b21=10     ; longlit    , lngstrng    , strnxt
b22=242    , b23=244    , b24=196    ; trouble    , newline     , takeform
b25=44     , b26=b25+2  , b27=b25+4  ; ba         , wa          , aa
b28=b25+6  , b29=52     , b30=b29+2  ; fa         , ws          , ss
b31=b29+4  , b32=58     , b33=60     ; fs         , wm          , fm
b34=72     , b35=268    , b36=118    ; longmult   , multtest    , prepuvop
b37=62     , b38=64     , b39=66     ; wd         , fd          , longdiv
b40=68     , b41=70     , b42=120    ; rlw10      , longmod     , intexp
b43=122    , b44=90     , b45=108    ; realexp    , alw00       , shortsh
b46=b45+2  , b47=b45+4  , b48=114    ; medsh      , longsh      , formmask
b49=92     , b50=94     , b51=96     ; law10      , la          , lo
b52=98     , b53=164    , b54=128    ; lx         , condj       , se
b55=130    , b56=126    , b57=124    ; sn         , sl          , sh
b58=132    , b59=134    , b60=142    ; slw11      , shw1-1      , sew00
b61=140    , b62=146    , b63=150    ; snw00      , slw00       , shw00
b64=144    , b65=148    , b66=116    ; slw01      , shw0-1      , low02
b67=162    , b68=166    , b69=174    ; boolean    , condbyp     , byplab
b70=158    , b71=80     , b72=b71+2  ; ldw164     , absint      , abslong
b73=b71+4  , b74=86     , b75=88     ; absreal    , acw1x1      , ac
b76=100    , b77=102    , b78=104    ; cf         , ci          , floatlng
b79=106    , b80=154    , b81=156    ; longround  , blw02       , blw00
b82=208    , b83=b82+2  , b84=b82+4  ; asw10      , asw11       , asw12
b85=240    , b86=270    , b87=18     ; reserve    , loadw3      , zonebase
b88=216    , b89=238    , b90=206    ; initzone   , loadznseg   , indexch
b91=236    , b92=226    , b93=220    ; fieldalarm , indexalarm  , recceck0
b94=b93+2  , b95=b93+4  , b96=218    ; reccheck1  , reccheck3   , reccheck
b97=230    , b98=b97+2  , b99=b97+4  ; fieldch0   , fieldch1    , fieldch2
b100=228   , b101=214   , b102=136   ; fieldch    , zindexch    , szw11
b103=272   , b104=274   , b105=266   ; storebase  , getdoper    , begcall
b106=262   , b107=264   , b110=282   ; endcall    , begpar      , endparbase
; note the order: b110, b109, b108
b109=b110+22,b108=b110+20,b111=182   ; valueex    , addrex      , forif
b112=138   , b113=258   , b114=260   ; sow11      , of          , ofsw
b115=188   , b116=190   , b117=256   ; else       , endelse     , case
b118=254   , b119=252   , b120=250   ; litcase    , endcase     , endlitcase
b121=20    , b122=22    , b123=24    ; begblock   , begproc     , endblock
b124=26    , b125=28    , b126=30    ; endzblck   , exitbl      , exitprnt
b127=32    , b128=248   , b129=198   ; exittppr   , endext      , intval
b130=200   , b131=204   , b132=202   ; realval    , takarr      , takezarr
b133=176   , b134=192   , b135=194   ; gotobyp    , localgo     , compgo
b136=34    , b137=b22   , b138=170   ; colon      , stop        , doabs
b139=172   , b140=184   , b141=186   ; forlab     , step        , testfirst
b142=168   , b143=180   , b144=178   ; bypabs     , enddo1      , enddon
b145=152   , b146=160   , b147=246   ; slw10      , lxw0        , endpass
b148=276   , b149=278   , b150=280   ; sew10a     , sew00a      , low10
b151=314   , b152=316   , b153=318   ; disable    , enable      , long compare
b154=320   , b155=322   , b156=324   ; longval    , blockprocformal, ixw1
b157=330   , b158=b157+2, b159=b157+4; doperelbool, doperelint, doperellong
b160=b159-2, b161=b159-4             ; doperelint , doperellong, <*field*>
; note the sequence b157 ... b161

\f

                                                                                           

; jz 1979.06.22                                algol 8, pass 7, page 3




h.    ; input byte table, only referenced from nextin (at c3,a7).
g8:   ; converts the input bytes, which form a tight sequence from
      ; 0 to 173, to a relative entry point (i-name) in the pass 7
      ; main table. the input byte is used as a linear index in the
      ; byte table, which for convenience is written in two dimensions.

;+0 , +1  , +2  , +3  , +4  , +5  , +6  , +7  , +8  , +9  ;
i44 , i46 , i45 , i125, i126, i33 , i34 , i127, i128, i31 ;   0
i32 , i50 , i51 , i52 , i53 , i54 , i55 , i56 , i57 , i58 ;  10
i59 , i60 , i61 , i62 , i63 , i64 , i65 , i66 , i67 , i47 ;  20
i48 , i49 , i36 , i35 , i37 , i39 , i38 , i40 , i68 , i135;  30
i166, i167, i120, i122, i42 , i41 , i43 , i69 , i70 , i169;  40
i71 , i71 , i170, i72 , i129, i130, i131, i132, i124, i134;  50
i135, i136, i137, i138, i139, i140, i141, i142, i143, i144;  60
i146, i145, i161, i162, i163, i164, i159, i160, i158, i121;  70
i123, i148, i149, i151, i153, i154, i155, i84 , i85 , i86 ;  80
i87 , i112, i150, i152, i119, i119, i118, i117, i116, i115;  90
i94 , i95 , i96 , i97 , i107, i106, i114, i113, i88 , i89 ; 100
i90 , i91 , i92 , i93 , i157, i156, i147, i168, i165, i133; 110
i82 , i83 , i82 , i73 , i74 , i75 , i76 , i77 , i78 , i79 ; 120
i80 , i81 , i98 , i99 , i100, i101, i108, i109, i110, i111; 130
i102, i103, i104, i105, i1  , i2  , i3  , i4  , i5  , i6  ; 140
i7  , i8  , i9  , i10 , i11 , i12 , i13 , i14 , i15 , i16 ; 150
i17 , i18 , i19 , i20 , i21 , i22 , i23 , i24 , i25 , i26 ; 160
i27 , i28 , i29 , i3  , i30 , i171, i172                  ; 170
g9: ; top input byte table

; input byte values used for explicit tests in the actions
; tastenext(d24), if tasteendparam(c20), and if tasteendbounds(c21):
b5= 96 ; par      , lowest endparam value
b6= 98 ; addrpar  , highest  -        -   (valpar=97)
b7= 90 ; endbounds
b8=118 ; trouble
b9=117 ; newline

; return stack, only referenced from c3 ff and c17 ff. holds return
; points, i.e. w2-values, to the maintable, stacked by the interpreter
; when an s.-action is encountered, and unstacked  by return.
; the absolute address of the current stacktop is kept in f0 (curr w2top)
; and points at the first not used word in the return stack.
; f0 is initialized to point at the absolute top of the stack (g6) and
; when the interpreter is entered at c3, after init pass 7, it will thus
; return to maintable(0) which holds the action return, the stack will
; thus be initialized (see c3) until it finally returns to i0 (startpass7).
; the neccessary size of the stack is determined by the maximum nesting of
; s.-calls in the maintable, and the assigned size (10) should be plenty.

w.
g5:  i0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
g6:
\f

                                                                             

; fgs 1986.02.18                             algol 6, pass 7, page ...4...




b. a7; interrupt handling, multalarm
w.   ;

d56:    ; interrupt address:
a0:   0 ;
a1:   0 ; saved w0w1
a2:   0 ;
a3:   0 ; saved w2w3
      0 ;
a4:   0 ; return address;
a5:   0 ; cause
c.e100-16
      jl.  2, r.(:d56.+e100+2:)>1
z.

      al. w2  a0.       ; interprete interrupt:
      rl. w0  a5.       ;
      se  w0  0         ;
      sl  w0  5         ;   if cause not arith overfloww then
      jl.     e36.      ;   goto pass 0 interrupt;
a6:   al  w0  b22       ; overflow:
      jl. w3  e3.       ;   outbyte(stop);
      al. w1  a7.       ;
      jl. w3  e4.       ;   message(<:overflow:>);
      dl. w2  a2.       ;   restore w1w2;
      al  w0  1<10      ; set warning bit:
      lo. w0  e29.      ;   modebit(warning) := true;
      rs. w0  e29.      ;
      al  w3  0         ;
      al  w0  1         ;   result := 1;
      jl.    (a4.)      ;   goback;

d57:  ds. w2  a2.       ; multalarm:
      rs. w3  a4.       ;   save w1 w2 and return;
      jl.     a6.       ;   goto overflow;

a7:   <:overflow<0>:>   ;

e.      ; end interrupt handling

\f

                                                                                                             

; rc 1.3.1971                                  algol 6, pass 7, page 5




; operand descriptions.
; in the operand stack (w1-stack) each operand is described by 6 bytes
; (3 words), some of which may be irrelevant. w1 points normally at
; the last byte of the top entry in the stack, which thus may be re-
; ferenced via x1-5 through x1. the six bytes holds:
;   descr:
;      x1-5: wherebits, describing where the operand is:
;            1<0 : in short work
;            3<0 : in long work
;            1<2 : in register
;            1<3 : a literal
;            1<4 : in uv
;            1<5 : only together with 1<2: address in register.
;            1<6 : clear wanted, i.e. the operand may have to be
;                  saved in a working location, e.g. simples in input.
;            1<11: shield, a special bit used to delimit levels in the
;                  stack, e.g. a block, the operand itself may be either
;                  a literal or a pseudo operand which only holds inter-
;                  nally used parameters.
;      x1-4: kind type:
;            kindno<6 : kindno is used as index in the operand directing
;                       byte table for the normaloutput of an operand,
;                       or in the param directing byte table when the operand
;                       is output as a procedure parameter. otherwise it
;                       is only used in special cases when wherebits and
;                       type do not suffice. possible values, see descr
;                       table below.
;            blinds<2 : number of irrelevant bytes in the value, used to
;                       determine how much to output (see below).
;                       possible values: 0, 1, 2, 3, 4.
;            type  <0 : the type of the operand:
;                       0: boolean
;                       1: integer
;                       2: long (also label, string and no types)
;                       3: real
;            label <5:  a special bit, which really is a fifth type indi-
;                       cating a label.
;                       only used by the action loadreg, to determine when
;                       to output a loadpoint.
;   value:
;      x1-3-x1: from 0 to 4 bytes, right justified, holding:
;               for literals: the value
;               for others  : the addressing information: relative address,
;                              external no, blockno, etc.

\f

                                                                                         

; rc 24.2.1971                                  algol 6, pass 7, page 6




; for each entry in the operand description table below, the
; contents of value is denoted as follows:
;  content:        x1-3:    x1-2:       x1-1:        x1:
;    0:            irr      irr         irr          irr
;    l1:            -        -           -           value
;    l2:            -        -          value        value
;    l4:           value    value       value        value
;    b1:           irr      irr         blockrel     blockno
;    ex:            -        -          extno        blockno-1
;    el: bl or ex
;    ar:           doperel  noofsubs.   blockrel     blockno
;    wk:           irr      irr         irr          blockrel
;    zr:            -        -          zonebaserel  0
;    uv:            -        -          irr          1
;        the 1 for uv is a fictive blockno only used during clear.

; definitions of where-bits and other bit masks.

h10= 1<0     ;work
h11= 1<1     ;work is long
h12= 1<2     ;register
h13= 1<3     ;literal
h14= 1<4     ;uv
h15= 1<5     ;address
h16= 1<6     ;clear wanted
h17= 1<11    ;shield

h18=h10+h11  ;long work
h19=h12+h15  ;address in register, no clear, i.e. only save address.
h20=h19+h16  ;   -     -    -    , clear, i.e. save the value
h21=h13+h17  ;literal shield
h22=h12+h16  ;value in register
h23=h14+h16  ;value in uv
h26=h12+h14  ;expr == uv or reg

h24= 1<6     ;spill.yes, only used by initialize pass 7
h25= 1<3     ;index.yes,  -    -    -  -          -   -

\f

                                                                                     

; rc 11.3.1971                                  algol 6, pass 7, page 7




; operand description table.
; this table is used whenever a new operand is stacked or when
; the description of an old one is changed.
; it holds the descr, i.e. one word, for each possible operand kind.
; and is referenced from the actions via the g-names and from the
; main table relative to g10 or to the other g-names which again
; are redefined so that they are relative to g10. the range of such
; relative addressing is indicated below in the column ref.
; if the type part always must be set separately this is indicated
; by a t, otherwise some useful type is given.
; the kindno in a descr is used as index both in the operand directing
; byte table and in the endparam table, the number of different kinds
; is therefore the union of the distinct kinds needed in these 2 tables.


;      wherebits         type
;           kindno           value-format
w.h.   ;           blinds        ref   operands in input
g10:   h13,  1<6 + 3<2 + 0 ; l1   0    lit bool
       h13,  2<6 + 2<2 + 1 ; l2  +2    lit int
       h13,  3<6 + 0<2 + 2 ; l4  +4    lit long
       h13,  3<6 + 0<2 + 3 ; l4  +6    lit real
       0  ,  4<6 + 2<2 +34 ; ex  +8    label (type 1<5 + 2)
       0  ,  5<6 + 2<2 + 2 ; el  +10   procs, except noparpr.
       0  ,  6<6 + 2<2 + 2 ; el  +12   zone
       0  ,  7<6 + 2<2 + 2 ; bl  +14   zone array
       h16,  8<6 + 2<2 ; t ; el  +16   simple var
       0  ,  9<6 + 2<2 + 2 ; bl  +18   formals
       0  , 10<6 + 2<2 + 2 ; ex  +20   noparpr
       0  , 11<6 + 2<2 ; t ; ar  +22   array

                           ;           internally generated operands
       h18,  0<6 + 3<2 + 2 ; wk  -4    long work
       h10,  0<6 + 3<2 ; t ; wk  -2    value in work
g11:   h10, 12<6 + 3<2 ; t ; wk   0    addr in work
g12:   h22, 13<6 + 4<2 ; t ; 0    0    value in reg
       h20, 14<6 + 4<2 ; t ; 0   +2    addr in reg
       h12, 15<6 + 4<2 + 1 ; 0   +4    zaddr in reg
g13:   h23, 16<6 + 4<2 + 3 ; uv   0    value in uv
g14:   0  ,  8<6 + 2<2 + 1 ; bl   0    no clear var, local int.
       h21,  2<6 + 2<2 + 1 ; l2  -4    shield, literal
       0  , 17<6 + 3<2 + 1 ; wk  -2    zonereladdr
g15:   h13,  2<6 + 2<2 + 1 ; l2   0    lit int (=g10+2)

; kind numbers used for explicit tests
h27= 4; label
h28=11; array
h29= 0; work, i.e. arr field in end param actions
h30= 6; zone

\f

                                                                                                                                

; rc 24.2.1971                                  algol 6, pass 7, page 8




; operand direction byte table.
; only accessed from outopand (d3,a6+20) where it is indexed by
; the kind of the operand.
; -1 is not output (no direction byte required).
w.h.
g18:   ; first of operand direction byte table
g19:   ; the first direction byte is also the variable curr block
       ; kindno  operand addressing
  -4   ;  0      block addr
  16   ;  1      lit sh
  14   ;  2      lit med
  12   ;  3      lit long
  -1   ;  4      block addr
  -1   ;  5       -    -
  -1   ;  6       -    -
  -1   ;  7       -    -
  -1   ;  8       -    -
  -1   ;  9       -    -
  -1   ; 10       -    -
  -1   ; 11       -    -
   2   ; 12      indirect (local block)
  -1   ; 13      not relevant (value in reg)
   4   ; 14      x1-addressing
  -1   ; 15      not relevant (zaddr in reg)
   6   ; 16      uv
   0   ; 17      zonereladdr


; endparam modif.
; only accessed from savemodif (in c4:) with savetyp holding a
; kindno.

g17:   ; kindno  endparam
  24   ;  0      arrfield
  12   ;  1      literal
  12   ;  2        -
  12   ;  3        -
  14   ;  4      label
   6   ;  5      proc
   0   ;  6      zone
   4   ;  7      zonearray
  10   ;  8      simple
   2   ;  9      formals
   8   ; 10      procnopar
  16   ; 11      array
   0   ; 12      irrelevant, should not occur
  28   ; 13      registerexpr
  26   ; 14      subscriptexpr
  18   ; 15      zoneaddr
  30   ; 16      uv expression
;  -   ; 17      irrelevant should not occur

\f

                                                                                               

; fgs 1987.06.10                                algol 6, pass 7, page 9




; small conversion and modification byte tables, all indexed with
; a type value:

g20:  1<6+3<2+0 ; lit kindtype(type)
      2<6+2<2+1 ;   used when the top operand type is changed and
      3<6+0<2+2 ;   it happens to be a literal
      3<6+0<2+3 ;

g21:  b10, b11, b12, b12 ; load reg output byte(type): bl, rl, dl, dl,
      b13                ;   loadpoint.  (used only by d1,d2)

g22:  0  , 0  , 1  , 2   ; type switch(type), see c25

g23:  0  , 1  , 2  , 2   ; length switch(type), see c27

g24:  0  , 0  , 2  , 4   ; typemodif(type), see c4, c5

g25:  0  , 2  , 4  , 4   ; lengthmodif(type), see c4, c5

g26:  1  , 3  , 2  , 0   ; pass7type (pass5type), see d46

g27:  2  , 2  , 4  , 6   ; pass8type (type), see conditions, i120 ff

g28:  0  ,-2  ,-4  ,-4   ; negative g25, see c4 and i98 .. i101

\f

                                                                                           

; rc 10.3.1971                                  algol 6, pass 7, page 10




; variables:
w.
f0:   0 ; currw2 stack top; set to g5 abs by init pass 7.
f1:   0 ; release: boolean, true=0, false<>0.
f2:   0 ; regused by: holds either an operand stack pointer for the
        ;   entry using the register (reg used true) or a
        ;   return point (regused false, <g0)
f3:   0 ; save w1 internal: (by clearreg)
f4:   0 ; place: an operand stack pointer, used by copy entry.
f5:   0 ; save w1:
f6=k+1  ; savetyp: holds a type saved from the operand stack
      0 ;   or set explicitly. used to modify output bytes or
        ;   set the toptype. used both as byte and word(dirty)
f7:   0 ; dbw:            workbits1:  used by the working location
f8:   0 ;  - : workbits:  workbits2:  administration
f9:   0 ; dbw:            lastwork:      -             -
f10:  0 ;  - : workinf:   workbase:      -             -
h.
f11:  0 ; not used
f12:  0 ; relbase:  dopebaserel:  appetite:
f13:  0 ; arraytype:
f14:  0 ; counter:
w.
f15:  0 ; bool:  used by zone declarations; false=0, true =c0
f16:  0 ; zonedecl: - -   -      -        ; true =0, false=c0
f17:  0 ; save return1:  for getwork and newline
f18:  0 ; blockw1:  the w1 value after begin block of the
        ;           current block, only used for check-purposes
f19:  0 ; save return2:  outopand, reg to work, taste next

f21:  0 ; abs top w1 stack, set by initpass7 and after that
        ; not used

; combined masks and constants
f31:  h11<12     ;
f32:    1<22     ; dbw:  used to set and clear workbits
        3<22     ;  -
f33:  h13<12     ; nxtlit     , used in conditional actions
f34:  h12<12+h13 ; nxtreg or toplit   -      -        -
f35:  h12<12     ; nxtreg             -      -        -
f36=k+2          ;
f. -.5           ;
w. -1<23         ; dbw
f38:  0          ; -  dbw  initialize workbits
f37:  1<10       ;     -   roundconstant in litact real long.
f39=k+2          ;
f.  -1.0         ;
w.               ;

\f

                                                                               
; fgs 1987.06.15                                algol 6, pass 7, page 11

b.a20;
w.   ;

a0:   rl  w0  x1-10   ; callact:
      hl  w0  x1-5    ;   w0:= wherebits(nxt)<12 + wherebits(top);
      jl. w3  x3+g0.  ;   call(act(w3));

c0:                   ; next:
j0=k+1
a1:   al  w2 ;savedw2 ;   w2:= savedw2;
c1:                   ; nextw2:
a2:   bl. w3  x2+g0.  ;   w3:= instr(w2);
      al  w2  x2+1    ;   w2:= w2+1;
      sl  w3  0       ;   if w3 >= 0 then
      jl.     a6.     ;     goto s.call;
a4:   hs. w2  j0.     ; instrinw3:  savedw2:=w2;
      so  w3  1       ;   if w3 even then
      jl.     a0.     ;     goto callact;
                      ; outacts:
      al  w0 2.111111110;
      la  w0  6         ;
      as  w3  -8      ;   set return from outbyte according to
      al. w3  x3+a5.  ;     bit 13, 14 of w3;
      jl.     e3.     ;   goto outbyte(w3);
;a5-8:                ; afterb2:
      jl. w3  d3.     ;   outopand;
;a5-6:                ; afterb0:
      jl.     a1.     ;   goto next;
;a5-4:                ; afterb3:
      jl. w3  d3.     ;   outopand;
;a5-2:                ; afterb1:
c3:a3:rl. w2  f0.     ; return:  unstackw2:  w2:= currw2stacktop;
a5:   sh. w2  g5.     ; w2topinw2:  if w2 = firstw2stack then
      jl.     a7.     ;     goto nextin;
      al  w3  x2-2    ;
      rs. w3  f0.     ;   currw2stacktop:= w2-2;
      rx  w2  x3      ;   swop(w2, w2stack(w2-2));
      jl.     a2.     ;   goto nextw2;


a6:   rx. w2 (f0.)    ; s.call:  stackw2:
      rs. w2  f0.     ;   swop(w2, w2stack(currw2stacktop));
      al  w2  x3      ;   currw2stacktop:= w2;
      jl.     a2.     ;   w2:= w3;  goto nextw2;


a7:   jl. w3  e2.     ; nextin:
      bl. w2  x2+g8.  ;   w2:= inputtable(nextin);
      jl.     a2.     ;   goto nextw2;
\f


; fgs 1987.06.18                                  algol 6, pass 7, page 12


c4:   rl. w3  f6.     ; savemodif(modif, outbyte):
      ea. w3  x2+g0.  ;
      el. w3  x3+g10. ;
      al  w2  x2+1    ;
      jl.     a9.     ;

c5:   al  w3  3       ; toptypeop(outbyte):
      la  w3  x1-4    ;
a8:   bl. w3  x3+g24. ;
a9:   ba. w3  x2+g0.  ;
      al  w2  x2+1    ;
      jl.     a4.     ;   goto instrinw3;


c6:   am      1       ; skip3(,,):
c7:   am      1       ; skip2(,):
c8:   al  w2  1       ; skip1():
      ba. w2  j0.     ;
      jl.     a2.     ;   goto nextw2;


c9:   rl. w3  f6.     ; setsavetyp.:
      jl.     a10.    ;

c10:  am      -3      ; setbool.:
c13:  am      1       ; setreal.:
c12:  am      1       ; setlong.:
c11:  al  w3  1       ; setint.:
a10:  al  w0  -4      ;
      la  w0  x1-4    ;
      sz. w0 (f33.)   ;
      hl. w0  x3+g20. ;
      lo  w3  0       ;
      rs  w3  x1-4    ;
      jl.     a3.     ;   goto return;


c14:  am      2       ; zonereg:
c15:  am      2       ; addrreg:
c16:  al  w3  0       ; valreg:
      al  w1  x1+6    ;
      al  w0  3       ;
      la  w0  x1-4    ;
      wa. w0  x3+g12. ;
      rs  w0  x1-4    ;
      rs. w1  f2.     ;
      jl.     a3.     ;   goto return;

c57: rl. w3  f0.     ; tripplereturn:
     al  w2  x3-2    ;
     rs  w3  x2      ;
     rs. w2  f0.     ;


c17:  rl. w3  f0.     ; doublereturn:
      al  w2  x3-2    ;
      rs  w3  x2      ;
      rs. w2  f0.     ;
      jl.     a5.     ;   goto w2topinw2;


c18:  bl. w2  x2+g0.  ; go(s.):
      jl.     a2.     ;

c59:                  ; create_new_doperel:               
      al  w3  6       ;   dope.block rel - base.block rel :=
      jl.     a11.    ;     6;

c19:  el  w3  x1-9    ; newdope_to_type_literal (reldope);
      es  w3  x1-7    ;   operand.value :=
a11:  rs  w3  x1      ;     dope.block rel - base.block rel;
      al  w3  0       ;
      rs  w3  x1-2    ;
      zl. w3  f6.     ;
      ls  w3  1       ;   operand type :=
      rl. w3  x3+g10. ;     literal (top type);
      rs  w3  x1-4    ;     
      jl.     a2.     ;   goto nextw2;

e.    ;
\f


; rc 24.2.1971                                  algol 6, pass 7, page 13


b. a7;
w.   ;
d1:
a0:   sz  w0  h12     ; toptoreg:
      jl.     a3.     ;   if topreg then goto test addrreg;
      jl. w3  d8.     ;   clearreg;
      al. w3  c0.     ;   set return to next;
d2:
a1:   al  w2  2.100011; loadreg:
      la  w2  x1-4    ;
      sz  w2  2.100000;   w0:= loadregoutputbyte
      al  w2  4       ;     (if toplabel then 4 else toptyp);
      bz. w0  x2+g21. ;
      rs. w3  f19.    ;   set return from outopand;
      jl. w3  e3.     ;   outbyte(w0);
      jl.     a5.     ;   goto outopandintern;

a3:   sz  w0  h15     ; test addrreg:
      jl.     a1.     ;   if addrreg then goto loadreg;
      jl.     a7.     ;   goto release;

d3:
a4:   rs. w3  f19.    ; outopand:
a5:   al  w3  2.011100; outopandintern:
      la  w3  x1-4    ;
      jl.     x3+a6.  ;   for i:= blinds(top) step 1 until 3 do
a6:   bz  w0  x1-3    ;     outbyte(byte(x1-3+i));
      jl. w3  e3.     ;
      bz  w0  x1-2    ; a6+4:
      jl. w3  e3.     ;
      bz  w0  x1-1    ; a6+8:
      jl. w3  e3.     ;
      bz  w0  x1      ; a6+12:
      jl. w3  e3.     ; 
      bz  w3  x1-4    ; a6+16:
      ls  w3  -6      ;
      bl. w0  x3+g18. ;   w0:= operand direction byte(kindno(top));
      se  w0  -1      ;   if w0 <> -1 then
      jl. w3  e3.     ;     outbyte(w0);
      rl. w3  f19.    ;   restore return;

d4:
a7:   al  w0  0       ; release:
      rx. w0  f1.     ;
      se  w0  0       ;
      jl      x3      ;
      al  w1  x1-6    ;
      bz  w0  x1+1    ;
      sz  w0  h10     ;
      jl.     d11.    ;
      sz  w0  h12     ;
      rs. w3  f2.     ;
      jl      x3      ;

e.    ;
\f


; rc 24.2.1971                                  algol 6, pass 7, page 14


b. a8 ; clear administration
w.    ;
d5:
a0:   bl  w0  x1      ; clearblk:
      jl.     a1.     ;
d6:   am      2045    ; clearuv:
d7:   al  w0  -2045   ; clearall:
a1:   hs. w0  j1.     ;
      al. w3  a7.     ;

d8:
a2:   rx. w3  f2.     ; clearreg:
      rs. w1  f3.     ;
      sh. w3  g0.     ;
      jl.    (f2.)    ;
      al  w1  x3      ;
      bz  w0  x1-5    ;
      sz  w0  h15     ;
      jl. w3  a4.     ;
      am      -2      ;
a3:   rl. w0  g11.    ;
      jl. w3  a8.     ;
      rl. w1  f3.     ;
      jl.    (f2.)    ;

a4:   so  w0  h16     ;
      jl.     a3.     ;
      rs. w0  f1.     ;
      jl.     d2.     ;


a5:   bl  w3  x1      ;
      sz  w0  h16     ;
j1=k+1                ;
      sh  w3; clearblk;
      jl.     a6.     ;
      rs. w0  f1.     ;
      jl. w3  d2.     ;
      rl. w0  g11.-2  ;
      jl. w3  a8.     ;
a6:   al  w1  x1-6    ;

a7:   bl  w0  x1-5    ;
      sl  w0  0       ;
      jl.     a5.     ;

      rl. w1  f3.     ;
      jl.     c0.     ;
\f



; rc 2.3.1971                                  algol 6, pass 7, page 15




d9:
a8:   rs. w3  f19.    ; regtowork (w0 = workdescr);
      al  w2  3       ;
      la  w2  x1-4    ;
      se. w0 (g11.)   ;
      hs  w2  4       ;
      lo  w2  0       ;
      rs  w2  x1-4    ;
      jl. w3  d10.    ;
      al  w0  b15-1   ;
      ba  w0  x1-5    ;
      jl. w3  e3.     ;
      bz  w0  x1      ;
      jl. w3  e3.     ;
      bz. w0  g19.    ;
      rl. w3  f19.    ;
      jl.     e3.     ;

e.   ;

\f

                                                                               

; rc 1.3.1971                                  algol 6, pass 7, page 16




b. a5 ; work administration
w.    ;

d10:  rs. w3  f17.    ; reservework:  comment with the description
      dl. w0  f8.     ;   given in top;
      rl  w2  x1-4    ;
      so. w2 (f31.)   ;
      jl.     a1.     ;
      ld  w0  -1      ;
      lo. w3  f7.     ;
      lo. w0  f8.     ;
a1:   nd. w0  j2.     ;
      bz  w3  x1-5    ;
      jl. w2  a3.     ;
      bl. w2  j2.     ;
      sh  w2  -47     ;
      jl.     a4.     ;
      wa  w2  4       ;
      sh. w2 (f9.)    ;
      rs. w2  f9.     ;
      wa. w2  f10.    ;
      ba  w2  x1-5    ;
      rs  w2  x1      ;
      jl.    (f17.)   ;

d11:
a2:   al  w2  x3      ; releasework:
      bz  w3  x1+1    ;
      ac  w0  x3      ;
      wa  w0  x1+6    ;
      ws. w0  f10.    ;
      as  w0  -1      ;
      hs. w0  j2.     ;
  
a3:   al  w0  0       ; setworktable:
      rl. w3  x3+f32. ;
j2 = k + 1            ;
      ld  w0; workno  ;
      lx. w3  f7.     ;
      lx. w0  f8.     ;
      ds. w0  f8.     ;
      jl      x2      ;

a4:   jl. w1  a5.     ;
      <:works:>       ;

d12:
a5:   jl. w3  e5.     ;

e.   ;

\f

                                                                                                       

; rc 1978.08.10                                  algol 6, pass 7, page 17




b. a2 ; input-output, set operands
w.    ;

d13:  al. w3  g10.    ; outfrompar(g10rel):
      sz  w0  0       ;
d14:  al  w3  x1      ; outfromw1(w1rel):
      ba. w3  x2+g0.  ;
      bl  w0  x3      ;
      jl. w3  e3.     ;
      jl.     c8.     ;

d15:  bl. w0  x2+g0.  ; inout(n):
a0:   jl. w3  e2.     ;
      rx  w2  0       ;
      jl. w3  e3.     ;
      al  w0  x2-1    ;
      sl  w0  1       ;
      jl.     a0.     ;
      jl.     c8.     ;   goto skip1;

d16:  al. w0  g10.    ; intopar(g10rel):
      sz  w0  0       ;
d17:  al  w0  x1      ; intow1(w1rel):
      ba. w0  x2+g0.  ;
      jl. w3  e2.     ;
      hs  w2 (0)      ;
      jl.     c8.     ;

d18:  jl. w3  e2.     ; in4 newop(descraddr):
      hs  w2  x1+3    ;
d19:  jl. w3  e2.     ; in3 newop(descraddr):
      hs  w2  x1+4    ;
d20:  jl. w3  e2.     ; in2 newop(descraddr):
      hs  w2  x1+5    ;
d21:  jl. w3  e2.     ; in1 newop(descraddr):
      hs  w2  x1+6    ;
      bl. w2  j0.     ;   restore w2;
  
d22:  bl. w3  x2+g0.  ; newop(descraddr):
      rl. w0  x3+g10. ;
d23:  al  w1  x1+6    ; newdescrinw0:
      rs  w0  x1-4    ;
      sh. w1 (f21.)   ;
      jl.     c8.     ;   goto skip1;
      jl. w1  d12.    ;
      <:stack:>       ;
  
d58:  al. w3  g10.    ; outputfrompar1:
      ba. w3  x2+g0.  ;
      al  w0  -e101   ;   w0 := - noofbytes for anom. var.;
      ba  w0  x3      ;
      jl. w3  e3.     ;
      jl.     c8.     ;

\f

                                                                                    

; rc 27.2.1971                                  algol 6, pass 7, page 18




d24:  rs. w3  f19.    ; tastenext:
a1:   jl. w3  e2.     ;
      al. w3  a1.     ;
      sn  w2  b9      ;
      jl.     d25.    ;
      al  w0  b22     ;
      sn  w2  b8      ;
      jl.     e3.     ;
      jl. w3  e11.    ;
      jl.    (f19.)   ;

d25:  rs. w3  f17.    ; newline:
      al  w0  b23     ;
      jl. w3  e3.     ;
      jl. w3  e1.     ;
      jl.    (f17.)   ;

c20:  jl. w3  d24.    ; if tasteendparam(do):
      sl  w2  b5      ;
      sl  w2  b6+1    ;
      jl.     c8.     ;
      jl.     c0.     ;

c21:  jl. w3  d24.    ; if tasteendbounds(do):
      se  w2  b7      ;
      jl.     c8.     ;
      jl.     c0.     ;

d26:  bl. w0  x2+g0.  ; newval and op(value,descr addr):
a2:   ds  w0  x1+6    ;
      al  w2  x2+1    ;
      hs. w2  j0.     ;
      jl.     d22.    ;

d27:  bl. w3  x2+g0.  ; newfullvaland op(value,descr addr):
      dl. w0  x3+g10. ;
      jl.     a2.     ;

d28:  bl. w0  x2+g0.  ; newlocalvar(relbaserel):
      ba. w0  f12.    ;
      hs  w0  0       ;
      hl. w0  g19.    ;
      rs  w0  x1+6    ;
      rl. w0  g14.    ;
      jl.     d23.    ;

d29:  rl  w0  x1-8    ; newdopeaddr(descraddr):
      hl  w0  x1-6    ;
      rs  w0  x1+6    ;
      jl.     d22.    ;

\f

                                                                                     

; rc 27.2.1971                                  algol 6, pass 7, page 19




d30:  am      -12     ; w1down:
d31:  al  w1  x1+6    ; w1up:
      jl.     c1.     ;   goto nextw2;

d32:  ba. w1  x2+g0.  ; setw1(incr):
      jl.     c8.     ;   goto skip1;

d33:  al  w0  x1      ; setplace(incr):
      ba. w0  x2+g0.  ;
      rs. w0  f4.     ;
      jl.     c8.     ;   goto skip1;

d34:  rl. w1  f4.     ; placetow1:
      jl.     c1.     ;   goto nextw2;

d35:  dl  w0  x1      ; copyentry:
      ds. w0 (f4.)    ;
      rl  w0  x1-4    ;
      am.    (f4.)    ;
      rs  w0  -4      ;
      jl.     c1.     ;   goto nextw2;

d36:  al  w2  x1-6    ; exch:
      rl. w0  f2.     ;
      sn  w0  x1      ;
      rs. w2  f2.     ;
      sn  w0  x2      ;
      rs. w1  f2.     ;
      rl  w0  x1      ;
      rx  w0  x2      ;
      rs  w0  x1      ;
      dl  w0  x1-2    ;
      rx  w0  x2-2    ;
      rx  w3  x2-4    ;
      ds  w0  x1-2    ;
      jl.     c0.     ;   goto next;

d37:  bl. w0  x2+g0.  ; toprel(+n):
      ba  w0  x1-1    ;
      hs  w0  x1-1    ;
      jl.     c8.     ;   goto skip1;

e.    ;

\f

                                                                                               

; rc 5.3.1971                                  algol 6, pass 7, page 20




b. a0 ;
w.    ;

d38:  al  w0  3       ; savetoptyp.
      la  w0  x1-4    ;
      jl.     a0.     ;

d39:  am      -3      ; savebool:
d42:  am      1       ; savereal:
d41:  am      1       ; savelong:
d40:  al  w0  1       ; saveint:
a0:   rs. w0  f6.     ;
      jl.     c1.     ;

d43:  al  w0  -1      ; formlitmask:
      am     (x1)     ;
      ls  w0  -24     ;
      rs  w0  x1      ;
      jl.     c1.     ;

d44:  bl. w0  x2+g0.  ; topval(incr):
      wa  w0  x1      ;
      rs  w0  x1      ;
      jl.     c8.     ;

d45:  bz. w3  x2+g0.  ; delete(wherebits):
      ac  w3  x3+1    ;
      la  w3  0       ;
      hs  w3  x1-5    ;
      jl.     c8.     ;

d46:  bl  w3  x1-55   ; preparrdecl:
      bs. w3  f14.    ;
      bs. w3  f14.    ;
      al  w3  x3+2    ;
      hs  w3  x1-55   ;
      bl. w3  f13.    ;
      bl. w3  x3+g26. ;
      rs. w3  f6.     ;
      jl.     c1.     ;

d47:  rs. w3  f1.     ; norelease:
      jl.     c1.     ;

\f

                                                                               

; jz 1982.06.23                                  algol 8, pass 7, page 21




d48:  rs. w1  f5.     ; savew1:
      jl.     c1.     ;

d49:  rl. w1  f5.     ; restorew1:
      jl.     c1.     ;

d50:  ac  w0  h5      ; prepzonedecl:
      bl. w3  f14.    ;
      wm  w3  0       ;   relbase :=
      ba. w3  f12.    ;     relbase - descrlength*counter -
      al  w3  x3-h6+1 ;     baserel;
      hs. w3  f12.    ;
      al  w3  0       ;   zonedecl := true else
d51:  rs. w3  f16.    ; prepzonearrdecl:  zonedecl := false;
      jl.     c0.     ;   goto next;

d52:  rl  w3  x1      ; prepcall:
      ls  w3  2       ;
      al  w3  x3+5    ;
      sl  w3  2045    ;
      jl.     d59.    ;
      hs  w3  6       ;
      rs  w3  x1      ;
      jl.     c1.     ;

e.    ;

\f

                                                                                              

; rc 27.2.1971                                  algol 6, pass 7, page 22




b. a3 ; conditions
w.    ;

c22:  sz. w0 (f33.)   ; if toplit and nxtlit(litact(anytype)):
c23:  so  w0  h13     ; if toplit(litact(anytype)):
      jl.     c8.     ;
      jl.     a0.     ;

c24:  sz. w0 (f33.)   ; if toplit and nxtlit(littypeact(int,long,real)):
c25:  so  w0  h13     ; if toplit(lit typact(int,long,real)):
      jl.     c6.     ;
      al  w3  3       ;
      la  w3  x1-4    ;
      ba. w2  x3+g22. ;
a0:   bl. w2  x2+g0.  ;
      dl  w0  x1      ;
      jl.     x2+g0.  ;

c26:  sz. w0 (f33.)   ; if toplit and nxtlit(litlnthact(int,long,real)):
c27:  so  w0  h13     ; if toplit(litlnthact(int,long,real)):
      jl.     c6.     ;
      al  w3  3       ;
      la  w3  x1-4    ;
      ba. w2  x3+g23. ;
      jl.     a0.     ;

c28:  sz. w0 (f34.)   ; relationswitch(s.,s.,s.,s.,s.,s.):
      al  w2  x2+3    ;   if toplit or nxtreg w2:=w2+3;
c29:  al  w3  3       ; typeswitch(s.int,s.long,s.real):
      la  w3  x1-4    ;
      ba. w2  x3+g22. ;
      jl.     c18.    ;   goto go;

c30:  so. w0 (f35.)   ; if toplit or nxtreg(do):
c31:  sz  w0  h13     ; if toplit(do):
      jl.     c1.     ;
      jl.     c8.     ;

c32:  so  w0  h13     ; if toplit(go(s.)):
      jl.     c8.     ;
      jl.     c18.    ;   goto go;

\f

                                                                                     

; jz 1982.06.18                                  algol 8, pass 7, page 23




c33:  so. w0 (f35.)   ; if nxtreg(do):
      jl.     c8.     ;
      jl.     c1.     ;

c34:  so  w0  h10     ; if not topwork(do,do):
      jl.     c1.     ;
      jl.     c7.     ;

c35:  bl. w3  x2+g0.  ; if top(som wherebit)do:(do):
      sz  w0  x3      ;
      jl.     c8.     ;
      jl.     c7.     ;

c36:  al  w0  3       ; if toptyp(type)do:(do):
      la  w0  x1-4    ;
      bl. w3  x2+g0.  ;
      se  w0  x3      ;
      jl.     c7.     ;
      jl.     c8.     ;
 
c100: al  w0  2046     ; if top(longextvar):
      la  w0  x1-4     ;
      se  w0  8<6+2<2+2;
      jl.     c8.      ;
      jl.     c37.     ;

c37:  rl  w0  x1      ; if topext(do):
      so  w0  1       ;
      jl.     c8.     ;
      jl.     c1.     ;

j3 = k + 1            ;
c38:  jl.     c8.     ; if spillyes(do):
; or if spill.yes:    ;
;      jl.    c1.     ;

c39:  rl  w0  x1      ; testexp value:
      sh  w0  7       ;
      sh  w0  1       ;   if topval < 2 or topval > 7 then
      jl.     c3.     ;    goto return;
      jl.     c1.     ;   goto nextw2;

c40:  al  w2  x2+7    ; selectexp:
      ws  w2  x1+6    ;   w2 := w2+7-oldtopval;
      jl.     c1.     ;   goto nextw2;

\f

                                                                       

; fgs 1987.05.13                                 algol 6, pass 7, page 24




c41:  sn. w3 (f16.)   ; if zonedecl(do):
      jl.     c8.     ;
      jl.     c1.     ;

c42:  bl. w3  f14.    ; if count(+step) isless1 go(s.):
      ba. w3  x2+g0.  ;
      hs. w3  f14.    ;
      sl  w3  1       ;
      jl.     c7.     ;
      al  w2  x2+1    ;
      jl.     c18.    ;

c43:  rl  w0  x1      ; if topvalneg(do):
      bl  w3  x1-4    ;
      sz  w3  2.10    ;
      rl  w0  x1-2    ;
      sl  w0  0       ;
      jl.     c8.     ;
      jl.     c1.     ;

c44:  bl. w0  x2+g0.  ; if savetyp(type)do:(do):
      se. w0 (f6.)    ;
      jl.     c7.     ;
      jl.     c8.     ;

c45:  al  w3  0       ; setboolfalse(ifwastrue(do)):
c46:  rx. w3  f15.    ; setbooltrue (ifwasfalse(do)):
      se. w3 (f15.)   ;
      jl.     c1.     ;
      jl.     c8.     ;

j4 = k + 1            ;
c47:  jl.     c8.     ; if indexcheck(do):
; or if indexcheck:   ;
;      jl.    c1.     ;

j6 = k + 1            ; 
c52:  jl.     c8.     ; if ix.yes (do):
;
;     jl.     c1.     ; if ix.no   skip 1;

c48:  bl. w3  x2+g0.  ; if topkind(kindno) do:(do):
      bz  w0  x1-4    ;
      ls  w0  -6      ;
      se  w0  x3      ;
      jl.     c7.     ;
      jl.     c8.     ;

\f

                                                                                          

; jz 1982.06.23                                  algol 8, pass 7, page 25




c49:  bl  w3  x1-3    ; parkind(expract,arrayact):
      bs  w3  x1-1    ;
      hs. w3  f12.    ;   dopebaserel := byte(w1-3) - byte(w1-1);
      bz  w3  x1-4    ;    comment only used if kind = array;
      ls  w3  -6      ;
      rs. w3  f6.     ;   savetyp := kindno(top);
      sz  w0  h26     ;   if topreg or topuv
      jl.     c1.     ;    then goto next;
      sn  w3  h28     ;   if kindno = array
      jl.     c8.     ;    then goto skip1;
      al  w2  x2+2    ;   w2 := w2 + 2;  comment skip2;
      so  w0  h13     ;
      sn  w3  h27     ;   if toplit or kindno=label then
      jl.     d53.    ;    countlit;
      se  w3  h29     ;   if kindno=arrfield then
      jl.     c1.     ;    begin countlit; countlit end;
      am      4       ;   goto next;
d53:  al  w0  4       ; countlitpar:
      ba  w0  x1-7    ;   nxtrel := nxtrel + 4;
      sl  w0  2045    ;
      jl.     d59.    ;
      hs  w0  x1-7    ;
      jl.     c1.     ;   goto nextw2;

c50:  bl. w0  g19.    ; if toptobal(do):
      bl  w3  x1      ;
      sl  w0  x3-1    ;
      jl.     c8.     ;
      jl.     c1.     ;

c51:  jl.     e7.     ; exitpass:  goto pass0 (next pass);

\f

                                                                                     

; jz 1982.06.23                        algol 8, pass 7, page ...26...




d54:  rs. w1  f18.    ; prepblock:  blockw1:=w1;
      al  w3  2       ;
      al  w0  -2      ;   lastwork:=2;
      ba. w0  f12.    ;   workbase := relbase-2;
      ds. w0  f10.    ;
      dl. w0  f38.    ;   workbits1:= 1<23;
      ds. w0  f8.     ;   workbits2:= 0;
      al  w0  -2      ;   currblock := currblock-2;
      jl.     a1.     ;   goto nextw2;

d55:  se. w1 (f18.)   ; termblock:
      jl.     a2.     ;   if w1 <> blockw1 then pass7err1;
      rl  w0  x1-10   ;
      rs. w0  f18.    ;   unstack(blockw1);
      dl. w0  f38.    ;
      sn. w3 (f7.)    ;   if workbits <> 1<23 or
      se. w0 (f8.)    ;      workbits2<> 0 then
      jl.     a3.     ;    pass7err2;
      dl  w0  x1-6    ;
      ds. w0  f8.     ;   unstack(workbits);
      rl. w0  f10.    ;
      wa. w0  f9.     ;   appetit :=
      hs. w0  f12.    ;    workbase + lastwork;
      dl  w0  x1      ;
      ds. w0  f10.    ;   unstack(workbase,lastwork);
      al  w0  2       ;
a1:   ba. w0  g19.    ;   currblock :=
      hs. w0  g19.    ;    currblock + 2;
      jl.     c1.     ;   goto nextw2;

a2:   jl. w1  d12.    ;
      <:give up, one of above errors too severe<0>:>

a3:   jl. w1  d12.    ;
      <:programerr2pass7<0>:>
 
d59:  jl. w1  d12.    ;
      <:too many parameters<0>:>

e.    ; end conditions

\f

                                                                                    

; rc 25.2.1971                                  algol 6, pass 7, page 27




b. a1 ; dyadic lit actions, w3w0 = value(top)
w.    ;

c64:  bz  w0  1       ; shsh:
c65:  al  w3  0       ; shmed:
c66:  ld  w0 (x1-6)   ; shlong:
a0:   rl  w2  x1-4    ;
      rs  w2  x1-10   ;
a1:   al  w1  x1-6    ;
      ds  w0  x1      ;
      jl.     c3.     ;

c67:  bl  w0  1       ; addsh:
      ba  w0  x1-6    ;
      jl.     a0.     ;

c68:  wa  w0  x1-6    ; addmed:
      jl.     a0.     ;
  
c69:  al  w2  0       ; addlong:
      rs  w2  x1-8    ;
      aa  w0  x1-6    ;
      jl.     a0.     ;

c70:  bz  w0  1       ; extrsh:
c71:  la  w0  x1-6    ; extrmed: extrlng:
      jl.     a0.     ;

\f

                                                                                           

; rc 5.3.1971                                  algol 6, pass 7, page 28




c72:  fd  w0  x1-6    ; divreal:
      jl.     a1.     ;

c73:  wm  w0  x1-6    ; multint:
      al  w1  x1-6    ;   w1down;
      jl.     c90.    ;   goto longint;

c74:  fm  w0  x1-6    ; multreal:
      jl.     a1.     ;

c75:  wa  w0  x1-6    ; pluint:
      jl.     a1.     ;

c76:  aa  w0  x1-6    ; plulong:
      jl.     a1.     ;

c77:  fa  w0  x1-6    ; plureal:
      jl.     a1.     ;

c78:  ws  w0  x1-6    ; subint:
      jl.     a1.     ;

c79:  ss  w0  x1-6    ; sublong:
      jl.     a1.     ;

c80:  fs  w0  x1-6    ; subreal:
      jl.     a1.     ;

c81:  wa  w0  x1-6    ; addandclearnxt:
      rs  w0  x1      ;
      al  w0  0       ;
      rs  w0  x1-6    ;
      jl.     c8.     ;

e.    ;

\f

                                                                                          

; rc 24.06.1971                                  algol 6, pass 7, page 29




b. a5 ; monadic lit actions, w3w0 = value(top)
w.    ;

c86:  al  w3  0       ; addext:
      jl.     a1.     ;

c87:  rl. w3  f6.     ; litlim:
      bl. w3  x3+g23. ;
      ls  w0  x3      ;   val := val shift(length switch(savetyp));
      rs  w0  x1      ;
      jl.     c3.     ;

c88:  bl  w3  0       ; intlong:
      bl  w3  6       ;
a1:   ds  w0  x1      ;
      jl.     c12.    ;   goto setlong;

c89:  ci  w0  0       ; intreal:
a2:   ds  w0  x1      ;
      jl.     c13.    ;   goto setreal;

c90:  sh  w0  -1      ; longint:
      am      -1      ;
      se  w3  0       ;
j5 = k + 1            ;
      jl. w3  a3.     ;
; or if spill.yes  :  ;
;      jl. w3  d57.   ;
a3:   ds  w0  x1      ;
      jl.     c11.    ;   goto setint;

c91:  al  w2  0       ; longreal:
      nd  w0  5       ;
      ad  w0  -1      ;
      aa. w0  f37.    ;
      nd. w0  a4.     ;
a4 = k + 1            ;
      al  w2  x2; exp1;
      al  w2  x2+48   ;
      sn  w3  0       ;
      al  w2  -2048   ;
      hs  w2  1       ;
      jl.     a2.     ;

c92:  cf  w0  0       ; realint:
      jl.     a3.     ;

c93:  fs. w0  f36.    ; reallong:  value := value - (-.5)
      bl  w2  1       ;
      ad  w0  -12     ;
      ad  w0  x2-35   ;
      jl.     a1.     ;

\f

                                                                                    

; rc 2.3.1971                                  algol 6, pass 7, page 30




c94:  ac  w0 (x1)     ; negint:
a5:   ds  w0  x1      ;
      jl.     c3.     ;

c95:  ld  w0  64      ; neglong:
      ss  w0  x1      ;
      jl.     a5.     ;

c96:  fm. w0  f39.    ; negreal:
      jl.     a5.     ;

c99:  rl  w0  6       ; real0:
c98:  lo  w0  6       ; long0:
c97:  se  w0  0       ; int0:
      jl.     c6.     ;   if value <> 0 then goto skip3;
      al  w1  x1-6    ;   w1down;
      jl.     c3.     ;   goto return;

e.    ; endmonadic lit actions

\f

                                                                                        

; fgs 1987.06.15                                 algol 8, pass 7, page 31

;maintable

g0:   ;
k=0   ;
b.j20 ; j-names are used for long-range s.calls in the maintable.
h.    ;

;redefinitions of c, d, f, and g -names referenced from maintable:

c0 =c0 -g0, c1 =c1 -g0,             c3 =c3 -g0, c4 =c4 -g0;
c5 =c5 -g0, c6 =c6 -g0, c7 =c7 -g0, c8 =c8 -g0, c9 =c9 -g0;
c10=c10-g0, c11=c11-g0, c12=c12-g0, c13=c13-g0, c14=c14-g0;
c15=c15-g0, c16=c16-g0, c17=c17-g0, c18=c18-g0, c19=c19-g0; 
c20=c20-g0, c21=c21-g0, c22=c22-g0, c23=c23-g0, c24=c24-g0;
c25=c25-g0, c26=c26-g0, c27=c27-g0, c28=c28-g0, c29=c29-g0;
c30=c30-g0, c31=c31-g0, c32=c32-g0, c33=c33-g0, c34=c34-g0;
c35=c35-g0, c36=c36-g0, c37=c37-g0, c38=c38-g0, c39=c39-g0;
c40=c40-g0, c41=c41-g0, c42=c42-g0, c43=c43-g0, c44=c44-g0;
c45=c45-g0, c46=c46-g0, c47=c47-g0, c48=c48-g0, c49=c49-g0;
c50=c50-g0, c51=c51-g0, c52=c52-g0, c57=c57-g0, c59=c59-g0;
                                                c64=c64-g0;
c65=c65-g0, c66=c66-g0, c67=c67-g0, c68=c68-g0, c69=c69-g0;
c70=c70-g0, c71=c71-g0, c72=c72-g0, c73=c73-g0, c74=c74-g0;
c75=c75-g0, c76=c76-g0, c77=c77-g0, c78=c78-g0, c79=c79-g0;
c80=c80-g0, c81=c81-g0; 
            c86=c86-g0, c87=c87-g0, c88=c88-g0, c89=c89-g0;
c90=c90-g0, c91=c91-g0, c92=c92-g0, c93=c93-g0, c94=c94-g0;
c95=c95-g0, c96=c96-g0, c97=c97-g0, c98=c98-g0, c99=c99-g0;
c100=c100-g0;

            d1 =d1 -g0,             d3 =d3 -g0, d4 =d4 -g0;
d5 =d5 -g0, d6 =d6 -g0, d7 =d7 -g0, d8 =d8 -g0            ;
d10=d10-g0, d11=d11-g0,             d13=d13-g0, d14=d14-g0;
d15=d15-g0, d16=d16-g0, d17=d17-g0, d18=d18-g0, d19=d19-g0;
d20=d20-g0, d21=d21-g0, d22=d22-g0,             d24=d24-g0;
d25=d25-g0, d26=d26-g0, d27=d27-g0, d28=d28-g0, d29=d29-g0;
d30=d30-g0, d31=d31-g0, d32=d32-g0, d33=d33-g0, d34=d34-g0;
d35=d35-g0, d36=d36-g0, d37=d37-g0, d38=d38-g0, d39=d39-g0;
d40=d40-g0, d41=d41-g0, d42=d42-g0, d43=d43-g0, d44=d44-g0;
d45=d45-g0, d46=d46-g0, d47=d47-g0, d48=d48-g0, d49=d49-g0;
d50=d50-g0, d51=d51-g0, d52=d52-g0, d53=d53-g0, d54=d54-g0;
d55=d55-g0, d58=d58-g0;

g11=g11-g10, g12=g12-g10, g13=g13-g10, g14=g14-g10, g15=g15-g10;
g17=g17-g10, g18=g18-g10, g19=g19-g10, g24=g24-g10, g25=g25-g10;
g27=g27-g10, g28=g28-g10;
f6 =f6 -g10, f8 =f8 -g10, f10=f10-g10, f12=f12-g10, f13=f13-g10;
f14=f14-g10, f18=f18-g10, f36=f36-g10, f39=f39-g10;

; start of maintable:
      c3                    ; maintable(0): return. used to initialize
                            ;               the return stack.
i0:   d15   , 1     ,b1+b147; start pass 7: inout(1), b.endpass.
\f



; rc 16.04.1971                                  algol 6, pass 7, page 32

b. a7 ; operands in input
h.    ;

i1:   d21   , 0     , c3    ; lit bool:   in1newop(0), return.
i2:   d20   , 2     , c3    ;  -  int :   in2newop(2), return.
i3:   d18   , 4     , c3    ;  -  long:   in4newop(4), return.
i4:   d18   , 6     , c3    ;  -  real:   in4newop(4), return.
i5:   d20   , 16    , c10   ; simplebool: in2newop(16), setbool.
i6:   d20   , 16    , c11   ;   -   int : in2newop(16), setint.
i7:   d20   , 16    , c12   ;   -   long: in2newop(16), setlong.
i8:   d20   , 16    , c13   ;   -   real: in2newop(16), setreal.
i9:   a1    , c10           ; formalbool: s.getformal, setbool.
i10:  a1    , c11           ;   -   int :    -   -   , setint.
i11:  a1    , c12           ;   -   long:    -   -   , setlong.
i12:  a1    , c13           ;   -   real:    -   -   , setreal.
i13:  a2    , c10           ; array bool: s.getarray , setbool.
i14:  a2    , c11           ;   -   int :    -   -   , setint.
i15:  a2    , c12           ;   -   long:    -   -   , setlong.
i16:  a2    , c13           ;   -   real:    -   -   , setreal.
i17:  a3    , c10           ; parpr bool: s.getparpr , setbool.
i18:  a3    , c11           ;   -   int :    -   -   , setint.
i19:  a3    , c12           ;   -   long:    -   -   , setlong.
i20:  a3    , c13           ;   -   real:    -   -   , setreal.
i21:  a5    , c10           ; noppr bool: s.getnoppr , setbool.
i22:  a5    , c11           ;   -   int :    -   -   , detint.
i23:  a5    , c12           ;   -   long:    -   -   , setlong.
i24:  a5    , c13           ;   -   real:    -   -   , setreal.
i25=i19                     ; procnotyp: see parpr long.
i26:  d20   , 12    , a6    ; zone      : in2newop(12), s.testzone.
i27:  d20   , 18    , c3    ; formalzone: in2newop(18), return.
i28:  d20   , 14    , c3    ; zonearray : in2newop(14), return.
i29:  d20   , 8     , c3    ; label     : in2newop(8) , return.
i30:  c31   , a7            ; nxtofstrng: if toplit(s.longstr),
      d15   , 4     , b1+b21;             inout(4), b.strnext.

a1:   d20   , 18    , d5    ; getformal : in2newop(18), clearblk,
      c20   , c3            ;             if tasteendparam(return.),
      b2+b24, c15           ;             op.takeform, addrreg.
a2:   d20   , 22            ; getarray  : in2newop(22),
      d17   , -3            ;             intow1(-3),
      d17   , -2    , c3    ;             intow1(-2), return.
a3:   d20   , 10    , d7    ; getparpr  : in2newop(10), clearall,
      c20   , a4    , c3    ;    if tasteendparam(s.testfp), return.
a4:   c37   , c3    , d30   ; testfp    : if topext(return.), w1down,
      d22   , 18    , c3    ;             newop(18), return.
a5:   d20   , 20    , d7    ; getnoppr  : in2newop(20), clearall,
      c3                    ;             return.
a6:   c37   , c17           ; testzone  : if topext(doublereturn.),
      d37   , -h6+1 , c17   ;    toprel(-zonebaserel), doublereturn.
a7:   d8    , d14   , -3    ; longstr   : clearreg, outfromw1(-3),
      d14   , -2            ;             outfromw1(-2),
      d14   , -1            ;             outfromw1(-1),
      d14   , 0     , d30   ;             outfromw1(0) , w1down,
      b0+b20, c16           ;             b.lngstrng, valreg.

e.    ; end operands in input
\f



; rc 17.3.1971                                  algol 6, pass 7, page 33

b. a8 ; normal dyadic operators
h.    ;

j5:   ;
i31:  c33   , d36           ; plus:   if nxtreg(exch),
      c24                   ;         if toplit and nxtlit(littypact
      c75   , c76   , c77   ;           (pluint.,plulong.,plureal.)),
      d1    , c5    , b2+b26;         toptoreg, toptypop(wa),
j0:   c16                   ; valreg: valreg.

i32:  d36                   ; minus:  exch,
j1:   c24                   ; subtr1: if toplit and nxtlit(littypact
      c78   , c79   , c80   ;           (subint.,sublong.,subreal.)),
      j2    , c16           ;         s.subtr2, valreg.
j2:   d1                    ; subtr2: toptoreg,
j3:   c25                   ; subtr3: if toplit(littestact
      c97   , c98   , c99   ;           (int0.,long0.,real0.)),
      c5    , b3+b29        ;         toptypop(ws.)

i33:  c33   , d36           ; mult:   if nxtreg(exch),
      c24                   ;         if toplit and nxtlit(littypact
      c73   , c6    , c74   ;           (mulint.skip3,mulreal.)),
      c29                   ;         typswitch
      a1    , a2    , a3    ;           (s.intm.,s.longm.,s.realm.).
a1:   d1    , b2+b32        ; intm:   toptoreg, op.wm,
j4:   c38   , b0+b35, c16   ; multest:if spillyes(b.multtest), valreg.
a2:   d6    , b2+b36        ; longm:  clearuv, op.prepuvop,
      b2+b34                ;         op.longmult,
j16:  d26   , 1     , g13   ; uvlong: newvalandop(1,uv),
      c12                   ;         setlong.
a3:   d1    , b2+b33, c16   ; realm:  toptoreg, op.fm, valreg.

i34:  d36   , c22           ; div:    exch, if toplit and nxtlit
      c72                   ;           (litact(divreal.)),
      d1    , b2+b38, c16   ;         toptoreg, op.fd, valreg.

i35:  j7                    ; ldivi:  s.intlong,
i36:  d6    , b2+b36        ; ldivl:  clearuv, op.prepuvop,
      b2+b39, j16   , c3    ;         op.longdiv, s.uvlong, return.
a4:   ;
i37:  d36                   ; idivi:  exch,
      d1    , b2+b37, c16   ;         toptoreg, op.wd, valreg.

i38:  j7                    ; lmodi:  s.intlong,
i39:  d6    , b2+b36        ; lmodl:  clearuv, op.prepuvop,
      b2+b41, j16   , c3    ;         op.longmod, s.uvlong, return.

i40:  a4    , b1+b40        ; imodi:  s.divi, b.rlw10.
\f



; rc 14.04.1971                                  algol 6, pass 7, page 34

i41:  j8                    ; explong:s.longint,
i42:  c31   , a5            ; expint: if toplit(s.litexp),
      d36   , d6    , b2+b36;         exch, clearuv, op.prepuvop,
      b2+b42, j17   , c3    ;         op.intexp, s.uvreal, return.
a5:   c39   , d30   , d8    ; litexp: testexpval., w1down, clearreg,
      c34   , d1    , d31   ;         if nottopwrk(toptoreg,w1up),
      c40   , b0+b33, b0+b33;         selectexp(b.fm,b.fm,
      b0+b33, b0+b33, b0+b33;                   b.fm,b.fm,b.fm),
      b2+b33, j0    , c17   ;         op.fm, s.valreg, doublereturn.

i43:  d36   , d6    , b2+b36; expreal:exch, clearuv, op.prepuvop,
      b2+b43                ;         op.realexp,
j17:  d26   , 1     , g13   ; uvreal: newvalandop(1,uv),
      c3                    ;         return.

i44:  d36                   ; add:    exch,
      c26                   ;         if toplit and nxtlit(litlnthact
      c67   , c68   , c69   ;           (addsh.,addmed.,addlong.)),
      d38                   ;         savetoptyp,
      c36   , 2     , a6    ;         if toptyp(long,s.addext),
      c36   , 3     , a6    ;         if toptyp(real,s.addext),
      c33   , d36   , d1    ;         if nxtreg(exch), toptoreg,
      c4    , g25   , b2+b25;         savmodif(length,op.ba),
      j0    , c9            ;         s.valreg, setsavtyp.
a6:   d36   , c23   , c86   ; addext: exch, if toplit(litact(addext.)),
      c35   , h12   , b1+b44;         if top(reg,b.alw00.),
      d8    , b1+b44        ;         clearreg, b.alw00.

i45:  d36                   ; shift:  exch,
      c26                   ;         if toplit and nxtlit(litlnthact
      c64   , c65   , c66   ;           (shsh.,shmed.,shlong.)),
      d38   , d1            ;         savetoptyp, toptoreg,
      c4    , g25   , b2+b45;         savmodif(length,op.shift),
      j0    , c9            ;         s.valreg, setsavetyp.

i46:  c32   , a8            ; extract:if toplit(go(s.litmask).),
      d8    , b2+b48, a7    ;         clearreg, op.formmask, s.gethalf,
      b0+b49, j0    , c11   ;         b.law10, s.valreg, setint.
a7:   c36   , 0     , b3+b10; gethalf:if toptyp(bool,op.bl.),
      b3+b11                ;         op.rl.
a8:   d43                   ; litmask:formlitmask,
      c26                   ;         if toplit and nxtlit(litlnthact
      c70   , c71   , c71   ;           (extrsh.,extrmed.,extrlong.)),
      c33   , d36   , d1    ;         if nxtreg(exch), toptoreg,
      b2+b50, j0    , c11   ;         op.la, s,valreg, setint.

i47:  c33   , d36           ; and:    if nxtreg(exch),
      d1    , b2+b50, c16   ;         toptoreg, op.la, valreg.

i48:  c33   , d36           ; or:     if nxtreg(exch),
      d1    , b2+b51, c16   ;         toptoreg, op.lo, valreg.

i49:  c33   , d36   , j6    ; equiv:  if nxtreg(exch), s.not,
      d1    , b2+b52, c16   ;         toptoreg. op.lx, valreg.

e.    ; end normal dyadic operators
\f



; rc 16.3.1971                                  algol 6, pass 7, page 35

b. a28; relational operators
h.    ;

i50:  a1    , a26           ; < :      s.ls  , s.boolres.
i51:  a2    , a26           ; <=:      s.lseq, s.boolres.
i52:  a5    , a26           ; = :      s.eq  , s.boolres.
i53:  a3    , a26           ; >=:      s.greq, s.boolres.
i54:  a4    , a26           ; > :      s.gr  , s.boolres.
i55:  a6    , a26           ; <>:      s.neq , s.boolres.

i56:  a1    , b1+b53        ; <then :  s.ls  , b.condj.
i57:  a2    , b1+b53        ; <=then:  s.lseq, b.condj.
i58:  a5    , b1+b53        ; =then :  s.eq  , b.condj.
i59:  a3    , b1+b53        ; >=then:  s.greq, b.condj.
i60:  a4    , b1+b53        ; >then :  s.gr  , b.condj.
i61:  a6    , b1+b53        ; <>then:  s.neq , b.condj.

i62:  a1    , a27           ; <while : s.ls  , s.whileres.
i63:  a2    , a27           ; <=while: s.lseq, s.whileres.
i64:  a5    , a27           ; =while : s.eq  , s.whileres.
i65:  a3    , a27           ; >=while: s.greq, s.whileres.
i66:  a4    , a27           ; >while : s.gr  , s.whileres.
i67:  a6    , a27           ; <>while: s.neq , s.whileres.

j20=i63, j19=i60            ; used in for statements.

; the action  relationswitch  switches to one of its six s.parameters 
; as follows:
;   not (toplit or nxtreg):   topint: 1., toplong: 2., topreal: 3.
;        toplit or nxtreg:       -  : 4.,    -   : 5.,    -   : 6.

a1:   c28                   ; ls:   relationswitch (see above and
      a12   , a17   , a24   ;         a-actions on next page)
      a8    , a17   , a17   ;

a2:   c28                   ; lseq:
      a13   , a22   , a22   ;
      a16   , a22   , a19   ;

a3:   c28                   ; greq:
      a15   , a21   , a20   ;
      a14   , a21   , a21   ;

a4:   c28                   ; gr:
      a9    , a18   , a18   ;
      a11   , a18   , a23   ;

a5:   c30   , d36   , d1    ; eq:   if toplit or nxtreg(exch), toptoreg,
      c36   , 1     , b3+b54;       if toptyp(int,op.se.),
      a25   , b0+b66, b1+b60;       s.relatsub, b.low02, b.sew00.

a6:   c30   , d36   , d1    ; neq:  if toplit or nxtreg(exch), toptoreg,
      c36   , 1     , b3+b55;       if toptyp(int,op.sn.),
      a25   , b0+b66, b1+b61;       s.relatsub, b.low02, b.snw00.
\f



; jz 1979.09.14                                  algol 8, pass 7, page 36

; relational operators, auxilliary actions, switched to from previous
; page.

a7:   d44   , 1             ;  topval(+1),
a8:   d36                   ;  exch,
a9:   d1    , b3+b56        ;  toptoreg, op.sl.

a10:  d44   , -1            ;  topval(-1),
a11:  d36                   ;  exch,
a12:  d1    , b3+b57        ;  toptoreg, op.sh.

a13:  d36                   ;  exch,
a14:  c32   , a10           ;  if toplit(go(s.a10).),
      d36,j2, b1+b59        ;  exch, s.subtr2, b.shw1-1.

a15:  d36                   ;  exch,
a16:  c32   , a7            ;  if toplit(go(s.a7).),
      d36,j2, b1+b58        ;  exch, s.subtr2, b.slw11.

a17:  d36                   ;  exch,
a18:  j2    , b1+b62        ;  s.subtr2, b.slw00.

a19:  d36                   ;  exch,
a20:  j2    , b1+b64        ;  s.subtr2, b.slw01.

a21:  d36                   ;  exch,
a22:  j2    , b1+b65        ;  s.subtr2, b.shw0-1.

a23:  d36                   ;  exch,
a24:  j2    , b1+b63        ;  s.subtr2, b.shw00.

a25:  c25                   ; relatsub: if toplit(littestact
      c97   , c98   , c98   ;             (int0.,long0.,long0.)),
      b3+b153               ;           op.long compare.

a26:  b0+b67, j0            ; boolres:  b.boolean, s.valreg,
      a28   , c17           ;           s.setbool, doublereturn.

a27:  b0+b68, b0+b69        ; whileres: b.condbyp, b.byplab,
      c17                   ;           doublereturn.

a28:  c10                   ; setbool:  setbool.

e.    ; end relational operators
\f



; rc 4.3.1971                                  algol 6, pass 7, page 37

b. a1 ; monadic operators
h.    ;

j6:   ;
i68:  d26   , -1    , 2     ; not:    newvalandop(-1,litint),
      c33   , d36           ;         if nxtreg(exch),
      d1    , b2+b52, c16   ;         toptoreg, op.lx, valreg.

i69:  c23   , c94           ; negint: if toplit(litact(negint.)),
      c35   , h15   , a1    ;         if top(addr,s.negvar.),
      c35   , h12   , b1+b74;         if top(reg,b.acw1x1.),
      d8    , a1            ;         clearreg, s.negvar.
a1:   b2+b75, j0    , c17   ; negvar: op.ac, s.valreg, doublereturn.
i70:  c23   , c95           ; neglong: if toplit(litact(neglong.)),
      d8    , b0+b70, b2+b30;         clearreg, b.ldw164, op.ss,
      c16                   ;         valreg.
i169: c23   , c96           ; negreal: if toplit(litact(negreal.)),
      d1    , d27   , f39   ;         toptoreg, newentry(-1.0,
      6     , b2+b33, c16   ;           litreal), op.fm, valreg.

i71:  d8                    ; absint: abslong: clearreg,
      c34   , d1    , d31   ;         if nottopwrk(toptoreg,w1up),
      c5    , b2+b71, c16   ;         toptypop(abs), valreg.
i170: d1    , d27   , f39   ; absreal: toptoreg, newentry(-1.0,
      6     , b2+b73, c16   ;           litreal), op.absreal, valreg.

i72:  d27   , f36   , 6     ; entier: newentry(-.5,litreal),
      j5    , j9    , c3    ;         s.plus, s.realint, return.
j7:   ;
i73:  c23   , c88           ; intlong:if toplit(litact(intlong.)),
      d1    , b0+b80, b0+b81;         toptoreg, b.blw02, b.blw00,
      j0    , c12           ;         s.valreg, setlong.
j10:  ;
i74:  c23   , c89           ; intreal:if toplit(litact(intreal.)),
      d1    , b0+b77        ;         toptoreg, b.ci,
      j0    , c13           ;         s.valreg, setreal.
j8:   ;
i75:  c23   , c90           ; longint:if toplit(litact(longint.)),
      d1    , j4    , c11   ;         toptoreg, s.multest, setint.
j11:  ;
i76:  c23   , c91           ; lngreal:if toplit(litact(longreal.)),
      d1    , b0+b78        ;         toptoreg, b.floatlng,
      j0    , c13           ;         s.valreg, setreal.
j9:   ;
i77:  c23   , c92           ; realint:if toplit(litact(realint.)),
      d1    , b0+b76        ;         toptoreg, b.cf,
      j0    , c11           ;         s.valreg, setint.

i78:  c23   , c93           ; reallng:if toplit(litact(reallong.)),
      d1    , b0+b79        ;         toptoreg, b.longround,
      j0    , c12           ;         s.valreg, setlong.

i79:  d36   , j7            ; nxtintlong: exch. s.intlong,
      d36   , c3            ;         exch, return.
i80:  d36   , j10           ; nxtintreal: exch, s.intreal,
      d36   , c3            ;         exch, return.
i81:  d36   , j11           ; nxtlngreal: exch, s.lngreal,
      d36   , c3            ;         exch, return.

i82:  c12                   ; oplong: opstrng: setlong.
i83:  c13                   ; opreal: setreal.

e.    ; end monadic operators
\f



; rc 11.05.1971                                  algol 6, pass 7, page 38

b. a12; array declarations, see also stackpicture on next page.
h.    ;

i84:                        ; begbounds:
      d16   , f13           ;   intopar(arraytype),
      d16   , f14           ;   intopar(counter),
      d16   , f12           ;   intopar(relbase),
      d28   , 0             ;   newlocalvar(0),
      d26   , 1     , g15   ;   newvalandop(1,litint),
      d32   , +12           ;   setw1(+2*6),
      d28   , 4             ;   newlocalvar(loweraddr),
      d32   , +18           ;   setw1(+3*6),
      d28   , 2             ;   newlocalvar(upperaddr),
      d32   , +18           ;   setw1(+3*6),
      d28   , 6             ;   newlocalvar(ciaddr),
      d26   , -1    , g15-4 ;   newvalandop(-1,shield),
      c3                    ;   return.

i85:                        ; firstbounds:
      c35   , h15   , a0    ;   if top(addrreg,s.getvalreg),
      c35   , h12   , c8    ;   if top(reg, skip1
      d8                    ;     (clearreg)),
      a1    , d32   , -30   ;   s.bounds, setw1(ui1),
      c21   , c3            ;   if tasteendbounds(return.),
      a2                    ;   s.setlimit,
      d32   , -30   , a2    ;   setw1(li1), s.setlimit,
      d32   , +42   , c3    ;   setw1(shield), return.

i86:                        ; notfirstbound:
      d8    , a1    , d31   ;   clearreg,s.bounds, w1up,
      c35   , h10   , a7    ;   if top(work,s.litorreg),
      a6    , j1    , j1    ;   s.savesub1, s.subtr1, s.subtr1,
      d33   , -36   , d35   ;   setplace(ci2), copyentry,
      d33   , -12   , a4    ;   setplace(ci1), copyandmove,
      d32   , -36           ;   setw1(li1),
      d45   , h18           ;   delete(workbits),
      d32   , +12   , a7    ;   setw1(ci2), s.litorreg,
      a8    , j5    , a2    ;   s.mult1, s.plus, s.setlimit,
      d33   , -6    , d35   ;   setplace(li1), copyentry,
      d32   , +30           ;   setw1(ci1),
      a8    , j5            ;   s.mult1, s.plus,
      c21   , c3            ;   if tasteendbounds(return),
      a2    , d32   , +12   ;   s.setlimit, setw1(ciaddr),
      d37   , +2            ;   toprel(+2),
      d26   , -1    , g15-4 ;   newvalandop(-1,shield),
      c3                    ;   return.

a0:   d1    , c16           ; getvalreg: toptoreg, valreg.

a1:   d33   , -36   , d35   ; bounds: setplace(ui1), copyentry,
      d30   , d33   , -54   ;   w1down, setplace(li1),
      d35   , c3            ;   copyentry, return.
\f



; rc 4.3.1971                                  algol 6, pass 7, page 39


; array declarations, subroutines etc.

a2:                         ; setlimit: comment resulting w1:  w1up;
      d33   , +6            ;   setplace(+1*6),
      c32   , a3            ;   if toplit(go(litlim).),
      d1    , b2+b15, d31   ;   toptoreg, op.rs, w1up,
a3:   d35   , d34   , c3    ; litlim: copyentry, placetow1, return.

a4:                         ; copyandmove: comment resulting w1: -2*6;
      c35   , h12   , a5    ;   if top(reg,s.copyaddrentry.),
      d35   , d1    , b3+b15;   copyentry, toptoreg, op.rs.
a5:   d1    , d35           ; copyaddrentry: toptoreg, copyentry,
      b2+b15, c17           ;   op.rs, doublereturn.

a6:   d30                   ; savesub1: w1down,
      c22                   ;   if toplit and nxtlit(litact
      c81                   ;     (addandclearnxt)),
      d31                   ;   w1up,
j18:  c3                    ; return: return.

a7:                         ; litorreg:
      c22   , c3            ;   if toplit and nxtlit(return.),
      d30   , c16           ;   w1down, valreg.

j12:  ;
a8:   c33   , d36           ; mult1: if nxtreg(exch),
      c22                   ;   if toplit and nxtlit(litact
      c73                   ;     (mulint.)),
      d1    , b2+b32, c16   ;   toptoreg, op.wm, valreg.

; picture of the w1-stack after begbounds has been processed. the names
; used during array declarations are shown. the ones in () have not been
; initialized by begbounds.

; x1-84: (before begbounds)
;   -78:  baseword descr
;   -72:  lit 1
;   -66: (lower1)
;   -60: (upper1 or, in endbounds, length)
;   -54:  loweraddr
;   -48: (li1)
;   -42: (limitl)
;   -36: (ci2)
;   -30:  upperaddr
;   -24: (ui1)
;   -18: (limitu)
;   -12: (ci1)
;    -6: ciaddr
;     0: shield -1
;   (+6: li)
;  (+12: ui)
\f



; rc 5.3.1971                                  algol 6, pass 7, page 40


; array declarations, endbounds.

; comment the action  preparrdecl  sets savetyp:= pass7typ(arraytyp)
; and  rel(baseword descr):= rel(baseword descr) - 2 *(counter-1);

i87:  d46                   ; endbounds: preparrdecl,
      a11                   ;   s.shiftlim,
      d33   , -36   , a4    ;   setplace(upper1), s.copyandmove,
      d32   , -12   , a11   ;   setw1(li1), s.shiftlim,
      d26   , 1     , 2     ;   newvalandop(1,litint),
      a11   , d36   , j1    ;   s.shiftlim, exch, s.subtr1,
      d33   , -18   , a4    ;   setplace(lower1), s.copyandmove,
      d32   , -6            ;   setw1(lower1),
      d33   , +12   , d35   ;   setplace(loweraddr), copyentry,
      d34   , a7    , j1    ;   placetow1, s.litorreg, s.subtr1,
      a6    , d33   , -6    ;   s.savesub1, setplace(-1*6),
      c42   , -1    , a10   ;   if count(-1) iszero:(go(s.declarr1),),
      c32   , a10           ;   if toplit(go(s.declarr1).),
      d8                    ;   clearreg,     comment continues;

a9:   d34   , b0+b85        ; declnxtarr:  placetow1, b.reserve,
      b2+b29, j3    , b2+b15;   op.ws, s.subtr3, op.rs,
      c42   , 0     , j18   ;   if count(+0) iszero:(go(s.return).),
      c42   , -1    , a12   ;   if count(-1) iszero:(go(s.lastdecl).),
      d47                   ;   norelease
a12:  d31   , d37   , +2    ; lastdecl: w1up, toprel(+2),
      d32   , 18            ;   setw1(length),
a10:  d1    , c18   , a9    ; declarr1:  toptoreg, go(s.declnxtarr).

j13:                        ; shiftindex:
a11:                        ; shiftlim:
      c44   , 0     , c3    ;   if savetyp(bool,return.),
      c23   , c87           ;   if toplit(litact(litlim.)),
      d1                    ;   toptoreg,
      c4    , g25   , b0+b82;   savmodif(length,basw10),
      c16                   ;   valreg.

e.    ; end array declarations
\f



; jz.fgs 1985.06.12                              algol 6, pass 7, page 41

b. a3 ; zone and zonearray declarations
h.    ;

i88:  d48   , d16   , f14   ; beginzone: savew1, intopar(counter),
      d16   , f12   , d50   ;   intopar(relbase), prepzonedecl,
      ; comment adjusts relbase and sets zonedecl to true,
      d28   , 0             ;   newlocalvar(0),
      d28   , h7            ;   newlocalvar(procrel),
      d28   , h6            ;   newlocalvar(sharenorel),
      d28   , h6+2  , c3    ;   newlocalvar(lengthrel), return.

i89:  d48   , d16   , f12   ; beginzonearr:  savew1, intopar(relbase),
      d51   , d28   , 0     ;   prepzarrdecl, newlocalvar(0),
                            ;     comment sets zonedecl to false,
      d26   , h7    , g15-2 ;   newvalandop(procrel,zonereladdr),
      d26   , h6    , g15-2 ;   newvalandop(sharenorel,zonereladdr),
      d28   , 0             ;   newlocalvar(0),
      d26   , h6+2  , g15-2 ;   newvalandop(lengthrel,zonereladdr).
      d28   , 0             ;   newlocalvar(0),
      d26   , -h6   , g15   ;   newvalandop(-baserel-1,litint),
      d26   , -h5   , g15   ;   newvalandop(-descrlength,litint),
      d28   , -2    , c3    ;   newlocalvar(-2),return.

i90:  d1    , b2+b15, b2+b32; noofzones:  toptoreg, op.rs, op.wm,
      b0+b85, b2+b26, b3+b15;   b.reserve, op.wa, op.rs.

i91:  d1    , c41   , b3+b15; firstzcom:  toptoreg, if zonedecl(op.rs.),
      b0+b86, b2+b15, d3    ;   b.loadw3, op.rs, outopand,
      b1+b87                ;   b.zonebase.

i92:  d1                    ; seczncom:  toptoreg,
      c46   , b3+b15        ;   setbooltrue(ifwasfalse(op.rs.)),
      c3                    ;   return.

i93:  a1                    ; endzdecl: s.blockproc,
      c45   ,a2             ;   setboolfalse(ifwastrue(s.termzdecl),
      d49   , c3            ;   restorew1, return.

a1:   c37   , b3+b13        ; blockproc:  if topext(op.loadpoint),
      b3+b155               ;   op.blpr is formal
a2:   b2+b16                ; termzdecl: op.ds,
      c41   , a3    , d47   ;   if zonedecl(s.loadzone.), norelease,
      d3    , b0+b87,b2+b12 ;   outopand, b.zonebase, op.dl,
      b1+b88                ;   b.initzone.
a3:   d13   , f14           ; loadzone:  outfrompar(counter),
      b2+b89, b0+b88, c17   ;   op.loadznseg, b.initzone, doublereturn.

e.    ; end zone and zonearray declarations
\f



; fgs 1987.06.15                               algol 6, pass 7, page 42

b. a30; subscripting
h.    ;

i94:  a3                    ; endsub1:s.begsub,  comment continues ,

a1:   d32   , -12   , d38   ; endsub: setw1(arraydescr), savetoptyp,
      d32   , +12   , a4    ;         setw1(index), s.getindex,
j14:  c15                   ; addrreg:addrreg.

i95:  j5    , a1    , c3    ; endsubm:s.plus, s.endsub, return.

i96:  a3                    ; frstsub:s.begsub, comment continues

a2:   d30   , d37   , +2    ; notlsub:w1down, toprel(+2),
      d33   , +12   , d35   ;         setplace(+2*6), copyentry,
      d34   , j12   , c3    ;         placetow1, s.mult1, return.

i97:  j5    , a2    , c3    ; notfsub:s.plus, snotlsub, return.

a3:   d29   , g14           ; begsub: newdopeaddr(noclearvar),
      d36   , c3            ;         exch, return.

a4:   c52   , a21           ; getindex: if ix.yes (s.makeix_index).
      c47   , a5            ;         if indexcheck(s.checkindex.)
      j13   , d1    , d30   ;         s.shiftindex, toptoreg, w1down.
      b2+b26, c3            ;         op.wa, return.
a5:   d1                    ; checkindex:  toptoreg,
      c4    , g25   , b0+b82;         savmodif(length,b.asw10),
      d29   , g14           ;         newdopeaddr(noclearvar),
      b2+b90, d30           ;         op.indexch, w1down.
      b2+b26, c17           ;         op.wa, doublereturn.


i98:  d39   , a7            ; fieldbool:    savebool, s.field.
i99:  d40   , a7            ; fieldint :    saveint , s.field.
i100: d41   , a7            ; fieldlong:    savelong, s.field.
i101: d42   , a7            ; fieldreal:    savereal, s.field.

i102: d39   , a6            ; fieldsubbool: savebool, s.fieldsub.
i103: d40   , a6            ; fieldsubint : saveint , s.fieldsub.
i104: d41   , a6            ; fieldsublong: savelong, s.fieldsub.
i105: d42   , a6            ; fieldsubreal: savereal, s.fieldsub.

a6:   j13   , j5            ; fieldsub:  s.shiftindex, s.plus,

a7:   d30   , a8    , c17   ; field:  w1down, s.fieldref, doublereturn.

a8:   c48   , h28   , a9    ; fieldref: if topkind(arr,s.fieldindex),
      d31   , d1            ;         w1up, toptoreg,
      c35   , h10   , b0+b86;         if top(work,b.loadw3),
      c52   , a24           ;         if ix (s.makeix_z_field),
      c47   , a10           ;         if indexcheck(s.recfieldch),
      a11   , c3            ;         s.recref, return.

a9:   d31   , c52   , a22   ; fieldindex: w1up, if ix (s.makeixfield),
      c47   , a16           ;         if index (s.fieldch),
      d1    , b2+b26, j14   ;         toptoreg, op.wa, s.addrreg,
      j15   , c17           ;         s.setsavetyp, doublereturn.
\f




; fgs 1987.06.15                                algol 6, pass 7, page 43

a10:  b0+b96                ; recfieldch: b.reccheck,
      c4    , g25   , b0+b93;         savmodif(length,b.recch0),
      b1+b91                ;         b.fieldalarm.

i106: d42   , d1            ; endrec: savereal, toptoreg,
      c35   , h10   , b0+b86;         if top(work,b.loadw3),
      c52   , a23           ;         if ix (s.makeixzrec),
      b0+b84, c47   , a15   ;         b.as2, if indexcheck(s.reccheck),

a11:  b0+b26, a12   , j14   ; recref: b.wa, s.zoneref, s.addrreg,
j15:  c9                    ; setsavetyp: setsavetyp.

a12:  c48   , h30   , a13   ; zoneref: if topkind(zone,s.simplezone),
      d26   , 0     , g15-2 ;         newvalandop(0,zonereladdr),
      d3    , d3    , b1+b87;         outopand, outopand, b.zonebase.

a13:  c37   , c3            ; simplezone:  if topext(return),
      d3    , c17           ;         outopand, doublereturn.

a15:  b0+b96                ; reccheck: b.reccheck,
      c4    , g25   , b0+b93;         savmodif(length,b.recch0),
      b1+b92                ;         b.indexalarm.

a16:  d29   , g14   , d36   ; fieldch: newdopeaddr(noclearvar), exch,
      d1    ,b2+b100        ;         toptoreg, op.fieldch,
      c4    , g25   , b0+b97;         savmodif(length,b.fieldch0),
      b0+b91, c16           ;         b.fieldalarm, valreg.

i107: d1    ,b2+b101, d31   ; zonesub:toptoreg, op.zindexch, w1up,
      d26   , h5    , g15   ;         newvalandop(descrlength,litint),
      b2+b32, b2+b26, c14   ;         op.wm, op.wa, zonereg.

i108: d39   , a17           ; arrfbool: savebool, arrfield.
i109: d40   , a17           ; arrfint : saveint , arrfield.
i110: d41   , a17           ; arrflong: savelong, arrfield.
i111: d42   , a17           ; arrfreal: savereal, arrfield.

a17:  d1    , j0    , d8    ; arrfield:  toptoreg, s.valreg, clearreg,
      d36   , a18   , c17   ;         exch, s.arrf1, doublereturn.

a18:  c48   , h28   , a20   ; arrf1:  if topkind(arr,s.arrref.)
      c35   , h10   , b0+b86;         if top(wrk,b.loadw3),
      c48   , h30   , a19   ;         if topkind(zone,s.simplezone1.),
      d26   , 0     , g15-2 ;         newvalandop(0,zonereladdr),
     b2+b103                ;         op.storebase,
      d26   , 6     , g15-2 ;         newvalandop(6,zonereladdr),
     b2+b104, d3    , b1+b87;         op.getdoper, outopand, b.zonebase.

a19:  c37   , c3            ; simplezone1:  if topext(return.),
     b2+b103, d31           ;         op.storebase, w1up,
      d37   , 6     ,b2+b104;         toprel(+6), op.getdoper,
      c17                   ;         doublereturn.

a20: b2+b103, d32   , +12   ; arrref: op.storebase, setw1(+2*6),
      d29   , g14           ;         newdopeaddr(varnoclear),
     b2+b104, d32   , -12   ;         op.getdoper, setw1(-2*6),
      c17                   ;         doublereturn.

\f



; fgs 1987.06.15                     algol 6, pass 7, page 43b


a21:  d1    , c19   , d36   ; makeix_index: toptoreg, newdope_to_type_literal(doperel), exch,
      b2+b156,              ;         op.ixw1, 
      c4    , g25   ,b2+b157;         savmodif (length, b.dopereltype_index),
      c17                   ;         doublereturn.

a22: d1     , d29   , g14   ; makeixfield: toptoreg, newdopeaddr (noclearvar),
     c19    , d36           ;         newdope_to_literal_type (doperel), exch,
     b2+b156                ;         op.ixw1,
     c4     , g28   ,b2+b157;         savemodif (length, b.dopereltype_field),
     j14    , j15           ;         s.addrreg, s.setsavetyp,
     c57                    ;         tripplereturn.

a23: b0+b156                ; makeixzindex: b.ixw1,
     a12    , j14   , j15   ;         s.zoneref, s.addrreg, s.setsavetyp,
     d31    , c59           ;         w1up, createnewdoperel,
     c4     , g25   ,b2+b157;         savemodif (length, b.dopereltype_index),
     c17                    ;         doublereturn.

a24: b0+b156                ; makeixzfield: b.ixw1,
     a12    , j14   , j15   ;         s.zoneref, s.addrreg, s.setsavetyp,
     d31    , c59           ;         w1up, createnewdoperel,
     c4     , g28   ,b2+b157;         savemodif (length, b.dopereltype_field),
     c17                    ;         doublereturn.

e.    ; end subscripting
\f



; rc 29.04.1971                                  algol 6, pass 7, page 44

b. a6 ; procedure calls
h.    ;

i112: d26   , 0     , g15-4 ; begcall: newvalandop(0,shield),
      d17   , 0     , d52   ;         intow1(0), prepcall,
     b1+b105                ;         b.begcall.

i113: d26   , 0     , g15-4 ; callnopar:  newvalandop(0,shield),
      d52   ,b0+b105        ;         prepcall, b.begcall,

i114: d14   , 0             ; endcall:  outfromw1(0),
      d14   , -1    , d30   ;         outfromw1(-1), w1down,
      d38   ,b2+b106        ;         savetoptyp, op.endcall,
      j17   , c9            ;         s.uvreal, setsavetyp.

i115:b1+b107                ; begpar: b.begpar.

i116: c35   , h15   , a1    ; addrpar:  if top(addr, s.addrex.),

i117: c49                   ; valpar: parkind
      a2    , a5            ;           (s.valex., s.arrpar1),
      d15   , 1             ;         inout(1),
      c4    , g17   ,b3+b110;         savmodif(param,op.endpar.)

a1:   d15   , 1     , d4    ; addrex: inout(1), release,
     b0+b108, c17           ;         b.addrex, doublereturn.

a2:   d53   , d1            ; valex:  countlitpar, toptoreg,
      d15   , 1     ,b0+b109;         inout(1), b.valueex,
      c17                   ;         doublereturn.

i118: d15   , 1     , c49   ; par:    inout(1), parkind
      a4    , a6            ;           (s.parex.,s.arrpar2),
a3:   c4    , g17   ,b3+b110; parout: savmodif(param,op.endpar.)

a4:   c4    , g17   ,b0+b110; parex:  savmodif(param,b.endpar),
      d4    , c17           ;         release, doublereturn.

a5:   d15   , 1             ; arrpar1:  inout(1),
a6:   d13   , f12   , c3    ; arrpar2:  outfrompar(dopebaserel), return.

i119: d4    , c3            ; deletecall:  release, return.

e.    ; end procedure calls
\f



; rc 1978.08.10                                  algol 6, pass 7, page 45

b. a6 ; conditions, case, switch
h.    ;

i120:b0+b111                ; if:     b.forif,

i121: d7    , c3            ; case:   clearall, return.

i122: d1    ,b0+b112, b1+b53; then:   toptoreg, b.sow11, b.condj.

i123: d1    ,b1+b113        ; of:     toptoreg, b.of.

i124: d1    ,b1+b114        ; ofsw:   toptoreg, b.ofsw.

i125: a3    ,b1+b115        ; elseex: s.prepelem, b.else.

i126: a3    , a5            ; endelseex: s.prepelem, s.copytyp,
     b0+b116, j0    , c9    ;         b.endelse, s.valreg, setsavetyp.

i127: c32   , a1            ; caseex: if toplit(go(litcase).),
      a3    ,b1+b117        ;         s.prepelem, b.case.

i128: c32   , a2            ; endcaseex: if toplit(go(endlitcase).),
      a3    , a5            ;         s.prepelem, s.copytyp,
     b0+b119, j0    , c9    ;         b.endcase, s.valreg, setsavetyp.

a1:   d38   , a4            ; litcase: savetoptyp, s.pass8typ,
     b3+b118                ;         op.litcase.

a2:   d38   , a4            ; endlitcase: savetoptyp, s.pass8typ,
      a5    ,b2+b120        ;         s.copytyp, op.endlitcase,
      j0    ,c9             ;          s.valreg, setsavetyp.

a3:   d38   , d1            ; prepelem: savetoptyp, toptoreg
a4:   c4    , g27   , b1    ; pass8typ: savmodif(pass8typ,b.0.)

a5:   d16   , f6            ; copytyp:  intopass(savetyp),
      a4    , c3            ;           s.par8typ, return.

i129: b0+0  ,b1+b115        ; elsest: b.0, b.else.

i130: b0+0  , b0+0  ,b1+b116; endelsest: b.0, b.0, b.endelse.

i131: b0+0  ,b1+b117        ; casesem: b.0, b.case.

a6:   ;
i132: b0+0  , b0+0  ,b1+b119; endcasest: b.0, b.0, b.endcase.

i133: d1    , a6            ; endswitch: toptoreg, s.endcasest,
      b0+b16, d58   , g19   ;            b.ds, outfrompar1(currbl),
      d13   , g19   , c3    ;            outfrompar(currbl), return.

e.    ; end conditions, case, switch
\f



; jz 1982.06.18                                  algol 8, pass 7, page 46

b. a19; for statements
h.    ;

i134: d22   , g11-2 , d10   ; for:    newop(valinwrk), reservework,
      d22   , g11-4 , d10   ;         newop(longwrk),  reservework,
     b1+b111                ;         b.forif.

i135: d45   , h16   , c3    ; forass: addr: delete(clearbit), return.

a14:  ;
i136: a1    , a12           ; forelem:s.forlab ,s.while,
     b0+b138, b1+b69        ;         b.doabs , b.byplab.

a1:   d8    , d48           ; forlab: clearreg, savew1,
      d32   , -12   , d47   ;         setw1(forlabwrk), norelease,
     b2+b139, d49   , c3    ;         op.forlab, restorew1, return.

i137: a1    , a12           ; step:   s.forlab, s.while,
     b0+b140, b1+b69        ;         b.step, b.byplab.

i138: d6                    ; until:  clearuv,
      c100  , a19           ;         if top(longextvar, s.extvartowork),
      c35   , h10   , a2    ;         if top(wrk,s.workstep),
      d47   , d1    , d30   ;         norelease, toptoreg, w1down,
      d38   , d47           ;         savetoptyp, norelease,
      c5    , b2+b26, d47   ;         toptypop(wa), norelese,
      c4    , g25   , b2+b14;         savmodif(length,op.hs),
      d33   , 12    , d35   ;         setplace(+2*6), copyentry,
      d34   , d45   , h18   ;         placetow1, delete(workbits),
      b1+b69                ;         b.byplab.
 
a19:                        ; extvartowork:
      d1    , d22   , g11-4 ;         toproreg, newop(longwrk),
      d10   , d47   , b3+b16;         reservework, norelease, op,ds.

a2:   d48   , d32   , -18   ; workstep: savew1, setw1(stepwrk),
      d47   ,b2+b141, b0+b58;         norelease, op.testfirst, b.slw11,
      d49   ,b1+b53         ;         restorew1, b.condj.

i139: d32   , -12           ; stepelem: setw1(stepdescr),
      c32   , a4            ;         if toplit(go(s.litstep1).),
      a8    , a3    , b1+b53;         s.teststep, s.stepcond1, b.condj.

a3:   c44   , 1     ,b1+b145; stepcond1: if savetyp(int,b.slw10.),
      b1+b62                ;         b.slw00.

a4:   a5    , j19   , d30   ; litstep1: s.litstep, s.>then, w1down,
      c3                    ;         return.

a5:   c43   , a7            ; litstep: if topvalneg(s.negstep.),
a6:   d32   , +12           ; contrdescr: setw1(until),
      c35   , h26   , c3    ;         if top(regoruv,return),
      d30                   ;         w1down,
      c34   , d30   , j0    ;         if nottopwrk(w1down, s.valreg),
      d31   , c3            ;         w1up, return.

a7:   a6    , d36   , c17   ; negstep: s.contrdescr, exch, doublereturn.
\f



; rc 17.3.1971                                  algol 6, pass 7, page 47


; for statements, continued

a8:   d32   , +12   , d1    ; teststep: setw1(untildescr), toptoreg,
      d38   , c29           ;         savetoptyp, typswitch
      a16   , a17   , a18   ;           (s.intunt.,s.longunt.,s.realunt.)

a16:  b2+b29,b0+b148, b3+b52; intunt: op.ws, b.sew10, op.lx.

a17:  b2+b30,b0+b150,b0+b148; longunt: op.ss, b.low10, b.sew10a,
a9:   c36   , 1     ,b3+b146; signtest: if toptyp(int,op.lxw00.),
      c35   , h10   , a15   ;         if top(wrk, s.wrksign.),
      d37   , -2    ,b3+b146;         toprel(-2), oplxw0.

a18:  b2+b31,b0+b149, a9    ; realunt: op.fs, b.sew00a, s.signtest,
      c3                    ;         return.

a15:  d44   , -2    , d47   ; worksign: topval(-2), norelease,
     b2+b146, d44   , +2    ;         op.lxw0, topval(+2),
      d4    , c17           ;         release, doublereturn.

a12:  ;
i140: d1    , d47   , d38   ; while:  toptoreg, norelease, savetoptyp,
      c4    , g25   , b3+b14;         savmodif(length,op.hs.)

i141: d1    ,b0+b102, b1+b53; whilele: toptoreg, b.szw11, b.condj.

i142: a14   ,b0+b142, b1+b69; fordo:  s.forelem, b.bypabs, b.byplab.

i143: d32   , -12           ; stepdo: setw1(stepdescr),
      c32   , a11   , a8    ;         if toplit(go(litstep2).), s.teststep,
      a10   , b0+b68, b1+b69;         s.stepcond2, b.condbyp, b.byplab.

a10:  c44   , 1     , b1+b59; stepcond2: if savetyp(int,b.shw1-1.),
      b1+b65                ;         b.shw0-1.

a11:  a5    , j20   , d30   ; litstep2: s.litstep, s.<=while, w1down,
      c3                    ;         return.

i144: d1    ,b0+b112, b0+b68; whiledo:toptoreg, b.sow11, b.condbyp,
      b1+b69                ;         b.byplab.

i145: d4    ,b2+b143, d4    ; enddo1: release, openddo1, release,
      c3                    ;         return.

i146: d4    ,b2+b144, d4    ; enddon: release, op.enddon, release,
      c3                    ;         return.

i147: d8    , d30   , d47   ; whilelab: clearreg, w1down, norelease,
     b2+b139, d31   , b1+b69;         op.forlab, w1up, b.byplab.

e.    ; end for statements
\f



; rc 14.04.1971                                algol 6, pass 7, page 48

b. a5 ; blocks, odds and ends
h.    ;

i148: d24   , d16   , f12   ; begext: tastenext, intopar(blind),
      c3                    ;         return. comment skips a gotobyp.

i149: a1    ,b1+b121        ; begblock: s.initbl, b.begblock.

i150: d15   , 1     , a1    ; begproc: inout(1), s.initbl,
     b1+b122                ;          b.begproc.

a1:   d27   , f8    , f18   ; initbl: newentry(workbits,blockw1),
      d27   , f10   , g15-4 ;         newentry(workinform,shield),
      d16   , f12   , d54   ;         intopar(relbase), prepblock,
      c3                    ;         return.

i151: d55   , d13   , f12   ; endblock: termblock, outfrompar(appetit),
      d32   , -12   ,b1+b123;         setw1(-2*6), b.endblock.

i152: d55   , d13   , f12   ; endzblock: termblock, outfrompar(appetit),
      d32   , -12   ,b1+b124;         setw1(-2*6), b.endzblock.

i153:b1+b125                ; exitblock: b.exitbl.

i154:b1+b126                ; exitprnt:  b.exitprnt.

i155:b1+b127                ; exittppr:  b.exittppr.

i156: d15   , 4     ,b0+b128; endext: inout(4), b.endext,

i157: d15   , 1             ; endpass:inout(1),
      d16   , f14           ;         intopar(counter),
      d27   , f14   , g15-4 ;         newentry(counter,shield),
      c42   , 0     , a3    ;         if count(0) isless1:(go(s.finis).),
a2:   d15   , 12            ; copystd:inout(12),
      c42   , -1    , a3    ;         if count(-1) isless1:(go(s.finis).),
      c18   , a2            ;         go(copystd).

a3:   d14   , 0     , d30   ; finis:  outfromw1(0), w1down,
      c51                   ;         exitpass.
\f



; jz 1979.02.15                                  algol 8, pass 7, page 49


; blocks, odds and ends, continued

i158: d47   , b2+b24        ; takeval:norelease, op.takeform,
      d38   , a5            ;         savetoptyp, s.val,
      c4    , g25   , b3+b14;         savmodif(length,op.hs.)

a5:   c36   , 1     ,b1+b129; val:    if toptyp(int,b.intval.),
      c36   , 2     ,b1+b154;         if toptyp(long,b.longva.)
      c36   , 3     ,b1+b130;         if toptyp(real,b.realval.),
      j14   , j15           ;         s.addrreg, s.setsavetyp,
      d1    , c3            ;         toptoreg, return.

i159: b2+b12, d15   , 2     ; takearr:op.dl, inout(2),
      b1+b131               ;         b.takeaar.

i160: b3+b132               ; takezarr: op.takezarr.

i161: b1+b133               ; gotobyp:  b.gotobyp.

i162: b1+b69                ; byplab:   b.byplab.

i163: c48   , h27   , a4    ; goto:   if topkind(label,s.local.),
      d1    ,b1+b135        ;         toptoreg, b.compgo.

a4:   c50   , c3            ; local:  if topglobal(return.),
     b2+b134, c17           ;         op.localgo, doublereturn.

i164: d15   , 1     ,b1+b136; label:  inout(1), b.label.

i165: b1+b137               ; trouble:b.stop.

i166: d38                   ; assign: savetoptyp,
      c4    , g25   , b3+b14;         savmodif(length,op.hs.)

i167: d1    , c3            ; prepass: toptoreg, return.

i168: d25   , c3            ; newline: newline, return.

i171: b1+b151               ; disable: b.disable
 
i172: b1+b152               ; enable:  b.enable
 
; i169: see after i70
; i170:  -    -   i71

e.    ; end blocks, odds and ends
\f




; fgs 1987.05.13                              algol 6, pass 7, page 50


; termination of maintable:

i.    ;
e.    ; end maintable

k=k+g0; reset k

g4=k-g3                 ; init pass 7 relative to reference base.

; init pass 7            
; is overwritten by the w1-stack.

b.  a5                  ; begin block init pass7
w.

g7:   rl  w2  x1+e17-g3 ; init pass 7: w1 = rebase = g3.
      al  w3  c1-j3+1+g0;   w2:= modebits;
      sz  w2  h24       ;   if spill.yes
      hs  w3  x1+j3-g3  ;     then set goto nextw2 in c38;
      al  w3  c1-j6+1+g0;   
      sz. w2 (a0.)      ;   if ix.yes
      hs  w3  x1+j6-g3  ;     then set goto nextw2 in c52;
      al  w3  c1-j4+1+g0;
      sz  w2  h25       ;   if indexcheck.yes
      hs  w3  x1+j4-g3  ;     then set goto nextw2 in c47;
      al  w3  d57-j5+1  ;
      sz  w2  h24       ;   if spill.yes
      hs  w3  x1+j5-g3  ;     then set goto multalarm in c90;
      al  w0  -1        ;
      al  w3  -1<10-1   ;
      so  w2  h24       ;
      ld  w0  -12       ;
      al  w3  x1+d56-g3 ;   interrupt address:= d56;
      jd      1<11      ;   set interrut;
      rl  w3  x1+e9+4-g3;
      al  w3  x3-30     ;   abstop w1 stack:=
      rs  w3  x1+f21-g3 ;     lastwork - 5 entries;
      al  w3  x1+g6-g3  ;
      rs  w3  x1+f0-g3  ;   currw2stack:= abstopw2stack;
      al. w3  g7.-1     ;
      rx  w3  2         ;   w1:= base w1 stack;
      jl     x3+c3-g3+g0;   goto return;


a0:   1<15              ;   ix bit in modeword

e.                      ; end block init pass7



; terminate pass 7 slang-code:

g2=k-g1                 ; number of bytes
e30=e30+g2

i.    ; idlist
e.    ; end pass 7 segment
m. jz.fgs 1987.06.18 algol 8, pass 7
\f

▶EOF◀