From: ceriel Date: Tue, 31 Mar 1987 07:54:43 +0000 (+0000) Subject: dispatch tables generated now, layout improvements X-Git-Tag: release-5-5~4276 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=ceb3fb4ed38c35ff9619e0708a1222cbddd224c9;p=ack.git dispatch tables generated now, layout improvements --- diff --git a/doc/em/app.codes.nr b/doc/em/app.codes.nr index d7f43f446..8aa2bb6fe 100644 --- a/doc/em/app.codes.nr +++ b/doc/em/app.codes.nr @@ -130,7 +130,7 @@ negative 16-bit argument negative 16-bit argument divided by the wordsize .PT .s shortie with as high order argument byte -.PT .sw +.PT .w shortie with argument divided by the wordsize .PT . mini with as argument @@ -141,68 +141,13 @@ mini with *wordsize as argument .VS 1 1 .IE The dispatch table for the 256 primary opcodes: -.DS B -.ta 7n 16n 25n 34n 43n 52n 61n 70n - 0 loc.0 loc.1 loc.2 loc.3 loc.4 loc.5 loc.6 loc.7 - 8 loc.8 loc.9 loc.10 loc.11 loc.12 loc.13 loc.14 loc.15 - 16 loc.16 loc.17 loc.18 loc.19 loc.20 loc.21 loc.22 loc.23 - 24 loc.24 loc.25 loc.26 loc.27 loc.28 loc.29 loc.30 loc.31 - 32 loc.32 loc.33 aar.1W adf.s0 adi.1W adi.2W adp.l adp.1 - 40 adp.2 adp.s0 adp.s\-1 ads.1W and.1W asp.1W asp.2W asp.3W - 48 asp.4W asp.5W asp.w0 beq.l beq.s0 bge.s0 bgt.s0 ble.s0 - 56 blm.s0 blt.s0 bne.s0 bra.l bra.s\-1 bra.s\-2 bra.s0 bra.s1 - 64 cal.1 cal.2 cal.3 cal.4 cal.5 cal.6 cal.7 cal.8 - 72 cal.9 cal.10 cal.11 cal.12 cal.13 cal.14 cal.15 cal.16 - 80 cal.17 cal.18 cal.19 cal.20 cal.21 cal.22 cal.23 cal.24 - 88 cal.25 cal.26 cal.27 cal.28 cal.s0 cff.z cif.z cii.z - 96 cmf.s0 cmi.1W cmi.2W cmp.z cms.s0 csa.1W csb.1W dec.z - 104 dee.w0 del.w\-1 dup.1W dvf.s0 dvi.1W fil.l inc.z ine.lw - 112 ine.w0 inl.\-1W inl.\-2W inl.\-3W inl.w\-1 inn.s0 ior.1W ior.s0 - 120 lae.l lae.w0 lae.w1 lae.w2 lae.w3 lae.w4 lae.w5 lae.w6 - 128 lal.p lal.n lal.0 lal.\-1 lal.w0 lal.w\-1 lal.w\-2 lar.W - 136 ldc.0 lde.lw lde.w0 ldl.0 ldl.w\-1 lfr.1W lfr.2W lfr.s0 - 144 lil.w\-1 lil.w0 lil.0 lil.1W lin.l lin.s0 lni.z loc.l - 152 loc.\-1 loc.s0 loc.s\-1 loe.lw loe.w0 loe.w1 loe.w2 loe.w3 - 160 loe.w4 lof.l lof.1W lof.2W lof.3W lof.4W lof.s0 loi.l - 168 loi.1 loi.1W loi.2W loi.3W loi.4W loi.s0 lol.pw lol.nw - 176 lol.0 lol.1W lol.2W lol.3W lol.\-1W lol.\-2W lol.\-3W lol.\-4W - 184 lol.\-5W lol.\-6W lol.\-7W lol.\-8W lol.w0 lol.w\-1 lxa.1 lxl.1 - 192 lxl.2 mlf.s0 mli.1W mli.2W rck.1W ret.0 ret.1W ret.s0 - 200 rmi.1W sar.1W sbf.s0 sbi.1W sbi.2W sdl.w\-1 set.s0 sil.w\-1 - 208 sil.w0 sli.1W ste.lw ste.w0 ste.w1 ste.w2 stf.l stf.W - 216 stf.2W stf.s0 sti.1 sti.1W sti.2W sti.3W sti.4W sti.s0 - 224 stl.pw stl.nw stl.0 stl.1W stl.\-1W stl.\-2W stl.\-3W stl.\-4W - 232 stl.\-5W stl.w\-1 teq.z tgt.z tlt.z tne.z zeq.l zeq.s0 - 240 zeq.s1 zer.s0 zge.s0 zgt.s0 zle.s0 zlt.s0 zne.s0 zne.s\-1 - 248 zre.lw zre.w0 zrl.\-1W zrl.\-2W zrl.w\-1 zrl.nw escape1 escape2 -.DE 2 +.N 1 +.so dispat1 +.N 2 The list of secondary opcodes (escape1): -.N 1 -.DS B -.ta 7n 16n 25n 34n 43n 52n 61n 70n - 0 aar.l aar.z adf.l adf.z adi.l adi.z ads.l ads.z - 8 adu.l adu.z and.l and.z asp.lw ass.l ass.z bge.l - 16 bgt.l ble.l blm.l bls.l bls.z blt.l bne.l cai.z - 24 cal.l cfi.z cfu.z ciu.z cmf.l cmf.z cmi.l cmi.z - 32 cms.l cms.z cmu.l cmu.z com.l com.z csa.l csa.z - 40 csb.l csb.z cuf.z cui.z cuu.z dee.lw del.pw del.nw - 48 dup.l dus.l dus.z dvf.l dvf.z dvi.l dvi.z dvu.l - 56 dvu.z fef.l fef.z fif.l fif.z inl.pw inl.nw inn.l - 64 inn.z ior.l ior.z lar.l lar.z ldc.l ldf.l ldl.pw - 72 ldl.nw lfr.l lil.pw lil.nw lim.z los.l los.z lor.s0 - 80 lpi.l lxa.l lxl.l mlf.l mlf.z mli.l mli.z mlu.l - 88 mlu.z mon.z ngf.l ngf.z ngi.l ngi.z nop.z rck.l - 96 rck.z ret.l rmi.l rmi.z rmu.l rmu.z rol.l rol.z - 104 ror.l ror.z rtt.z sar.l sar.z sbf.l sbf.z sbi.l - 112 sbi.z sbs.l sbs.z sbu.l sbu.z sde.l sdf.l sdl.pw - 120 sdl.nw set.l set.z sig.z sil.pw sil.nw sim.z sli.l - 128 sli.z slu.l slu.z sri.l sri.z sru.l sru.z sti.l - 136 sts.l sts.z str.s0 tge.z tle.z trp.z xor.l xor.z - 144 zer.l zer.z zge.l zgt.l zle.l zlt.l zne.l zrf.l - 152 zrf.z zrl.pw dch.z exg.s0 exg.l exg.z lpb.z gto.l -.DE 2 +.N 1 +.so dispat2 +.N 2 Finally, the list of opcodes with four byte arguments (escape2). -.DS -.ta 7n 16n 25n 34n 43n 52n 61n 70n - 0 loc -.DE 0 +.N 1 +.so dispat3 diff --git a/doc/em/app.exam.nr b/doc/em/app.exam.nr index 109d25b7a..2121e08a0 100644 --- a/doc/em/app.exam.nr +++ b/doc/em/app.exam.nr @@ -1,7 +1,9 @@ .BP .AP "AN EXAMPLE PROGRAM" -.DS B +.A 1 0 +.NA .ta 4n 8n 12n 16n 20n +.nf 1 program example(output); 2 {This program just demonstrates typical EM code.} 3 type rec = record r1: integer; r2:real; r3: boolean end; @@ -42,14 +44,17 @@ 38 mi := 99; 39 test(r) 40 end. -.DE 0 +.fi +.AD .BP The EM code as produced by the Pascal-VU compiler is given below. Comments have been added manually. Note that this code has already been optimized. -.DS B +.A 1 0 +.NA +.nf .ta 1n 24n mes 2,2,2 ; wordsize 2, pointersize 2 -.1 +\&.1 rom 't.p\e000' ; the name of the source file hol 552,\-32768,0 ; externals and buf occupy 552 bytes exp $sum ; sum can be called from other modules @@ -59,13 +64,13 @@ have been added manually. Note that this code has already been optimized. adi 2 ; add them ret 2 ; return the result end 2 ; end of procedure ( still two bytes local storage ) -.2 +\&.2 rom 1,99,2 ; descriptor of array a[] exp $test ; the compiler exports all level 0 procedures pro $test,226 ; procedure test, 226 bytes local storage -.3 +\&.3 rom 4.8F8 ; assemble Floating point 4.8 (8 bytes) in -.4 ; global storage +\&.4 ; global storage rom 0.5F8 ; same for 0.5 mes 3,\-226,2,2 ; compiler temporary not referenced by address mes 3,\-24,2,0 ; the same is true for i, j, b and c in test @@ -106,7 +111,7 @@ have been added manually. Note that this code has already been optimized. lni ; lin 26 prior to optimization loc 1 stl \-2 ; for i:= 1 - 2 +2 lol \-2 dup 2 mli 2 ; i*i @@ -119,7 +124,7 @@ have been added manually. Note that this code has already been optimized. beq *3 ; to 100 do inl \-2 ; increment i and loop bra *2 - 3 +3 lin 27 lol \-4 loc 27 @@ -146,7 +151,7 @@ have been added manually. Note that this code has already been optimized. asp 4 ; remove parameters from stack lfr 2 ; get function result stl \-2 ; i := - 4 +4 lin 31 lol \-2 zle *5 ; while i > 0 do @@ -156,7 +161,7 @@ have been added manually. Note that this code has already been optimized. stl \-4 ; j := j + r.r1 del \-2 ; i := i - 1 bra *4 ; loop - 5 +5 lin 32 lol 0 stl \-226 ; make copy of address of r @@ -199,9 +204,9 @@ have been added manually. Note that this code has already been optimized. end 226 exp $_main pro $_main,0 ; main program -.6 +\&.6 con 2,\-1,22 ; description of external files -.5 +\&.5 rom 15.96F8 fil .1 ; maintain source file name lae .6 ; description of external files @@ -225,7 +230,9 @@ have been added manually. Note that this code has already been optimized. asp 2 end 0 mes 5 ; reals were used -.DE 0 +.fi +.AD +.A 1 0 The compact code corresponding to the above program is listed below. Read it horizontally, line by line, not column by column. Each number represents a byte of compact code, printed in decimal. diff --git a/doc/em/dspace.nr b/doc/em/dspace.nr index 602eea589..4fa5447d7 100644 --- a/doc/em/dspace.nr +++ b/doc/em/dspace.nr @@ -343,7 +343,7 @@ procedure frames need not be contiguous. | parameter 0 | <\- SP |===============================| .Df - Figure 1. A sample procedure frame and parameters. +Figure 1. A sample procedure frame and parameters. .De .S2 "Heap data area" The heap area starts empty, with HP diff --git a/doc/em/em.i b/doc/em/em.i index 23d821c0d..04ab3728a 100644 --- a/doc/em/em.i +++ b/doc/em/em.i @@ -1,3 +1,4 @@ + { This is an interpreter for EM. It serves as the official machine definition. This interpreter must run on a machine which supports arithmetic with words and memory offsets. @@ -30,7 +31,7 @@ to object size in bits - 1. The effect of a count not in this range is undefined. } -.BP +.bp {$i256} {$d+} program em(tables,prog,input,output); diff --git a/doc/em/intro.nr b/doc/em/intro.nr index 4b37b7f84..e9c4d7ad3 100644 --- a/doc/em/intro.nr +++ b/doc/em/intro.nr @@ -81,7 +81,6 @@ toward structured programs consisting of many small procedures greatly reduces the value of registers to hold local variables because the large number of procedure calls implies a large overhead in saving and restoring the registers at every call. -.BP .P Although there are no general purpose registers, there are a few internal registers with specific functions as follows: @@ -89,10 +88,10 @@ few internal registers with specific functions as follows: .N 1 .TS tab(:); -l 1 l l. +l 1 l l l. PC:\-:Program Counter:Pointer to next instruction -LB:\-:Local Base:Points to base of the local variables \ -in the current procedure. +LB:\-:Local Base:Points to base of the local variables +:::in the current procedure. SP:\-:Stack Pointer:Points to the highest occupied word on the stack. HP:\-:Heap Pointer:Points to the top of the heap area. .TE 1