split up more and updatE
[phd-thesis.git] / appx / bytecode.tex
1 \documentclass[../thesis.tex]{subfiles}
2
3 \input{subfilepreamble}
4
5 \begin{document}
6 \input{subfileprefix}
7 \ifSubfilesClassLoaded{\appendix\setcounter{chapter}{2}}{}
8 \chapter{Bytecode instruction set}%
9 \label{chp:bytecode_instruction_set}%
10 Tasks in \gls{MTASK} are compiled at run time to byte code.
11 This byte code is evaluated using the interpreter.
12 The result of this evaluation is a task tree.
13 Subsequently, this task tree is rewritten until a stable value is observed.
14 This appendix describes the semantics of the byte code instruction set of \gls{MTASK} (see \cref{chp:implementation}).
15 The byte code instructions are of variable length and automatically encoded and decoded using generic programming (see \cref{sec:ccodegen}).
16 \Cref{tbl:bc_notation} shows the notational convention of the variables used in the table.
17 \Cref{tbl:instr_task} shows the semantics of all major byte code instructions, shorthand instructions and auxiliary peripherals have been omitted for brevity but have the analogous semantics as their counterparts.
18
19 \begin{table}
20 \caption{Notation convention for the byte code semantics.}%
21 \label{tbl:bc_notation}
22 \centering
23 \begin{tabular}{lll}
24 \toprule
25 variable & meaning & \textnumero{}bytes\\
26 \midrule
27 $fp$ & frame pointer & 2\\
28 $sp$ & stack pointer & 2\\
29 $pc$ & program counter & 2\\
30 $l$ & label & 2\\
31 \midrule
32 $w_r$ & return width & 1\\
33 $w_a$ & argument width & 1\\
34 $i$ & \gls{SDS} or sensor id & 1\\
35 $n$ & number & 1\\
36 $d$ & depth & 1\\
37 \bottomrule
38 \end{tabular}
39 \end{table}
40
41 \begin{landscape}
42 \begin{longtable}[c]{lllll}
43 \caption{Semantics for the bytecode instructions.\label{tbl:instr_task}}\\
44 \toprule
45 Instruction & Arguments & Semantics & $sp$ & $pc$\\
46 \midrule
47 \endfirsthead%
48 \caption{Semantics for the bytecode instructions. (continued)}\\
49 \toprule
50 Instruction & Arguments & Semantics & $sp$ & $pc$\\
51 \midrule
52 \endhead%
53 \bottomrule
54 \endfoot%
55 \bottomrule
56 \endlastfoot%
57 \texttt{push} & $n~b_0\ldots b_n$ & $st[sp+i] = s[i]$ {\bf for all} $i\in\{0..n\}$ & $sp+n$ & $pc+2+n$\\
58 \texttt{pop} & $n$ & & $sp\shortminus{}n$ & $pc+2$\\
59 \texttt{rot} & $d~n$ & $rotate\:(d, n)$ & $sp$ & $pc+3$\\
60 \texttt{dup} & & $st[sp] = st[sp\shortminus{}1]$ & $sp+1$ & $pc+1$\\
61 \midrule
62 \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.$\\
63 \texttt{jump} & $l$ & & $sp\shortminus{}1$ & $l$\\
64 \texttt{jumpSR} & $w_a~l$ & $st[sp\shortminus{}w_a\shortminus{}1]=pc+2$ & & $l$\\
65 \texttt{tailCall} & $w_{a_1}~w_{a_2}~l$ & $rotate\:(w_{a_1}+3+w_{a_2},w_{a_2})$ & $fp$ & $jl$\\
66 & & $fp = fp\shortminus{}w_{a_1}+w_{a_2}$\\
67 & & \multicolumn{3}{p{.75\textwidth}}{{\bf where} $w_{a_1}$ is the width of the current function and $w_{a_2}$ the width of the called function}\\
68 \texttt{arg} & $n$ & $st[sp] = st[fp\shortminus{}1\shortminus{}n]$ & $sp+1$\\
69 \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]$\\
70 & & {\bf for all} $i\in\{0..w_r\}$\\
71 & & $fp = st[fp\shortminus{}w_a\shortminus{}2]$\\
72 \texttt{pushPtrs} & & $st[sp] = sp$ & $sp+3$ & $pc+1$\\
73 & & $st[sp+1] = fp$\\
74 & & $st[sp+2] = 0$\\
75 \midrule
76 \texttt{unOp} & & $st[sp\shortminus{}1] = \diamond{}st[sp\shortminus{}1]$ {\bf for all} $\diamond\in\{\neg\}$ & $sp$ & $pc+1$\\
77 \texttt{binOp} & & $st[sp\shortminus{}2] = st[sp\shortminus{}2] \mathbin{\oplus} st[sp\shortminus{}1]$ & $sp\shortminus{}1$ & $pc+1$\\
78 & & \multicolumn{3}{l}{{\bf for all} $\oplus\in\{+, \shortminus{}, *, /, \wedge, \vee, \equiv, \not\equiv, \leq, \geq, <, >\}$}\\
79 & & \multicolumn{3}{l}{similar for \cleaninline{Real} and \cleaninline{Long} variants}\\
80 \texttt{cast}\textsubscript{f-t} & & $st[sp\shortminus{}1] = cast_{f\shortminus{}-t} (st[sp\shortminus{}1])$ & $sp$ & $pc+1$\\
81 & & \multicolumn{3}{l}{{\bf for all} $f,t\in\{Int, Real, Long\}$}\\
82 % \pagebreak
83 \texttt{mkTask} & \texttt{Stable\textsubscript{n}} & $st[sp\shortminus{}n\shortminus{}1] = node (stable,$ & $sp\shortminus{}n+1$ & $pc+2$\\
84 & & $\qquad\qquad st[sp\shortminus{}1], \ldots, st[sp\shortminus{}n\shortminus{}1])$\\
85 \texttt{mkTask} & \texttt{Unstable\textsubscript{n}} & $st[sp\shortminus{}n\shortminus{}1] = node (unstable,$ & $sp\shortminus{}n+1$ & $pc+2$\\
86 & & $\qquad\qquad st[sp\shortminus{}1], \ldots, st[sp\shortminus{}n\shortminus{}1])$\\
87 \midrule
88 \texttt{mkTask} & \texttt{ReadD} & $st[sp\shortminus{}1] = node (readd, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\
89 \texttt{mkTask} & \texttt{ReadA} & $st[sp\shortminus{}1] = node (reada, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\
90 \texttt{mkTask} & \texttt{WriteD} & $st[sp\shortminus{}2] = node (writed, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\
91 \texttt{mkTask} & \texttt{WriteA} & $st[sp\shortminus{}2] = node (writea, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\
92 \texttt{mkTask} & \texttt{WriteD} & $st[sp\shortminus{}2] = node (writed, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\
93 \texttt{mkTask} & \texttt{PinMode} & $st[sp\shortminus{}2] = node (pinmode, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\
94 \midrule
95 \texttt{mkTask} & \texttt{Repeat} & $st[sp] = node (repeat, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\
96 \texttt{mkTask} & \texttt{Delay} & $st[sp] = node (delay, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\
97 \texttt{mkTask} & \texttt{And} & $st[sp\shortminus{}1] = node (and, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\
98 \texttt{mkTask} & \texttt{Or} & $st[sp\shortminus{}1] = node (and, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\
99 \texttt{mkTask} & \texttt{Step} $f$ $w_a$ & $st[sp] = node (step, st[sp\shortminus{}1], f, w)$ & $sp$ & $pc+5$\\
100 \midrule
101 \texttt{mkTask} & \texttt{SdsGet} $i$ & $st[sp+1] = node (sdsget, i)$ & $sp+1$ & $pc+3$\\
102 \texttt{mkTask} & \texttt{SdsSet} $i$ & $st[sp\shortminus{}1] = node (sdsset, st[sp\shortminus{}1], i)$ & $sp$ & $pc+3$\\
103 \texttt{mkTask} & \texttt{SdsUpd} $i$ $l$ & $st[sp+1] = node (sdsset, i, l)$ & $sp+1$ & $pc+5$\\
104 \midrule
105 \texttt{mkTask} & \texttt{Interrupt} & $st[sp\shortminus{}2] = node (interrupt, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\
106 \texttt{mkTask} & \texttt{RateLimit} & $st[sp\shortminus{}1] = node (ratelimit, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\
107 \texttt{mkTask} & \texttt{TuneRate} & $st[sp\shortminus{}1] = node (tunerate, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\
108 \midrule
109 \texttt{mkTask} & \texttt{DHTTemp} $i$ & $st[sp+1] = node (dhttemp, i)$ & $sp+1$ & $pc+3$\\
110 \texttt{mkTask} & \texttt{DHTHumid} $i$ & $st[sp+1] = node (dhthumid, i)$ & $sp+1$ & $pc+3$\\
111 \end{longtable}
112 \end{landscape}
113
114 \input{subfilepostamble}
115 \end{document}%chktex 16