X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=appx%2Fbytecode.tex;h=6884e53478645ff3899135ef8cc27d3b7cacf752;hb=27d1d51bf3f3acc08c002a5d58af6a4f4332e3f8;hp=594e63014cb11f3bb637cd8d8b8382608dd3e85e;hpb=4c449b205b49b4773934bd5cfd22e0f15e199eeb;p=phd-thesis.git diff --git a/appx/bytecode.tex b/appx/bytecode.tex index 594e630..6884e53 100644 --- a/appx/bytecode.tex +++ b/appx/bytecode.tex @@ -2,105 +2,110 @@ \input{subfilepreamble} +\setcounter{chapter}{2} + \begin{document} \input{subfileprefix} +\ifSubfilesClassLoaded{\appendix}{} \chapter{Bytecode instruction set}% \label{chp:bytecode_instruction_set}% -\todo[inline]{formatting} - -\begin{tabular}{ll} - $l$ & label\\ - $w_r$ & return width\\ - $w_a$ & argument width\\ - $fp$ & frame pointer\\ - $sp$ & stack pointer\\ - $pc$ & program counter\\ -\end{tabular} +This appendix describeds the semantics of the byte code instruction set. +The byte code instructions are of variable length and automatically encoded and decoded using generic programming (see \todo{ref naar c\-co\-de\-gen}). +\Cref{tbl:bc_notation} shows the notation convention. -Bytecode is byte encoded, stack has 16-bit cells. -Longs and reals are stored with the MSB first. +\begin{table}[ht!] + \caption{Notation for the byte code semantics}% + \label{tbl:bc_notation} + \centering + \begin{tabular}{lll} + \toprule + variable & meaning & \textnumero{}bytes\\ + \midrule + $l$ & label & 2\\ + $w_r$ & return width & 1\\ + $w_a$ & argument width & 1\\ + $i$ & \gls{SDS} or sensor id & 1\\ + $fp$ & frame pointer & 2\\ + $sp$ & stack pointer & 2\\ + $pc$ & program counter & 2\\ + \bottomrule + \end{tabular} +\end{table} -\footnotesize -%\begin{longtable}{lllll} -% \caption{\normalsize Semantics for the bytecode instructions\label{tbl:instr_task}} -% \endfirsthead% -% \caption{\normalsize Semantics for the bytecode instructions (cont.)} -% \endhead% -% \endfoot% -% \endlastfoot% -% \toprule -% Instr. & Args & Semantics & sp & pc\\ -% -% \midrule -% \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]$\\ -% & & {\bf for all} $i\in\{0..w_r\}$\\ -% & & $fp = st[fp\shortminus{}w_a\shortminus{}2]$\\ -% \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.$\\ -% \texttt{jump} & $l$ & & $sp\shortminus{}1$ & $l$\\ -% \texttt{jumpSR} & $w_a~l$ & $st[sp\shortminus{}w_a\shortminus{}1]=pc+2$ & & $l$\\ -% \texttt{tailCall} & $w_{a_1}~w_{a_2}~l$ & $rotate\:(w_{a_1}+3+w_{a_2},w_{a_2})$ & $fp$ & $jl$\\ -% & & $fp = fp-w_{a_1}+w_{a_2}$\\ -% & & \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}\\ -% \texttt{arg} & $i$ & $st[sp] = st[fp-1-i]$ & $sp+1$\\ -% \texttt{push} & $n~b_0\ldots b_n$ & $st[sp+i] = s[i]$ & $sp+n$ & $pc+2+n$\\ -% & & {\bf for all} $i\in\{0..n\}$\\ -%% \midrule -% \texttt{pop} & $n$ & & $sp-n$ & $pc+2$\\ -%% \midrule -% \texttt{rot} & $d~n$ & $rotate\:(d, n)$ & $sp$ & $pc+3$\\ -%% \midrule -% \texttt{dup} & & $st[sp] = st[sp-1]$ & $sp+1$ & $pc+1$\\ -%% \midrule -% \texttt{pushPtrs} & & $st[sp] = sp$ & $sp+3$ & $pc+1$\\ -% & & $st[sp+1] = fp$\\ -% & & $st[sp+2] = 0$\\ -%% \midrule -% \texttt{unOp} & & $st[sp-1] = \diamond{}st[sp-1]$ & $sp$ & $pc+1$\\ -% & & \multicolumn{3}{l}{{\bf for all} $\diamond\in\{\neg\}$}\\ -%% \midrule -% \texttt{binOp} & & $st[sp-2] = st[sp-2] \mathbin{\oplus} st[sp-1]$ & $sp-1$ & $pc+1$\\ -% & & \multicolumn{3}{l}{{\bf for all} $\oplus\in\{+, -, *, /, \wedge, \vee, \equiv, \not\equiv, \leq, \geq, <, >\}$}\\ -%% \midrule -% \texttt{mkTask} & \texttt{Stable\textsubscript{n}} & $st[sp-n-1] = node (stable,$ & $sp-n+1$ & $pc+2$\\ -% & & $\qquad\qquad st[sp-1], \ldots, st[sp-n-1])$\\ -% \texttt{mkTask} & \texttt{Unstable\textsubscript{n}} & $st[sp-n-1] = node (unstable,$ & $sp-n+1$ & $pc+2$\\ -% & & $\qquad\qquad st[sp-1], \ldots, st[sp-n-1])$\\ -%% \midrule -%% & \multicolumn{3}{l}{Unstable\textsubscript{n}} & st[sp-n-1] = node (unstable, & sp-n+1 & pc+2\\ -%% & \multicolumn{3}{l}{} & \qquad\qquad st[sp-1], \textrm{\ldots}, st[sp-n-1])\\ -%% \midrule -%% -%% & \multicolumn{3}{l}{ReadD } & st[sp-1] \ \ = node (readd, st[sp-1]) & & pc+2\\ -%% \midrule -%% & \multicolumn{3}{l}{ReadA } & st[sp-1] \ \ = node (reada, st[sp-1]) & & pc+2\\ -%% \midrule -%% & \multicolumn{3}{l}{Repeat } & st[sp-1] \ \ = node (repeat, st[sp-1]) & & pc+2\\ -%% \midrule -%% & \multicolumn{3}{l}{Delay } & st[sp-1] \ \ = node (delay, st[sp-1]) & & pc+2\\ -%% \midrule -%% -%% & \multicolumn{3}{l}{WriteD } & st[sp-2] \ \ = node (writed, st[sp-1], st[sp-2]) & sp-1 & pc+2\\ -%% \midrule -%% & \multicolumn{3}{l}{WriteA } & st[sp-2] \ \ = node (writea, st[sp-1], st[sp-2]) & sp-1 & pc+2\\ -%% \midrule -%% & \multicolumn{3}{l}{And } & st[sp-2] \ \ = node (and, st[sp-1], st[sp-2]) & sp-1 & pc+2\\ -%% \midrule -%% & \multicolumn{3}{l}{Or } & st[sp-2] \ \ = node (or, st[sp-1], st[sp-2]) & sp-1 & pc+2\\ -%% \midrule -%% -%% & \multicolumn{3}{l}{SdsSet i } & st[sp-1] \ \ = node (sdsset,i, st[sp-1]) & & pc+3\\ -%% \midrule -%% -%% & \multicolumn{3}{l}{SdsGet i } & st[sp]\ \ \ \ \ = node (sdsget, i) & sp+1 & pc+3\\ -%% \midrule -%% & \multicolumn{3}{l}{DHTTemp i } & st[sp-1] \ \ = node (dhttemp, i) & sp+1 & pc+3\\ -%% \midrule -%% & \multicolumn{3}{l}{DHTHumid i } & st[sp-1] \ \ = node (dhthumid, i) & sp+1 & pc+3\\ -%% \midrule -%% -%% & \multicolumn{3}{l}{Step aw jl } & st[sp-1] \ \ = node (step, aw, jl, st[sp-1]) & sp-1 & pc+5\\ -% \bottomrule -%\end{longtable} +\begin{landscape} + \begin{longtable}[c]{lllll} + \caption{Semantics for the bytecode instructions\label{tbl:instr_task}}\\ + \toprule + Instruction & Arguments & Semantics & $sp$ & $pc$\\ + \midrule + \endfirsthead% + \caption{Semantics for the bytecode instructions (cont.)}\\ + \toprule + Instruction & Arguments & Semantics & $sp$ & $pc$\\ + \midrule + \endhead% + \bottomrule + \endfoot% + \bottomrule + \endlastfoot% + \texttt{push} & $n~b_0\ldots b_n$ & $st[sp+i] = s[i]$ & $sp+n$ & $pc+2+n$\\ + & & {\bf for all} $i\in\{0..n\}$\\ + \texttt{pop} & $n$ & & $sp\shortminus{}n$ & $pc+2$\\ + \texttt{rot} & $d~n$ & $rotate\:(d, n)$ & $sp$ & $pc+3$\\ + \texttt{dup} & & $st[sp] = st[sp\shortminus{}1]$ & $sp+1$ & $pc+1$\\ + \midrule + \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.$\\ + \texttt{jump} & $l$ & & $sp\shortminus{}1$ & $l$\\ + \texttt{jumpSR} & $w_a~l$ & $st[sp\shortminus{}w_a\shortminus{}1]=pc+2$ & & $l$\\ + \texttt{tailCall} & $w_{a_1}~w_{a_2}~l$ & $rotate\:(w_{a_1}+3+w_{a_2},w_{a_2})$ & $fp$ & $jl$\\ + & & $fp = fp\shortminus{}w_{a_1}+w_{a_2}$\\ + & & \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}\\ + \texttt{arg} & $i$ & $st[sp] = st[fp\shortminus{}1\shortminus{}i]$ & $sp+1$\\ + \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]$\\ + & & {\bf for all} $i\in\{0..w_r\}$\\ + & & $fp = st[fp\shortminus{}w_a\shortminus{}2]$\\ + \texttt{pushPtrs} & & $st[sp] = sp$ & $sp+3$ & $pc+1$\\ + & & $st[sp+1] = fp$\\ + & & $st[sp+2] = 0$\\ + \midrule + \texttt{unOp} & & $st[sp\shortminus{}1] = \diamond{}st[sp\shortminus{}1]$ & $sp$ & $pc+1$\\ + & & \multicolumn{3}{l}{{\bf for all} $\diamond\in\{\neg\}$}\\ + \texttt{binOp} & & $st[sp\shortminus{}2] = st[sp\shortminus{}2] \mathbin{\oplus} st[sp\shortminus{}1]$ & $sp\shortminus{}1$ & $pc+1$\\ + & & \multicolumn{3}{l}{{\bf for all} $\oplus\in\{+, \shortminus{}, *, /, \wedge, \vee, \equiv, \not\equiv, \leq, \geq, <, >\}$}\\ + & & \multicolumn{3}{l}{similar for Real and Long variants}\\ + \texttt{cast}\textsubscript{f-t} & & $st[sp\shortminus{}1] = cast_{f-t} (st[sp\shortminus{}1])$ & $sp$ & $pc+1$\\ + & & \multicolumn{3}{l}{{\bf for all} $f,t\in\{Int, Real, Long\}$}\\ + \pagebreak + \texttt{mkTask} & \texttt{Stable\textsubscript{n}} & $st[sp\shortminus{}n\shortminus{}1] = node (stable,$ & $sp\shortminus{}n+1$ & $pc+2$\\ + & & $\qquad\qquad st[sp\shortminus{}1], \ldots, st[sp\shortminus{}n\shortminus{}1])$\\ + & \texttt{Unstable\textsubscript{n}} & $st[sp\shortminus{}n\shortminus{}1] = node (unstable,$ & $sp\shortminus{}n+1$ & $pc+2$\\ + & & $\qquad\qquad st[sp\shortminus{}1], \ldots, st[sp\shortminus{}n\shortminus{}1])$\\ + \midrule + & \texttt{ReadD} & $st[sp\shortminus{}1] = node (readd, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\ + & \texttt{ReadA} & $st[sp\shortminus{}1] = node (reada, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\ + & \texttt{WriteD} & $st[sp\shortminus{}2] = node (writed, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\ + & \texttt{WriteA} & $st[sp\shortminus{}2] = node (writea, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\ + & \texttt{WriteD} & $st[sp\shortminus{}2] = node (writed, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\ + & \texttt{PinMode} & $st[sp\shortminus{}2] = node (pinmode, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\ + \midrule + & \texttt{Repeat} & $st[sp] = node (repeat, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\ + & \texttt{Delay} & $st[sp] = node (delay, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\ + & \texttt{And} & $st[sp\shortminus{}1] = node (and, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\ + & \texttt{Or} & $st[sp\shortminus{}1] = node (and, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\ + & \texttt{Step} $f$ $w_a$ & $st[sp] = node (step, st[sp\shortminus{}1], f, w)$ & $sp$ & $pc+5$\\ + \midrule + & \texttt{SdsGet} $i$ & $st[sp+1] = node (sdsget, i)$ & $sp+1$ & $pc+3$\\ + & \texttt{SdsSet} $i$ & $st[sp\shortminus{}1] = node (sdsset, st[sp\shortminus{}1], i)$ & $sp$ & $pc+3$\\ + & \texttt{SdsUpd} $i$ $l$ & $st[sp+1] = node (sdsset, i, l)$ & $sp+1$ & $pc+5$\\ + \midrule + & \texttt{Interrupt} & $st[sp\shortminus{}2] = node (interrupt, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\ + & \texttt{RateLimit} & $st[sp\shortminus{}1] = node (ratelimit, st[sp\shortminus{}1])$ & $sp$ & $pc+2$\\ + & \texttt{TuneRate} & $st[sp\shortminus{}1] = node (tunerate, st[sp\shortminus{}1], st[sp\shortminus{}2])$ & $sp\shortminus{}1$ & $pc+2$\\ + \midrule + & \texttt{DHTTemp} $i$ & $st[sp+1] = node (dhttemp, i)$ & $sp+1$ & $pc+3$\\ + & \texttt{DHTHumid} $i$ & $st[sp+1] = node (dhthumid, i)$ & $sp+1$ & $pc+3$\\ + \end{longtable} +\end{landscape} \input{subfilepostamble} -\end{document} +\end{document}%chktex 16