\section{PowerPC} % Does it describe a CISC or RISC architecture? Die PowerPC Architektur wurde 1991 durch ein Konsortium aus Apple, IBM und Motorola spezifiziert. PowerPC steht dabei f\"ur \textit{\textbf{P}erformance \textbf{o}ptimization \textbf{w}ith \textbf{e}nhanced \textbf{R}ISC \textbf{P}erformance \textbf{C}hip} und ist, wie der Name schon sagt, eine RISC % Does the ISA describe an accumulator, a register, or a stack machine? und eine Load-Store Architektur. Je nach Bedarf kann eine konkrete Implementierung 32- oder 64-Bit sein; hier wollen wir nur auf 32-Bit eingehen. % Where are processors that implement the ISA deployed? In embedded systems % (micro- controllers, communication, multimedia), in servers, in desktop % computers? \subsection{Einsatzgebiete und Ziele} PowerPC wurde mit dem Ziel entwickelt m\"oglichst skalierbar und flexibel zu sein, da die tats\"achlichen Anwendungsgebiete recht unterschiedlich sind. Man findet diese Architektur daher in verschiedenen Bereichen: \begin{description} \item[Desktop] Apple verwendete PowerPC, aber mittlerweile von \texttt{x86} verdr\"angt \item[Embedded] Routern von Cisco, teilweise auf FPGAs von Xilinx und Altera zu finden \item[Multimedia] Prominentes Beispiel: d-box 2 \item[Spielekonsolen] GameCube/Wii, Xbox 360 oder PS3\footnote{obwohl die Cell Architektur weit mehr ist} \item[Server] Vertreten durch beispielsweise POWER7 oder BlueGene \end{description} % What are the goals of the architecture? Performance, die area, energy % efficiency, code size, . . . ? % How are these goals reflected in the ISA? Die PowerPC Architektur ist also recht vielf\"altig und es gibt daher nicht \textit{das} Einsatzgebiet. Im Speziellen gibt es verschiedene \textit{Books} die unterschiedliche Bereiche abdecken und je nach den Bed\"urfnissen des CPU Herstellers implementiert werden k\"onnen. Darunter fallen Themen wie Floating Point, Signal Processing oder Vector Operationen. Weiters gibt eine sogenannte Basiskategorie die von allen Implementierung umgesetzt werden muss. \subsection{Beschreibung} Bei den meisten Befehle der ISA handelt es sich um Register-zu-Register Operationen im Drei-Register Format. Jede Instruktion ist vier Byte gro\ss. Durch Load bzw. Store Operationen besteht, wie in jeder Load/Store-Architektur, die M\"oglichkeit am Speicher zu operieren -- die Adressierungsarten sind hierbei \"au\ss erst eingeschr\"ankt: Zum Beispiel l\"adt die Instruktion \mbox{\texttt{lwz r3,4(r1)}} den Inhalt an der Speicherstelle \texttt{r1+4} in das Register \texttt{r3}. Weiters kann man die Basisadresse nach der Speicheroperationen noch updaten, zum Beispiel: \texttt{stwu r3,4(r1)} speichert den Inhalt von \texttt{r3} an die Speicherstelle \texttt{r1+4} und setzt weiters \texttt{r1 := r1 + 4}. Typische Register, plus Erkl\"arung, die in einer PowerPC Implementierung vorhanden sind, findet man in Tabelle \ref{tab:ppcreg}. \begin{table}[ht!] \begin{tabular}{lp{3cm}p{9cm}} \textbf{Register} & \textbf{Beschreibung} & \textbf{Kommentar}\\ \hline \texttt{r0-r31} & General Purpose Register & 32 32-Bit Register\\ \texttt{cr0-cr7} & Condition \mbox{Register} Field & PowerPC besitzt acht CRs. Bei einer Instruktion die ein Ergebnis in ein CR ablegt, kann man ein gew\"unschtes CR angeben. Vielen Branchbefehlen kann man ebenfalls ein CR \"ubergeben.\\ \texttt{lr} & Link Register & Bei Calls wird die Returnadresse in LR hinterlegt. Bei bestimmten Branchbefehlen kann man angeben ob zu LR gesprungen werden soll (das kann auch mit einem CR verkn\"upft werden).\\ \texttt{ctr} & Counter \mbox{Register} & Mit CTR k\"onnen viele Schleifen realisiert werden; es gibt spezielle Branchbefehle die am CTR operieren und z.B. bei ungleich Null einen Sprung durchf\"uhren. Dadurch k\"onnen Spr\"unge sehr gut vorausgesagt werden.\\ \end{tabular} \centering \caption{Register in der PowerPC Architektur} \label{tab:ppcreg} \end{table} % Are latencies handled by the hardware or are they visible at the ISA level? % For example, branch delay slots expose the latencies of branches at the ISA % level. Latenzen sind auf ISA Niveau nicht sichtbar, man kann dem Prozessor aber Voraussagen mitteilen. Beispielsweise ist bei der gegebenen Funktion \texttt{sum()} die L\"ange auf Null zu pr\"ufen. Da im allgemeinen Fall ein Wert ungleich Null erwartet wird, kann dem Sprung eine Voraussage mitteilen, wobei \texttt{-} f\"ur Sprung wird nicht ausgef\"uhrt und \texttt{+} f\"ur das Gegenteil steht. In manchen F\"allen, wie z.B. Branchoperationen auf das CTR machen solche Voraussagen nur wenig Sinn, da die Hardware den Sprung ohnehin sehr fr\"uh berechnen kann. % Are conditional branches (compute condition and jump) performed in a single % step, or are testing and branching unbundled? Weiters k\"onnen Conditional Branches je nach Inhalt eines CR ausgef\"uhrt werden. Wie bei vielen anderen ISAs k\"onnen CRs mit Befehlen wie \texttt{cmp} gesetzt werden, aber auch mit dem sogenannten \textit{dot suffix}, der bei vielen Befehlen wie z.B. \texttt{add}, optional vorhanden ist. Dieser verursacht implizit ein Update auf ein CR (meistens CR0). \subsection{Perlen und W\"unsche} % Which features of the ISA do you like, which features would you change? \begin{itemize} \item \textbf{Gute Branchpreditcion}: Durch die schon genannten Feature wie LR und Counter Register sind Spr\"unge fr\"uh in der Pipeline erkennbar. \item \textbf{\texttt{rlwinm}}: \textit{Rotate Left Word Immediate then AND with Mask}. Ein sehr m\"achter und in verschiedensten Variante oft verwendeter Befehl. Um die Funktionsweise zu demonstrieren: Der Aufruft \mbox{\texttt{rlwinm rA,rS,SH,MB,ME}}, wobei \mbox{$0 \le \text{SH,MB,ME} \le 31$} gilt, nimmt den Inhalt aus \texttt{rS} und rotiert diesen um \texttt{SH} nach links. Danach wird auf das Ergebnis mit einer Maske verundet. Die angesprochene Maske ist 32-Bit gro{\ss} und von der Stelle MB bis ME mit 1er und ansonsten 0er belegt. Sollte $\text{MB} > \text{ME}$ sein, so werden die Stellen ME bis MB mit 0er belegt und die anderen Stellen mit 1er. Das Ergebnis wird in \texttt{rD} gespeichert. \item \textbf{\texttt{cntlzw}}: \textit{Count Leading Zeros Word} \item \dots{} \end{itemize} % TODO wenn mir noch was einfaellt W\"unsche: Keine. \subsection{Listing} \lstinputlisting[caption=PowerPC Code]{ppc.s} In der Schleife werden also drei Befehle ausgef\"uhrt, wobei \texttt{lwzu} zwei Taktzyklen ben\"otigt und \texttt{add} einen Zylus braucht. \texttt{bdnz} braucht im allgemeinen Fall \textit{keinen} Zyklus, da die Hardware den Sprung schon sehr fr\"uh in der Pipeline berechnen kann \footnote{Zyklendauer aus dem Datenblatt des PowerPC 750CXe entnommen}. Die Codegr\"o\ss{}e der Schleife betr\"agt 12 Byte, da jede Instruktion 4 Byte gross ist.