1 \documentclass[../thesis.tex
]{subfiles
}
4 \ifSubfilesClassLoaded{
8 \chapter{Bytecode instruction set
}%
9 \label{chp:bytecode_instruction_set
}
10 \todo[inline
]{formatting
}
14 $w_r$ & return width\\
15 $w_a$ & argument width\\
16 $fp$ & frame pointer\\
17 $sp$ & stack pointer\\
18 $pc$ & program counter\\
21 Bytecode is byte encoded, stack has
16-bit cells.
22 Longs and reals are stored with the MSB first.
25 \begin{longtable
}{lllll
}
26 \caption{\normalsize Semantics for the bytecode instructions
\label{tbl:instr_task
}}
28 \caption{\normalsize Semantics for the bytecode instructions (cont.)
}
33 Instr. & Args & Semantics & sp & pc\\
36 \texttt{return
} & $w_r~w_a$ & $st
[fp
\shortminus{}w_a
\shortminus{}3+i
] = st
[fp+
1]$ & $st
[fp
\shortminus{}w_a
\shortminus{}3+w_r
]$ & $st
[fp
\shortminus{}w_a
\shortminus{}1]$\\
37 & &
{\bf for all
} $i
\in\
{0..w_r\
}$\\
38 & & $fp = st
[fp
\shortminus{}w_a
\shortminus{}2]$\\
39 \texttt{jumpF
} & $l$ & & $sp
\shortminus{}1$ & $
\left\
{\begin{array
}{ll
} pc+
1 &
\textrm{\bf if
} st
[sp
\shortminus{}1]\
\l &
\textrm{\bf otherwise
}\end{array
}\right.$\\
40 \texttt{jump
} & $l$ & & $sp
\shortminus{}1$ & $l$\\
41 \texttt{jumpSR
} & $w_a~l$ & $st
[sp
\shortminus{}w_a
\shortminus{}1]=pc+
2$ & & $l$\\
42 \texttt{tailCall
} & $w_
{a_1
}~w_
{a_2
}~l$ & $rotate\:(w_
{a_1
}+
3+w_
{a_2
},w_
{a_2
})$ & $fp$ & $jl$\\
43 & & $fp = fp-w_
{a_1
}+w_
{a_2
}$\\
44 & &
\multicolumn{3}{l
}{{\bf where
} $w_
{a_1
}$ is the width of the current function and $w_
{a_2
}$ the width of the called function
}\\
45 \texttt{arg
} & $i$ & $st
[sp
] = st
[fp-
1-i
]$ & $sp+
1$\\
46 \texttt{push
} & $n~b_0
\ldots b_n$ & $st
[sp+i
] = s
[i
]$ & $sp+n$ & $pc+
2+n$\\
47 & &
{\bf for all
} $i
\in\
{0..n\
}$\\
49 \texttt{pop
} & $n$ & & $sp-n$ & $pc+
2$\\
51 \texttt{rot
} & $d~n$ & $rotate\:(d, n)$ & $sp$ & $pc+
3$\\
53 \texttt{dup
} & & $st
[sp
] = st
[sp-
1]$ & $sp+
1$ & $pc+
1$\\
55 \texttt{pushPtrs
} & & $st
[sp
] = sp$ & $sp+
3$ & $pc+
1$\\
59 \texttt{unOp
} & & $st
[sp-
1] =
\diamond{}st
[sp-
1]$ & $sp$ & $pc+
1$\\
60 & &
\multicolumn{3}{l
}{{\bf for all
} $
\diamond\in\
{\neg\
}$
}\\
62 \texttt{binOp
} & & $st
[sp-
2] = st
[sp-
2] \mathbin{\oplus} st
[sp-
1]$ & $sp-
1$ & $pc+
1$\\
63 & &
\multicolumn{3}{l
}{{\bf for all
} $
\oplus\in\
{+, -, *, /,
\wedge,
\vee,
\equiv,
\not\equiv,
\leq,
\geq, <, >\
}$
}\\
65 \texttt{mkTask
} &
\texttt{Stable
\textsubscript{n
}} & $st
[sp-n-
1] = node (stable,$ & $sp-n+
1$ & $pc+
2$\\
66 & & $
\qquad\qquad st
[sp-
1],
\ldots, st
[sp-n-
1])$\\
67 \texttt{mkTask
} &
\texttt{Unstable
\textsubscript{n
}} & $st
[sp-n-
1] = node (unstable,$ & $sp-n+
1$ & $pc+
2$\\
68 & & $
\qquad\qquad st
[sp-
1],
\ldots, st
[sp-n-
1])$\\
70 % & \multicolumn{3}{l}{Unstable\textsubscript{n}} & st[sp-n-1] = node (unstable, & sp-n+1 & pc+2\\
71 % & \multicolumn{3}{l}{} & \qquad\qquad st[sp-1], \textrm{\ldots}, st[sp-n-1])\\
74 % & \multicolumn{3}{l}{ReadD } & st[sp-1] \ \ = node (readd, st[sp-1]) & & pc+2\\
76 % & \multicolumn{3}{l}{ReadA } & st[sp-1] \ \ = node (reada, st[sp-1]) & & pc+2\\
78 % & \multicolumn{3}{l}{Repeat } & st[sp-1] \ \ = node (repeat, st[sp-1]) & & pc+2\\
80 % & \multicolumn{3}{l}{Delay } & st[sp-1] \ \ = node (delay, st[sp-1]) & & pc+2\\
83 % & \multicolumn{3}{l}{WriteD } & st[sp-2] \ \ = node (writed, st[sp-1], st[sp-2]) & sp-1 & pc+2\\
85 % & \multicolumn{3}{l}{WriteA } & st[sp-2] \ \ = node (writea, st[sp-1], st[sp-2]) & sp-1 & pc+2\\
87 % & \multicolumn{3}{l}{And } & st[sp-2] \ \ = node (and, st[sp-1], st[sp-2]) & sp-1 & pc+2\\
89 % & \multicolumn{3}{l}{Or } & st[sp-2] \ \ = node (or, st[sp-1], st[sp-2]) & sp-1 & pc+2\\
92 % & \multicolumn{3}{l}{SdsSet i } & st[sp-1] \ \ = node (sdsset,i, st[sp-1]) & & pc+3\\
95 % & \multicolumn{3}{l}{SdsGet i } & st[sp]\ \ \ \ \ = node (sdsget, i) & sp+1 & pc+3\\
97 % & \multicolumn{3}{l}{DHTTemp i } & st[sp-1] \ \ = node (dhttemp, i) & sp+1 & pc+3\\
99 % & \multicolumn{3}{l}{DHTHumid i } & st[sp-1] \ \ = node (dhthumid, i) & sp+1 & pc+3\\
102 % & \multicolumn{3}{l}{Step aw jl } & st[sp-1] \ \ = node (step, aw, jl, st[sp-1]) & sp-1 & pc+5\\
106 \input{subfilepostamble
}