% 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}
Wat voor invloed heeft
	het gebruik van Thumb-2 technologie\footnote{ARM Limited. \emph{ARMv7-M Architecture Reference Manual.} (2006--2010)}
	(afgezet tegen 32-bit ARM instructies)
	op code generators, specifiek die voor functionele talen?

\subsection*{Relevantie}
Codegeneratie voor simpele architecturen is interessant
	om op een hoog abstractieniveau
	kleine, relatief goedkope systemen 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 technologie.

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.

\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 wel/niet op ARM gebruikt worden, maar niet/wel 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.

		Hier moet gekeken worden naar
			tijd- en ruimtecomplexiteit (hopelijk niet significant langzamer/groter dan ARM),
			maar ook naar de grootte van het programma:
			de gegenereerde code zou voor Thumb-2 significant kleiner moeten zijn.
\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}
