diff --git a/verfahren.pdf b/verfahren.pdf index 3190cc7..dba7581 100644 Binary files a/verfahren.pdf and b/verfahren.pdf differ diff --git a/verfahren.tex b/verfahren.tex index 26bc8e8..dc5406d 100644 --- a/verfahren.tex +++ b/verfahren.tex @@ -292,6 +292,21 @@ \item Auftrennung des Baumes, wenn Teilbäume mehr Register als verfügbar benötigen $\rightarrow$ Teilbaum vor Auswertung des übrigen Baums im Speicher auswerten \end{enumerate} +\subsubsection{Dynamische Programmierung} +\begin{enumerate} + \item Rekursives Berechnen eines Kostenfelds $C[i]$ für jeden Knoten des Baums und $0 \leq i \leq \vert R\vert$ ($R$ Register der Zielarchitektur):\begin{itemize} + \item $C[i]$: Kosten der Auswertung des Teilbaums in ein Register, sofern $i$ Register zur Verfügung stehen:\begin{enumerate} + \item Für alle möglichen Maschinenbefehle $x$ alle möglichen Auswertungsreihenfolgen $y$ der Registeroperanden als $C[x, y, i]$ berechnen: erster Operand hat $i$ Register, zweiter $i-1$ Register, etc. zur Verfügung + \item $C[x, y, i] = $ Summe der Kindkosten bei Auswertungsreihenfolge $y$ $+$ Kosten des Befehls $x$ + \item $C[i] = \min C[x, y, i]$, dann mit $x$ und $y$ des Minimums annotieren + \end{enumerate} + \item $C[0]$: Kosten der Auswertung des Teilbaums, wenn alle Register zur Verfügung stehen, aber Ergbenis am Ende in Speicher geschrieben wird (ergo $C[j] + 1 $) + \end{itemize} + \item Rekursives Auftrennen des Baums, wenn Ergebnis in Speicher abgelegt wird (aus annotiertem Befehl ersichtlich) + \item Ablegen der Teilbäume in Schlange (\enquote{untere Bäume zuerst}) + \item Code-Generierung durch Abarbeitung der Schlange und Code-Generierung der jeweiligen Teilbäume +\end{enumerate} + \subsection{Ohne Registerzuteilung} \subsubsection{Baumtransformationen} @@ -310,8 +325,6 @@ \item Parsen des Baumtexts mit Maschinengrammatik emittiert den Maschinencode (dabei Mehrdeutigkeit nach Heuristik auflösen) \end{enumerate} -\subsubsection{Dynamische Programmierung} - \section{Registerzuteilung} %\printbibliography \end{document}