dispatch tables generated now, layout improvements
This commit is contained in:
parent
8e4718c760
commit
ceb3fb4ed3
5 changed files with 36 additions and 84 deletions
|
@ -130,7 +130,7 @@ negative 16-bit argument
|
|||
negative 16-bit argument divided by the wordsize
|
||||
.PT .s<num>
|
||||
shortie with <num> as high order argument byte
|
||||
.PT .sw<num>
|
||||
.PT .w<num>
|
||||
shortie with argument divided by the wordsize
|
||||
.PT .<num>
|
||||
mini with <num> as argument
|
||||
|
@ -141,68 +141,13 @@ mini with <num>*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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue