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