% vim: spelllang=nl: \documentclass[a4paper]{article} \usepackage[dutch]{babel} \usepackage[top=3cm]{geometry} \usepackage{latexgit} \usepackage[hidelinks]{hyperref} \usepackage{enumitem} \title{Codegeneratie voor Thumb-2 processoren\\\large{Onderzoeksplan bachelorscriptie}} \author{ Camil Staps\\[.4em] Begeleiders: prof.dr.dr.h.c.ir. M.J. Plasmeijer en drs. J.H.G. van Groningen } \date{\gitcommitdate[formatDate]} \begin{document} \maketitle \thispagestyle{empty} \subsection*{Onderzoeksvraag} Welke verschillen bestaan er tussen de ARM en Thumb-2 architecturen\footnote{ARM Limited. \emph{ARMv7-M Architecture Reference Manual.} (2006--2010)} en wat voor invloed hebben deze verschillen op code generators? \subsection*{Relevantie} Codegeneratie voor simpele architecturen is interessant, om op een hoog abstractieniveau kleine, relatief goedkope systemen te kunnen programmeren. In het bijzonder wil ik kijken naar vertaling van ABC-\footnote{Pieter Koopman. \emph{Functional Programs as Executable Specifications}. (Meppel: Krips Repro, 1990)} naar Thumb-2 machinecode, met als doel steeds simpelere systemen met een functionele taal te kunnen programmeren. De Cortex-M3 processor die in bijvoorbeeld de Arduino Due\footnote{\url{https://www.arduino.cc/en/Main/ArduinoBoardDue}} zit gebruikt de Thumb-2 instructieset. Er zijn enkele Haskell-georienteerde projecten voor Arduino\footnote{\url{https://wiki.haskell.org/Arduino}}, maar die gebruiken een EDSL die naar C gecompileerd of door C ge\"{\i}nterpreteerd wordt, waardoor de functionele kracht van Haskell verloren gaat. \subsection*{Verwachte resultaten} De verwachting is uiteindelijk een lijst met verschillen tussen ARM en Thumb-2 op te kunnen stellen. Per verschil zou aangegeven moeten worden: \begin{description} \item[Impact] Wat voor techniek kan \emph{wel} op ARM gebruikt worden, maar niet op Thumb-2? \item[Oplossing] Hoe kan een bestaande ARM code generator aangepast worden om werkende Thumb-2 code te genereren, gezien dit verschil? Hierbij zal ik voorbeelden uit de Clean code generator\footnote{\url{https://svn.cs.ru.nl/repos/clean-code-generator/trunk}, i.h.b. \texttt{cgarm*}.} gebruiken. \item[Vergelijking van complexiteit] Wat is ongeveer het effect van de aanpassingen op de complexiteit van een Clean-programma? Het gaat hier in eerste instantie niet om een volledige berekening of compleet bewijs, maar een algemeen idee. \end{description} \subsection*{Strategie} Ik zal een \emph{hands-on}-strategie gebruiken: telkens een klein deel van de huidige Clean code generator voor ARM bekijken, controleren wat niet zal werken op Thumb-2, en hier een oplossing voor bedenken. \end{document}