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