ack/lang/a68s/aem/cybcod.p

1136 lines
62 KiB
OpenEdge ABL
Raw Permalink Normal View History

1988-10-04 10:56:50 +00:00
60000 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
60010 (**)
60020 (**)
60030 (*$T-*)
60040 (*+23()
60050 PROCEDURE OCODE(OPCOD:POP;ROUTINE:ALFA);
60060 BEGIN
60070 CODETABLE[OPCOD].ROUTINE:=ROUTINE;
60080 END;
60090 PROCEDURE INITCODES;
60100 VAR I: INTEGER;
60110 BEGIN
60120 FOR I := PNONE TO PLAST DO
60130 BEGIN CODETABLE[I].ROUTINE := ' '; CODETABLE[I].PR := SBTSTK END;
60140 OCODE (PNONE , 'PNONE ');
60150 OCODE (PIM , 'PIM ');
60160 OCODE (PRE , 'PRE ');
60170 OCODE (PBIN , 'PBIN ');
60180 OCODE (PREPR , 'PREPR ');
60190 OCODE (PSGNI , 'PSGNI ');
60200 OCODE (PSHRTC , 'PSHRTC ');
60210 OCODE (PSHRTR , 'PSHRTR ');
60220 OCODE (PSHRTI , 'PSHRTI ');
60230 OCODE (PLENGC , 'PLENGC ');
60240 OCODE (PLENGR , 'PLENGR ');
60250 OCODE (PLENGI , 'PLENGI ');
60260 OCODE (PODD , 'PODD ');
60270 OCODE (PROUNL , 'PROUNL ');
60280 OCODE (PROUN , 'PROUN ');
60290 OCODE (PENTIL , 'PENTIL ');
60300 OCODE (PENTI , 'PENTI ');
60310 OCODE (PCONJ , 'PCONJ ');
60320 OCODE (PARGL , 'PARGL ');
60330 OCODE (PARG , 'PARG ');
60340 OCODE (PNOTB , 'PNOTB ');
60350 OCODE (PABSCH , 'PABSCH ');
60360 OCODE (PABSB , 'PABSB ');
60370 OCODE (PABSC , 'PABSC ');
60380 OCODE (PABSI , 'PABSI ');
60390 OCODE (PNEGI , 'PNEGI ');
60400 OCODE (PPLITM , 'PPLITM ');
60410 OCODE (PMULIC , 'PMULIC ');
60420 OCODE (PMULCI , 'PMULCI ');
60430 OCODE (PELMBY , 'PELMBY ');
60440 OCODE (PELMBT , 'PELMBT ');
60450 OCODE (PSHR , 'PSHR ');
60460 OCODE (PSHL , 'PSHL ');
60470 OCODE (PLWBMSTR , 'PLWBMSTR ');
60480 OCODE (PLWBM , 'PLWBM ');
60490 OCODE (PLWB , 'PLWB ');
60500 OCODE (PUPBMSTR , 'PUPBMSTR ');
60510 OCODE (PUPBM , 'PUPBM ');
60520 OCODE (PUPB , 'PUPB ');
60530 OCODE (PORB , 'PORB ');
60540 OCODE (PANDB , 'PANDB ');
60550 OCODE (PMODAB , 'PMODAB ');
60560 OCODE (POVERAB , 'POVERAB ');
60570 OCODE (PDIVAB , 'PDIVAB ');
60580 OCODE (PTIMSABS , 'PTIMSABS ');
60590 OCODE (PTIMSAB , 'PTIMSAB ');
60600 OCODE (PMINUSAB , 'PMINUSAB ');
60610 OCODE (PPLSTOCS , 'PPLSTOCS ');
60620 OCODE (PPLSABCH , 'PPLSABCH ');
60630 OCODE (PPLSABS , 'PPLSABS ');
60640 OCODE (PPLSAB , 'PPLSAB ');
60650 OCODE (PCAT , 'PCAT ');
60660 OCODE (PGEBT , 'PGEBT ');
60670 OCODE (PGECS , 'PGECS ');
60680 OCODE (PGE , 'PGE ');
60690 OCODE (PGTBY , 'PGTBY ');
60700 OCODE (PGTCS , 'PGTCS ');
60710 OCODE (PGT , 'PGT ');
60720 OCODE (PLEBT , 'PLABT ');
60730 OCODE (PLECS , 'PLECS ');
60740 OCODE (PLE , 'PLE ');
60750 OCODE (PLTBY , 'PLTBY ');
60760 OCODE (PLTCS , 'PLTCS ');
60770 OCODE (PLT , 'PLT ');
60780 OCODE (PNEB , 'PNEB ');
60790 OCODE (PNECS , 'PNECS ');
60800 OCODE (PNE , 'PNE ');
60810 OCODE (PEQB , 'PEQB ');
60820 OCODE (PEQCS , 'PEQCS ');
60830 OCODE (PEQ , 'PEQ ');
60840 OCODE (PEXP , 'PEXP ');
60850 OCODE (PMOD , 'PMOD ');
60860 OCODE (POVER , 'POVER ');
60870 OCODE (PDIV , 'PDIV ');
60880 OCODE (PMUL , 'PMUL ');
60890 OCODE (PSUB , 'PSUB ');
60900 OCODE (PADD , 'PADD ');
60910 OCODE (PNOOP , 'PNOOP ');
60920 OCODE (PASP , 'PASP ');
60930 OCODE (PHOIST , 'PHOIST ');
60940 OCODE (PSELECT , 'PSELECT ');
60950 OCODE (PSELECTROW, 'PSELECTROW');
60960 OCODE (PSTRNGSLICE , 'PSTRNGSLIC');
60970 OCODE (PSTARTSLICE , 'PSTARTSLIC');
60980 OCODE (PSLICE1 , 'PSLICE1 ');
60990 OCODE (PSLICE2 , 'PSLICE2 ');
61000 OCODE (PSLICEN , 'PSLICEN ');
61010 OCODE (PCASE , 'PCASE ');
61020 OCODE (PJMPF , 'PJMPF ');
61030 OCODE (PLPINIT , 'PLPINIT ');
61040 OCODE (PRANGENT , 'PRANGENT ');
61050 OCODE (PRANGEXT , 'PRANGEXT ');
61060 OCODE (PROUTNENT , 'PROUTNENT ');
61070 OCODE (PACTDRMULT, 'PACTDRMULT');
61080 OCODE (PACTDRSTRUCT, 'PACTDRSTRU');
61090 OCODE (PVARLISTEND , 'PVARLISTEN');
61100 OCODE (PDCLINIT , 'PDCLINIT ');
61110 OCODE (PCREATEREF, 'PCREATEREF');
61120 OCODE (PCHECKDESC, 'PCHECKDESC');
61130 OCODE (PDCLSP , 'PDCLSP ');
61140 OCODE (PDECM , 'PDECM ');
61150 OCODE (PBOUNDS , 'PBOUNDS ');
61160 OCODE (PLOADRT , 'PLOADRT ');
61170 OCODE (PLOADRTP , 'PLOADRTP ');
61180 OCODE (PSCOPETT , 'PSCOPETT ');
61190 OCODE (PASSIGTT , 'PASSIGTT ');
61200 OCODE (PSCOPETN , 'PSCOPETN ');
61210 OCODE (PASSIGTN , 'PASSIGTN ');
61220 OCODE (PSCOPENT , 'PSCOPENT ');
61230 OCODE (PASSIGNT , 'PASSIGNT ');
61240 OCODE (PSCOPENN , 'PSCOPENN ');
61250 OCODE (PASSIGNN , 'PASSIGNN ');
61260 OCODE (PSCOPEVAR , 'PSCOPEVAR ');
61270 OCODE (PSCOPEEXT , 'PSCOPEEXT ');
61280 OCODE (PLOADVAR , 'PLOADVAR ');
61290 OCODE (PASGVART , 'PASGVART ');
61300 OCODE (PGETPROC , 'PGETPROC ');
61310 OCODE (PIDTYREL , 'PIDTYREL ');
61320 OCODE (PDEREF , 'PDEREF ');
61330 OCODE (PGETTOTAL , 'PGETTOTAL ');
61332 OCODE (PGETMULT , 'PGETMULT ');
61340 OCODE (PGETTOTCMN, 'PGETTOTCMN');
61350 OCODE (PVOIDNAKED, 'PVOIDNAKED');
61360 OCODE (PSKIP , 'PSKIP ');
61370 OCODE (PSKIPSTRUCT , 'PSKIPSTRUC');
61380 OCODE (PNIL , 'PNIL ');
61390 OCODE (PVOIDNORMAL , 'PVOIDNORMA');
61400 OCODE (PVOIDSPECIAL, 'PVOIDSPECI');
61410 OCODE (PWIDEN , 'PWIDEN ');
61420 OCODE (PROWNONMULT , 'PROWNONMUL');
61430 OCODE (PROWMULT , 'PROWMULT ');
61440 OCODE (PCALL , 'PCALL ');
61450 OCODE (PRETURN , 'PRETURN ');
61460 OCODE (PPARBEGIN , 'PPARBEGIN ');
61470 OCODE (PLPINCR , 'PLPINCR ');
61480 OCODE (PLPTEST , 'PLPTEST ');
61490 OCODE (PGBSTK , 'PGBSTK ');
61500 OCODE (PLEAPGEN , 'PLEAPGEN ');
61510 OCODE (PSWAP , 'PSWAP ');
61520 OCODE (PPREPSTRDISP, 'PPREPSTRDI');
61530 OCODE (PPREPROWDISP, 'PPREPROWDI');
61540 OCODE (PCOLLTOTAL, 'PCOLLTOTAL');
61550 OCODE (PCOLLNAKED, 'PCOLLNAKED');
61560 OCODE (PCOLLCHECK, 'PCOLLCHECK');
61570 OCODE (PLINE , 'PLINE ');
61580 OCODE (PENDSLICE , 'PENDSLICE ');
61590 OCODE (PTRIM , 'PTRIM ');
61600 OCODE (PJMP , 'PJMP ');
61610 OCODE (PPUSH , 'PPUSH ');
61620 OCODE (PPUSHIM , 'PPUSHIM ');
61630 OCODE (PGETOUT , 'PGETOUT ');
61640 OCODE (PSETIB , 'PSETIB ');
61650 OCODE (PRNSTART , 'PRNSTART ');
61660 OCODE (PPARM , 'PPARM ');
61670 OCODE (PNAKEDPTR , 'PNAKEDPTR ');
61680 OCODE (PPBEGIN , 'PPBEGIN ');
61690 OCODE (PPEND , 'PPEND ');
61710 OCODE (PLAST , 'PLAST ');
61720 OCODE (PPASC , 'PPASC ');
61730 OCODE (PENVCHAIN , 'PENVCHAIN ');
61740 OCODE (PDUP1ST , 'PDUP1ST ');
61750 OCODE (PDUP2ND , 'PDUP2ND ');
61760 OCODE (PDATALIST , 'PDATALIST ');
61770 END;
61780 ()+23*)
61790 (************************************)
61800 (* CYBER VERSION *)
61810 (************************************)
61820 PROCEDURE INITCODES;
61830 (*INITIALIZES CODETABLE*)
61840 CONST
61850 (*+61() X12 = SBTX12; X45 = SBTX45; ST2 = SBTSTK2; ()+61*)
61860 X5 = SBTX5; X5S = SBTX5; ST = SBTSTK; O = SBTVOID;
61870 SN = SBTSTKN; SNS = SBTSTKN; SNP = SBTSTKN; SDL = SBTDL; XN = SBTXN;
61880 X5P = SBTX5; STP = SBTSTK; X0S = SBTX0; STS = SBTSTK; X6 = SBTX6;
61890 X0 = SBTX0; X0P = SBTX0; X1 = SBTX1; X1S = SBTX1; X1P = SBTX1;
61910 PPOPTOX0(*2*)=203; PPOPTOX1(*2*)=205; PPUSHX6=207;
61920 PLOADX5IM(*2*)=208; PX5TOX0=210; PX5TOX1=211;
61930 PX6TOX5=212; PX6TOX0=213; PX6TOX1=214; PX1TOX0=215; PLOADX6(*3*)=216;
61940 QELMBT=219; QNORM=220; QNEGI=221; QABSB=222; QABSB1=223;
61950 QNAKEDPTR=224; QDIV=225; QDIV1=226; QDIV2=227; QSWAP=228; QSWAP1=229; QCFSTRNG=230;
61960 QGEBT=231; QRANGENT=232; QWIDEN=233; QLPINIT(*4*)=234; QDCLINIT(*1*)=238;
61970 PPUSHX0=239; QGETPROC=240; QPARAM1A=241;
61980 QPBEGIN(*5*)=242;
61990 QLOADRTA=247; QCHECKDESC=248; QABSI=249; QABSI1=250; QLOADX6=251; QPOPTOX6=252;
62000 QMUL=253; QMUL1=254; QCAS=255; QVOIDNM=256; QVOIDNM1=257; QVOIDNM2=258; QVOIDNM3=259;
62010 QASSIGNT(*2*)=260;QCOLLTOTAL(*5*)=262;QSCOPEVAR(*3*)=267;QLOADVAR(*4*)=270;
62020 QLOADX0=274;QPOPX0=275;QPOPX1=276;
62030 QDCLSP(*4*)=277; QLOOPINCR(*6*)=281;
62040 QSETIB(*2*)=287; QPOP1=289; QPASC(*2*)=290;
62050 QPUSH(*3*)=292; QVASSTX(*4*)=295;
62060 QRANGEXT(*3*)=299; QLINK=302; QENTER=303; QLINE=304;
62070 QNOTB=305; QEQ=306; QEQ1=307; QNE=308; QNE1=309; QCALL(*5*)=310; PPOPTOX5=315; QRNSTART(*3*)=316;
62080 PPUSHX5=319; PLOADX6IM(*2*)=320;PPOPTOX6=322;PX5TOX6=323;
62090 PLOADX5(*3*)=324;
62100 PLOADX0(*4*)=327; PLOADX1(*3*)=331;
62110 QGETTOTCMN(*2*)=334; QGETTOTAL(*6*)=336; QPARM(*5*)=342; QCALLA(*4*)=347;
62120 QSELECT(*5*)=351; QDECM(*5*)=356; PLOADRTA(*3*)=361;
62124 PPUSHX1=364; PX1TOX5=365; PX1TOX6=366;
62130 (*+61()
62140 QASGVART(*5+)=367; PPUSH2(*3+)=372; QPUSH2(*6+)=375;
62150 PLOADX12(*3+)=381; QLOADX12=384; PLOADX45(*3+)=385; QLOADX45=388;
62160 PPUSHX12=389; QPUSHX12(*2+)=390; PPUSHX45=392; QPUSHX45(*2+)=393;
62170 PPOPTOX12=395; QPOPTOX12(*2+)=396; PPOPTOX45=398; QPOPTOX45(*2+)=399;
62180 PX12TOX45=401; QX12TOX45=402; PX45TOX12=400;5QX45TOX12=401; 6 3
62190 QLENGR=402; QMULL(*7+)=403; QADD(*10+)=410;
62200 ()+61*)
62210 VAR I: INTEGER;
62220 PROCEDURE ICODE(OPCOD: POP; COMPASS: ALFA; PNEXT: POP;VP1,VP2,VPR:SBTTYP);
62230 (*WARNING: THIS PROCEDURE WILL NOT COPE WITH ERRONEOUS COMPASS*)
62240 LABEL 99;
62250 CONST SHIFT1=100000B;
62260 VAR CHA: CHAR;
62270 II: INTEGER;
62280 L: PACKED RECORD
62290 CASE INTEGER OF
62300 1: (FM: PACKED ARRAY [1..2] OF CHAR;
62310 LJT, LKT: (B, A, X, KK, STAR);
62320 LI, LJ, LK: 0..7;
62330 LOP1, LOP2: (PLUS, MINUS, TIMES, OVER, COMMA, MISSING);
62340 LKP: BOOLEAN;
62350 LKK: -400000B..377777B);
62360 2: (LW: INTEGER)
62370 (*NOTE THAT LW:=0 SETS LI,LJ,LK TO 0, LOP1,LOP2 TO PLUS AND LJT,LKT TO B*)
62380 END;
62390 M: PACKED RECORD
62400 CASE INTEGER OF
62410 1: (F: 0..7; M: 0..7; I: 0..7; J: 0..7; K: 0..7);
62420 2: (MW: 0..77777B)
62430 END;
62440 BEGIN WITH L, M DO
62450 BEGIN
62460 LW := 0; MW := 0; LKP := FALSE; LKK := 0;
62470 FM[1] := COMPASS[1]; FM[2] := COMPASS[2];
62480 CHA := COMPASS[3];
62490 IF CHA IN ['0'..'9'] THEN BEGIN LI := ORD(CHA)-ORD('0'); II := 4 END
62500 ELSE II := 3;
62510 WHILE COMPASS[II]=' ' DO
62520 IF II=10 THEN GOTO 99 ELSE II := II+1;
62530 CHA := COMPASS[II];
62540 IF (CHA='-') AND NOT(COMPASS[II+1] IN ['0'..'9']) THEN
62550 BEGIN LOP1 := MINUS; II := II+1; CHA := COMPASS[II] END;
62560 IF CHA IN ['B', 'A', 'X'] THEN
62570 BEGIN
62580 IF CHA='B' THEN LJT := B
62590 ELSE IF CHA='A' THEN LJT := A
62600 ELSE IF CHA='X' THEN LJT := X;
62610 LJ := ORD(COMPASS[II+1])-ORD('0');
62620 II := II+2; CHA := COMPASS[II]
62630 END
62640 ELSE LJT := KK;
62650 LKT := KK;
62660 IF CHA='+' THEN LOP2 := PLUS
62670 ELSE IF CHA='-' THEN LOP2 := MINUS
62680 ELSE IF CHA='*' THEN LOP2 := TIMES
62690 ELSE IF CHA='/' THEN LOP2 := OVER
62700 ELSE IF CHA=',' THEN LOP2 := COMMA
62710 ELSE IF CHA IN ['0'..'9'] THEN
62720 BEGIN LKK := ORD(CHA)-ORD('0'); LKP := TRUE END
62730 ELSE BEGIN LKT := B; LOP2 := MISSING END;
62740 II := II+1; CHA := COMPASS[II];
62750 IF CHA IN ['B', 'A', 'X'] THEN
62760 BEGIN
62770 IF CHA='B' THEN LKT := B
62780 ELSE IF CHA='A' THEN LKT := A
62790 ELSE IF CHA='X' THEN LKT := X;
62800 LK := ORD(COMPASS[II+1])-ORD('0');
62810 II := II+2
62820 END
62830 ELSE LK := 0;
62840 (*READ K*)
62850 WHILE II<=10 DO
62860 BEGIN CHA := COMPASS[II];
62870 IF CHA IN ['0'..'9'] THEN
62880 BEGIN LKK := LKK*10+ORD(CHA)-ORD('0'); LKP := TRUE END
62890 ELSE IF CHA='*' THEN LKT := STAR;
62900 II := II+1
62910 END;
62920 IF LOP2=MINUS THEN
62930 IF LKP THEN
62940 BEGIN LKK := -LKK; LOP2 := PLUS END
62950 ELSE LKK := 1; (*OR ANY ODD NUMBER*)
62960 99: WITH CODETABLE[OPCOD] DO
62970 BEGIN
62980 P1 := VP1;
62990 P2 := VP2;
63000 PR := VPR;
63010 IF (P1=O)AND(P2<>O) THEN WRITELN(OUTPUT,'FAILED ICODE-A');
63020 IF (P2=ST) THEN WRITELN(OUTPUT,'FAILED ICODE-B');
63030 IF FM='LB' THEN
63040 LEN := F0
63050 ELSE IF FM[1]='S' THEN
63060 BEGIN
63070 CASE FM[2] OF
63080 'A': F := 5;
63090 'B': F := 6;
63100 'X': F := 7
63110 END;
63120 I := LI; J := LJ;
63130 CASE LKT OF
63140 STAR,KK: BEGIN
63150 LEN := F30;
63160 CASE LJT OF
63170 A: M := 0;
63180 KK,B: M := 1;
63190 X: M := 2
63200 END
63210 END;
63220 B: BEGIN
63230 LEN := F15;
63240 CASE LJT OF
63250 X: M := 3;
63260 A: M := 4;
63270 B: M := 6;
63280 END;
63290 IF LOP2=MINUS THEN M := M+1;
63300 K := LK
63310 END
63320 END
63330 END
63340 ELSE IF FM='BX' THEN
63350 BEGIN
63360 F := 1; LEN := F15;
63370 I := LI; K := LJ;
63380 IF LKT=B (*I.E. ABSENT*) THEN
63390 BEGIN M := 0; J := LJ END
63400 ELSE
63410 BEGIN
63420 CASE LOP2 OF
63430 TIMES: M := 1;
63440 PLUS: M := 2;
63450 MINUS: M := 3
63460 END;
63470 J := LK
63480 END;
63490 IF LOP1=MINUS THEN M := M+4
63500 END
63510 ELSE IF (FM[1] IN ['F', 'D', 'R', 'I', 'C']) AND (FM[2]='X') THEN
63520 BEGIN
63530 LEN := F15;
63540 I := LI; J := LJ; K := LK;
63550 IF LOP2 IN [PLUS, MINUS] THEN
63560 BEGIN
63570 F := 3;
63580 CASE FM[1] OF
63590 'F': M := 0;
63600 'D': M := 2;
63610 'R': M := 4;
63620 'I': M := 6
63630 END;
63640 IF LOP2=MINUS THEN M := M+1
63650 END
63660 ELSE
63670 BEGIN F := 4;
63680 CASE FM[1] OF
63690 'F': M := 0;
63700 'R': M := 1;
63710 'D': M := 2;
63720 'C': BEGIN M := 7; K := LJ END
63730 END;
63740 IF LOP2=OVER THEN M := M+4
63750 END
63760 END
63770 ELSE IF (FM[1] IN ['M','L','A','N','Z','U','P']) AND (FM[2]='X') THEN
63780 BEGIN
63790 IF LKP THEN
63800 BEGIN
63810 MW := LKK; (*SET JK*)
63820 CASE FM[1] OF
63830 'M': BEGIN F := 4; M := 3 END;
63840 'L': BEGIN F := 2; M := 0 END;
63850 'A': BEGIN F := 2; M := 1 END
63860 END
63870 END
63880 ELSE
63890 BEGIN F := 2;
63900 IF LKT=X THEN BEGIN J := LJ; K := LK END
63910 ELSE BEGIN J := LK; K := LJ END;
63920 CASE FM[1] OF
63930 'L': M := 2;
63940 'A': M := 3;
63950 'N': M := 4;
63960 'Z': M := 5;
63970 'U': M := 6;
63980 'P': M := 7
63990 END
64000 END;
64010 LEN := F15; I := LI
64020 END
64030 ELSE (*JUMP*)
64040 BEGIN F := 0;
64050 LEN := F30;
64060 IF LJT=X THEN
64070 BEGIN M := 3; J := LJ;
64080 IF FM='ZR' THEN I := 0
64090 ELSE IF FM='NZ' THEN I := 1
64100 ELSE IF FM='PL' THEN I := 2
64110 ELSE IF FM='NG' THEN I := 3
64120 ELSE IF FM='IR' THEN I := 4
64130 ELSE IF FM='OR' THEN I := 5
64140 ELSE IF FM='DF' THEN I := 6
64150 ELSE IF FM='ID' THEN I := 7
64160 ELSE HALT
64170 END
64180 ELSE
64190 BEGIN I := LJ; J := LK;
64200 IF FM='PS' THEN M := 0
64210 ELSE IF FM='RJ' THEN M := 1
64220 ELSE IF FM='JP' THEN M := 2
64230 ELSE IF FM='EQ' THEN M := 4
64240 ELSE IF FM='NE' THEN M := 5
64250 ELSE IF FM='GE' THEN M := 6
64260 ELSE IF FM='LE' THEN BEGIN M := 6; I := LJ; J := LI END
64270 ELSE IF FM='LT' THEN M := 7
64280 ELSE IF FM='GT' THEN BEGIN M := 7; I := LJ; J := LI END
64290 ELSE IF FM='NO' THEN BEGIN F := 4; M := 6; LEN := F15 END
64300 ELSE HALT
64310 END
64320 END;
64330 REL := 0;
64340 IF LEN=F15 THEN FMIJK := MW
64350 ELSE IF (LKP) AND (LKT<>STAR) THEN
64360 IF LKK>=0 THEN FMIJK := MW*SHIFT1+LKK
64370 ELSE FMIJK := MW*SHIFT1+LKK+1000000B
64380 ELSE IF LEN=F30 THEN
64390 IF (LKT <> STAR) AND (LOP2<>MISSING) THEN
64400 BEGIN LEN := F30K; FMIJK := MW*SHIFT1+LKK END
64410 ELSE BEGIN FMIJK := MW*SHIFT1; REL := LKK END;
64420 INLINE := TRUE;
64430 NEXT := PNEXT
64440 END
64450 END
64460 END;
64470 PROCEDURE OCODE(OPCOD: POP; PROUTINE: ALFA;VP1,VP2,VPR:SBTTYP);
64480 VAR I: INTEGER;
64490 BEGIN
64500 WITH CODETABLE[OPCOD] DO
64510 BEGIN
64520 P1 := VP1;
64530 P2 := VP2;
64540 PR := VPR;
64550 IF (P1=O)AND(P2<>O) THEN WRITELN(OUTPUT,'FAILED OCODE-A');
64560 IF P2=ST THEN WRITELN(OUTPUT,'FAILED OCODE-B');
64570 INLINE := FALSE;
64580 LINKINS := NIL;
64590 FOR I := 1 TO 7 DO ROUTINE[I] := PROUTINE[I]
64600 END
64610 END;
64620 (**)
64630 PROCEDURE QCODE (OPCOD:POP; COMPASS:ALFA; PNEXT:POP );
64640 BEGIN ICODE(OPCOD, COMPASS, PNEXT, O, O ,O ) END;
64650 (**)
64660 PROCEDURE FIRSTPART;
64670 VAR I: INTEGER;
64680 BEGIN FOR I := PNONE TO PLAST DO OCODE(I, 'DUMMY ', O , O , O );
64690 (**)
64700 ICODE(PPBEGIN , 'SB7 2 ', QPBEGIN ,O ,O ,O );
64710 QCODE(QPBEGIN , 'RJ B0+ ', 0);
64720 ICODE(PPBEGIN+1 , 'SB6 B2+ ', QPBEGIN+1 ,O ,O ,O );
64730 QCODE(QPBEGIN+1 , 'SB7 B6+100', QPBEGIN+2);
64740 QCODE(QPBEGIN+2 , 'SA0 5 ', QPBEGIN+3);
64750 QCODE(QPBEGIN+3 , 'GEB7,B4,41', QPBEGIN+4);
64760 OCODE(QPBEGIN+4 , 'START68 ' ,O ,O ,O );
64770 OCODE(PPEND , 'STOP68 ' ,O ,O ,O );
64780 OCODE(PPOP , ' ' ,O ,O ,O );
64790 ICODE(PABSI , 'BX3 X1 ', QABSI ,X1 ,O ,X1 );
64800 QCODE(QABSI , 'AX3 59 ', QABSI1);
64810 QCODE(QABSI1 , 'BX1 X1-X3 ', 0);
64820 ICODE(PABSI-2 , 'BX3 X1 ', QABSI ,X1 ,O ,X1 );
64830 OCODE(PABSI-4 , 'CABSI ' ,X0 ,O ,X6 );
64840 ICODE(PABSB , 'MX3 1 ', QABSB ,X1 ,O ,X1 );
64850 QCODE(QABSB , 'BX1 X1*X3 ', QABSB1);
64860 QCODE(QABSB1 , 'LX1 1 ', 0);
64870 ICODE(PABSB-1 , 'NO ', 0 ,X1 ,O ,X1 );
64880 ICODE(PABSCH , 'NO ', 0 ,X1 ,O ,X1 );
64890 ICODE(PADD , 'IX1 X5+X1 ', 0 ,X5 ,X1 ,X1 );
64900 ICODE(PADD-2 , 'RX1 X5+X1 ', QNORM ,X5 ,X1 ,X1 );
64910 (*+61()
64920 ICODE(PADD-3 , 'FX3 X1+X4 ', QADD ,X45,X12,X12);
64930 QCODE(QADD , 'DX4 X1+X4 ', QADD+1);
64940 QCODE(QADD+1 , 'NX3 X3 ', QADD+2);
64950 QCODE(QADD+2 , 'RX5 X2+X5 ', QADD+3);
64960 QCODE(QADD+3 , 'RX5 X4+X5 ', QADD+4);
64970 QCODE(QADD+4 , 'FX4 X3+X5 ', QADD+5);
64980 QCODE(QADD+5 , 'NX4 X4 ', QADD+6);
64990 QCODE(QADD+6 , 'DX5 X3+X5 ', QADD+7);
65000 QCODE(QADD+7 , 'NX5 X5 ', QADD+8);
65010 QCODE(QADD+8 , 'FX1 X4+X5 ', QADD+9);
65020 QCODE(QADD+9 , 'DX2 X4+X5 ', 0);
65030 ()+61*)
65040 OCODE(PADD-4 , 'CPLUS ' ,X0 ,X1 ,X6 );
65050 ICODE(PANDB , 'BX1 X1*X5 ', 0 ,X5 ,X1 ,X1 );
65060 ICODE(PANDB-1 , 'BX1 X1*X5 ', 0 ,X5 ,X1 ,X1 );
65070 OCODE(PARG , 'CARG ' ,X0 ,O ,X6 );
65080 ICODE(PBIN , 'NO ', 0 ,X1 ,O ,X1 );
65090 OCODE(PCAT , 'CATCC ' ,X0 ,X1 ,X6 );
65100 OCODE(PCAT-1 , 'CATSS ' ,X0 ,X1 ,X6 );
65110 OCODE(PCONJ , 'CCONJ ' ,X0 ,O ,X6 );
65120 ICODE(PDIV , 'PX5 X5 ', QDIV ,X5 ,X1 ,X1 );
65130 QCODE(QDIV , 'NX5 X5 ', QDIV1);
65140 QCODE(QDIV1 , 'PX1 X1 ', QDIV2);
65150 QCODE(QDIV2 , 'NX1 X1 ', PDIV-2);
65160 ICODE(PDIV-2 , 'RX1 X5/X1 ', 0 ,X5 ,X1 ,X1 );
65170 OCODE(PDIV-4 , 'CDIV ' ,X0 ,X1 ,X6 );
65180 ICODE(PDIVAB , 'RX1 X5/X1 ', 0 ,X5 ,X1 ,X1 );
65190 OCODE(PDIVAB-2 , 'CDIVAB ' ,X0 ,X1 ,X6 );
65200 ICODE(PELMBT , 'SB3 X5-1 ', QELMBT ,X5 ,X1 ,X1 );
65210 QCODE(QELMBT , 'LX1 B3,X1 ', 0);
65220 OCODE(PELMBY , 'ELEMBY ' ,X5 ,X1 ,X1 );
65230 OCODE(PENTI , 'ENTIER ' ,X1 ,O ,X1 );
65240 ICODE(PEQ , 'IX3 X1-X5 ', QEQ ,X5 ,X1 ,X1 );
65250 QCODE(QEQ , 'IX1 X5-X1 ', QEQ1);
65260 QCODE(QEQ1 , 'BX1 -X1-X3', 0);
65270 ICODE(PEQ-2 , 'IX3 X1-X5 ', QEQ ,X5 ,X1 ,X1 );
65280 OCODE(PEQ-4 , 'CEQ ' ,X0 ,X1 ,X6 );
65290 ICODE(PEQB , 'BX1 -X1-X5', 0 ,X5 ,X1 ,X1 );
65300 ICODE(PEQB-1 , 'IX3 X1-X5 ', QEQ ,X5 ,X1 ,X1 );
65310 ICODE(PEQB-2 , 'IX3 X1-X5 ', QEQ ,X5 ,X1 ,X1 );
65320 ICODE(PEQCS , 'IX3 X1-X5 ', QEQ ,X5 ,X1 ,X1 );
65330 ICODE(PEQCS-1 , 'SX2 2 ', QCFSTRNG ,X0 ,X1 ,X6 );
65340 OCODE(PEXP , 'POWI ' ,X5 ,X1 ,X1 );
65350 OCODE(PEXP-2 , 'POWR ' ,X5 ,X1 ,X1 );
65360 OCODE(PEXP-4 , 'CPOW ' ,X0 ,X1 ,X6 );
65370 ICODE(PPASC , 'SX6 B5 ', QPASC ,SDL,O ,X6 );
65380 ICODE(PPASC+1 , 'SX6 B5 ', QPASC ,X0S,O ,X6 );
65390 ICODE(PPASC+2 , 'SX6 B5 ', QPASC ,X0S,X1 ,X6 );
65400 OCODE(PPASC+3 , 'PASC ' ,STS,O ,X6 );
65410 QCODE(QPASC , 'SX7 2* ', QPASC+1);
65420 QCODE(QPASC+1 , 'EQ B0+ ', 0);
65430 ICODE(PENVCHAIN , 'SA3 B5 ', 0 ,O ,O ,O );
65440 ICODE(PENVCHAIN+1 , 'SA3 X3 ', 0 ,O ,O ,O );
65450 ICODE(PGE , 'IX1 X5-X1 ', PNOTB ,X5 ,X1 ,X1 );
65460 ICODE(PGE-2 , 'IX1 X5-X1 ', PNOTB ,X5 ,X1 ,X1 );
65470 ICODE(PGEBT , 'BX1 -X5*X1', QGEBT ,X5 ,X1 ,X1 );
65480 QCODE(QGEBT , 'BX5 X5-X5 ', PEQ);
65490 ICODE(PGEBT-1 , 'IX1 X5-X1 ', PNOTB ,X5 ,X1 ,X1 );
65500 ICODE(PGECS , 'IX1 X5-X1 ', PNOTB ,X5 ,X1 ,X1 );
65510 ICODE(PGECS-1 , 'SX2 4 ', QCFSTRNG ,X0 ,X1 ,X6 );
65520 ICODE(PGT , 'IX1 X1-X5 ', 0 ,X5 ,X1 ,X1 );
65530 ICODE(PGT-2 , 'IX1 X1-X5 ', 0 ,X5 ,X1 ,X1 );
65540 ICODE(PGTBY , 'IX1 X1-X5 ', 0 ,X5 ,X1 ,X1 );
65550 ICODE(PGTCS , 'IX1 X1-X5 ', 0 ,X5 ,X1 ,X1 );
65560 ICODE(PGTCS-1 , 'SX2 5 ', QCFSTRNG ,X0 ,X1 ,X6 );
65570 OCODE(PIM , 'CIM ' ,X0 ,O ,X6 );
65580 ICODE(PLE , 'IX1 X1-X5 ', PNOTB ,X5 ,X1 ,X1 );
65590 ICODE(PLE-2 , 'IX1 X1-X5 ', PNOTB ,X5 ,X1 ,X1 );
65600 ICODE(PLEBT , 'BX1 -X1*X5', QGEBT ,X5 ,X1 ,X1 );
65610 ICODE(PLEBT-1 , 'IX1 X1-X5 ', PNOTB ,X5 ,X1 ,X1 );
65620 ICODE(PLECS , 'IX1 X1-X5 ', PNOTB ,X5 ,X1 ,X1 );
65630 ICODE(PLECS-1 , 'SX2 B1 ', QCFSTRNG ,X0 ,X1 ,X6 );
65640 (*+61()
65650 ICODE(PLENGR , 'BX2 X2-X2 ', QLENGR ,X1 ,O ,X12);
65660 QCODE(QLENGR , 'DX2 X1+X2 ', 0);
65670 ()+61*)
65680 ICODE(PLT , 'IX1 X5-X1 ', 0 ,X5 ,X1 ,X1 );
65690 ICODE(PLT-2 , 'IX1 X5-X1 ', 0 ,X5 ,X1 ,X1 );
65700 ICODE(PLTBY , 'IX1 X5-X1 ', 0 ,X5 ,X1 ,X1 );
65710 ICODE(PLTCS , 'IX1 X5-X1 ', 0 ,X5 ,X1 ,X1 );
65720 ICODE(PLTCS-1 , 'SX2 B0 ', QCFSTRNG ,X0 ,X1 ,X6 );
65730 OCODE(PLWBMSTR , 'LWBMSTR ' ,X0 ,O ,X6 );
65740 OCODE(PLWBM , 'LWBM ' ,X0 ,O ,X6 );
65750 OCODE(PLWB , 'LWB ' ,X0 ,X1 ,X6 );
65760 ICODE(PMINUSAB , 'IX1 X5-X1 ', 0 ,X5 ,X1 ,X1 );
65770 ICODE(PMINUSAB-2 , 'RX1 X5-X1 ', QNORM ,X5 ,X1 ,X1 );
65780 OCODE(PMINUSAB-4 , 'CMINAB ' ,X0 ,X1 ,X6 );
65790 OCODE(PMOD , 'MOD ' ,X5 ,X1 ,X1 );
65800 OCODE(PMODAB , 'MOD ' ,X5 ,X1 ,X1 );
65810 ICODE(PMUL , 'DX1 X1*X5 ', QMUL ,X5 ,X1 ,X1 );
65820 QCODE(QMUL , 'BX3 X3-X3 ', QMUL1);
65830 QCODE(QMUL1 , 'IX1 X1+X3 ', 0);
65840 ICODE(PMUL-2 , 'RX1 X1*X5 ', 0 ,X5 ,X1 ,X1 );
65850 (*+61()
65860 ICODE(PMUL-3 , 'RX2 X2*X4 ', QMULL ,X45,X12,X12);
65870 QCODE(QMULL , 'RX5 X1*X5 ', QMULL+1);
65880 QCODE(QMULL+1 , 'RX2 X2+X5 ', QMULL+2);
65890 QCODE(QMULL+2 , 'FX3 X1*X4 ', QMULL+3);
65900 QCODE(QMULL+3 , 'DX4 X1*X4 ', QMULL+4);
65910 QCODE(QMULL+4 , 'RX4 X4+X2 ', QMULL+5);
65920 QCODE(QMULL+5 , 'FX1 X3+X4 ', QMULL+6);
65930 QCODE(QMULL+6 , 'DX2 X3+X4 ', 0);
65940 ()+61*)
65950 OCODE(PMUL-4 , 'CTIMS ' ,X0 ,X1 ,X6 );
65960 OCODE(PMULCI , 'MULCI ' ,X0 ,X1 ,X6 );
65970 OCODE(PMULCI-1 , 'MULSI ' ,X0 ,X1 ,X6 );
65980 OCODE(PMULIC , 'MULIC ' ,X0 ,X1 ,X6 );
65990 OCODE(PMULIC-1 , 'MULIS ' ,X0 ,X1 ,X6 );
66000 ICODE(PNE , 'IX3 X1-X5 ', QNE ,X5 ,X1 ,X1 );
66010 QCODE(QNE , 'IX1 X5-X1 ', QNE1);
66020 QCODE(QNE1 , 'BX1 X1-X3 ', 0);
66030 ICODE(PNE-2 , 'IX3 X1-X5 ', QNE ,X5 ,X1 ,X1 );
66040 OCODE(PNE-4 , 'CNE ' ,X0 ,X1 ,X6 );
66050 ICODE(PNEB , 'BX1 X1-X5 ', 0 ,X5 ,X1 ,X1 );
66060 ICODE(PNEB-1 , 'IX3 X1-X5 ', QNE ,X5 ,X1 ,X1 );
66070 ICODE(PNEB-2 , 'IX3 X1-X5 ', QNE ,X5 ,X1 ,X1 );
66080 ICODE(PNECS , 'IX3 X1-X5 ', QNE ,X5 ,X1 ,X1 );
66090 ICODE(PNECS-1 , 'SX2 3 ', QCFSTRNG ,X0 ,X1 ,X6 );
66100 ICODE(PNEGI , 'BX3 X3-X3 ', QNEGI ,X1 ,O ,X1 );
66110 QCODE(QNEGI , 'IX1 X3-X1 ', 0);
66120 ICODE(PNEGI-2 , 'BX3 X3-X3 ', QNEGI ,X1 ,O ,X1 );
66130 OCODE(PNEGI-4 , 'CNEGI ' ,X0 ,O ,X6 );
66140 ICODE(PNOTB , 'MX3 1 ', QNOTB ,X1 ,O ,X1 );
66150 QCODE(QNOTB , 'BX1 X3-X1 ', 0);
66160 ICODE(PNOTB-1 , 'BX3 X3-X3 ', QEQ1 ,X1 ,O ,X1 );
66170 ICODE(PNOOP , 'NO ', 0 ,X1 ,O ,X1 );
66180 ICODE(PNOOP-2 , 'NO ', 0 ,X1 ,O ,X1 );
66190 ICODE(PNOOP-4 , 'NO ', 0 ,X1 ,O ,X1 );
66200 ICODE(PODD , 'LX1 59 ', 0 ,X1 ,O ,X1 );
66210 ICODE(PORB , 'BX1 X1+X5 ', 0 ,X5 ,X1 ,X1 );
66220 ICODE(PORB-1 , 'BX1 X1+X5 ', 0 ,X5 ,X1 ,X1 );
66230 OCODE(POVER , 'OVER ' ,X5 ,X1 ,X1 );
66240 OCODE(POVERAB , 'OVER ' ,X5 ,X1 ,X1 );
66250 OCODE(PPLITM , 'CRCOMPLEX ' ,X0 ,X1 ,X6 );
66260 ICODE(PPLSAB , 'IX1 X5+X1 ', 0 ,X5 ,X1 ,X1 );
66270 ICODE(PPLSAB-2 , 'RX1 X5+X1 ', QNORM ,X5 ,X1 ,X1 );
66280 (*+61()
66290 ICODE(PPLSAB-3 , 'FX3 X1+X4 ', QADD ,X45,X12,X12);
66300 ()+61*)
66310 OCODE(PPLSAB-4 , 'CPLUSAB ' ,X0 ,X1 ,X6 );
66320 OCODE(PPLSABS , 'PLABSS ' ,X0 ,X1 ,X6 );
66330 OCODE(PPLSABS-1 , 'PLABSS ' ,X0 ,X1 ,X6 );
66340 OCODE(PPLSTOCS , 'PLTOSS ' ,X0 ,X1 ,X6 );
66350 OCODE(PPLSTOCS-1 , 'PLTOSS ' ,X0 ,X1 ,X6 );
66360 OCODE(PRE , 'CRE ' ,X0 ,O ,X6 );
66370 ICODE(PREPR , 'NO ', 0 ,X1 ,O ,X1 );
66380 OCODE(PROUN , 'ROUN ' ,X1 ,O ,X1 );
66390 OCODE(PSGNI , 'SIGN ' ,X1 ,O ,X1 );
66400 OCODE(PSGNI-2 , 'SIGN ' ,X1 ,O ,X1 );
66410 OCODE(PSHL , 'SHL ' ,X5 ,X1 ,X1 );
66420 (*+61()
66430 ICODE(PSHRTR , 'RX1 X1+X2 ', QNORM ,X12,O ,X1 );
66440 ()+61*)
66450 OCODE(PSHR , 'SHR ' ,X5 ,X1 ,X1 );
66460 ICODE(PSUB , 'IX1 X5-X1 ', 0 ,X5 ,X1 ,X1 );
66470 ICODE(PSUB-2 , 'RX1 X5-X1 ', QNORM ,X5 ,X1 ,X1 );
66480 OCODE(PSUB-4 , 'CMINUS ' ,X0 ,X1 ,X6 );
66490 ICODE(PTIMSAB , 'DX1 X5*X1 ', 0 ,X5 ,X1 ,X1 );
66500 ICODE(PTIMSAB-2 , 'RX1 X1*X5 ', 0 ,X5 ,X1 ,X1 );
66510 (*+61()
66520 ICODE(PTIMSAB-3 , 'RX2 X2*X4 ', QMULL ,X45,X12,X12);
66530 ()+61*)
66540 OCODE(PTIMSAB-4 , 'CTIMSAB ' ,X0 ,X1 ,X6 );
66550 OCODE(PTIMSABS , 'MULABSI ' ,X0 ,X1 ,X6 );
66560 OCODE(PUPBMSTR , 'UPBMSTR ' ,X0 ,O ,X6 );
66570 OCODE(PUPBM , 'UPBM ' ,X0 ,O ,X6 );
66580 OCODE(PUPB , 'UPB ' ,X0 ,X1 ,X6 );
66590 OCODE(QCFSTRNG , 'CFSTR ' ,O ,O ,O );
66600 QCODE(QNORM , 'NX1 B0,X1 ', 0);
66610 END;
66620 PROCEDURE SECONDPART;
66630 BEGIN
66640 ICODE(PGETPROC , 'SA3 B6+ ', QGETPROC ,O ,O ,O );
66650 QCODE(QGETPROC , 'BX0 X3 ', PGETPROC+1);
66660 OCODE(PGETPROC+1 , 'GETPROC ' ,X0 ,O ,O );
66670 ICODE(PSELECT , 'SA3 X1+B1 ', QSELECT+1 ,X1 ,O ,X1 );
66672 QCODE(QSELECT+1 , 'AX3 25 ', QSELECT+2);
66673 QCODE(QSELECT+2 , 'SX3 X3+ ', QSELECT+3);
66674 QCODE(QSELECT+3 , 'LX1 42 ', QSELECT+4);
66676 QCODE(QSELECT+4 , 'BX1 X1+X3 ', 0);
66678 ICODE(PSELECT+1 , 'SX3 B1+ ', QSELECT+3 ,X1 ,O ,X1 );
66680 ICODE(PSELECT+2 , 'SX3 B0+ ', QSELECT ,X0 ,O ,X0 );
66690 QCODE(QSELECT , 'IX0 X0+X3 ', 0);
66700 OCODE(PSELECTROW , 'SELECTR ' ,X0 ,O ,X6 );
66710 OCODE(PSTRNGSLICE , 'STRSUB ' ,X0 ,X1 ,X6 );
66720 OCODE(PSTRNGSLICE+1,'STRTRIM ' ,X0S,O ,X6 );
66730 OCODE(PSTARTSLICE , 'STARTSL ' ,STP,O ,O );
66740 OCODE(PSLICE1 , 'SLICE1 ' ,X0 ,X1 ,X0 );
66750 OCODE(PSLICE2 , 'SLICE2 ' ,X0S,X1 ,X0 );
66760 OCODE(PSLICEN , 'SLICEN ' ,X0S,O ,X6 );
66770 ICODE(PCASE , 'SA3 + ', QCAS ,X1 ,O ,O );
66780 OCODE(QCAS , 'CASE ' ,O ,O ,O );
66785 ICODE(PCASJMP , 'EQ B0, ', 0 ,O ,O ,O );
66787 ICODE(PCASJMP+1 , 'EQ B0, ', 0 ,O ,O ,O );
66790 ICODE(PJMPF , 'PL X1, ', 0 ,X1 ,O ,O );
66800 ICODE(PLPINIT , 'SX1 B5+ ', QLPINIT ,X0S,O ,X6 );
66810 OCODE(QLPINIT , 'LINIT1 ' ,O ,O ,O );
66820 ICODE(PLPINIT+1 , 'SX1 B5+ ', QLPINIT+1 ,X0S,O ,X6 );
66830 OCODE(QLPINIT+1 , 'LINIT2 ' ,O ,O ,O );
66840 ICODE(PLPINIT+2 , 'SX1 B5+ ', QLPINIT+2 ,X0S,O ,O );
66850 OCODE(QLPINIT+2 , 'LINIT3 ' ,O ,O ,O );
66860 ICODE(PLPINIT+3 , 'SX1 B5+ ', QLPINIT+3 ,X0S,O ,O );
66870 OCODE(QLPINIT+3 , 'LINIT4 ' ,O ,O ,O );
66880 ICODE(PLPTEST , 'ZR X6, ', 0 ,X6 ,O ,O );
66888 ICODE(PLPINCR , 'SX0 B5+ ', QLOOPINCR+5 ,O ,O ,X6 );
66890 OCODE(QLOOPINCR+5 , 'LOOPINC ' ,O ,O ,O );
66900 ICODE(PLPINCR+1 , 'SA4 B5+ ', QLOOPINCR ,O ,O ,X6 );
66910 QCODE(QLOOPINCR , 'SX3 B1 ', QLOOPINCR+1);
66920 QCODE(QLOOPINCR+1 , 'IX7 X4+X3 ', QLOOPINCR+2);
66930 QCODE(QLOOPINCR+2 , 'SA7 A4 ', QLOOPINCR+3);
66940 QCODE(QLOOPINCR+3 , 'SA3 A4+B1 ', QLOOPINCR+4);
66950 QCODE(QLOOPINCR+4 , 'IX6 X3-X4 ', 0);
66960 ICODE(PRANGENT , 'SX2 B5+ ', QRANGENT ,O ,O ,O );
66970 OCODE(QRANGENT , 'RANGENT ' ,O ,O ,O );
66980 OCODE(PRANGEXT , 'RANGEXT ' ,O ,O ,O );
66990 ICODE(PRANGEXT+1 , 'SA3 B5+12 ', QRANGEXT ,O ,O ,O );
67000 QCODE(QRANGEXT , 'SA2 X3+2 ', QRANGEXT+1);
67010 QCODE(QRANGEXT+1 , 'BX7 X2 ', QRANGEXT+2);
67020 QCODE(QRANGEXT+2 , 'SA7 A3 ', 0);
67030 OCODE(PRANGEXT+2 , 'RANGXTP ' ,X0 ,O ,X6 );
67032 OCODE(PRECGEN , 'DORECGE ' ,O ,O ,O );
67040 OCODE(PACTDRMULT , 'CRMULT ' ,X0 ,O ,X6 );
67050 OCODE(PACTDRSTRUCT, 'CRSTRUC ' ,O ,O ,X6 );
67060 OCODE(PCHECKDESC , 'CHKDESC ' ,X0 ,X1 ,X6 );
67070 OCODE(PVARLISTEND , 'GARBAGE ' ,X0 ,O ,O );
67080 ICODE(PVARLISTEND+1,'SB6 B6-B1 ', 0 ,ST ,O ,O );
67090 ICODE(PDCLINIT , 'SA3 B2+328', QDCLINIT ,O ,O ,O ); (*FIRSTVAR*)
67100 QCODE(QDCLINIT , 'BX7 X3 ',0);
67110 ICODE(PDCLINIT+1 , 'SA3 B2+329', QDCLINIT ,O ,O ,O ); (*FIRSTVAR+1*)
67120 ICODE(PDCLINIT+2 , 'SA7 B5+ ',0 ,O ,O ,O );
67130 ICODE(PPARM , 'SA3 B5+ ', QPARM ,O ,O ,O );
67140 QCODE(QPARM , 'SA2 X3 ', QPARM+1);
67150 QCODE(QPARM+1 , 'SX7 B1 ', QPARM+2);
67160 QCODE(QPARM+2 , 'LX7 47 ', QPARM+3);
67170 QCODE(QPARM+3 , 'IX7 X2+X7 ', QPARM+4);
67180 QCODE(QPARM+4 , 'SA7 A2 ', 0);
67210 OCODE(PCREATEREF , 'CRREFN ' ,X0 ,O ,X6 );
67220 OCODE(PCREATEREF+1, 'CRRECN ' ,X0 ,O ,X6 );
67230 OCODE(PCREATEREF+2, 'CRREFR ' ,X0 ,O ,X6 );
67240 OCODE(PCREATEREF+3, 'CRRECR ' ,X0 ,O ,X6 );
67260 ICODE(PDCLSP , 'SA6 B5+ ', 0 ,X6 ,O ,O );
67270 ICODE(PDCLSP+1 , 'SA3 X6 ', QDCLSP ,X6 ,O ,O );
67280 QCODE(QDCLSP , 'SX7 B1 ', QDCLSP+1);
67290 QCODE(QDCLSP+1 , 'LX7 47 ', QDCLSP+2);
67300 QCODE(QDCLSP+2 , 'IX7 X3+X7 ', QDCLSP+3);
67310 QCODE(QDCLSP+3 , 'SA7 A3 ', PDCLSP);
67320 OCODE(PDCLSP+2 , 'DCLSN ' ,SNS,O ,O );
67330 OCODE(PDCLSP+3 , 'DCLPN ' ,SNS,O ,O );
67340 ICODE(PFIXRG , 'SX7 B5+ ', 0 , O ,O ,O );
67350 ICODE(PFIXRG+1 , 'SA7 B5+ ', 0 , O ,O ,O );
67360 OCODE(PBOUNDS , 'BOUND ' ,STS,O ,X6 );
67370 ICODE(PLOADVAR , 'SX1 B5+ ', QLOADVAR ,O ,O ,X6 );
67380 QCODE(QLOADVAR , 'SX2 B5 ', QLOADVAR+1);
67390 OCODE(QLOADVAR+1 , 'GLDVAR ' ,O ,O ,O );
67400 ICODE(PLOADVAR+1 , 'SX1 B2+ ', QLOADVAR+2 ,O ,O ,X6 );
67410 QCODE(QLOADVAR+2 , 'SX2 B2+345', QLOADVAR+1); (*FIRSTIBOFFSET*)
67420 ICODE(PLOADVAR+2 , 'SX1 X3+ ', QLOADVAR+3 ,O ,O ,X6 );
67430 QCODE(QLOADVAR+3 , 'SX2 X3 ', QLOADVAR+1);
67440 OCODE(PLOADRT , 'ROUTN ' ,O ,O ,X6 );
67450 ICODE(PLOADRTA , 'SX1 B5+ ', QLOADRTA ,O ,O ,X6 );
67460 ICODE(PLOADRTA+1 , 'SX1 B2+ ', QLOADRTA ,O ,O ,X6 );
67470 ICODE(PLOADRTA+2 , 'SX1 X3+ ', QLOADRTA ,O ,O ,X6 );
67480 OCODE(QLOADRTA , 'ROUTNA ' ,O ,O ,O );
67490 OCODE(PLOADRTP , 'ROUTNP ' ,X0 ,O ,X6 );
67500 OCODE(PSCOPETT+2 , 'TASSTPT ' ,X0 ,X1 ,X6 );
67510 OCODE(PSCOPETT+3 , 'SCPTTP ' ,X0 ,X1 ,X6 );
67520 OCODE(PSCOPETT+4 , 'SCPTTM ' ,X0 ,X1 ,X6 );
67530 OCODE(PASSIGTT , 'TASSTS ' ,X0 ,X1 ,X6 );
67540 (*+61()
67550 OCODE(PASSIGTT+1 , 'TASSTS2 ' ,X0 ,X12,X6 );
67560 ()+61*)
67570 OCODE(PASSIGTT+2 , 'TASSTPT ' ,X0 ,X1 ,X6 );
67580 OCODE(PASSIGTT+3 , 'TASSTP ' ,X0 ,X1 ,X6 );
67590 OCODE(PASSIGTT+4 , 'TASSTM ' ,X0 ,X1 ,X6 );
67600 OCODE(PSCOPETN , 'SCPTNP ' ,X0 ,X1 ,X6 );
67610 OCODE(PASSIGTN , 'TASSNP ' ,X0 ,X1 ,X6 );
67620 OCODE(PSCOPENT+2 , 'SCPNTPT ' ,X0 ,X1 ,X6 );
67630 OCODE(PSCOPENT+3 , 'SCPNTP ' ,X0 ,X1 ,X6 );
67640 OCODE(PASSIGNT , 'NASSTS ' ,X0 ,X1 ,X6 );
67650 OCODE(PASSIGNT+1 , 'NASSTS2 ' ,X0 ,X1 ,X6 );
67660 OCODE(PASSIGNT+2 , 'NASSTPT ' ,X0 ,X1 ,X6 );
67670 OCODE(PASSIGNT+3 , 'NASSTP ' ,X0 ,X1 ,X6 );
67690 OCODE(PSCOPENN , 'SCPNNP ' ,X0 ,X1 ,X6 );
67700 OCODE(PASSIGNN , 'NASSNP ' ,X0 ,X1 ,X6 );
67710 ICODE(PSCOPEVAR , 'SX2 B5+ ', QSCOPEVAR ,X0 ,O ,O );
67720 QCODE(QSCOPEVAR , 'SX3 B5 ', QSCOPEVAR+1);
67730 OCODE(QSCOPEVAR+1 , 'GVSCOPE ' ,O ,O ,O );
67740 ICODE(PSCOPEVAR+1 , 'SX2 B2+ ', QSCOPEVAR+2 ,X0 ,O ,O );
67750 QCODE(QSCOPEVAR+2 , 'SX3 B2+345', QSCOPEVAR+1);
67760 ICODE(PSCOPEVAR+2 , 'SX2 X3+ ', QSCOPEVAR+1 ,X0 ,O ,O );
67770 OCODE(PSCOPEEXT , 'SCOPEXT ' ,X0 ,O ,X6 );
67780 ICODE(PASGVART , 'SA6 B5+ ', 0 ,X6 ,O ,O );
67790 ICODE(PASGVART+1 , 'SA6 B2+ ', 0 ,X6 ,O ,O );
67800 ICODE(PASGVART+2 , 'SA6 X3+ ', 0 ,X6 ,O ,O );
67810 (*+61()
67820 ICODE(PASGVART+3 , 'BX7 X1 ', QASGVART ,X12,O ,O );
67830 QCODE(QASGVART , 'SA7 B5+ ', QASGVART+1);
67840 QCODE(QASGVART+1 , 'BX7 X2 ', QASGVART+2);
67850 QCODE(QASGVART+2 , 'SA7 A7+B1 ', 0);
67860 ICODE(PASGVART+4 , 'BX7 X1 ', QASGVART+3 ,X12,O ,O );
67870 QCODE(QASGVART+3 , 'SA7 B2+ ', QASGVART+1);
67880 ICODE(PASGVART+5 , 'BX7 X1 ', QASGVART+4 ,X12,O ,O );
67890 QCODE(QASGVART+4 , 'SA7 X3+ ', QASGVART+1);
67900 ()+61*)
67910 ICODE(PASGVART+6 , 'SX1 B5+ ', QVASSTX ,X0 ,O ,O );
67920 OCODE(QVASSTX , 'GVASSTX ' ,O ,O ,O );
67930 ICODE(PASGVART+7 , 'SX1 B2+ ', QVASSTX ,X0 ,O ,O );
67940 ICODE(PASGVART+8 , 'SX1 X3+ ', QVASSTX ,X0 ,O ,O );
67950 OCODE(PIDTYREL , 'IS ' ,X0 ,X1 ,X6 );
67960 OCODE(PIDTYREL+1 , 'ISNT ' ,X0 ,X1 ,X6 );
67980 ICODE(PGETTOTCMN , 'BX1 X0 ', QGETTOTCMN ,X0 ,O ,X1 );
67990 QCODE(QGETTOTCMN , 'AX0 42 ', QGETTOTCMN+1);
68000 QCODE(QGETTOTCMN+1, 'IX1 X1+X0 ', 0);
68005 OCODE(PGETTOTCMN+1, 'GTOTMUL ' ,X0 ,O ,X1 );
68010 OCODE(PGETTOTCMN+2, 'GTOTRFR ' ,X0 ,O ,X1 );
68030 ICODE(PGETTOTAL , 'SA5 X1 ', QGETTOTAL ,X1 ,O ,X5 );
68040 QCODE(QGETTOTAL , 'AX1 42 ', QGETTOTAL+1);
68050 QCODE(QGETTOTAL+1 , 'SA3 X1 ', QGETTOTAL+2);
68060 QCODE(QGETTOTAL+2 , 'AX3 47 ', QGETTOTAL+3);
68070 QCODE(QGETTOTAL+3 , 'NZ X3,2* ', QGETTOTAL+4);
68080 OCODE(QGETTOTAL+4 , 'SAVGARB ' ,O ,O ,O );
68090 (*+61()
68100 ICODE(PGETTOTAL+1 , 'SA4 X1 ', QGETTOTAL+5 ,X1 ,O ,X45);
68110 QCODE(QGETTOTAL+5 , 'SA5 A4+B1 ', QGETTOTAL+1);
68120 ()+61*)
68130 OCODE(PGETTOTAL+2 , 'GTOTP ' ,X0 ,O ,X6 );
68140 OCODE(PGETTOTAL+3 , 'GTOTN ' ,X0 ,O ,X6 );
68150 OCODE(PGETTOTAL+4 , 'GTOTREF ' ,X0 ,O ,X6 );
68152 OCODE(PGETMULT , 'GETMULT ' ,X0 ,O ,X6 );
68154 OCODE(PGETMULT+1 , 'GETSLN ' ,X0 ,O ,X6 );
68160 OCODE(PDEREF , 'DREFS ' ,X0 ,O ,X6 );
68170 OCODE(PDEREF+2 , 'DREFPTR ' ,X0 ,O ,X6 );
68180 OCODE(PDEREF+3 , 'DREFN ' ,X0 ,O ,X6 );
68190 OCODE(PDEREF+4 , 'DREFM ' ,X0 ,O ,X6 );
68200 OCODE(PSKIP , 'SKIPS ' ,O ,O ,X6 );
68210 OCODE(PSKIP+1 , 'SKIPPIL ' ,O ,O ,X6 );
68220 OCODE(PSKIPSTRUCT , 'SKIPSTR ' ,O ,O ,X6 );
68230 OCODE(PNIL , 'NILP ' ,O ,O ,X6 );
68240 ICODE(PVOIDNORMAL , 'SA3 X1 ', QVOIDNM ,X1 ,O ,O );
68250 QCODE(QVOIDNM , 'AX3 47 ', QVOIDNM1);
68260 QCODE(QVOIDNM1 , 'NZ X3,3* ', QVOIDNM2);
68270 QCODE(QVOIDNM2 , 'SX0 A3 ', QVOIDNM3);
68280 OCODE(QVOIDNM3 , 'GARBAGE ' ,O ,O ,O );
68290 ICODE(PVOIDNAKED , 'LX1 18 ', PVOIDNORMAL ,X1 ,O ,O );
68300 ICODE(PWIDEN , 'PX1 X1 ', QWIDEN ,X1 ,O ,X1 );
68310 QCODE(QWIDEN , 'NX1 X1 ', 0);
68320 OCODE(PWIDEN+2 , 'WIDREAL ' ,X0 ,O ,X6 );
68330 OCODE(PWIDEN+4 , 'WIDCHAR ' ,X0 ,O ,X6 );
68340 OCODE(PWIDEN+5 , 'WIDBITS ' ,X0 ,O ,X6 );
68350 OCODE(PWIDEN+6 , 'WIDBYTS ' ,X0 ,O ,X6 );
68360 OCODE(PWIDEN+7 , 'WIDSTR ' ,X0 ,O ,X6 );
68370 OCODE(PROWNONMULT , 'ROWNM ' ,X0 ,O ,X6 );
68380 OCODE(PROWMULT , 'ROWM ' ,X0 ,O ,X6 );
68390 ICODE(PCALL , 'SX1 B0+ ', QCALL ,SNS,O ,O );
68400 QCODE(QCALL , 'SA5 X6 ', QCALL+1);
68410 QCODE(QCALL+1 , 'AX6 42 ', QCALL+2);
68420 QCODE(QCALL+2 , 'SB7 X5 ', QCALL+3);
68430 QCODE(QCALL+3 , 'SX7 2* ', QCALL+4);
68440 QCODE(QCALL+4 , 'JP B7 ', 0);
68450 ICODE(PCALLA , 'SX6 B5+ ', QCALLA ,SNS,O ,O );
68460 ICODE(PCALLA+1 , 'SX6 B2+ ', QCALLA ,SNS,O ,O );
68470 ICODE(PCALLA+2 , 'SX6 X3+ ', QCALLA ,SNS,O ,O );
68480 QCODE(QCALLA , 'SA5 X2 ', QCALLA+1);
68490 QCODE(QCALLA+1 , 'SB7 X5 ', QCALLA+2);
68500 QCODE(QCALLA+2 , 'SX7 2* ', QCALLA+3);
68510 QCODE(QCALLA+3 , 'JP B7 ', 0);
68520 ICODE(PRNSTART , 'SA6 B6 ', QRNSTART ,O ,O ,O );
68530 QCODE(QRNSTART , 'BX3 X7 ', QRNSTART+1);
68540 QCODE(QRNSTART+1 , 'SX4 B0+ ', QRNSTART+2);
68550 OCODE(QRNSTART+2 , 'RNSTART ' ,O ,O ,O );
68560 OCODE(PRETURN , 'RETURN ' ,XN ,O ,O );
68570 OCODE(PGBSTK , 'GBSTK ' ,O ,O ,O );
68580 OCODE(PGETOUT , 'GETOUT ' ,O ,O ,O );
68590 ICODE(PSETIB , 'SB5 X6 ', QSETIB ,O ,O ,O );
68600 QCODE(QSETIB , 'LX6 18 ', QSETIB+1);
68610 QCODE(QSETIB+1 , 'SB6 X6 ', 0);
68620 OCODE(PLEAPGEN , 'GENSTR ' ,O ,O ,X6 );
68630 OCODE(PLEAPGEN+1 , 'HEAPSTR ' ,O ,O ,X6 );
68640 OCODE(PLEAPGEN+2 , 'GENRSTR ' ,O ,O ,X6 );
68650 OCODE(PLEAPGEN+3 , 'GENMUL ' ,X0 ,O ,X6 );
68660 OCODE(PLEAPGEN+4 , 'HEAPMUL ' ,X0 ,O ,X6 );
68670 OCODE(PLEAPGEN+5 , 'GENRMUL ' ,X0 ,O ,X6 );
68680 OCODE(PPREPSTRDISP, 'PCOLLST ' ,O ,O ,X6 );
68690 OCODE(PPREPROWDISP, 'PCOLLR ' ,STS,O ,X6 );
68700 OCODE(PPREPROWDISP+1,'PCOLLRM ' ,STS,O ,X6 );
68710 OCODE(PCOLLCHECK , 'PCOLLCK ' ,X0 ,O ,X6 );
68720 (**)
68730 END;
68740 PROCEDURE THIRDPART;
68750 BEGIN
68760 ICODE(PCOLLTOTAL , 'SA4 B6-B1 ', QCOLLTOTAL ,ST ,X6 ,ST );
68770 QCODE(QCOLLTOTAL , 'SA6 X4+ ', 0);
68780 ICODE(PCOLLTOTAL+2, 'SA4 X6 ', QCOLLTOTAL+1 ,ST ,X6 ,ST );
68790 QCODE(QCOLLTOTAL+1, 'SX7 B1 ', QCOLLTOTAL+2);
68800 QCODE(QCOLLTOTAL+2, 'LX7 47 ', QCOLLTOTAL+3);
68810 QCODE(QCOLLTOTAL+3, 'IX7 X4+X7 ', QCOLLTOTAL+4);
68820 QCODE(QCOLLTOTAL+4, 'SA7 A4 ', PCOLLTOTAL);
68830 OCODE(PCOLLTOTAL+3, 'COLLTP ' ,X0 ,X1 ,X6 );
68840 OCODE(PCOLLTOTAL+4, 'COLLTM ' ,X0 ,X1 ,X6 );
68850 OCODE(PCOLLNAKED , 'COLLNP ' ,X0 ,X1 ,X6 );
68860 ICODE(PNAKEDPTR , 'LX1 18 ', QNAKEDPTR ,X1 ,O ,X6 );
68862 QCODE(QNAKEDPTR , 'SX6 X1 ', 0);
68870 ICODE(PLINE , 'SX7 B0+ ', QLINE ,O ,O ,O );
68880 QCODE(QLINE , 'SA7 B5+9 ', 0);
68890 OCODE(PENDSLICE , 'ENDSL ' ,X0 ,O ,X0 );
68900 OCODE(PTRIM , 'SLICEA ' ,STP,O ,O );
68910 OCODE(PTRIM+1 , 'SLICEB ' ,STP,O ,O );
68920 OCODE(PTRIM+2 , 'SLICEC ' ,STP,O ,O );
68930 OCODE(PTRIM+3 , 'SLICED ' ,STP,O ,O );
68940 OCODE(PTRIM+4 , 'SLICEE ' ,STP,O ,O );
68950 OCODE(PTRIM+5 , 'SLICEF ' ,STP,O ,O );
68960 OCODE(PTRIM+6 , 'SLICEG ' ,STP,O ,O );
68970 OCODE(PTRIM+7 , 'SLICEH ' ,STP,O ,O );
68980 OCODE(PTRIM+8 , 'SLICEI ' ,STP,O ,O );
68990 OCODE(PTRIM+9 , 'SLICEJ ' ,STP,O ,O );
69000 ICODE(PJMP , 'EQ B0, ', 0 ,O ,O ,O );
69010 ICODE(PDUP1ST , 'SA1 B6-B1 ', 0 ,STP,O ,X1 );
69010 ICODE(PDUP1PILE , 'SA1 B6-B1 ', 0 ,STP,O ,X1 );
69020 ICODE(PDUP2ND , 'SA1 B6-B1 ', 0 ,STP,X5P,X1 );
69020 ICODE(PDUP2PILE , 'SA1 B6-B1 ', 0 ,STP,X5P,X1 );
69030 (*+61() ICODE(PDUP2ND+1 , 'SA1 B6-B1 ', 0 ,STP,X45,X1 ); ()+61*)
69040 ICODE(PDATALIST , 'SX7 B0+ ', QPUSH+1 ,SNS,O ,SDL);
69050 OCODE(PHOIST , 'HOIST ' ,O ,O ,O );
69060 ICODE(PSTATICLINK , 'SX6 B5 ', 0 ,O ,O ,O );
69070 ICODE(PASP , 'SB6 B6- ', 0 ,O ,O ,O );
69080 ICODE(PLOADX5 , 'SA5 B5+ ', 0 ,O ,O ,O );
69090 ICODE(PLOADX5+1 , 'SA5 B2+ ', 0 ,O ,O ,O );
69100 ICODE(PLOADX5+2 , 'SA5 X3+ ', 0 ,O ,O ,O );
69110 ICODE(PLOADX5IM , 'SX5 B0+ ', 0 ,O ,O ,X5 );
69120 ICODE(PLOADX5IM+1 , 'SA5 B0+ ', 0 ,O ,O ,O );
69130 ICODE(PPUSH , 'SA4 B5+ ', QPUSH ,O ,O ,O );
69140 QCODE(QPUSH , 'BX7 X4 ', QPUSH+1);
69150 QCODE(QPUSH+1 , 'SA7 B6 ', QPUSH+2);
69160 QCODE(QPUSH+2 , 'SB6 B6+B1 ', 0);
69170 ICODE(PPUSH+1 , 'SA4 B2+ ', QPUSH ,O ,O ,O );
69180 ICODE(PPUSH+2 , 'SA4 X3+ ', QPUSH ,O ,O ,O );
69190 ICODE(PPUSHIM , 'SX7 B0+ ', QPUSH+1 ,O ,O ,ST );
69200 ICODE(PPUSHIM+1 , 'SA4 B0+ ', QPUSH ,O ,O ,O );
69210 ICODE(PLOADX0 , 'SA4 B5+ ', QLOADX0 ,O ,O ,O );
69220 QCODE(QLOADX0 , 'BX0 X4 ', 0);
69230 ICODE(PLOADX0+1 , 'SA4 B2+ ', QLOADX0 ,O ,O ,O );
69240 ICODE(PLOADX0+2 , 'SA4 X3+ ', QLOADX0 ,O ,O ,O );
69250 ICODE(PLOADX1 , 'SA1 B5+ ', 0 ,O ,O ,O );
69260 ICODE(PLOADX1+1 , 'SA1 B2+ ', 0 ,O ,O ,O );
69270 ICODE(PLOADX1+2 , 'SA1 X3+ ', 0 ,O ,O ,O );
69280 ICODE(PLOADX6 , 'SA4 B5+ ', QLOADX6 ,O ,O ,O );
69290 QCODE(QLOADX6 , 'BX6 X4 ', 0);
69300 ICODE(PLOADX6+1 , 'SA4 B2+ ', QLOADX6 ,O ,O ,O );
69310 ICODE(PLOADX6+2 , 'SA4 X3+ ', QLOADX6 ,O ,O ,O );
69320 ICODE(PLOADX0IM , 'SX0 B0+ ', 0 ,O ,O ,X0 );
69330 ICODE(PLOADX0IM+1 , 'SA4 B0+ ', QLOADX0 ,O ,O ,O );
69340 ICODE(PLOADX1IM , 'SX1 B0+ ', 0 ,O ,O ,X1 );
69350 ICODE(PLOADX1IM+1 , 'SA1 B0+ ', 0 ,O ,O ,O );
69360 ICODE(PLOADX2IM , 'SX2 B0+ ', 0 ,O ,O ,O );
69370 ICODE(PLOADX2IM+1 , 'SA2 B0+ ', 0 ,O ,O ,O );
69380 ICODE(PLOADX3IM , 'SX3 B0+ ', 0 ,O ,O ,O );
69390 ICODE(PLOADX3IM+1 , 'SA3 B0+ ', 0 ,O ,O ,O );
69400 ICODE(PLOADX4IM , 'SX4 B0+ ', 0 ,O ,O ,O );
69410 ICODE(PLOADX4IM+1 , 'SA4 B0+ ', 0 ,O ,O ,O );
69420 ICODE(PLOADX6IM , 'SX6 B0+ ', 0 ,O ,O ,X6 );
69430 ICODE(PLOADX6IM+1 , 'SA4 B0+ ', QLOADX6 ,O ,O ,O );
69440 ICODE(PPOPTOX0 , 'SB6 B6-B1 ', QPOPX0 ,O ,O ,O );
69450 QCODE(QPOPX0 , 'SA4 B6 ', QLOADX0);
69460 ICODE(PPOPTOX1 , 'SB6 B6-B1 ', QPOPX1 ,O ,O ,O );
69470 QCODE(QPOPX1 , 'SA1 B6 ', 0);
69480 ICODE(PPOPTOX6 , 'SB6 B6-B1 ', QPOPTOX6 ,O ,O ,O );
69490 QCODE(QPOPTOX6 , 'SA4 B6 ', QLOADX6);
69500 ICODE(PX5TOX0 , 'BX0 X5 ', 0 ,X5 ,O ,X0 );
69510 ICODE(PX5TOX1 , 'BX1 X5 ', 0 ,X5 ,O ,X1 );
69520 ICODE(PX5TOX6 , 'BX6 X5 ', 0 ,X5 ,O ,X6 );
69530 ICODE(PPUSHX6 , 'SA6 B6 ', QPUSH+2 ,X6 ,O ,O );
69540 ICODE(PX6TOX5 , 'BX5 X6 ', 0 ,X6 ,O ,X5 );
69550 ICODE(PX6TOX0 , 'BX0 X6 ', 0 ,X6 ,O ,X0 );
69560 ICODE(PX6TOX1 , 'BX1 X6 ', 0 ,X6 ,O ,X1 );
69570 ICODE(PPUSHX5 , 'BX7 X5 ', QPUSH+1 ,X5 ,O ,O );
69580 ICODE(PPOPTOX5 , 'SB6 B6-B1 ', QPOP1 ,O ,O ,O );
69590 QCODE(QPOP1 , 'SA5 B6 ', 0);
69600 ICODE(PPUSHX0 , 'BX7 X0 ', QPUSH+1 ,X0 ,O ,O );
69610 ICODE(PPUSHX1 , 'BX7 X1 ', QPUSH+1 ,X1 ,O ,O );
69620 ICODE(PX1TOX5 , 'BX5 X1 ', 0 ,X1 ,O ,X5 );
69630 ICODE(PX1TOX6 , 'BX6 X1 ', 0 ,X1 ,O ,X6 );
69640 ICODE(PX1TOX0 , 'BX0 X1 ', 0 ,X1 ,O ,X0 );
69650 ICODE(PSWAP , 'BX3 X1 ', QSWAP ,O ,O ,O );
69660 QCODE(QSWAP , 'BX1 X5 ', QSWAP1);
69670 QCODE(QSWAP1 , 'BX5 X3 ', 0);
69680 (*+61()
69690 ICODE(PPUSH2 , 'SA3 B5+ ', QPUSH2 ,O ,O ,O );
69700 QCODE(QPUSH2 , 'BX7 X3 ', QPUSH2+1);
69710 QCODE(QPUSH2+1 , 'SA7 B6 ', QPUSH2+2);
69720 QCODE(QPUSH2+2 , 'SA3 A3+B1 ', QPUSH2+3);
69730 QCODE(QPUSH2+3 , 'BX7 X3 ', QPUSH2+4);
69740 QCODE(QPUSH2+4 , 'SA7 A7+B1 ', QPUSH2+5);
69750 QCODE(QPUSH2+5 , 'SB6 A7+B1 ', 0);
69760 ICODE(PPUSH2+1 , 'SA3 B2+ ', QPUSH2 ,O ,O ,O );
69770 ICODE(PPUSH2+2 , 'SA3 X3+ ', QPUSH2 ,O ,O ,O );
69780 ICODE(PLOADX12 , 'SA1 B5+ ', QLOADX12 ,O ,O ,O );
69790 QCODE(QLOADX12 , 'SA2 A1+B1 ', 0);
69800 ICODE(PLOADX12+1 , 'SA1 B2+ ', QLOADX12 ,O ,O ,O );
69810 ICODE(PLOADX12+2 , 'SA1 X3+ ', QLOADX12 ,O ,O ,O );
69820 ICODE(PLOADX45 , 'SA4 B5+ ', QLOADX45 ,O ,O ,O );
69830 QCODE(QLOADX45 , 'SA5 A4+B1 ', 0);
69840 ICODE(PLOADX45+1 , 'SA4 B2+ ', QLOADX45 ,O ,O ,O );
69850 ICODE(PLOADX45+2 , 'SA4 X3+ ', QLOADX45 ,O ,O ,O );
69860 ICODE(PPUSHX12 , 'BX7 X1 ', QPUSHX12 ,O ,O ,O );
69870 QCODE(QPUSHX12 , 'SA7 B6 ', QPUSHX12+1);
69880 QCODE(QPUSHX12+1 , 'BX7 X2 ', QPUSH2+4);
69890 ICODE(PPUSHX45 , 'BX7 X4 ', QPUSHX45 ,O ,O ,O );
69900 QCODE(QPUSHX45 , 'SA7 B6 ', QPUSHX45+1);
69910 QCODE(QPUSHX45+1 , 'BX7 X5 ', QPUSH2+4);
69920 ICODE(PPOPTOX12 , 'SA2 B6-B1 ', QPOPTOX12 ,O ,O ,O );
69930 QCODE(QPOPTOX12 , 'SA1 A2-B1 ', QPOPTOX12+1);
69940 QCODE(QPOPTOX12+1 , 'SB6 A1 ', 0);
69950 ICODE(PPOPTOX45 , 'SA5 B6-B1 ', QPOPTOX45 ,O ,O ,O );
69960 QCODE(QPOPTOX45 , 'SA4 A5-B1 ', QPOPTOX45+1);
69970 QCODE(QPOPTOX45+1 , 'SB6 A4 ', 0);
69980 ICODE(PX12TOX45 , 'BX4 X1 ', QX12TOX45 ,O ,O ,O );
69990 QCODE(QX12TOX45 , 'BX5 X2 ', 0);
70000 ICODE(PX45TOX12 , 'BX1 X4 ', QX45TOX12 ,O ,O ,O );
70010 QCODE(QX45TOX12 , 'BX2 X5 ', 0);
70020 ()+61*)
70030 ICODE(PDECM , 'SX7 B0+ ', 0 ,O ,O ,O );
70040 ICODE(PDECM+1 , 'SA3 B5+ ', QDECM ,O ,O ,O );
70050 QCODE(QDECM , 'MX4 25 ', QDECM+1);
70060 QCODE(QDECM+1 , 'BX3 -X4*X3', QDECM+2);
70070 QCODE(QDECM+2 , 'LX7 35 ', QDECM+3);
70080 QCODE(QDECM+3 , 'BX7 X3+X7 ', QDECM+4);
70090 QCODE(QDECM+4 , 'SA7 A3 ', 0);
70100 END;
70110 (* *** CHANGES TO BE MADE ON PERQ *** *)
70120 (* PPARM , PPARM+1, PLOADRTA, PDECM *)
70130 (* PCALLA, PRANGENT, PDCLINIT *)
70140 PROCEDURE INITPOPARRAY;
70150 VAR I, J:SBTTYP;
70160 BEGIN
70170 FOR I := SBTSTK TO SBTX1 DO
70180 FOR J:= SBTVOID TO SBTX1 DO POPARRAY [I, J] := PNONE;
70190 FOR I := SBTSTK TO SBTX1 DO
70200 BEGIN
70210 POPARRAY [I,I] := PNOOP;
70220 POPARRAY [I,SBTVOID] := PNOOP;
70230 POPARRAY [I,SBTVAR] := PLOADVAR;
70240 POPARRAY [I,SBTPROC] := PLOADRTA;
70250 POPARRAY [I,SBTRPROC]:= PLOADRTA;
70260 END;
70270 (*+61()
70280 POPARRAY [SBTSTK , SBTSTK2 ] := PVARLISTEND+1;
70290 POPARRAY [SBTX12 , SBTX1 ] := PNOOP;
70300 POPARRAY [SBTSTK , SBTX12 ] := PPUSHX1;
70310 POPARRAY [SBTSTK , SBTX45 ] := PPUSHX5;
70320 POPARRAY [SBTSTK2 , SBTID ] := PPUSH2;
70330 POPARRAY [SBTSTK2 , SBTIDV ] := PPUSH2;
70340 POPARRAY [SBTSTK2 , SBTX12 ] := PPUSHX12;
70350 POPARRAY [SBTSTK2 , SBTX45 ] := PPUSHX45;
70360 POPARRAY [SBTX12 , SBTID ] := PLOADX12;
70370 POPARRAY [SBTX12 , SBTIDV ] := PLOADX12;
70380 POPARRAY [SBTX12 , SBTSTK2 ] := PPOPTOX12;
70390 POPARRAY [SBTX12 , SBTX45 ] := PX45TOX12;
70400 POPARRAY [SBTX45 , SBTID ] := PLOADX45;
70410 POPARRAY [SBTX45 , SBTIDV ] := PLOADX45;
70420 POPARRAY [SBTX45 , SBTSTK2 ] := PPOPTOX45;
70430 POPARRAY [SBTX45 , SBTX12 ] := PX12TOX45;
70440 ()+61*)
70450 POPARRAY [SBTSTK , SBTID ] := PPUSH;
70460 POPARRAY [SBTSTK , SBTIDV ] := PPUSH;
70470 POPARRAY [SBTSTK , SBTLIT ] := PPUSHIM;
70480 POPARRAY [SBTSTK , SBTDEN ] := PPUSHIM;
70490 POPARRAY [SBTSTK , SBTX5 ] := PPUSHX5;
70500 POPARRAY [SBTSTK , SBTX6 ] := PPUSHX6;
70510 POPARRAY [SBTSTK , SBTX0 ] := PPUSHX0;
70520 POPARRAY [SBTSTK , SBTX1 ] := PPUSHX1;
70530 POPARRAY [SBTX5 , SBTID ] := PLOADX5;
70540 POPARRAY [SBTX5 , SBTIDV ] := PLOADX5;
70550 POPARRAY [SBTX5 , SBTLIT ] := PLOADX5IM;
70560 POPARRAY [SBTX5 , SBTDEN ] := PLOADX5IM;
70570 POPARRAY [SBTX5 , SBTSTK ] := PPOPTOX5;
70580 POPARRAY [SBTX5 , SBTX6 ] := PX6TOX5;
70590 POPARRAY [SBTX5 , SBTX1 ] := PX1TOX5;
70600 POPARRAY [SBTX6 , SBTID ] := PLOADX6;
70610 POPARRAY [SBTX6 , SBTIDV ] := PLOADX6;
70620 POPARRAY [SBTX6 , SBTLIT ] := PLOADX6IM;
70630 POPARRAY [SBTX6 , SBTDEN ] := PLOADX6IM;
70640 POPARRAY [SBTX6 , SBTSTK ] := PPOPTOX6;
70650 POPARRAY [SBTX6 , SBTX5 ] := PX5TOX6;
70660 POPARRAY [SBTX6 , SBTX1 ] := PX1TOX6;
70670 POPARRAY [SBTX0 , SBTID ] := PLOADX0;
70680 POPARRAY [SBTX0 , SBTIDV ] := PLOADX0;
70690 POPARRAY [SBTX0 , SBTLIT ] := PLOADX0IM;
70700 POPARRAY [SBTX0 , SBTDEN ] := PLOADX0IM;
70710 POPARRAY [SBTX0 , SBTSTK ] := PPOPTOX0;
70720 POPARRAY [SBTX0 , SBTX5 ] := PX5TOX0;
70730 POPARRAY [SBTX0 , SBTX6 ] := PX6TOX0;
70740 POPARRAY [SBTX0 , SBTX1 ] := PX1TOX0;
70750 POPARRAY [SBTX1 , SBTID ] := PLOADX1;
70760 POPARRAY [SBTX1 , SBTIDV ] := PLOADX1;
70770 POPARRAY [SBTX1 , SBTLIT ] := PLOADX1IM;
70780 POPARRAY [SBTX1 , SBTDEN ] := PLOADX1IM;
70790 POPARRAY [SBTX1 , SBTSTK ] := PPOPTOX1;
70800 POPARRAY [SBTX1 , SBTX5 ] := PX5TOX1;
70810 POPARRAY [SBTX1 , SBTX6 ] := PX6TOX1;
70820 END;
70830 PROCEDURE INITLENARRAY;
70840 VAR I: SBTTYP;
70850 BEGIN
70860 FOR I := SBTSTK TO SBTX1 DO LENARRAY[I] := 0;
70870 LENARRAY[SBTSTK ] := SZWORD;
70880 (*+61()
70890 LENARRAY[SBTSTK2] := 2*SZWORD;
70900 LENARRAY[SBTX12 ] := 2*SZWORD;
70910 LENARRAY[SBTX45 ] := 2*SZWORD;
70920 ()+61*)
70930 LENARRAY[SBTX5 ] := SZWORD;
70940 LENARRAY[SBTX6 ] := SZWORD;
70950 LENARRAY[SBTX0 ] := SZWORD;
70960 LENARRAY[SBTX1 ] := SZWORD;
70970 END;
70980 PROCEDURE INITREGISTERS;
70990 VAR I: SBTTYP;
71000 BEGIN
71010 FOR I := SBTVOID TO SBTX1 DO REGISTERS[I] := [];
71020 REGISTERS[SBTDL ] := [SBTX1];
71030 REGISTERS[SBTX5 ] := [SBTX5];
71040 REGISTERS[SBTX6 ] := [SBTX6];
71050 REGISTERS[SBTX0 ] := [SBTX0];
71060 REGISTERS[SBTX1 ] := [SBTX1];
71070 (*+61()
71080 REGISTERS[SBTX12 ] := [SBTX1]; (*THERE IS NO SBTX2+)
71090 REGISTERS[SBTX45 ] := [SBTX5]; (*THERE IS NO SBTX4+)
71100 ()+61*)
71110 END;
71120 BEGIN (*INITCODES*)
71130 FIRSTPART; SECONDPART; THIRDPART; INITPOPARRAY; INITLENARRAY; INITREGISTERS;
71140 END;
71150 (**)
71160 (**)
71170 (**)
71180 (**)
71190 (**)
71200 BEGIN
71210 LINELIMIT(OUTPUT,10000); LINELIMIT(LSTFILE,10000);
71220 DUMP(FIRSTSTACK);
71230 (*-01() DUMP(FIRSTSTACK,LASTSTACK); ()-01*)
71240 END (*$G-*) .
####S