Grundlagen der RISC-Architektur
Typische Operanden und Befehle
Zur Festlegung des Befehlssatzes der RISC-I-Architektur musste man Programme auf zwei Charakteristika hin untersuchen: Typische Operanden und typische Befehle in C oder PASCAL sowie deren Übersetzung in Maschinensprache. Das RISC-I-Projekt zeigt demnach die grundsätzliche Wechselwirkung von Rechnerarchitektur und Compiler. Die acht Programme, die zur Analyse herangezogen wurden, bestanden aus:
P1: Pascal-Compiler, geschrieben in Pascal
P2: Unterprogramm in einem Entwurfssystem
P3: Pascal Prettyprinter
P4: Vergleichsprogramm zum Vergleich zweier Dateien
C1: C-Compiler, geschrieben in C
C2: Programm zum Zeichnen von VLSI-Masken-Layouts
C3: Programm zum Formatieren von Text
C4: Sortierprogramm unter Unix
Die typischen Programme der 90er Jahre, Textverarbeitung und Grafikprogramme, sind sicher unterrepräsentiert, die Mischung entspricht eher dem Standard von 1980. Die folgende Tabelle zeigt die dynamische Häufigkeit der Operanden im Code.
Operandentyp | P1 | P2 | P3 | P4 | C1 | C2 | C3 | C4 | Durchschnitt |
---|---|---|---|---|---|---|---|---|---|
Angaben in Prozent | |||||||||
Ganzzahlige Konstante | 14 | 18 | 11 | 20 | 25 | 11 | 29 | 28 | 20 |
Skalare | 63 | 68 | 46 | 54 | 37 | 45 | 66 | 62 | 55 |
Felder / Strukturen | 23 | 14 | 43 | 25 | 36 | 43 | 5 | 10 | 25 |
Die Unterstützung für die Operandentypen durch die Maschinenbefehle kann in mehrfacher Form erfolgen: Floating-Point-Befehle (hier nicht aufgeschlüsselt) sowie Adressierungsformen bieten hier eine Reihe von Möglichkeiten.
Die Hochsprachenkonstrukte in diesen Programmen lassen sich in verschiedene Kategorien einteilen: Zuweisungsbefehle (assign), Kontrollflussstrukturen (if, case, for, with, loop, while) und Prozeduraufrufe (call/return). Die in den Programmen auftretenden Häufigkeiten sind in folgender Tabelle dargestellt.
Befehlstyp | P1 | P2 | P3 | P4 | C1 | C2 | C4 | C4 | Durchschnitt Pascal | Durchschnitt C |
---|---|---|---|---|---|---|---|---|---|---|
Angaben in Prozent | ||||||||||
assign | 39 | 52 | 35 | 53 | 22 | 50 | 25 | 56 | 45 | 38 |
if | 35 | 30 | 36 | 16 | 59 | 31 | 61 | 22 | 29 | 43 |
call | 15 | 14 | 16 | 15 | 6 | 17 | 9 | 16 | 15 | 12 |
with | 2 | 0 | 5 | 13 | 2 | 2 | 3 | 5 | 5 | 3 |
loop | 5 | 5 | 5 | 4 | 9 | 0 | 1 | 1 | 5 | 3 |
case | 4 | 0 | 1 | 0 | 2 | 0 | 0 | 0 | 0 | kleiner 1 |