1 \documentclass[../thesis.tex
]{subfiles
}
3 \input{subfilepreamble
}
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.
20 \caption{Notation convention for the byte code semantics.
}%
21 \label{tbl:bc_notation
}
25 variable & meaning &
\textnumero{}bytes\\
27 $fp$ & frame pointer &
2\\
28 $sp$ & stack pointer &
2\\
29 $pc$ & program counter &
2\\
32 $w_r$ & return width &
1\\
33 $w_a$ & argument width &
1\\
34 $i$ &
\gls{SDS
} or sensor id &
1\\
42 \begin{longtable
}[c
]{lllll
}
43 \caption{Semantics for the bytecode instructions.
\label{tbl:instr_task
}}\\
45 Instruction & Arguments & Semantics & $sp$ & $pc$\\
48 \caption{Semantics for the bytecode instructions. (continued)
}\\
50 Instruction & Arguments & Semantics & $sp$ & $pc$\\
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$\\
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$\\
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\
}$
}\\
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])$\\
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$\\
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$\\
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$\\
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$\\
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$\\
114 \input{subfilepostamble
}
115 \end{document}%chktex 16