DE19934424A1 - Verfahren, Vorrichtung und Computer-Programm-Produkt zur Optimierung von Registern in einem Stapel unter Verwendung eines Register-Zuordners - Google Patents
Verfahren, Vorrichtung und Computer-Programm-Produkt zur Optimierung von Registern in einem Stapel unter Verwendung eines Register-ZuordnersInfo
- Publication number
- DE19934424A1 DE19934424A1 DE19934424A DE19934424A DE19934424A1 DE 19934424 A1 DE19934424 A1 DE 19934424A1 DE 19934424 A DE19934424 A DE 19934424A DE 19934424 A DE19934424 A DE 19934424A DE 19934424 A1 DE19934424 A1 DE 19934424A1
- Authority
- DE
- Germany
- Prior art keywords
- stack
- registers
- register
- computer
- instructions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Abstract
Vorrichtung, Verfahren und Computerprogramm-Produkte werden beschrieben, die es einem Kompilierer ermöglichen, einen effizienten Code zum Zugriff auf Stapelregister auf einem Register-Stapel zu erzeugen. Erfindungsgemäß wird ein 3-Operanden-Befehl innerhalb der Zwischendarstellung eines Kompilierers zu einem oder mehreren Befehlen mit weniger als drei Operanden transformiert. Erfindungsgemäß wird die Befehls-Operanden-Adressierung von einem Zugriff auf einen mit einem Pseudo-Namen versehenen Register zu einem Zugriff auf ein Stapelregister durch eine Stapel-Offset-Adresse in einem Register-Stapel transformiert. Erfindungsgemäß wird ferner der Register-Stapel-Zustand bei jeden Befehl in Abhängigkeit von den Register-Stapel-Permutationen bestimmt und die Stapel-Offset-Adresse entsprechend für jeden nachfolgenden Zugriff auf ein Stapelregister abgebildet.
Description
Die Erfindung betrifft das Gebiet der Optimierung von Kompi
lierern für Computersysteme. Die Erfindung betrifft insbeson
dere ein neues und nützliches Optimierungsverfahren, eine Vor
richtung und ein Rechenprogrammprodukt zur Optimierung von Be
rechnungen unter Verwendung eines Register-Stapels anstatt be
zeichneter Register.
Viele moderne Computerarchitekturen benutzen Bezeichnungen
bzw. Namen zur Identifizierung spezifischer Register. Bei der
Optimierung von Kompilierern sind viele Techniken zur Optimie
rung der Verwendung derartig genannter Register entwickelt
worden. Einige Computerarchitekturen verwenden auch einen Re
gister-Stapel für manche Register. Intel®-Prozessoren verwen
den einen Register-Stapel für Gleitpunkt-Rechenoperationen.
Diese Register-Stapel-Organisation wird in dem Kapitel 7 des
Intel Architektur-Software Entwicklerhandbuches: "Basic Archi
tecture", Bestellnummer 243190, © 1996, 1997 beschrieben, das
hiermit in seiner Gesamtheit durch Bezugnahme beinhaltet ist.
Gleitpunkt-Optimierungstechniken für den Intel FPU werden in
Kapitel 5 des Intel Architekturoptimierungshandbuches,
Bestellnummer 242816-003 © 1996, 1997 vorgestellt, das hiermit
in seiner Gesamtheit durch Bezugnahme beinhaltet ist.
Die Entwicklungshauptrichtung bei der Kompilierer-Register Zu
ordnungtechnologie beschäftigt sich mit Registern, die fest
vergebene Namen aufweisen, und nicht mit Stapelregistern. Diese
bestehende Technologie beschäftigt sich nicht mit Stapelre
gistern, weil, wenn Operationen an dem Register-Stapel durch
geführt werden, die in den Stapelregistern gehaltenen Werte
sich innerhalb des Stapelregisters bewegen bzw. verschoben
werden.
Es ist daher vorteilhaft ein Verfahren, eine Vorrichtung oder
ein Programmprodukt zu schaffen, das die Registerzuordnungs-
Technologie nach dem Stand der Technik, die fest benannte Re
gister betrifft, auf Register anwendet, die als ein Register-
Stapel organisiert sind.
Die vorliegende Erfindung verbessert die Optimierung von Kom
pilierern, die Computerbefehle befolgen, welche zu einem Ziel-
Computer geleitet werden, der einen Register-Stapel enthält.
Die Erfindung beschreibt ein Verfahren, das Pseudoregister mit
festen bzw. fest vergebenen Namen für viele der Optimierungs
phasen des Kompilierers benutzt bzw. verwendet.
Die Befehle, die die Pseudoregister verwenden, werden dann in
einer späteren Phase modifiziert, damit man statt ihrer Sta
pelregister verwendet. Permutationen des Register-Stapels, die
durch die Operation von Befehlen verursacht werden, welche
Push bzw. Ablege- und Pop bzw. Abhebe-Stapeloperationen durch
führen, werden durch einen Register-Stapel-Zustand verfolgt,
der die Pseudoregister auf die Stapelregister abbildet bzw.
umsetzt. Auf die Stapelregister wird zugegriffen bzw. Bezug
genommen durch ihre Offsets bzw. Distanzadressen in dem Regi
ster-Stapel.
Ein Aspekt der Erfindung besteht in einem computergesteuerten
Verfahren zur effizienten Verwendung eines Register-Stapels
mit einer Vielzahl von Stapelregistern innerhalb einer Ziel-
Computerarchitektur. Das Verfahren erzeugt eine Vielzahl von
Befehlen ohne Ablege- oder Abhebe-Operationen, deren Operanden
eines oder mehrere Pseudoregister mit fest vergebenen Namen
sind anstatt einer Vielzahl von Stapelregistern, die tatsäch
lich in der Ziel-Computerarchitektur implementiert sind.
Das Verfahren transformiert ferner die Vielzahl von Befehlen
in eine Vielzahl von neuen Befehlen. Die Vielzahl von neuen
Befehlen weist ein Operanden-Format auf, das demjenigen der
Befehle der Ziel-Computerarchitektur entspricht. Beispielswei
se werden 3-Operanden-Befehle mit zwei Quellenoperanden und
einem Zieloperand in 2-Operanden-Befehle mit einer geteilten
bzw. gemeinsam benutzten Quelle und Ziel transformiert.
Dieses Verfahren enthält ferner den Schritt die Vielzahl von
neuen Befehlen zu analysieren, damit die Lebenszeit-
Information für eines oder mehrere Pseudoregister abgestimmt
wird. Das Verfahren eliminiert tote bzw. überflüssige Werte,
indem es die Lebenszeit-Information verwendet, damit eine oder
mehrere Abhebeoperationen der Vielzahl von neuen Befehlen hin
zugefügt werden.
Zusätzlich initialisiert das Verfahren eine Abbildungseinrich
tung von dem einen oder mehreren Pseudoregistern zu der Viel
zahl von Stapelregistern.
Das Verfahren führt ferner die folgenden rechnergesteuerten
Schritte für jeden der Vielzahl von neuen Befehlen durch: den
Schritt des Ersetzens innerhalb des neuen Befehls durch einen
oder mehrere Pseudoregister durch eines oder mehrere der Viel
zahl von Stapelregister unter Verwendung der Abbildungsein
richtung; und den Schritt des Updaten bzw. Erneuerns der Ab
bildungseinrichtung zur Reflexion bzw. Wiederspiegelung der
Stapeleffekte bei der Abbildung der neuen Befehle. Auf diese
Weise wendet das Verfahren bekannte Techniken zur Erzeugung
von Befehlen mit fest vergebenen Registernamen an, die zur Er
zeugung von Befehlen verwendet werden, welche die Vielzahl von
Stapelregistern benutzen.
Ein weiterer Aspekt der Erfindung besteht aus einer Vorrich
tung mit einer zentralen Datenbearbeitungseinheit (CPU) und
einem Speicher, der an die CPU zur effizienten Verwendung ei
nes Register-Stapels gekoppelt ist, welcher eine Vielzahl von
Stapelregistern mit einer Ziel-Computerarchitektur besitzt.
Die Vorrichtung enthält einen Befehlserzeugungsmechanismus,
der derart aufgebaut ist, daß er eine Vielzahl von Befehlen
ohne Ablege- oder Abhebeoperationen erzeugt, deren Operanden
eines oder mehrere Pseudoregister mit fest vergebenen Namen
anstatt der Vielzahl von Stapelregistern sind, die tatsächlich
in der Ziel-Computerarchitektur implementiert sind.
Die Vorrichtung enthält ferner einen Befehls-Transformations
mechanismus, der derart konfiguriert bzw. aufgebaut ist, daß
er die Vielzahl von Befehlen in eine Vielzahl von neuen Befeh
len transformiert. Die Vielzahl von neuen Befehlen besitzt ein
Operanden-Format, das demjenigen der Befehle der Ziel-
Computerarchitektur entspricht. Beispielsweise werden 3-
Operanden-Befehle mit 2-Quellen-Operanden und einem Zielope
rand in 2-Operanden-Befehle mit geteilter bzw. gemeinsam be
nutzter Quelle und Ziel transformiert.
Die Vorrichtung enthält zusätzlich einen Befehls-Analyse-
Mechanismus, der derart konfiguriert bzw. aufgebaut ist, daß
er die Vielzahl von neuen Befehlen analysiert, damit eine Le
benszeit-Information bzw. Lebensdauer-Information für eines
oder mehrere Pseudoregister abgestimmt wird.
Tote bzw. überflüssige Werte werden durch einen Tot-Wert-
Beseitigungsmechanismus eliminiert bzw. beseitigt, welcher
derart konfiguriert bzw. aufgebaut ist, daß er die Lebensdauer-
Information zur Einführung von einer oder mehreren Pop bzw.
Abhebeoperationen an die Vielzahl von neuen Informationen ver
wendet.
Die Vorrichtung enthält zusätzlich einen Initialisierungsme
chanismus, welcher derart konfiguriert bzw. aufgebaut ist, daß
er eine Abbildeeinrichtung von dem einen oder mehreren Pseudo
registern zu der Vielzahl von Stapelregistern initialisiert.
Die Vorrichtung enthält ferner einen Pseudoregister-
Umwandlungs bzw. Konversionsmechanismus, welcher derart konfi
guriert bzw. aufgebaut ist, daß er jeden aus der Vielzahl von
neuen Befehlen konvertiert. Der Pseudoregister-Konversions-
Mechanismus enthält ferner: einen Operand-Ersetzungs
mechanismus, welcher derart aufgebaut bzw. konfiguriert ist,
daß er die Abbildungseinrichtung zur Ersetzung des einen oder
mehrerer Pseudoregister durch eines oder mehrere der Vielzahl
von Stapelregistern innerhalb des neuen Befehls verwendet so
wie einen Einstellungsmechanismus aufweist, welcher derart
aufgebaut bzw. konfiguriert ist, daß er die Abbildungseinrich
tung erneuert bzw. auf den neuesten Stand bringt, so daß die
Stapeleffekte bei der Abbildung des neuen Befehls wiederge
spiegelt werden. Auf diese Weise beinhaltet die Vorrichtung
bekannte Techniken, die zur Erzeugung von Befehlen mit fest
vergebenen Registernamen verwendet werden zur Erzeugung von
Befehlen, die die Vielzahl von Stapelregistern benutzen.
Ein weiterer Aspekt der Erfindung besteht in einem Computer-
Programm-Produkt, das ein computer bzw. rechnerverwendbares
Speichermedium enthält, das einen darin verkörperten computer
lesbaren Code besitzt. Wenn der computerlesbare Code auf einem
Computer ausgeführt wird, veranlasst der Code den Computer da
zu, einen Register-Stapel effizient zu verwenden bzw. einzu
setzen, der eine Vielzahl von Stapelregistern innerhalb einer
Ziel-Computerarchitektur besitzt. Bei Ausführung auf einem
Computer veranlasst der computerlesbare Code den Computer da
zu, einen Befehls-Transformations-Mechanimus, einen Instruktions-
Analyse-Mechanismus, einen Tot-Wert-Beseitigungs-
Mechanismus, einen Initiallisierungsmechanismus, einen Pseudo
register-Konversionsmechanismus, einen Operanden-Ersetzungs
mechanismus und einen Einstellungsmechanismus auszuführen. Je
der dieser Mechanismen besitzt dieselben Funktionen wie ent
sprechende Mechanismen für die zuvor beschriebene Vorrichtung.
Ein weiterer Aspekt der Erfindung besteht in einem computer
gesteuerten Verfahren zur Optimierung eines Zielprogramms für
eine Ziel-Computerarchitektur. Die Ziel-Computerarchitektur
enthält einen Register-Stapel, der eine Vielzahl von Stapelre
gistern umfasst. Das Verfahren enthält den Schritt der Zuwei
sung von einem oder mehreren Pseudoregistern zu der Vielzahl
von Stapelregistern. Ein weiterer Schritt besteht darin, daß
ein Register-Stapel-Zustand beibehalten wird, der die zugewie
senen Pseudoregister auf die Vielzahl von Stapelregistern un
ter Verwendung einer Vielzahl von Stapel-Offsets bzw. Stapel-
Distanzadressen abbildet bzw. umleitet. Der Register-Stapel-
Zustand reagiert auf Veränderungen des Register-Stapels. Das
Verfahren wandelt ferner einen Befehl um, der auf eines der
zugewiesenen Pseudoregister zur Benutzung eines der Vielzahl
von Stapel-Offsetadressen verweist. Das Konvertieren bzw. Um
wandeln des Befehls zur Benutzung von einer oder mehreren der
Vielzahl von Stapel-Offsetadressen veranlasst den Befehl dazu
eines der Vielzahl von Stapelregistern entsprechend dem Regi
ster-Stapel-Zustand zu spezifizieren.
Ein weiterer Aspekt der Erfindung besteht in einer Vorrichtung
mit einer zentralen Datenverarbeitungseinheit (CPU) und einem
Speicher, der an die CPU zur Optimierung eines Zielprogramms
für eine Ziel-Computerarchitektur gekoppelt ist. Die Ziel-
Computerarchitektur enthält einen Register-Stapel, der eine
Vielzahl von Stapelregistern besitzt. Die Vorrichtung enthält
einen Register-Zuweisungsmechanismus, der zur Zuweisung von
einem oder mehreren Pseudoregistern zu der Vielzahl von Sta
pelregistern konfiguriert bzw. ausgelegt ist. Zusätzlich ent
hält die Vorrichtung einen Beibehaltungsmechanismus, der zur
Beibehaltung bzw. Aufrechterhaltung eines Register-Stapel-
Zustands konfiguriert bzw. ausgelegt ist. Der Register-Stapel-
Zustand bildet die zugewiesenen Pseudoregister auf die Viel
zahl von Stapelregistern ab, die eine Vielzahl von Stapel-
Offsetadressen verwenden. Der Register-Stapel-Zustand reagiert
auf Veränderungen des Register-Stapels.
Die Vorrichtung enthält ferner einen Befehls-Referenz-
Konversionsmechanismus, welcher derart ausgelegt bzw. konfigu
riert ist, daß er einen Befehl, der auf eines der zugewiesenen
Pseudoregister verweist zum Gebrauch einer der Vielzahl von
Stapel-Offsetadressen konvertiert. Der konvertierte Befehls-
Operand spezifiziert eines der Vielzahl von Stapelregistern
entsprechend dem Register-Stapel-Zustand.
Ein weiterer Aspekt der Erfindung besteht in einem Computer-
Programm-Produkt, das ein computerverwendbares Speichermedium
enthält, welches einen darin enthaltenen computerlesbaren Code
besitzt. Wenn der computerlesbare Code auf einem Computer aus
geführt wird, dann veranlasst er den Computer dazu, ein Ziel
programm für eine Ziel-Computerarchitektur zu optimieren, die
einen Register-Stapel enthält, welcher eine Vielzahl von Sta
pelregistern besitzt. Wenn der computerlesbare Code auf einem
Computer ausgeführt wird, so veranlasst er einen Computer da
zu, einen Register-Zuweisungsmechanismus, einen Beibehaltungs
mechanismus und einen Befehls-Referenz-Konversionsmechanismus
durchzuführen. Jeder dieser Mechanismen besitzt dieselben
Funktionen wie die entsprechenden Mechanismen für die zuvor
beschriebene Vorrichtung.
Ein weiterer Aspekt der Erfindung besteht in einem computerge
steuerten Verfahren zur effizienten Verwendung eines Register-
Stapels, der eine Vielzahl von Stapelregistern mit einer Ziel-
Computerarchitektur besitzt. Das Verfahren enthält ferner den
Schritt der Transformation von einem 3-Operanden-Befehl zu ei
nem oder mehreren Befehlen mit weniger als 3 Operanden. Das
Verfahren analysiert ferner den einen oder mehrere Befehle mit
weniger als 3 Operanden zur Bestimmung der Lebensdauerinforma
tion von einem oder mehreren Pseudoregistern. Zusätzlich ent
hält das Verfahren den Schritt des Einfügens einer Abhebe bzw.
Pop-Operation in einen oder mehrere Befehle mit weniger als 3
Operanden in Abhängigkeit von der Lebensdauerinformation. Die
Operanden-Adressen werden von den zugewiesenen Pseudoregistern
zu Offsets bzw. Distanzadressen in dem Register-Stapel zur
Adressierung der Vielzahl von Stapelregistern transformiert.
Ein weiterer Aspekt der Erfindung besteht in einer Vorrichtung
mit einer zentralen Datenverarbeitungseinheit (CPU) und einem
Speicher, der an die CPU gekoppelt ist zur Kompilierung eines
Zielprogramms für eine Ziel-Computerarchitektur. Die Ziel-
Computerarchitektur verwendet einen Register-Stapel, der eine
Vielzahl von Stapelregistern besitzt. Die Vorrichtung enthält
einen Befehls-Transformationsmechanismus, der zur Transforma
tion eines 3-Operanden-Befehls auf einen oder mehrere Befehle
mit weniger als 3 Operanden konfiguriert bzw. ausgelegt ist.
Die Vorrichtung enthält ferner einen Adressen-Transformations
mechanismus, der zur Transformation der Operanden-Adressen,
welche in dem einen oder mehreren Befehlen bzw. Instruktionen
mit weniger als 3 Operanden enthalten sind, von einem oder
mehreren Pseudoregistern zu Offsets bzw. Offsetadressen in dem
Register-Stapel zur Adressierung der Vielzahl von Stapelregi
stern ausgelegt ist.
Ein weiterer Aspekt der Erfindung besteht in einem Computer-
Programm-Produkt, das ein rechnerverwendbares Speichermedium
enthält, das einen darin enthaltenen computerlesbaren Code be
sitzt. Wenn der computerlesbare Code auf einem Computer ausge
führt wird, veranlasst er den Computer dazu, ein Zielprogramm
für eine Ziel-Computerarchitektur zu kompilieren. Die Ziel-
Computerarchitektur verwendet einen Register-Stapel, der eine
Vielzahl von Stapelregistern besitzt. Wenn der computerlesbare
Code auf einem Computer ausgeführt wird, veranlasst er einen
Computer dazu, einen Befehls-Transformationsmechanismus und
einen Adressen-Transformationsmechanismus auszuführen. Jeder
dieser Mechanismen besitzt dieselben Funktionen wie entspre
chende Mechanismen für die zuvor beschriebene Vorrichtung.
Eine Diskussion einer lebensvariablen Analyse kann in "Compi
lers: Pinciples, Techniques and Tools by Alfred V. Aho, Ravi
Sethi und Jeffrey D. Ullman, Addison-Wesley Veröffentlichung
Co. 1988, ISBN 0-201-10088-6, auf den Seiten 608-633 gefunden
werden, die hiermit in ihrer Gesamtheit durch Bezugnahme bein
haltet sind.
Die oben genannten und viele weiteren Aspekte der vorliegenden
Erfindung werden für den Fachmann beim Durchlesen der folgen
den detaillierten Beschreibung der bevorzugten Ausführungsfor
men deutlich, die in den verschiedenen Zeichnungen dargestellt
sind. Es zeigen:
Fig. 1 ein Computersystem, das zur Verwendung der Er
findung entsprechend einer bevorzugten Ausfüh
rungsform fähig ist;
Fig. 2 einen Kompilierer entsprechend einer bevor
zugten Ausführungsform;
Fig. 3 einen Überblick über ein Stapelregister-
Ersetzungs-Prozess gemäß einer bevorzugten Aus
führungsform;
Fig. 4A eine Übersicht einer IR-Transformationsprozesses
für einen 3-Operanden-Befehl gemäß einer bevor
zugten Ausführungsform;
Fig. 4B einen IR-Transformationsprozeß für einen 3-
Operanden-Befehl gemäß einer bevorzugten Ausfüh
rungsform im Detail;
Fig. 5A einen Prozeß zur Transformation von Befehlszu
griffen von Pseudoregistern auf Stapelregister
gemäß einer bevorzugten Ausführungsform;
Fig. 5B ein Prozeß, der aktive Pseudoregister, die durch
ein CFG repräsentiert werden, optimiert und die
aktiven Pseudoregister bei Eintritt zu und Aus
tritt aus einem Basisblock gemäß einer bevorzug
ten Ausführungsform bestimmt;
Fig. 5C eine Ansicht des Prozesses zur Entfernung von
nicht aktiven bzw. toten Stapelregistern von dem
Register-Stapel gemäß einer bevorzugten Ausfüh
rungsform;
Fig. 5D eine Ansicht eines Prozesses zur Abbildung bzw.
Umlenkung von Pseudoregistern auf Stapelregister
gemäß einer bevorzugten Ausführungsform;
Fig. 6 einen Stapel-Stabilisierungsprozeß, der zur Ent
fernung von nicht aktiven Pseudoregistern von
einem Basisblock entsprechend einer bevorzugten
Ausführungsform verwendet wird;
Fig. 7 einen detaillierten Prozeß, der zur Abbildung
von Pseudoregistern auf Register in einem Sta
pelregister gemäß einer bevorzugten Ausführungs
form verwendet wird;
Fig. 8A eine Ansicht eines Normalisierungsprozesses für
einen Basis-Block-Register-Stapel gemäß einer
bevorzugten Ausführungsform;
Fig. 8B einen Normalisierungsbefehl-Einfügeprozeß gemäß
einer bevorzugten Ausführungsform im Detail;
Fig. 9A einen Abschnitt einer nicht-normalisierten CFG,
der gemäß einer bevorzugten Ausführungsform be
trieben wird; und
Fig. 9B ein Ablaufdiagramm für eine normalisierte Steue
rung, die durch Anwenden einer bevorzugten Aus
führungsform bei der CFG von Fig. 9A resul
tiert.
Die Erfindung verwendet einen Computer. Einige der Bauelemente
eines Computers, der durch das allgemeine Bezugszeichen 100
angezeigt ist, der zur Unterstützung der Erfindung, wie in
Fig. 1 konfiguriert ist, bei der ein Prozessor 101 dargestellt
ist, umfassen eine zentrale Datenverarbeitungseinheit (CPU)
103, einen Speicherabschnitt 105 und eine Eingabe/Ausgabe
(I/O)-Abschnitt 107. Der I/O-Abschnitt 107 ist an eine Tasta
tur 109, einer Anzeigeeinheit 111, eine Diskettenspeicherein
heit 113 und eine CD-ROM-Laufwerkeinheit 115 angeschlossen.
Die CD-ROM-Laufwerkeinheit 115 kann ein CD-ROM-
Datenträgermedium 117 auslesen, das typischerweise ein Pro
gramm und Daten 119 enthält. Der Speicherabschnitt 105 enthält
ein ausführendes Programm 121, das den Computer 100 zur Durch
führung der erfindungsgemäßen Verfahrensschritte veranlaßt.
Der Computer kann auch einen Register-Stapel 123 enthalten,
der eine Anzahl von Stapelregistern umfaßt, die mittels Sta
pel-Offsetadressen bzw. Distanzadressen adressierbar sind. Bei
einer bevorzugten Ausführungsform arbeitet der Register-Stapel
123 entsprechend der Architektur der Gleit-Komma-Einheit von
Intel. Die Diskettenspeichereinheit 113 und die CD-ROM Lauf
werkeinheit 115 weisen zusammen mit dem CD-ROM-Speichermedium
117 einen Dateispeichermechanismus auf. Ein derartiges Compu
tersystem ist in der Lage, Anwendungen durchzuführen, die die
Erfindung verkörpern. Für einen Fachmann ist ersichtlich, daß
das in Fig. 1 dargestellte Computersystem, Einrichtungen ent
hält, die nicht für jede Ausführungsform der Erfindung benö
tigt werden. Insbesondere muß der Register-Stapel 123 nicht
innerhalb des gleichen Computers enthalten sein, der das aus
führende Programm 121 enthält.
Fig. 2 stellt eine Kompilierer-Archtitektur mit dem allgemei
nen Bezugszeichen 200 dar, die die vorliegende Erfindung an
wendet. Ein Kompilierer bzw. "Compiler", der entsprechend der
Kompilierer-Architektur 200 implementiert ist, bearbeitet eine
Quelleninformation 201 eines Zielprogramms durch einen Kompi
lierer-Vorrechner-Segment 203. Das Kompilierer-Vorrechner-
Segment 203 verarbeitet die Syntax und die Semantik der Quel
leninformation 201 des Zielprogramms entsprechend den Regeln
der Programmiersprache, die für die Quelleninformation 201 des
Zielprogramms anwendbar ist. Das Kompilierer-Vorrechner-
Segment 203 erzeugt mindestens eine Version einer "Zwischen"-
Code-Darstellung 205 der Quelleninformation 201 des Zielpro
gramms. Die Zwischendarstellung (IR: Intermediate Representa
tion) enthält im allgemeinen Datenstrukturen, die entweder
Steuerablaufdiagramme (CFG control flow graphs) darstellen
oder zu deren Erzeugung verwendbar sind. Ein CFG wird verwen
det, um den Steuerfluß bzw. Steuerablauf zwischen den Basis
blöcken des Programms darzustellen. Basis- bzw. Grundblöcke
enthalten keinerlei Steuerablaufstrukturen, Funktionen, Proze
duren oder sonstige Konstrukte, die den Ausführungsablauf in
nerhalb des Basisblocks ändern. Basisblöcke weisen lediglich
einen Eintrittspunkt und einen Austrittspunkt auf.
Die "Zwischen"-Code-Darstellung 205 wird dann durch ein Zwi
schen-Darstellungsoptimier-Segment 207 optimiert. Das Zwi
schen-Darstellungsoptimier-Segment 207 arbeitet auf der Grund
lage der "Zwischen"-Code-Darstellung 205 der Quelleninformati
on 201 des Zielprogramms und paßt diese an, damit die Ausfüh
rung eines Programms vielseitig optimiert wird, wie bereits
beim Stand der Technik bekannt ist. Das Zwischen-Darstellungs
optimier-Segment 207 erzeugt eine optimierte Zwischendarstel
lung 209. Ein Codeerzeugungssegment 211, (das einige Aspekte
der Erfindung enthält), verarbeitet die optimierte Zwischen
darstellung 209 und führt einige Optimierungen auf niedriger
Ebene durch, weist physikalische Register zu und erzeugt einen
Assembler-Quellencode und/oder Objekt-Code-Module 213 ausge
hend von der optimierten Zwischendarstellung 209. Der Objekt-
Code weist binäre Computerbefehle (opcodes) in einem Objektmo
dul auf. Der Assembler-Quellencode ist eine Reihe von symboli
schen Anweisungen in einer Assembler-Quellensprache. Sowohl
der Assembler-Quellencode als auch der Objekt-Code werden auf
eine bestimmte Computerarchitektur ausgerichtet (beispielswei
se die Architektur eines Intel-Pentium-Prozessors).
Wie bereits oben erwähnt, führt das Code-Erzeugungssegment 211
Optimierungen niedriger Ebene durch und erzeugt entweder einen
Objekt-Code (oft in der Form von Objektmodulen) oder einen As
sembler-Quellencode (oder beides). Die optimierte Zwischendar
stellung 209 des Programms adressiert bzw. verweist im allge
meinen auf virtuelle Register mit fest vergebenen Namen. Dies
bedeutet, daß das Zwischendarstellungs-Optimiersegment 207 an
nimmt, daß der Zielcomputer eine unbegrenzte Anzahl von be
nannten virtuellen Registern enthält. Während der Operation
bzw. des Betriebes des Codeerzeugungssegments 211 werden diese
virtuellen Register den physikalischen Registern des Zielcom
puters zugewiesen bzw. zugeordnet. Dieses Ressourcen-
Management wird in dem Codeerzeugungssegment 211 in einer Re
gisterzuweisungsphase oder einem Prozeß durchgeführt. Ein
Aspekt des Registerzuweisungsprozesses besteht darin, daß die
Inhalte der physikalischen Register oft zu dem Speicher an
verschiedenen Punkten während der Ausführung des Programms
"überlaufen", so daß die begrenzte Anzahl der physikalischen
Register zum Halten von Werten von dringender Relevanz für das
Programm an diesen verschiedenen Punkten verwendet werden kön
nen. Diese Werte, die zu dem Speicher überlaufen bzw. übertre
ten werden oft zu den physikalischen Registern zurückgespei
chert, wenn das Programm zu unterschiedlichen Ausführungspunk
ten fortschreitet. Der Registerzuweisungsprozeß bestimmt, wel
che physikalischen Register in dem Basisblock verwendet wer
den.
Eine allgemeine Diskussion von optimierten Kompilierern und
verwandten Techniken, findet man in "Compilers: Principles,
Techniques and Tools" von Alfred V. Aho, Ravi Sethi und
Jeffrey D. Ullman, Addison-Wesley, Veröffentlichungsnummer
1988, ISBN 0-201-10088-6, insbesondere in den Kapiteln 8, 9
und 10 auf den Seiten 463 bis 723, die hiermit in ihrer Ge
samtheit durch Bezugnahme beinhaltet sind, (auf die im weite
ren unter Aho Bezug genommen wird). Zusätzliche Information in
Bezug auf Registerzuweisung und auf Überlauf-Werte zu einem
Speicher findet man in "Register Allocation & Spilling via
Graph Coloring" von G. J. Chaitin, 1982, Proceedings of the
SIGPLAN'82 Symposium für Kompilierer-Aufbau vom Juni 1982 auf
den Seiten 98 bis 105, die hiermit in ihrer Gesamtheit durch
Bezugnahme beinhaltet sind.
Bei einigen Maschinen sind die physikalischen Register als ein
Stapel organisiert, so daß auf diese Register nicht mit fest
vergebenen Namen zugegriffen werden kann.
Ein Aspekt der Erfindung besteht darin, einen Satz von Pseudo
registern mit festen bzw. fest vergebenen Namen bis zu und
während der Register-Zuweisungsphase zu verwenden, so daß die
se Pseudoregister so behandelt werden, als ob sie physikali
sche Register wären. Auf diese Weise verwenden die Zwischen
darstellungsoptimierungsphasen des Kompilierers bestehende Me
chanismen zur Optimierung der Pseudoregister unabhängig davon,
daß die Pseudoregister später durch Stapelregister ersetzt
werden. Auf diese Weise werden traditionelle bzw. herkömmliche
Register Zuweisungs- und Überlaufoperationen (und viele andere
Codeerzeugungs- und Optimierungsoperationen) für die Pseudore
gister angewendet. Die Anzahl der Pseudoregister ist nicht hö
her als die Anzahl der Stapelregister. Das tatsächliche Erset
zen der Pseudoregister durch die Stapelregister wird erreicht
durch Aspekte der Erfindung, die aufgerufen werden, nachdem
der Kompilierer die Registerzuweisungen durchführt.
Eine bevorzugte Ausführungsform ist auf einen Zielcomputer ge
richtet, der eine Intel FPU-Architektur (oder eine äquivalente
Architektur) verwendet. Die Intel FPU-Architektur verwendet
Computer-Gleit-Komma-Befehle, die nicht mehr als zwei Operan
den und einen Gleit-Register-Stapel verwenden. Für den Fach
mann wird aus den beigefügten Figuren und dem begleitenden
Text deutlich, daß diese Erfindung zur Optimierung des Zu
griffs auf Register innerhalb eines beliebigen Register-
Stapels verwendet werden kann und nicht auf Gleit-Komma-
Architekturen beschränkt ist.
Die folgende Beschreibung liefert eine Übersicht über die er
findungsgemäße Arbeitsweise bzw. Operation. Die nachfolgende
Beschreibung geht auf die Details bei der Operation ein. Diese
Beschreibungen sind auf eine Intel kompatible FPU-Architektur
gerichtet. Für den Fachmann ist es offensichtlich, daß die of
fenbarte Erfindung für weitere auf Register-Stapel basierende
Architekturen angewendet werden kann.
Fig. 3 liefert eine Übersicht über einen Stapelregister-
Ersetzungsprozeß, der mit dem allgemeinen Bezugszeichen 300
angegeben ist, für das Zuweisen von Pseudoregistern zu Stapel-
Registern in einem Register-Stapel. Der Stapelregister
ersetzungsprozeß 300 wird bei dem Kompilierer eingesetzt nach
dem die virtuellen Register den Pseudoregistern zugewiesen
worden sind.
Der Stapelregister-Ersetzungsprozeß 300 beginnt mit einem
"Start"-Schritt 301 und fährt mit einer Prozedur 303 zur "Er
zeugung von Eingangsdaten" fort. Die "Eingangsdaten-
Erzeugungs"-Prozedur 303 erzeugt einen Steuerablaufgraphen
(CFG) des relevanten Abschnitts des zu kompilierenden Pro
gramms, Basisblock-Darstellungen in Bezug auf den CFG und eine
Zwischendarstellung der kompilierten Befehle bzw. Instruktio
nen. Einige oder alle der Eingangsdaten können durch vorherige
Abschnitte des Kompilierers erzeugt werden. Als nächstes wird
die Zwischendarstellung (IR) durch eine "Befehlstransforma
tions"-Prozedur 305 modifiziert, die die Zwischendarstellung
IR aus der 3-Operanden-Form (im allgemeinen mit 2-Quellen-
Operanden und einem Ziel-Operand) in eine Form mit weniger als
drei Operanden transformiert, die den Befehlsformaten der
Intel-Architektur entspricht. Die "Befehlstransformations"-
Prozedur 305 wird nachfolgend unter Bezugnahme auf die Fig. 4A
beschrieben. Als nächstes konvertiert die Prozedur 307 "zur
Transformation einer absoluten Registerreferenz bzw. absoluten
Registeradressierung auf eine relative Stapeladressierung" die
Pseudoregister-Adressierung, welche in dem Befehls-Operand der
Zwischendarstellung verwendet wird auf eine relative Adressie
rung für den Register-Stapel. Die Prozedur 307 zur Transforma
tion der absoluten Registeradressierung auf die relative Sta
peladressierung wird nachfolgend unter Bezugnahme auf die Fig. 5A
beschrieben. Der Stapelregister-Ersetzungsprozeß 300
wird schließlich mit einem "Ende"-Beendungsschritt 309 been
det.
Fig. 4A stellt einen Befehlstransformationsprozeß für eine
Zwischendarstellung (IR) dar, der im allgemeinen mit dem Be
zugszeichen 400 angegeben wird, wobei der Prozeß zur Transfor
mation der 3-Operanden-Form der Zwischendarstellung zu Befeh
len mit dem Intel-Format dient, welches weniger Operanden ent
hält. Der Prozeß 400 wird aufgerufen durch die "Befehlstrans
formations"-Prozedur 305, wie sie in Fig. 3 gezeigt ist. Der
Prozeß 400 startet mit einem "Start"-Beginn-Schritt 401 und
fährt mit einer Prozedur 403 "zum Besuchen eines jeden Basis
blocks" fort. Die Prozedur 403 "zum Besuchen eines jeden Ba
sisblocks" besucht (wiederholt) jeden Basisblock in der CFG
bzw. läßt jeden Basisblock ablaufen. Jeder der wiederholten
bzw. besuchten Basisblöcke wird in einer Prozedur 405 "zur
Transformation von drei Operanden" verarbeitet, die anschlie
ßend unter Bezugnahme auf die Fig. 4B beschrieben wird. Nach
dem jeder Basisblock besucht bzw. aufgerufen worden ist, endet
der Prozeß 400 mit einem "Ende"-"Schlußschritt" 407.
Die Befehle der Zwischendarstellung sind im allgemeinen in ei
nem aus drei Operanden bestehenden Format mit 2-Quellen-
Operanden und einem Ziel-Operand aufgebaut, die voneinander
verschieden sein können. Für eine Intel kompatible Gleit-
Komma-Architektur wird die Zwischendarstellung IR in jedem Ba
sis-Block modifiziert, wie in Bezug auf die Fig. 4B beschrie
ben ist, um einen beliebigen aus drei Operanden bestehenden
Gleit-Komma-Zwischendarstellungsbefehl zu einem Zwischendar
stellungsbefehl mit dem Befehlsformat von Intel zu transfor
mieren, das weniger als drei Operanden oder eine Sequenz von
Zwischendarstellungsbefehlen besitzt, die weniger als drei
Operanden aufweisen. Ein 3-Operanden-Befehl ist ein Befehl,
der zwei Quellen spezifiziert, die unabhängig von einem Ziel
sind (beispielsweise op R1, R2 → R3, wobei, falls op eine Sub
traktion ist, R2 von R1 subtrahiert wird und das Ergebnis in
R3 abgespeichert wird). Ein 2-Operanden-Befehl im Intel-Format
verwendet zwei Quellen und beläßt das Ergebnis in einem der
Quellenregister, wobei dessen ursprünglicher Wert gelöscht
bzw. zerstört wird (beispielsweise, op R1, R2; wobei, falls op
eine Subtraktion ist, R2 von R1 abgezogen wird und das Ergeb
nis in R1 abgelegt wird). Einige Befehle (beispielsweise der
Gleit-Quadratwurzelbefehl von Intel) arbeiten mit einer einzi
gen Quelle und überschreiben diese Quelle mit dem Ergebnis
(beispielsweise op R1). Ein IR-3-Operanden-Befehl kann in ein
Intel-Format transformiert werden, indem man ein Move-Befehl
bzw. Verschiebebefehl und einen 2-Operanden-Befehl (beispiels
weise, op R1, R2 → R3 transformiert zu: move R3, R1; op R3,
R2). Die Fig. 4B zeigt wie diese Transformationen erreicht
bzw. ausgeführt werden.
Die Fig. 4B stellt einen IR-Befehlstransformationsprozeß dar,
der im allgemeinen als Bezugszeichen 420 angegeben wird, wobei
der Prozeß durch die Prozedur 405 "zur Transformation von drei
Operanden" gemäß Fig. 4A aufgerufen wird. Der Prozeß 420 be
ginnt mit einem "Start"-Schritt 421 und setzt sich mit einer
Prozedur 423 "zur Iteration von IR-Befehlen" fort. Die Proze
dur 423 "zur Iteration von IR-Befehlen" iteriert bzw. wieder
holt jeden Befehl in jedem Basisblock. Wenn alle Befehle in
dem Basisblock ausgeführt worden sind, wird der Prozeß 420 in
dem "Ende"-Schritt 425 beendet.
Jeder IR-Befehl in dem Basisblock (der Basisblock wurde durch
die Prozedur 403 "zum Besuch eines jeden Basisblocks" ite
riert) wird durch eine Prozedur 427 "zur Bestimmung von Be
fehlseigenschaften" geprüft, welche die Eigenschaften des IR-
Befehls liefert. Diese Eigenschaften umfassen den Typ des Be
fehls, die Anzahl der Operanden, die durch den IR-Befehl ver
wendet werden sowie die Position der Quellen und Ziel-
Operanden. Als nächstes untersucht eine Entscheidungsprozedur
428 für "einen relevanten Befehl" die Eigenschaften, welche
durch die Prozedur 427 "zur Bestimmung der Befehlseigenschaf
ten", bestimmt wurden, und falls der Befehlstyp angibt, daß
der IR-Befehl nicht Bezug nimmt auf eines der Pseudoregister
bzw. keines der Pseudoregister adressiert (d. h., wenn der IR-
Befehl nicht relevant ist) kehrt der Prozeß 420 zu der Proze
dur 423 "zur Iteration der IR-Befehle" zurück, um den nächsten
IR-Befehl auszuführen. Falls der IR-Befehl jedoch relevant ist
(d. h., wenn er eines der Pseudoregister adressiert) fährt der
Prozeß 420 mit der Prozedur 429 zur "Auswahl basierend auf Ei
genschaften" fort.
Die Prozedur 429 "Auswahl basierend auf Eigenschaften" unter
sucht den IR-Befehl-Operanden-Code und dessen Operanden, um
die mögliche IR-Instruktionskonversion zu bestimmen. Eine "In-
Ordnung"-Selektionsprozedur 431 bestimmt, ob der IR-Befehl
sein Ergebnis in dem ersten Operanden des Befehls abspeichert.
Falls diese Bedingung erfüllt ist, wird der Prozeß 420 mit ei
ner "Basis-Transformations"-Prozedur 432 fortgesetzt, die die
3-Operanden-Form des Befehls zu einem geeigneten Intel-Format
transformiert, das eine Form mit weniger als drei Operanden
aufweist. Der Prozeß 420 setzt dann die Iteration bei der Pro
zedur 423 "zur Iteration von IR-Befehlen" fort.
Eine "nicht-in-Ordnung, kommutative"-Selektionsprozedur 433
bestimmt, ob der IR-Befehl sein Ergebnis in dem zweiten Ope
randen des Befehls abspeichert und ob die Operation kommutativ
ist. Falls dies der Fall ist, fährt der Prozeß 420 mit einer
"Schalt-Operanden-Ordnungs"-Prozedur 435 fort, die die 3-
Operanden-Form des Befehls in ein geeignetes Intel-Format
transformiert, welches eine Form mit weniger als drei Operan
den aufweist, während die Ordnung bzw. die Reihenfolge der
Operanden in dem Befehl geschaltet bzw. verschoben wird. Der
Prozeß 420 fährt dann mit der Iteration bei der Prozedur 423
"zur Iteration von IR-Befehlen" fort.
Eine "nicht-in-Ordnung, nicht-kommutative, reversible Operan
den"-Selektionsprozedur 437 bestimmt, ob der IR-Befehl sein
Ergebnis in dem zweiten Operanden des Befehls abspeichert und
ob die Operation nicht kommutativ ist. Falls dies der Fall
ist, fährt der Prozeß 420 mit einer Prozedur 439 "zum Ersetzen
des Operationscodes durch einen umgekehrten bzw. reversen Ope
rationscode" fort, der die 3-Operanden-Form des Befehls zu der
geeigneten umgekehrten 3-Operanden-Form transformiert,(auch
beispielsweise wird "Subtraktion R1, R2 → R2" (um R2 von R1 zu
subtrahieren und das Ergebnis in R2 abzulegen) in "R-
Subtraktion R2, R1" transformiert). Der Prozeß 420 führt dann
die Iteration bei der Prozedur 423 "zur Iteration von IR-
Befehlen" fort.
Eine "Vorgabe"-Prozedur 441 wird verwendet, wenn die vorange
henden Fälle nicht eintreffen. Bei Eintritt dieses Umstandes
fährt der Prozeß 420 mit einer Prozedur 443 für "erweiterten
Befehl" fort, die eine geeignete Quelle zu dem Ziel kopiert
und dann die Operation auf den kopierten Wert anwendet. Der
Prozeß 420 führt dann die Iteration mit der Prozedur 423 "zur
Iteration von IR-Befehlen" fort.
Für Ziel-Computerarchitekturen, welche 2-Operanden-Befehle im
Intel-Format verwenden, transformiert der Prozeß 420 auf diese
Weise alle relevanten Instruktionen aus der IR-3-Operanden-
Form zu dem Intel-Format, das eine Form mit weniger als drei
Operanden besitzt. Für den Fachmann ist deutlich, wie IR-
Befehle zu Befehlen mit einem Einzel-Operanden transformierbar
sind, wie beispielsweise der FSQRT-Befehl, der bei einer
Intel-kompatiblen FPU verwendet wird.
Fig. 5A stellt einen Prozeß dar zur "Transformation von abso
luten Registeradressierungen zu relativen Stapeladressierun
gen", der durch das allgemeine Bezugszeichen 500 angegeben
wird, wobei der Prozeß zur Umwandlung von IR-Befehls-
Operanden, die ein Pseudoregister adressieren bzw. auf dieses
Bezug nehmen, zu IR-Befehls-Operanden dient, welche ein Sta
pelregister unter Verwendung einer Stapel-Offset-Adresse in
dem Register-Stapel adressieren bzw. auf dieses Bezug nehmen.
Der Prozeß 500 wird durch die Prozedur 307 "zur Transformation
einer absoluten Registeradressierung zu einer relativen Sta
peladressierung", wie sie in Fig. 3 gezeigt ist, aufgerufen.
Der Prozeß 500 beginnt mit einem "Start"-Schritt 501 und setzt
sich fort mit einer Prozedur 503 "zur Sammlung von Informatio
nen über Pseudoregister", welche Lebensdauerinformation über
den Gebrauch der Pseudoregister sammelt, wie sie nachfolgend
unter Bezugnahme auf die Fig. 5B beschrieben wird. Die Le
bensdauer-Information bestimmt, wann der Wert in einem Regi
ster tot bzw. überflüssig ist. Als nächstes prüft der Prozeß
500 die relevanten IR-Befehle (d. h. diejenigen Befehle, die
auf ein Pseudoregister zugreifen), um Befehle bzw. Instruktio
nen einzufügen oder zu modifizieren, welche, wenn sie ausge
führt werden, die toten bzw. überflüssigen Register von dem
Register-Stapel entfernen. Die Prozedur 505 "zur Entfernung
eines überflüssigen Registers von einem Stapel" wird nachfol
gend unter Bezugnahme auf die Fig. 5C beschrieben. Der Prozeß
500 fährt mit einer Prozedur 507 "zur Abbildung von Pseudore
gistern auf Stapelregister" fort, die Operanden, welche auf
Pseudoregister Bezug nehmen, durch Operanden ersetzt, die auf
Stapelregister in dem Register-Stapel Bezug nehmen. Die Proze
dur 507 "zur Abbildung von Pseudoregistern auf Stapelregister"
wird nachfolgend unter Bezugnahme auf die Fig. 5D beschrie
ben. Der Prozeß 500 wird mit einem "Ende"-Schritt 509 beendet.
Fig. 5B stellt einen sich ausbreitenden Pseudoregister-
Lebensdauerprozeß dar, der durch ein allgemeines Bezugszeichen
510 angegeben wird, wobei der Prozeß durch eine Prozedur 503
"zur Sammlung von Informationen über die Pseudoregister" auf
gerufen wird, wie sie in Fig. 5A gezeigt ist. Der Prozeß 510
vermehrt bzw. verlängert die Pseudoregister-Lebensdauer in dem
Programm, das durch den CFG und die zugehörigen Basisblöcke
dargestellt wird. Er ermittelt ferner Informationen darüber,
welche Pseudoregister bei Eintritt in und Austritt aus jedem
Basisblock aktiv sind und speichert diese Information ab. Die
se Information wird verwendet, um den Bereich zu bestimmen
bzw. festzulegen, über welchen der Wert in einem Register ak
tiv bzw. aktuell ist. Wenn ein Register nicht aktiv ist, wird
es als "tot" bezeichnet. Die Lebensdaueranalyse ist als Stand
der Technik bekannt und in Aho beschrieben.
Eine Prozedur 513 "zur Optimierung von Pseudoregistern in CFG"
bestimmt welche Pseudoregister bei dem Eintritt in jeden Ba
sisblock aktiv sind und speichert diese Information als In
put(block_id). Sie bestimmt ferner welche Pseudoregister an
dem Ausgang eines jeden Basisblocks aktiv sind und speichert
diese Information als Output (block_id). Der Prozeß 510 wird
mit einem Endeschritt 521 vollendet.
Fig. 5C stellt einen Prozeß "zur Entfernung von toten Regi
stern aus einem Stapel" dar und ist durch das allgemeine Be
zugszeichen 530 wiedergegeben, wobei der Prozeß zur Modifizie
rung von relevanten IR-Befehlen dient, so daß die Stapelregi
ster, welche zu den toten Pseudoregistern gehören, von dem Re
gister-Stapel abgehoben werden, wenn sie tot sind. Der Prozeß
530 wird von der Prozedur 505 "zur Entfernung toter Register
von dem Stapel", wie sie in Fig. 5A gezeigt ist, aufgerufen
und reagiert mit einem Startschritt 531. Der Prozeß 530 setzt
sich mit einer Prozedur 533 "zum Besuch eines jeden Basis
blocks" fort, welche jeden Basisblock in der CFG besucht bzw.
aufruft. Der Prozeß 530 gibt jeden Basisblock an eine Prozedur
535"zur Iteration eines jeden relevanten Befehls in dem Ba
sisblock" weiter, wobei die Prozedur jeden Befehl in dem Ba
sisblock wiederholt bzw. iteriert, der auf eines der Pseudore
gister zugreift. Sobald alle Instruktionen in dem Basisblock
iteriert worden sind, kehrt der Prozeß zu der Prozedur 533
"zum Besuch eines jeden Basisblocks" zurück, um den nächsten
Basisblock zu verarbeiten. Der durch die Prozedur 535 "zur
Iteration eines jeden relevanten Befehls in dem Basisblock"
iterierte bzw. wiederholte Befehl wird an eine Prozedur 536
"zur Stabilisierung des Stapels" weitergeleitet, die den IR-
Befehl zur Entfernung des toten Stapelregisters von dem Stapel
modifiziert bzw. verändert. Dies wird erreicht, indem man den
Operationscode durch eine Version ersetzt, welche eine Stapel-
Abhebung bzw. einen Stapel-Pop-Befehl zur Entfernung des toten
bzw. überflüssigen Wertes von dem Stapel durchführt. Für den
Fachmann ist deutlich, daß an diesem Punkt die IR-Befehle
nicht direkt auf den Register-Stapel zugreifen. Stattdessen
greifen die IR-Befehle auf die Pseudoregister zu, die auf die
Stapelregister in dem Register-Stapel umgeleitet bzw. auf die
se abgebildet werden. Die Prozedur 536 "zur Stabilisierung des
Stapels" wird im weiteren unter Bezugnahme auf die Fig. 6 be
schrieben. Nachdem alle Basisblöcke verarbeitet worden sind,
endet der Prozeß 530 mit einem Endeschritt 537. Für den Fach
mann ist klar, daß die Modifikation des IR-Befehles zur Beein
flussung des Register-Stapels an diesem Punkt durchgeführt
werden kann, selbst wenn die Operanden des Befehls Pseudoregi
ster und nicht Stapelregister darstellen.
Fig. 5D zeigt eine Transformations-Pseudoregister-
Adressierung für einen Register-Stapel-Adressierungsprozeß,
welcher durch das allgemeine Bezugszeichen 550 angegeben wird,
wobei der Prozeß die Operanden von relevanten Befehlen vom Ge
brauch von Pseudoregister-Referenzen zum Gebrauch von Regi
ster-Stapel-Offset-Referenzen konvertiert. Der Prozeß 550 nor
malisiert ferner den Register-Stapel zwischen Basisblöcken,
die durch die Ränder des CFG gebunden ist. Der Prozeß 550 wird
durch die Prozedur 507 "zur Abbildung von Pseudoregistern auf
Stapelregister", wie sie in Fig. 5A dargestellt ist, aufgeru
fen und beginnt mit einem Startschritt 551. Der Prozeß 550
setzt sich mit einer Prozedur 553 "zur Durchquerung eines CFG
von oben nach unten" fort, wobei die Prozedur CFG-Graphen von
dem Anfang des CFG bis zu dem Schluß des CFG durchläuft, wobei
jeder Basisblock eine "Abbildung-Stapelregister"-Prozedur 555
liefert. Die "Abbildungs-Stapelregister"-Prozedur 555 wandelt
die Operanden eines jeden relevanten Befehls in einen Regi
ster-Stapel-Offset anstatt in ein Pseudoregister um. Diese
"Abbildungs-Stapelregister"-Prozedur 555 ist ferner unter Be
zugnahme auf die Fig. 7 beschrieben.
Sobald die relevanten Befehle in jedem Basisblock konvertiert
worden sind, fährt der Prozeß 550 mit der Prozedur 557 "zum
Durchlauf eines CFG-Graphen von unten nach oben" fort, welche
den CFG-Graphen von unten nach oben durchläuft und eine Proze
dur 559 "zur Normalisierung von Basisblöcken" an jedem Rand
des CFG-Graphen und den Rändern zugehöriger Basisblöcke auf
ruft. Die Prozedur 559 "zur Normalisierung von Basisblöcken"
erreicht dies durch Einfügen von Befehlen, welche den Regi
ster-Stapel permutieren, in die geeigneten Basisblöcke (oder
in neu erzeugte Basisblöcke). Die Prozedur 559 "zur Normali
sierung von Basisblöcken" wird im folgenden unter Bezugnahme
auf die Fig. 8A und 8B beschrieben. Der Prozeß 550 wird mit
einem Endeschritt 561 nach dem Ende der Prozedur 557 "zum
Durchlaufen des CFG-Graphen von unten nach oben" beendet.
Wie zuvor diskutiert benutzt eine Intel kompatible Gleit-
Komma-Einheitsarchitektur Ein-Operanden-Befehle oder Zwei-
Operanden-Befehle zum Zugriff auf ein Stapelregister. Dies be
deutet, daß eine der Befehlsquellen die gleich ist wie das
Ziel eines Befehls. Auf diese Weise wird einer der Quellenwer
te bei der Ausführung des Befehls zerstört bzw. gelöscht.
Falls beide Quellenwerte bei der Ausführung des Befehls erhal
ten bleiben müssen, muß ein Wert auf ein temporäres bzw. -vor
übergehendes Register kopiert werden, indem er dann bei der
Ausführung des Befehls zerstört bzw. gelöscht werden kann. An
dere Computerarchitekturen weisen ähnliche Betriebseigenschaf
ten auf und werden in ähnlicher Weise behandelt.
Fig. 6 stellt einen Stapel-Stabilisierungsprozeß dar, der
durch das allgemeine Bezugszeichen 620 angezeigt wird, wobei
der Prozeß zur Modifizierung der IR-Befehle verwendet wird,
damit tote Pseudoregister von dem Register-Stapel entfernt
werden. Insbesondere ist ein Wert eines Pseudoregisters tot
bzw. überflüssig nach seiner letzten Verwendung.
Der Prozeß 620 beginnt mit einem Startschritt 621 und setzt
sich in einer Entscheidungsprozedur 623 für einen "toten Wert"
fort. Die Entscheidungsprozedur 623 für den "toten Wert" be
stimmt, ob ein Pseudoregister, das durch den Befehl adressiert
wird, nach dem Befehl überflüssig bzw. tot ist. Falls dies der
Fall ist, wird der Prozeß 620 mit einer Entscheidungsprozedur
626 für "einen Befehl mit Abhebe-Befehlsvariante" fortgesetzt,
wobei die Prozedur bestimmt, ob der Befehl eine Variante oder
Sequenz aufweist, die den toten Wert abhebt bzw. einen Pop-
Befehl durchführt. Falls das Pseudoregister, das durch den Be
fehl adressiert wird bzw. auf das Bezug genommen wird, nach
dem Befehl nicht tot bzw. überflüssig ist, wird der Prozeß 620
durch einen Endeschritt 627 beendet.
Falls die Entscheidungsprozedur 626 für einen "Befehl mit ei
ner Abhebe-Befehlsvariante" bestimmt, daß der Befehl einen ei
ne Abhebe-Befehlsvariante ist, fährt der Prozeß 620 mit einer
Prozedur 629 fort zur Veränderung der Befehlsvariante", wobei
die Prozedur die Nicht-Abhebe-Befehlsvariante durch eine Abhe
be-Befehlsvariante ersetzt. Falls eine Abhebebefehls-Variante
nicht existiert, fährt der Prozeß 620 mit einer Prozedur 628
"zum Einfügen einer Abhebebefehlssequenz" fort, die eine Code
sequenz einführt bzw. einfügt, bei der das tote Pseudoregister
explizit abgehoben wird bzw. einem Abhebebefehl unterzogen
wird. Der Prozeß 620 endet mit dem Endeschritt 627.
Im weiteren folgt eine Beschreibung des Gebrauchs des Regi
ster-Stapel-Zustands bzw. der Register-Stapel-
Zustandseinrichtung. Der Register-Stapel-Zustand schafft die
Abbildung bzw. die Umleitung zwischen den Pseudoregistern und
den Stapelregistern. Da die Stapelregister als ein Register-
Stapel organisiert sind, verändert sich der Stapel-Offset für
das Stapelregister, welches einen besonderen Wert enthält,
wenn andere Werte auf den Register-Stapel abgelegt werden oder
von diesem abgehoben werden. Der Register-Stapel-Zustand bil
det die Pseudoregister auf die Stapelregister ab. Ein Aspekt
der Erfindung besteht in der Beibehaltung des Register-Stapel-
Zustands durch Verfolgen der Position von Werten in dem Regi
ster-Stapel, wenn sich der Register-Stapel verändert. Man be
trachtet den Fall, daß X = (a+b).(a+d) einen Teil eines Basis
blocks bildet. Der IR-Code von der Register-Zuweisungseinrich
tung:
wobei "prn" Pseudoregister "n" angibt.
Die Tabelle 2 stellt dar, wie die Pseudoregister den StapelRe
gistern zugewiesen werden unter Verwendung des Register-
Stapel-Zustands.
Wobei "Fn" das Stapelregister "n" angibt; "prn" wiederum das
Pseudoregister "n" angibt; die rechten vier Spalten der Tabel
le 2 angeben, welches Pseudoregister jedem Stapelregister zu
gewiesen wird; "pr3" ein aktives Pseudoregister ist, welches
bei nachfolgenden Operationen verwendet wird. Es sei ange
merkt, daß "pr2" als tot bzw. überflüssig nach der Abspeiche
rung in "X" angesehen wird und so von dem Register-Stapel ab
gehoben bzw. einem Pop-Befehl unterzogen wird. Der Register-
Stapel-Zustand wählt einen Zusammenhang zwischen jedem Pseudo
register mit einem Offset- und einem Stapelregister an der
Spitze des Register-Stapels aufrecht. Der Register-Stapel-
Zustand wird für jeden Befehl beibehalten bzw. aufrechterhal
ten. Der Operand eines jeden Befehls, der ein Pseudoregister
verwendet, wird verändert, damit das Stapelregister adressiert
wird, das auf dem Pseudoregister abgebildet wird, indem man
dem Befehl zum Gebrauch eines Offsets bzw. einer Offset-
Adresse von der Spitze des Register-Stapels modifiziert. Jeder
Offset bzw. jede Offset-Adresse, die in dem Register-Stapel-
Zustand bzw. der Register-Stapel-Zustands-Speichereinrichtung
abgespeichert ist, verändert sich, wenn der Register-Stapel
durch die Befehle permutiert wird.
Fig. 7 zeigt den Pseudoregister-Abbildungsprozeß, der durch
das allgemeine Bezugszeichen 700 angezeigt wird zur Abbildung
von Pseudoregistern auf Stapelregistern innerhalb eine Regi
ster-Stapels. Der Prozeß 700 wird aufgerufen durch die Proze
dur 550 "zur Abbildung des Stapelregisters", wie sie in Fig. 4A
gezeigt ist. Der Prozeß 700 beginnt mit einem Startschritt
701 und fährt mit einer Prozedur 703 "zur Speicherung eines
anfänglichen Basisblock-Abbildungszustandes" fort. Die Proze
dur 703 "zur Speicherung des anfänglichen Basisblock-
Abbildungszustandes" initialisiert den Register-Stapel-
Zustand. Der Register-Stapel-Zustand bzw. die Register-Stapel-
Zustandseinrichtung bildet die Pseudoregister auf Stapelregi
ster in dem Register-Stapel ab, indem einem Stapel-Offset-Wert
bzw. einem Stapel-Offset-Adressenwert ein Pseudoregister zuge
ordnet wird. Die Prozedur 703 "zur Speicherung des anfängli
chen Basisblock-Abbildungszustandes" speichert eine Kopie des
Register-Stapel-Zustandes beim Eintritt in den Basisblock ab.
Nachdem der anfängliche Basisblockregister-Stapel-Zustand ge
speichert bzw. gerettet ist, fährt der Prozeß 700 mit einer
Prozedur 705 "zur Iteration eines jeden Befehls" fort.
Die Prozedur 705 "zur Iteration eines jeden Befehls" iteriert
bzw. wiederholt jeden Befehl in dem Basisblock. Nachdem alle
Befehle in dem Basisblock wiederholt worden sind, fährt der
Prozeß 700 mit einer Prozedur 707 "zum Abspeichern des letzt
endlichen Basisblockabbildungszustandes" fort, wobei die Pro
zedur 707 den Register-Stapel-Zustand, der an dem Ende des Ba
sisblocks existiert, als fstate (block_id, Output) speichert.
Der Prozeß 700 wird mit dem Endeschritt 709 beendet. Die Regi
ster-Stapel-Zustände, die durch die Prozedur 703 "zur Speiche
rung des anfänglichen Basisblock-Abbildungszustandes" und
durch die Prozedur 707 "zur Speicherung des finalen bzw.
letztendlichen Basisblock-Abbildungszustandes" gespeichert
bzw. gerettet werden, werden zur Normalisierung des Register-
Stapel-Gebrauchs zwischen den Basisblöcken verwendet, wie im
weiteren in Bezugnahme auf die Fig. 8A beschrieben.
Jeder Befehl, der durch die Prozedur 705 "zur Iteration eines
jeden Befehls" iteriert bzw. wiederholt wird, wird geprüft,
damit bestimmt wird, ob der Befehl auf ein Pseudoregister bei
einer Entscheidungsprozedur 711 für "ein Gleit-, Registerbe
fehl" zugreift. Falls der wiederholte Befehl nicht auf ein
Pseudoregister zugreift, ist der Befehl nicht relevant und der
Prozeß 700 fährt zu der Prozedur 705 "zur Iteration eines je
den Befehls" zurück, damit der nächste Befehl wiederholt wird.
Falls jedoch der iterierte Befehl auf ein Pseudoregister zu
greift, fährt der Prozeß 700 mit einer Entscheidungsprozedur
713 für "eine Stapelzustandsveränderung" fort, wobei die Pro
zedur bestimmt, ob der wiederholte Befehl eine Permutation an
dem Register-Stapel (und dem zugehörigen Register-Stapel-
Zustand) erfordert. Ein derartiger Befehl ist beispielsweise
der FSQRT-Befehl von Intel, der fordert, daß der Wert, bei dem
die Rechenoperation ausgeführt werden soll, in dem oben gele
genen Stapelregister des Register-Stapels abgespeichert wird.
Falls der interessierende Wert in einem anderen Stapelregister
abgespeichert ist, muß der Register-Stapel permutiert bzw.
verschoben werden, damit der interessierende Wert an die Spit
ze des Registerstapels gebracht wird. Falls die Entscheidungs
prozedur 713 für "eine Stapelzustandsveränderung" bestimmt,
daß der iterierte bzw. wiederholte Befehl eine Stapel-
Permutation erforderlich macht, fährt der Prozeß 700 mit einer
Prozedur 715 "zur Einführung eines Register-Stapel-
Permutationsbefehl" fort. Die Prozedur 715 "zur Einführung ei
nes Register-Stapel-Permutationsbefehls" fügt Befehle bzw. In
struktionen ein, damit der Registerstapel in einem Zustand
versetzt wird, der für den iterierten Befehl geeignet ist. In
nerhalb einer Intel-kompatiblen FPU-Architektur fügt die Pro
zedur 715 "zum Einfügen eines Register-Stapel-
Permutationsbefehls" im allgemeinen einen FXCH-Befehl zur Per
mutation des Register-Stapels ein. Der Register-Stapel wird
als nächstes durch eine Prozedur 717 "zum Erneuern des Abbil
dungszustandes" erneuert bzw. auf den neuesten Stand gebracht.
Der Register-Stapel-Zustand reagiert daher auf Veränderungen
in der Position des Stapelregisters in dem Register-Stapel.
Auf diese Weise behält der Kompilierer den Zustand des Regi
ster-Stapels in Abhängigkeit von der Rechenoperation eines je
den Befehls, der auf den Register-Stapel zugreift, bei.
Falls die Entscheidungsprozedur 713 "zur Stapel-Zustands-
Veränderung" bestimmt, daß der wiederholte Befehl keine Sta
pel-Permutation erfordert, fährt der Prozeß 700 mit der Proze
dur 717 "zur Erneuerung des Abbildungszustandes" fort. Die
Prozedur 717 "zur Erneuerung des Abbildungszustandes" über
prüft den iterierten Befehl und nimmt, falls der Befehl den
Register-Stapel verändert, entsprechende Veränderungen an den
Register-Stapel-Zustand vor. Auf diese Weise hält der Kompi
lierer den Zustand des Register-Stapels in Abhängigkeit von
der Operation bzw. der Rechenoperation eines jeden Befehls
bei, der auf den Register-Stapel zugreift.
Sobald der Register-Stapel-Zustand erneuert ist, fährt der
Prozeß 700 mit einer Prozedur 719 "zur Abbildung von Pseudore
gistern auf den Register-Stapel" fort, die die Information in
dem Register-Stapel-Zustand bzw. in der Register-Stapel-
Zustand-Einrichtung zur Konvertierung bzw. Umwandlung der Ope
randen des wiederholten Befehls von Pseudoregistern zu Stapel-
Offsets in dem Register-Stapel verwendet. Der konvertierte Be
fehl nimmt Bezug auf bzw. adressiert ein Stapelregister in dem
Register-Stapel anstatt eines Pseudoregisters. Sobald der
wiederholte Befehl konvertiert ist, wiederholt der Prozeß 700
die Befehlsiteration bei der Prozedur 705 "zur Iteration eines
jeden Befehls" bis alle Befehle in dem Basisblock iteriert
worden sind.
Der Prozeß 700 wird für jeden Basisblock während eines Durch
gangs des CFG-Graphen von oben nach unten aufgerufen.
Am Ende des Durchgangs des CFG-Graphen von oben nach unten
wird der Eingangsregister-Stapel-Zustand und der Ausgangsregi
ster-Stapel-Zustand für jeden Basisblock gespeichert bzw. ge
rettet. Jeder Befehl in dem Basisblock, der Pseudoregister
verwendet, greift nunmehr auf den Register-Stapel unter Ver
wendung der Offset-Adressen in dem Register-Stapel zu.
Der verbleibende Schritt besteht darin, den Zustand des Regi
ster-Stapels beim Austritt von einem Ausgangs-Basisblock mit
dem Zustand des Register-Stapels zu Beginn des laufenden bzw.
aktuellen Basisblocks in Übereinstimmung zu bringen. Dies wird
erreicht, indem man die Blöcke während des Durchgangs des CFG-
Graphen von unten nach oben normalisiert, wobei der Durchgang
durch die Prozedur 557 "zum Durchgang des CFG-Graphen von un
ten nach oben" durchgeführt wird.
Fig. 8A stellt einen Basisblock-Register-Stapel-
Normalisierungsprozeß dar, der durch das allgemeine Bezugszei
chen 800 angegeben wird, wobei der Prozeß einen Normalisie
rungsbefehl einfügt, welcher die endende Register-Stapel-
Verwendung ausgehend von einem Ausgangs-Basisblock (Block j)
mit dem Eingangsregister-Stapel Gebrauch bzw. Verwendung des
laufenden Basisblocks (Block k) normalisiert. Die Normalisie
rung ist ein Prozeß zur Bestimmung, welche Register den
Block k lebend bzw. aktiv betreten und die am Ausgang von
Block j nicht lebend bzw. aktiv sind und zur Bestimmung, wel
che Register beim Ausgang des Blocks j aktiv sind, jedoch
nicht in Block k verwendet werden. Der Prozeß 800 wird durch
die Prozedur 559 "zur Normalisierung von Basisblöcken" aufge
rufen, wenn der CFG-Graph von unten nach oben durch die Proze
dur 557 "zum Durchlaufen des CFG-Graphen von unten nach oben"
durchlaufen bzw. durchquert wird. Der Prozeß 800 beginnt mit
einem Startschritt 801 und fährt mit einer Prozedur 803 "zur
Bestimmung von neuen aktiven Registern" fort. Die Prozedur 803
"zur Bestimmung neuer aktiver Register" vergleicht den Aus
gangs-Register-Stapel-Zustand von dem Ausgangs- bzw. älteren
Block mit dem Eingangs-Register-Stapel-Zustand des derzeitigen
bzw. laufenden Blockes. Bei Betrachtung eines Randes zwischen
Block j und Block k in dem CFG-Graphen wird der neue Satz von
neuen aktiven bzw. lebendigen Registern definiert durch:
Push (block-j, block-k) = input (block-k)-fstate (block-j,
output)
In ähnlicher Weise bestimmt die Prozedur 805 "zur Bestimmung
von toten bzw. nicht aktiven Registern in dem Ausgangsblock"
der Satz von neuen nicht aktiven Registern an demselben Rand
wie folgt:
Pop (block-j, block-k) = fstate (block-j, output)-input
(block-k)
Eine Entscheidungsprozedur 807, ob "eine Normalisierung erfor
derlich ist", prüft die Ablege- bzw. Push sowie Abhebe- bzw.
Pop-Werte und die Stapel-Permutation, die erforderlich sind,
um den Register-Stapel-Zustand an dem Ausgang des Blocks j mit
dem Register-Stapel-Zustand am Eingang von Block k abzuglei
chen bzw. anzupassen. Falls eine Normalisierung zwischen dem
Block j und dem Block k erforderlich ist, fährt der Prozeß 800
mit der Prozedur 809 "zur Normalisierung des Basisblocks"
fort. Die Prozedur 809 "zur Normalisierung des Basisblocks"
fügt Befehle ein, die den Register-Stapel derart manipulieren,
daß der Register-Stapel-Zustand am Ausgang von Block j mit dem
Register-Stapel-Zustand am Eingang von Block k in Einklang ge
bracht bzw. angepaßt wird, wie im weiteren unter Bezugnahme
auf Fig. 8B beschrieben wird. Der Prozeß 800 wird mit dem En
deschritt 811 beendet.
Falls jedoch keine Normalisierung zwischen dem Block j und dem
Block k erforderlich ist, wird der Prozeß 800 mit dem Ende
schritt 811 beendet.
Fig. 8B stellt einen Prozeß zum Einfügen eines Normalisie
rungsbefehls dar, der durch das allgemeine Bezugszeichen 850
angegeben wird, wobei der Prozeß einen Basisblock einfügt, der
den Register-Stapel zwischen Block j und Block k normalisiert.
Der Prozeß 850 wird durch die Prozedur 809 "zur Normalisierung
des Basisblocks", wie sie in Fig. 8A dargestellt ist, aufge
rufen. Der Prozeß 850 beginnt mit einem Startschritt 851 und
fährt mit einer Entscheidungsprozedur 853, "ob ein neuer Ba
sisblock erforderlich ist", fort, wobei die Prozedur bestimmt,
ob ein neuer Basisblock in den CFG-Graphen eingefügt werden
muß oder ob die Register-Stapel-Normalisierung innerhalb der
bestehenden Basisblöcke verfolgen kann. Ein neuer Basisblock
wird nicht benötigt, falls Block k der einzige Nachfolger von
Block j ist. Unter diesen Umständen kann der Register-Stapel-
Normalisierungsbefehl direkt in Block j eingefügt werden.
Falls Block j der einzige Ausgangsblock bzw. der einzige
Eltern-Block für Block k ist, kann der Normalisierungsbefehl
direkt in den Beginn von Block k eingefügt werden. Wenn diese
Umstände nicht vorliegen, wird ein Normalisierungs-Basisblock
in den CFG-Graphen bei einer Prozedur 855 "zum Einfügen eines
Normalisierungs-Basisblocks" eingefügt. Der Normalisierungsba
sisblock enthält Befehle, die den Register-Stapel bei Austritt
aus dem Ausgangsbasisblock normalisieren (permutieren), damit
der Stapel mit dem Register-Stapel übereinstimmt, der bei Ein
tritt in den Nachfolger-Basis-Block erwartet wird. Diese Be
dingungen sind durch die Fig. 9A und 9B dargestellt.
Die Prozedur 857 "zum Einfügen eines Register-Stapel-
Ablegebefehls" fügt Befehle ein, die die neuen aktiven Regi
ster, (die durch die zuvor beschriebene Ablegebefehl- bzw.
Pushbefehl-Definition definiert sind) auf dem Register-Stapel
ablegen. Eine Prozedur 859 "zum Einfügen eines Register-
Stapel-Abhebe- bzw. Popbefehls" fügt Befehle ein, die den Re
gister-Stapel umordnen und Befehle, die tote bzw. überflüssige
Register von dem Register-Stapel abheben. Die Prozedur 861
"zum Einfügen von Register-Stapel-Permutationen" fügt dann Be
fehle ein, welche den Register-Stapel in Übereinstimmung mit
dem Eingangsregister-Stapel-Zustand für Block k plazieren. Der
Prozeß 850 wird dann mit dem Endeschritt 863 beendet.
Für den Fachmann ist ersichtlich, daß die in den Fig. 8A
und 8B gezeigten Prozesse die Register-Stapel-Zustände der Ba
sisblöcke verwenden, die durch die Ränder verbunden sind, da
mit die Stapelregister-Verwendung zwischen den Basisblöcken
normalisiert wird. Diese Normalisierung enthält das Permutie
ren des Register-Stapels derart, daß die aktiven bzw. lebendi
gen Register in dem Register-Stapel sich bei den geeigneten
Offsets bzw. Offset-Adressen innerhalb des Register-Stapels
für die Verwendung in dem Basisblock befinden.
Fig. 9A stellt einen Steuerablaufgraphen dar, der durch das
allgemeine Bezugszeichen 900 angegeben wird, wobei der Steuer
ablaufgraph durch das erfindungsgemäße Verfahren ausgeführt
werden kann. Der Steuerablaufgraph 900 enthält einen Block j
901, der mit einem Block k 903 über einen Rand bzw. eine Ver
bindungskante j/k 905 verbunden ist. Der Block k 903 verbindet
einen Block m 909 unter Verwendung einer Verbindungskante k/m
910. Zusätzlich verbindet ein Block l 907 den Block m 909
durch eine Verbindungskante i/m 911. Der Block k 903 ist fer
ner über eine Verbindungskante k/n 912 mit einem Block n 913
verbunden. Der Block l 907 ist ferner mit dem Block n 913 über
eine Verbindungskante i/n 915 verbunden. Der Block m 909 ist
mit einem Block o 917 mit einer Verbindungskante m/o 918 ver
bunden. Der Block o 917 ist mit dem Block p 919 über eine Ver
bindungskante o/p 920 verbunden. Der Block n 913 ist ferner
mit dem Block o 917 über eine Verbindungskante n/o 921 verbun
den. Der Block o 917 ist ferner mit einem Block q 923 über ei
ne Verbindungskante o/q 925 verbunden. Der Block q 923 ist
ferner mit einem Block r 927 über eine Verbindungskante q/r
928 verbunden. Der Block r 927 ist ferner mit sich selbst über
eine Verbindungskante r/r 929 verbunden.
Betrachtet man die Fig. 9A bemerkt man, daß:
der Block k 903 sich neben dem Block j 901 befindet, daß der Block o 917 zwei Ausgangsblöcke bzw. Eltern-Blöcke (der Block m 909 und der Block n 913) und zwei Kinder- bzw. Zielblöcke besitzt (der Block p 919 und der Block q 923) und daß jeder der Blöcke, nämlich Block m 909, der Block n 913 und der Block r 927 zwei Verbindungskanten besitzen, die in den Anfang bz 04867 00070 552 001000280000000200012000285910475600040 0002019934424 00004 04748w. in die Spitze des Blocks eintreten.
der Block k 903 sich neben dem Block j 901 befindet, daß der Block o 917 zwei Ausgangsblöcke bzw. Eltern-Blöcke (der Block m 909 und der Block n 913) und zwei Kinder- bzw. Zielblöcke besitzt (der Block p 919 und der Block q 923) und daß jeder der Blöcke, nämlich Block m 909, der Block n 913 und der Block r 927 zwei Verbindungskanten besitzen, die in den Anfang bz 04867 00070 552 001000280000000200012000285910475600040 0002019934424 00004 04748w. in die Spitze des Blocks eintreten.
Fig. 9B stellt einen normalisierten Steuerablaufgraphen dar,
der durch das allgemeine Bezugszeichen 915 angegeben wird, wo
bei der normalisierte Steuerablaufgraph aus der Operation der
Prozesse, wie sie in den Fig. 8A und 8B dargestellt sind,
resultiert, wobei die Prozesse auf den Steuerflußgraphen 900
von Fig. 9A angewendet werden bzw. Operationen auf diesen
durchführen. Der Steuerflußgraph 900 wird geändert zum Einfü
gen von Basisblöcken, die Normalisierungsbefehle zur Permutie
rung bzw. Permutation des Register-Stapels bei Eintritt eines
Ausgangsbasisblockes bzw. Eltern-Basisblockes zu demjenigen
enthalten, die bei Eintritt in einen Kind- bzw. Nachfolgerba
sisblock erforderlich sind. Indem man den Prozeß 800 von Fig. 8A
auf den Steuerflußgraphen 900 anwendet, merkt man, daß:
- 1. der Block k 903 sich rieben dem Block j 901 befindet - auf
diese Weise können die Register-Stapel-Normalisierungs
befehle, die durch den Prozeß 850 in Fig. 8B eingefügt wer
den innerhalb des Blockes j 901 (dem Ausgangsblock von Block
k 903) eingefügt werden. Dieselbe Situation tritt für die
folgenden Basisblockkombinationen auf: Der Block m 909 und
der Block o 917, der Block n 913 und der Block o 917, der
Block q 923 und der Block r 927;
- - der Block o 917 ist ein Ausgangsblock sowohl für den Block p 919 als auch für den Block q 923 - auf diese Weise werden die Register-Stapel-Normalisierungsbefehle, (die für jeden Nachfolgerblock geeignet sind) durch den Prozeß 850 in Fig. 8B sowohl in dem Block p 919 als auch in dem Block q 923 eingefügt;
- - in dem allgemeinen Fall es bei den Nachfolgerblöcken des Blocks k 903 und des Blocks l 907 (und der schleifenförmigen Verbindungskante des Blocks r 927) nötig ist, daß Normali sierungs-Basisblöcke in den CFG Graphen zur Normalisierung des Register-Stapel-Zustandes zwischen den Ausgangs- bzw. Elternblöcken und den Nachfolger- bzw. Kinder-Basisblöcken normalisiert werden, weil (in dem allgemeinen Fall) die Nor malisierungsbefehle nicht in irgendeinen der bestehenden Ba sisblöcke eingefügt werden können, (da ein Basisblock keine Ausführungs-Fluß-Verzweigungen enthält). Ein Block k/m 951, der Befehle zur Normalisierung des Register-Stapels zwischen dem Block k 903 und dem Block m 909 enthält, wird in die Verbindungskante k/m 910 eingefügt. Der Block k/m 951 modi fiziert den Register-Stapel von der Konfiguration, welche durch den Register-Stapel-Zustand bei Austritt aus dem Block k 903 spezifiziert wird, damit dem Eingangs-Register-Stapel- Zustand für den Block m 909 übereinstimmt bzw. in Einklang steht. Ein Block k/n 953, ein Block l/n 955 und ein Block l/m 957 liefern eine entsprechende Normalisierung für ihre jeweiligen Verbindungskanten. Schließlich wird ein Block r/r 959 an der Verbindungskante r/r 929 zur Normalisierung des Ausgangsregister-Stapel-Zustandes des Blocks r 927 mit dem Eingangsregister-Stapel-Zustand des Blocks r 927 eingefügt. Für den Fachmann ist ersichtlich, daß die Normalisierungs blöcke nicht in die CFG-Verbindungskanten eingefügt werden brauchen, wenn der Register-Stapel-Zustand beim Ausgang der Ausgangs- bzw. Elternblöcke zufällig mit dem Eintritts register-Stapel-Zustand der Nachfolger- bzw. Kinderblöcke übereinstimmt.
Für den Fachmann ist offensichtlich, daß die Erfindung die An
zahl der Stapel-Normalisierungsbefehle zwischen den Basisblöcken
minimiert, wobei dies zu einer reduzierten Code-Ausdehnung
bzw. Erweiterung führt.
Für den Fachmann ist ferner offensichtlich, daß die Erfindung
es ermöglicht, bestehende Register Zuweisungs- und Optimie
rungstechniken bei Stapelregistern zu verwenden, die in einem
Register-Stapel organisiert sind.
Aus der obigen Beschreibung wird deutlich, daß die Erfindung
(ohne Einschränkung) die folgenden Vorteile bietet:
- 1. Die Erfindung minimiert das Register-Swapping bzw. Regi ster-Vertauschen innerhalb des Register-Stapels.
- 2. Die Erfindung minimiert eine mögliche Code-Ausdehnung auf grund der Verwendung von einem Normalisierungs-Register- Stapel zwischen den Basisblöcken.
Claims (44)
1. Computergesteuertes Verfahren zur effizienten Verwendung ei
nes Register-Stapels, der eine Vielzahl von Stapelregistern
innerhalb einer Ziel-Computerarchitektur besitzt, wobei das
Verfahren die folgenden Schritte aufweist:
- a) Transformieren eines 3-Operanden-Befehls zu einem oder mehreren Befehlen mit weniger als drei Operanden;
- b) Analysieren des einen oder mehrerer Befehle mit weni ger als drei Operanden zur Bestimmung von Lebens dauerinformationen für eines oder mehrere Pseudoregi ster;
- c) Einfügen eines Abhebe-Befehls in den einen oder mehre re Befehle mit weniger als drei Operanden in Abhängig keit von der Lebensdauer-Information; und
- d) Transformieren der Operanden-Adressierung von den Pseudoregistern zu Offset-Adressen in dem Register-Sta pel zur Adressierung der Vielzahl von Stapelregistern.
2. Verfahren nach Anspruch 1, bei dem die Ziel-
Computerarchitektur eine Gleit-Komma-Einheit enthält, welche
Intel-kompatibel ist.
3. Verfahren nach Anspruch 1, bei dem der Schritt (d) ferner
aufweist:
- 1. Abbilden der Pseudoregister in den Register-Stapel.
4. Verfahren nach Anspruch 3, bei dem der Schritt (d1) auf
weist:
- 1. Initialisieren eines Register-Stapel-Zustandes bei dem Start eines ersten Basisblocks;
- 2. Verarbeiten von einem oder mehreren Befehlen in dem ersten Basisblock zum Ersetzen von Adressierungen auf Pseudoregister zu Offset-Adressen in dem Register-Sta pel zur Adressierung der Vielzahl von Stapelregi stern;
- 3. Einfügen von einem oder mehreren Register-Stapel- Permutationsbefehlen in dem ersten Basisblock, wenn erforderlich; und
- 4. Erneuern des Register-Stapel-Zustandes entsprechend dem Schritt (d1b) und dem Schritt (d1c).
5. Verfahren nach Anspruch 4, welches ferner aufweist:
- 1. Bestimmen eines Satzes von neuen aktiven Registern, die bei Eintritt in einen zweiten Basisblock aktive Register sind und die bei Austritt aus dem ersten Ba sisblock nicht aktiv sind;
- 2. Bestimmen eines Satzes von nicht aktiven Registern, die aktive Register bei Austritt aus dem ersten Ba sisblock sind und die bei Eintritt in den zweiten Ba sisblock nicht aktiv sind; und
- 3. Normalisieren der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock durch Entfernen des Satzes von neuen nicht aktiven Regi stern von dem Register-Stapel und durch Hinzufügen des Satzes von neuen aktiven Registern zu dem Regi ster-Stapel.
6. Verfahren nach Anspruch 5, welches ferner aufweist:
- 1. Einfügen eines Normalisierungs-Basisblocks zwischen dem Trust-Basisblock und dem zweiten Basisblock; und
- 2. Einfügen von einem oder mehreren Normalisierungsbe fehlen in den Normalisierungs-Basisblock zur Normali sierung der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock.
7. Verfahren nach Anspruch 5, welches ferner aufweist:
- 1. Einfügen von einem oder mehreren Normalisierungsbe fehlen in den ersten Basisblock zur Normalisierung der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock.
8. Verfahren nach Anspruch 5, welches ferner aufweist:
- 1. Einfügen von einem oder mehreren Normalisierungsbe fehlen in den zweiten Basisblock zum Normalisieren der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock.
9. Computergesteuertes Verfahren zur Optimierung eines Zielpro
gramms für eine Ziel-Computerarchitektur mit einem Register-
Stapel, der eine Vielzahl von Stapelregistern besitzt, wobei
das Verfahren die folgenden Schritte aufweist:
- a) Zuweisen von einem oder mehreren Pseudoregistern zu der Vielzahl von Stapelregistern;
- b) Beibehalten eines Register-Stapel-Zustandes, der die zugewiesenen Pseudoregister auf die Vielzahl von Sta pelregistern unter Verwendung einer Vielzahl von Sta pel-Offset-Adressen abbildet, wobei der Register- Stapel-Zustand auf Veränderungen des Register-Stapels reagiert; und
- c) Konvertieren eines Befehls, der eines der zugewiesenen Pseudoregister zur Verwendung von einem der Vielzahl von Stapel-Offset-Adressen adressiert, damit eines der Vielzahl von Stapelregistern entsprechend den Register- Stapel-Zustand spezifiziert wird.
10. Verfahren nach Anspruch 9, bei dem die Ziel-
Computerarchitektur eine Intel kompatible Gleit-Komma-Einheit
enthält.
11. Verfahren nach Anspruch 9, bei dem der Schritt (c) ferner
das Transformieren eines 3-Operanden-Befehls zu einem oder
mehreren Befehlen mit weniger als drei Operanden umfaßt.
12. Verfahren nach Anspruch 9, welches ferner aufweist:
- a) Normalisieren des Register-Stapels bei Austritt am Aus gang von einem ersten Basisblock, damit der Register- Stapel bei Austreten am Eingang eines zweiten Basis blocks übereinstimmt.
13. Verfahren nach Anspruch 12, welches ferner aufweist:
- 1. Hinzufügen von einem oder mehreren Normalisierungsbe fehlen zu dem ersten Basisblock.
14. Verfahren nach Anspruch 12, welches ferner aufweist:
- 1. Hinzufügen von einem oder mehreren Normalisierungsbe fehlen zu dem zweiten Basisblock.
15. Verfahren nach Anspruch 12, welches ferner aufweist:
- 1. Hinzufügen eines Normalisierungsbasisblocks zwischen den ersten Basisblock und dem zweiten Basisblock; und
- 2. Hinzufügen von einem oder mehreren Normalisierungsbe fehlen zu dem Normalisierungs-Basisblock.
16. Vorrichtung mit einer zentralen Datenverarbeitungseinheit
(CPU) und einem Speicher, der an die CPU zur Kompilierung ei
nes Zielprogramms für eine Ziel-Computerarchitektur gekoppelt
ist, wobei die Architektur einen Register-Stapel verwendet,
der eine Vielzahl von Stapelregistern besitzt und die Vorrich
tung aufweist:
einen Befehlstransformationsmechanismus, der zur Transformation eines 3-Operanden-Befehls zu einem oder mehreren Befehlen mit weniger als drei Operanden ausgelegt ist; und
einen Adressierungs-Transformations-Mechanismus, der zur Transformation von Operanden-Referenzen, die in dem einen oder mehreren Befehlen mit weniger als drei Operanden enthalten sind von einem oder mehreren Pseudoregistern zu Offset- Adressen in dem Register-Stapel zur Adressierung der Vielzahl von Stapelregistern.
einen Befehlstransformationsmechanismus, der zur Transformation eines 3-Operanden-Befehls zu einem oder mehreren Befehlen mit weniger als drei Operanden ausgelegt ist; und
einen Adressierungs-Transformations-Mechanismus, der zur Transformation von Operanden-Referenzen, die in dem einen oder mehreren Befehlen mit weniger als drei Operanden enthalten sind von einem oder mehreren Pseudoregistern zu Offset- Adressen in dem Register-Stapel zur Adressierung der Vielzahl von Stapelregistern.
17. Vorrichtung nach Anspruch 16, bei dem die Ziel-
Computerarchitektur eine Intel kompatible Gleit-Komma-Einheit
ist.
18. Vorrichtung nach Anspruch 16, bei der der Referenz-
Transformationsmechanismus ferner aufweist:
einen Informationssammelmechanismus, der zum Sammeln von In formationen über die Pseudoregister, welche in dem ersten Basisblock aktiv sind, ausgelegt ist;
einen Einstellmechanismus, der zur Einstellung von einem oder mehreren der Befehle mit weniger als drei Operanden ausgelegt ist, damit die Werte in dem Register-Stapel aktiv gehalten werden; und
einen Register-Abbildungsmechanismus, der zur Abbildung der Pseudoregister, die durch einen oder mehrere Befehle mit we niger als drei Operanden adressiert werden, in den Register-Stapel.
einen Informationssammelmechanismus, der zum Sammeln von In formationen über die Pseudoregister, welche in dem ersten Basisblock aktiv sind, ausgelegt ist;
einen Einstellmechanismus, der zur Einstellung von einem oder mehreren der Befehle mit weniger als drei Operanden ausgelegt ist, damit die Werte in dem Register-Stapel aktiv gehalten werden; und
einen Register-Abbildungsmechanismus, der zur Abbildung der Pseudoregister, die durch einen oder mehrere Befehle mit we niger als drei Operanden adressiert werden, in den Register-Stapel.
19. Vorrichtung nach Anspruch 18, bei dem der Register-
Fortbildungsmechanismus aufweist:
einen Stapel-Zustands-Initialisierungsmechanismus, der zur In itialisierung eines Register-Stapel-Zustands bei Beginn des ersten Basisblocks ausgelegt ist;
einen Befehls-Datenverarbeitungsmechanismus, der zur Datenver arbeitung von einem oder mehreren Befehlen mit weniger als drei Operanden in dem ersten Basisblock ausgelegt ist zum Er setzen von Adressierungen auf Pseudoregister zu Offset- Adressen in dem Register-Stapel, damit auf die Vielzahl von Stapelregistern unter Verwendung des Register-Stapel-Zustands zugreifbar sind;
einen Register-Stapel-Permutationsmechanismus, der zum Einfü gen von einem oder mehreren Register-Stapel- Permutationsbefehlen in dem ersten Basisblock falls gefordert ausgelegt ist; und
einen Register-Stapel-Zustands-Beibehaltungsmechanismus, der zum Erneuern des Register-Stapel-Zustands entsprechend dem Be fehlsdaten-Verarbeitungsmechanismus und dem Register-Stapel- Permutationsmechanismus ausgelegt ist.
einen Stapel-Zustands-Initialisierungsmechanismus, der zur In itialisierung eines Register-Stapel-Zustands bei Beginn des ersten Basisblocks ausgelegt ist;
einen Befehls-Datenverarbeitungsmechanismus, der zur Datenver arbeitung von einem oder mehreren Befehlen mit weniger als drei Operanden in dem ersten Basisblock ausgelegt ist zum Er setzen von Adressierungen auf Pseudoregister zu Offset- Adressen in dem Register-Stapel, damit auf die Vielzahl von Stapelregistern unter Verwendung des Register-Stapel-Zustands zugreifbar sind;
einen Register-Stapel-Permutationsmechanismus, der zum Einfü gen von einem oder mehreren Register-Stapel- Permutationsbefehlen in dem ersten Basisblock falls gefordert ausgelegt ist; und
einen Register-Stapel-Zustands-Beibehaltungsmechanismus, der zum Erneuern des Register-Stapel-Zustands entsprechend dem Be fehlsdaten-Verarbeitungsmechanismus und dem Register-Stapel- Permutationsmechanismus ausgelegt ist.
20. Vorrichtung nach Anspruch 19, welche ferner aufweist:
einen Bestimmungsmechanismus für einen aktiven Registersatz, der zur Bestimmung eines Satzes von neuen aktiven Registern ausgelegt ist, die bei Eintritt in den zweiten Basisblock aktive Register sind und die bei Austritt aus dem ersten Ba sisblock nicht aktiv sind;
einen Bestimmungsmechanismus für einen nicht-aktiven Regi stersatz, der zur Bestimmung eines Satzes von neuen, nicht- aktiven Registern ausgelegt ist, die bei Austritt aus dem ersten Basisblock aktive Register sind und die bei Eintritt in den zweiten Basisblock nicht aktiv sind und
einen Normalisierungsmechanismus, der zur Normalisierung der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock ausgelegt ist, indem der Satz von nicht- aktiven Registern von dem Register-Stapel entfernt wird und der Satz von neuen aktiven Registern dem Register-Stapel hinzugefügt wird.
einen Bestimmungsmechanismus für einen aktiven Registersatz, der zur Bestimmung eines Satzes von neuen aktiven Registern ausgelegt ist, die bei Eintritt in den zweiten Basisblock aktive Register sind und die bei Austritt aus dem ersten Ba sisblock nicht aktiv sind;
einen Bestimmungsmechanismus für einen nicht-aktiven Regi stersatz, der zur Bestimmung eines Satzes von neuen, nicht- aktiven Registern ausgelegt ist, die bei Austritt aus dem ersten Basisblock aktive Register sind und die bei Eintritt in den zweiten Basisblock nicht aktiv sind und
einen Normalisierungsmechanismus, der zur Normalisierung der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock ausgelegt ist, indem der Satz von nicht- aktiven Registern von dem Register-Stapel entfernt wird und der Satz von neuen aktiven Registern dem Register-Stapel hinzugefügt wird.
21. Vorrichtung nach Anspruch 20, welche ferner aufweist:
einen Basisblock-Einfügemechanismus, der zum Einfügen eines Normalisierungs-Basisblocks zwischen dem ersten Basisblock und dem zweiten Basisblock ausgelegt ist; und
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Einfügen von einem oder mehreren Normalisierungsbefehlen in den Normalisierungsbasisblock ausgelegt ist zur Normalisie rung der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock.
einen Basisblock-Einfügemechanismus, der zum Einfügen eines Normalisierungs-Basisblocks zwischen dem ersten Basisblock und dem zweiten Basisblock ausgelegt ist; und
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Einfügen von einem oder mehreren Normalisierungsbefehlen in den Normalisierungsbasisblock ausgelegt ist zur Normalisie rung der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock.
22. Vorrichtung nach Anspruch 20, welche ferner aufweist:
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Einfügen von einen oder mehreren Normalisierungsbefehlen in den ersten Basisblock zur Normalisierung der Registerverwen dung zwischen dem ersten Basisblock und dem zweiten Basis block ausgelegt ist.
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Einfügen von einen oder mehreren Normalisierungsbefehlen in den ersten Basisblock zur Normalisierung der Registerverwen dung zwischen dem ersten Basisblock und dem zweiten Basis block ausgelegt ist.
23. Vorrichtung nach Anspruch 20, welche ferner aufweist:
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Einfügen von einem oder mehreren Normalisierungsbefehlen in dem zweiten Basisblock zur Normalisierung der Registerver wendung zwischen dem ersten Basisblock und dem zweiten Ba sisblock ausgelegt ist.
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Einfügen von einem oder mehreren Normalisierungsbefehlen in dem zweiten Basisblock zur Normalisierung der Registerver wendung zwischen dem ersten Basisblock und dem zweiten Ba sisblock ausgelegt ist.
24. Vorrichtung mit einer zentralen Datenverarbeitungsein
heit(CPU) und einem Speicher, der an die CPU zur Optimierung
eines Zielprogramms für eine Ziel-Computerarchitektur gekop
pelt ist und einen Register-Stapel enthält, der eine Vielzahl
von Stapelregistern besitzt, wobei die Vorrichtung aufweist:
einen Register-Zuweisungsmechanismus, der zur Zuweisung von einem oder mehreren Pseudoregistern zu einer Vielzahl von Stapelregistern ausgelegt ist;
einen Beibehaltungsmechanismus, der zur Beibehaltung eines Register-Stapel-Zustandes ausgelegt ist, der die zugewiese nen Pseudoregister auf eine Vielzahl von Stapelregistern un ter Verwendung einer Vielzahl von Stapel-Offset-Adressen ab bildet, wobei der Register-Stapel-Zustand auf Veränderungen des Register-Stapels reagiert; und
einen Instruktionsadressierungs-Konversionsmechanismus, der zur Konversion eines Befehls ausgelegt ist, der eines der zugewiesenen Pseudoregister zur Verwendung einer der Viel zahl von Stapel-Offset-Adressen adressiert, damit eines der Vielzahl von Stapelregister entsprechend dem Register- Stapel-Zustand spezifiziert wird.
einen Register-Zuweisungsmechanismus, der zur Zuweisung von einem oder mehreren Pseudoregistern zu einer Vielzahl von Stapelregistern ausgelegt ist;
einen Beibehaltungsmechanismus, der zur Beibehaltung eines Register-Stapel-Zustandes ausgelegt ist, der die zugewiese nen Pseudoregister auf eine Vielzahl von Stapelregistern un ter Verwendung einer Vielzahl von Stapel-Offset-Adressen ab bildet, wobei der Register-Stapel-Zustand auf Veränderungen des Register-Stapels reagiert; und
einen Instruktionsadressierungs-Konversionsmechanismus, der zur Konversion eines Befehls ausgelegt ist, der eines der zugewiesenen Pseudoregister zur Verwendung einer der Viel zahl von Stapel-Offset-Adressen adressiert, damit eines der Vielzahl von Stapelregister entsprechend dem Register- Stapel-Zustand spezifiziert wird.
25. Vorrichtung nach Anspruch 24, bei der die Ziel-
Computerarchitektur eine Intel kompatible Gleit-Komma-Einheit
enthält.
26. Vorrichtung nach Anspruch 24, bei der der Befehlsadressie
rungs-Konversionsmechanismus ferner einen Befehlstransformations
mechanismus aufweist, der zur Transformation eines 3-
Operanden-Befehls zu einem oder mehreren Befehlen mit weniger
als drei Operanden ausgelegt ist.
27. Vorrichtung nach Anspruch 24, welche ferner aufweist:
einen Normalisierungs-Mechanismus, der zur Normalisierung des Register-Stapels beim Austreten an dem Ausgang des er sten Basisblocks zur Einstimmung mit dem Register-Stapel bei Austritt am Eingang des zweiten Basisblocks ausgelegt ist.
einen Normalisierungs-Mechanismus, der zur Normalisierung des Register-Stapels beim Austreten an dem Ausgang des er sten Basisblocks zur Einstimmung mit dem Register-Stapel bei Austritt am Eingang des zweiten Basisblocks ausgelegt ist.
28. Vorrichtung nach Anspruch 27, welche ferner aufweist:
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Hinzufügen von einem oder mehreren Instruktionsbefehlen zu dem ersten Basisblock ausgelegt ist.
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Hinzufügen von einem oder mehreren Instruktionsbefehlen zu dem ersten Basisblock ausgelegt ist.
29. Vorrichtung nach Anspruch 27, welche ferner aufweist:
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Hinzufügen von einem oder mehreren Normalisierungsbefehlen zu dem zweiten Basisblock ausgelegt ist.
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Hinzufügen von einem oder mehreren Normalisierungsbefehlen zu dem zweiten Basisblock ausgelegt ist.
30. Vorrichtung nach Anspruch 27, welche ferner aufweist:
einen Basisblock-Einfügemechanismus, der zum Hinzufügen ei nes Normalisierungs-Basisblocks zwischen dem ersten Basis block und dem zweiten Basisblock ausgelegt ist; und
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Hinzufügen von einen oder mehreren Normalisierungsbefehlen zu dem Normalisierungs-Basisblock ausgelegt ist.
einen Basisblock-Einfügemechanismus, der zum Hinzufügen ei nes Normalisierungs-Basisblocks zwischen dem ersten Basis block und dem zweiten Basisblock ausgelegt ist; und
einen Normalisierungs-Befehl-Einfügemechanismus, der zum Hinzufügen von einen oder mehreren Normalisierungsbefehlen zu dem Normalisierungs-Basisblock ausgelegt ist.
31. Computerprogramm-Produkt mit:
einem Computer verwendbaren Speichermedium mit einem darin enthaltenen Computer lesbaren Code zur Veranlassung eines Computers ein Zielprogramm für eine Ziel-Computerarchitektur unter Verwendung eines Register-Stapels zu kompilieren, der eine Vielzahl von Stapelregistern enthält, wobei der compu terlesbare Code aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Be fehlstransformations-Mechanismus auszuführen, der zur Trans formation eines 3-Operanden-Befehls auf einen oder mehrere Befehle mit weniger als drei Operanden ausgelegt ist; und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Adressierungs-Transformationsmechanismus auszuführen, der zur Transformation von Operanden-Adressierungen von dem ei nen oder mehreren Befehlen mit weniger als drei Operanden von einem oder mehreren Pseudoregistern zu Offset-Adressen in dem Register-Stapel zur Adressierung der Vielzahl von Stapelregistern ausgelegt ist.
einem Computer verwendbaren Speichermedium mit einem darin enthaltenen Computer lesbaren Code zur Veranlassung eines Computers ein Zielprogramm für eine Ziel-Computerarchitektur unter Verwendung eines Register-Stapels zu kompilieren, der eine Vielzahl von Stapelregistern enthält, wobei der compu terlesbare Code aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Be fehlstransformations-Mechanismus auszuführen, der zur Trans formation eines 3-Operanden-Befehls auf einen oder mehrere Befehle mit weniger als drei Operanden ausgelegt ist; und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Adressierungs-Transformationsmechanismus auszuführen, der zur Transformation von Operanden-Adressierungen von dem ei nen oder mehreren Befehlen mit weniger als drei Operanden von einem oder mehreren Pseudoregistern zu Offset-Adressen in dem Register-Stapel zur Adressierung der Vielzahl von Stapelregistern ausgelegt ist.
32. Computerprogramm-Produkt nach Anspruch 31, bei dem der Re
ferenz-Transformations-Mechanismus ferner aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Infor mations-Sammelmechanismus auszuführen, der zum Sammeln von Informationen über die Pseudoregister ausgelegt ist, die in dem ersten Basisblock aktiv sind;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Anpas sungsmechanismus auszuführen, der zum Anpassen von einem oder mehreren Befehlen mit weniger als drei Operanden zum Halten der aktiven Werte in dem Register-Stapel ausgelegt ist; und
einen computerlesbaren Programm-Code, der derart ausgelegt ist, daß er den Computer dazu veranlaßt, einen Register- Abbildungsmechanismus auszuführen, der zur Abbildung der Pseudoregister, die durch einen oder mehrere Befehle mit we niger als drei Operanden adressiert werden, in den Register- Stapel ausgelegt ist.
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Infor mations-Sammelmechanismus auszuführen, der zum Sammeln von Informationen über die Pseudoregister ausgelegt ist, die in dem ersten Basisblock aktiv sind;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Anpas sungsmechanismus auszuführen, der zum Anpassen von einem oder mehreren Befehlen mit weniger als drei Operanden zum Halten der aktiven Werte in dem Register-Stapel ausgelegt ist; und
einen computerlesbaren Programm-Code, der derart ausgelegt ist, daß er den Computer dazu veranlaßt, einen Register- Abbildungsmechanismus auszuführen, der zur Abbildung der Pseudoregister, die durch einen oder mehrere Befehle mit we niger als drei Operanden adressiert werden, in den Register- Stapel ausgelegt ist.
33. Computerprogramm-Produkt nach Anspruch 32, bei dem der Re
gister-Abbildungsmechanismus aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Sta pel-Zustands-Initialisierungsmechanismus auszuführen, der zur Initialisierung eines Register-Stapel-Zustands an dem Start des ersten Basisblocks ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Be fehlsdatenverarbeitungs-Mechanismus auszuführen, der zur Da tenverarbeitung von einem oder mehreren der Befehle mit we niger als drei Operanden mit dem Basisblock zum Ersetzen von Referenzen auf Pseudoregister zu Offset-Adressen in dem Re gister-Stapel ausgelegt ist, damit auf die Vielzahl von Sta pelregister unter Verwendung des Register-Stapel-Zustands zugegriffen wird;
einen computerlesbaren Programm-Code, der derart ausgelegt ist, daß er einen Computer dazu veranlaßt, einen Register- Stapel-Permutationsmechanismus durchzuführen, der zum Einfü gen von einem oder mehreren Register-Stapel- Permutationsbefehlen in dem ersten Basisblock, wenn erfor derlich, ausgelegt ist; und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Regi ster-Stapel-Zustand-Beibehaltungsmechanismus auszuführen, der derart konfiguriert ist, daß er den Register-Stapel- Zustand entsprechend dem Befehlsdaten-Verarbeitungsmechanis mus und dem Register-Stapel-Permutationsmechanismus erneu ert.
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Sta pel-Zustands-Initialisierungsmechanismus auszuführen, der zur Initialisierung eines Register-Stapel-Zustands an dem Start des ersten Basisblocks ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Be fehlsdatenverarbeitungs-Mechanismus auszuführen, der zur Da tenverarbeitung von einem oder mehreren der Befehle mit we niger als drei Operanden mit dem Basisblock zum Ersetzen von Referenzen auf Pseudoregister zu Offset-Adressen in dem Re gister-Stapel ausgelegt ist, damit auf die Vielzahl von Sta pelregister unter Verwendung des Register-Stapel-Zustands zugegriffen wird;
einen computerlesbaren Programm-Code, der derart ausgelegt ist, daß er einen Computer dazu veranlaßt, einen Register- Stapel-Permutationsmechanismus durchzuführen, der zum Einfü gen von einem oder mehreren Register-Stapel- Permutationsbefehlen in dem ersten Basisblock, wenn erfor derlich, ausgelegt ist; und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Regi ster-Stapel-Zustand-Beibehaltungsmechanismus auszuführen, der derart konfiguriert ist, daß er den Register-Stapel- Zustand entsprechend dem Befehlsdaten-Verarbeitungsmechanis mus und dem Register-Stapel-Permutationsmechanismus erneu ert.
34. Computerprogramm-Produkt nach Anspruch 33, welches ferner
aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Be stimmungsmechanismus für einen aktiven Registersatz auszu führen, der zur Bestimmung eines Satzes von neuen aktiven Registern ausgelegt ist, die bei Eintritt in einen zweiten Basisblock aktive Register sind und die bei Austritt aus dem ersten Basisblock nicht aktiv sind;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Be stimmungsmechanismus für einen nicht-aktiven Registersatz auszuführen, der zur Bestimmung eines Satzes von neuen nicht aktiven Registern ausgelegt ist, die bei Austritt aus dem ersten Basisblock aktive Register sind und die bei Eintritt in den zweiten Basisblock nicht aktiv sind: und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungsmechanismus auszuführen, der zur Normalisierung der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock ausgelegt ist, indem er den Satz von neuen nicht aktiven Registern aus dem Register-Stapel ent fernt und den Satz von neuen aktiven Registern dem Register- Stapel hinzufügt.
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Be stimmungsmechanismus für einen aktiven Registersatz auszu führen, der zur Bestimmung eines Satzes von neuen aktiven Registern ausgelegt ist, die bei Eintritt in einen zweiten Basisblock aktive Register sind und die bei Austritt aus dem ersten Basisblock nicht aktiv sind;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er einen Computer dazu veranlaßt, einen Be stimmungsmechanismus für einen nicht-aktiven Registersatz auszuführen, der zur Bestimmung eines Satzes von neuen nicht aktiven Registern ausgelegt ist, die bei Austritt aus dem ersten Basisblock aktive Register sind und die bei Eintritt in den zweiten Basisblock nicht aktiv sind: und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungsmechanismus auszuführen, der zur Normalisierung der Registerverwendung zwischen dem ersten Basisblock und dem zweiten Basisblock ausgelegt ist, indem er den Satz von neuen nicht aktiven Registern aus dem Register-Stapel ent fernt und den Satz von neuen aktiven Registern dem Register- Stapel hinzufügt.
35. Computerprogramm-Produkt nach Anspruch 34, welches ferner
aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Basis block-Einfügemechanismus auszuführen, der zum Einfügen eines Normalisierungs-Basisblocks zwischen dem ersten Basisblock und dem zweiten Basisblock ausgelegt ist; und einen compu terlesbaren Programm-Code, der derart konfiguriert ist, daß er den Computer dazu veranlaßt, einen Normalisierungs- Befehl-Einfügemechanismus auszuführen, der zum Einfügen von einem oder mehreren Normalisierungs-Befehlen in den Normali sierungs-Basisblock zur Normalisierung der Registerverwen dung zwischen dem ersten Basisblock und dem zweiten Basis block ausgelegt ist.
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Basis block-Einfügemechanismus auszuführen, der zum Einfügen eines Normalisierungs-Basisblocks zwischen dem ersten Basisblock und dem zweiten Basisblock ausgelegt ist; und einen compu terlesbaren Programm-Code, der derart konfiguriert ist, daß er den Computer dazu veranlaßt, einen Normalisierungs- Befehl-Einfügemechanismus auszuführen, der zum Einfügen von einem oder mehreren Normalisierungs-Befehlen in den Normali sierungs-Basisblock zur Normalisierung der Registerverwen dung zwischen dem ersten Basisblock und dem zweiten Basis block ausgelegt ist.
36. Computerprogramm-Produkt mit:
einem mit einem computerverwendbaren Speichermedium, das ei nen darin enthaltenen computerlesbaren Code aufweist, der einen Computer dazu veranlaßt, ein Zielprogramm für eine Ziel-Computerarchitektur zu optimieren, die einen Register- Stapel enthält, der eine Vielzahl von Stapelregistern be sitzt, wobei der computerlesbare Code aufweist:
einen computerlesbaren Programm-Code, der derart ausgelegt ist, daß er den Computer dazu veranlaßt, einen Registerzu weisungs-Mechanismus auszuführen, der zur Zuweisung von ei nem oder mehreren Pseudoregistern zu einer Vielzahl von Sta pelregistern ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Beibe haltungsmechanismus auszuführen, der zur Beibehaltung eines Register-Stapel-Zustands ausgelegt ist, der die zugewiesenen Pseudoregister auf eine Vielzahl von Stapelregistern unter Verwendung einer Vielzahl von Stapel-Offset-Adressen abbil det, wobei der Register-Stapel-Zustand auf Veränderungen des Register-Stapels reagiert; und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Be fehlsadressierungs-Konversionsmechanismus auszuführen, der zur Umwandlung eines Befehls ausgelegt ist, der eines der zugewiesenen Pseudoregister zur Verwendung von einer der Vielzahl von Stapel-Offset-Adressen adressiert, damit eines oder mehrere der Stapelregister entsprechend dem Register- Stapel-Zustand spezifiziert wird.
einem mit einem computerverwendbaren Speichermedium, das ei nen darin enthaltenen computerlesbaren Code aufweist, der einen Computer dazu veranlaßt, ein Zielprogramm für eine Ziel-Computerarchitektur zu optimieren, die einen Register- Stapel enthält, der eine Vielzahl von Stapelregistern be sitzt, wobei der computerlesbare Code aufweist:
einen computerlesbaren Programm-Code, der derart ausgelegt ist, daß er den Computer dazu veranlaßt, einen Registerzu weisungs-Mechanismus auszuführen, der zur Zuweisung von ei nem oder mehreren Pseudoregistern zu einer Vielzahl von Sta pelregistern ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Beibe haltungsmechanismus auszuführen, der zur Beibehaltung eines Register-Stapel-Zustands ausgelegt ist, der die zugewiesenen Pseudoregister auf eine Vielzahl von Stapelregistern unter Verwendung einer Vielzahl von Stapel-Offset-Adressen abbil det, wobei der Register-Stapel-Zustand auf Veränderungen des Register-Stapels reagiert; und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Be fehlsadressierungs-Konversionsmechanismus auszuführen, der zur Umwandlung eines Befehls ausgelegt ist, der eines der zugewiesenen Pseudoregister zur Verwendung von einer der Vielzahl von Stapel-Offset-Adressen adressiert, damit eines oder mehrere der Stapelregister entsprechend dem Register- Stapel-Zustand spezifiziert wird.
37. Computerprogramm-Produkt nach Anspruch 36, wobei der Be
fehls-Adressierungs-Konversionsmechanismus ferner einen compu
terlesbaren Programm-Code aufweist, der derart konfiguriert
ist, daß er den Computer dazu veranlaßt, einen Befehlstrans
formations-Mechanismus auszuführen, der zur Transformation ei
nes 3-Operanden-Befehls zu einem oder mehreren Befehlen mit
weniger als drei Operanden ausgelegt ist.
38. Computerprogramm-Produkt nach Anspruch 36, welches ferner
aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungsmechanismus auszuführen, der zur Normalisierung des Register-Stapels bei Austreten am Ausgang aus dem ersten Basisblock zur Übereinstimmung des Register-Stapels bei des sen Austritt bei Eintritt in den zweiten Basisblock ausge legt ist.
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungsmechanismus auszuführen, der zur Normalisierung des Register-Stapels bei Austreten am Ausgang aus dem ersten Basisblock zur Übereinstimmung des Register-Stapels bei des sen Austritt bei Eintritt in den zweiten Basisblock ausge legt ist.
39. Computerprogramm-Produkt nach Anspruch 38, welches ferner
aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungsbefehl-Einfügemechanismus auszuführen, der zum Hinzufügen von einem oder mehreren Normalisierungsbefehlen in den ersten Basisblock ausgelegt ist.
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungsbefehl-Einfügemechanismus auszuführen, der zum Hinzufügen von einem oder mehreren Normalisierungsbefehlen in den ersten Basisblock ausgelegt ist.
40. Computerprogramm-Produkt nach Anspruch 38, welches ferner
aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungs-Befehl-Einfügemechanismus auszuführen, der zum Hinzufügen von einem oder mehreren Normalisierungsbefehlen in den zweiten Basisblock ausgelegt ist.
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungs-Befehl-Einfügemechanismus auszuführen, der zum Hinzufügen von einem oder mehreren Normalisierungsbefehlen in den zweiten Basisblock ausgelegt ist.
41. Computerprogramm-Produkt nach Anspruch 38, welches ferner
aufweist:
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Basis block-Einfügemechanismus auszuführen, der zum Hinzufügen ei nes Normalisierungs-Basisblocks zwischen dem ersten Basis block und dem zweiten Basisblock ausgelegt ist; und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungs-Befehl-Einfügemechanismus auszuführen, der zum Hinzufügen von einem oder mehreren Normalisierungsbefehlen in dem Normalisierungs-Basisblock ausgelegt ist.
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Basis block-Einfügemechanismus auszuführen, der zum Hinzufügen ei nes Normalisierungs-Basisblocks zwischen dem ersten Basis block und dem zweiten Basisblock ausgelegt ist; und
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Norma lisierungs-Befehl-Einfügemechanismus auszuführen, der zum Hinzufügen von einem oder mehreren Normalisierungsbefehlen in dem Normalisierungs-Basisblock ausgelegt ist.
42. Computergesteuertes Verfahren zur effizienten Verwendung
eines Register-Stapels, der eine Vielzahl von Stapelregistern
innerhalb einer Ziel-Computerarchitektur besitzt, wobei das
Verfahren, die Verwendung von Techniken erlaubt, die bei der
Erzeugung von Befehlen mit fest vergebenen Registernamen ver
wendbar sind, zur Erzeugung von Befehlen, die die Vielzahl von
Stapelregistern verwenden, wobei das Verfahren die folgenden
Schritt aufweist:
- a) Erzeugen einer Vielzahl von Befehlen ohne Ablege- oder Abhebe-Operationen, deren Operanden eines oder mehrere Pseudoregister mit festen Namen anstatt einer Vielzahl von Stapelregistern sind, die tatsächlich in der Ziel- Computerarchitektur implementiert sind;
- b) Transformieren der Vielzahl von Befehlen in eine Viel zahl von neuen Befehlen mit einem Operanden-Format, das demjenigen der Befehle der Ziel-Computerarchitektur entspricht, wobei insbesondere 3-Operanden-Befehle mit 2-Quellen-Operanden und einem Ziel-Operand in 2- Operanden-Befehle mit gemeinsamer Quelle und Ziel transformiert werden;
- c) Analysieren der Vielzahl von neuen Befehlen zur Bestim mung von Lebensdauer-Informationen für eines oder meh rere der Pseudoregister;
- d) Verwendung der Lebensdauer-Information zum Einführen von einer oder mehrerer Abhebe-Operationen in die Viel zahl von neuen Befehlen, wobei tote Werte eliminiert werden;
- e) Initialisieren einer Abbildungseinrichtung von einem oder mehreren Pseudoregistern zu der Vielzahl von Sta pelregistern;
- f) Durchführen der folgenden computergesteuerten Schritte
für jeden der Vielzahl von neuen Befehlen;
- 1. Ersetzen innerhalb des neuen Befehls des einen oder mehrerer Pseudoregister durch eines oder mehrerer der Vielzahl von Stapelregister unter Verwendung der Abbildungseinrichtung;
- 2. Erneuern der Abbildungseinrichtung zur Wiederga be der Stapel-Effekte beim Abbilden des neuen Befehls;
43. Vorrichtung mit einer zentralen Datenverarbeitungseinheit
(CPU) und einem Speicher, der an die CPU zur effizienten Ver
wendung eines Register-Stapels gekoppelt ist, der eine Viel
zahl von Stapelregistern innerhalb einer Ziel-
Computerarchitektur enthält, wobei die Vorrichtung erlaubt
Techniken, die zur Erzeugung von Befehlen mit festen Register
namen verwendbar sind, bei der Erzeugung von Befehlen, die die
Vielzahl von Stapelregistern verwenden, zu verwenden, wobei
die Vorrichtung aufweist:
einen Befehlserzeugungs-Mechanismus, der zur Erzeugung einer Vielzahl von Befehlen ohne Ablege- oder Abhebeoperationen ausgelegt ist, deren Operanden eines oder mehrere Pseudore gister mit festen Namen anstatt eine Vielzahl von Stapelre gistern sind, die tatsächlich in der Ziel- Computerarchitektur implementiert sind;
einen Befehlstransformations-Mechanismus, der zur Transfor mation der Vielzahl von Befehlen in eine Vielzahl von neuen Befehlen mit einem Operanden-Format ausgelegt ist, das dem jenigen der Befehle der Ziel-Computerarchitektur entspricht, wobei insbesondere 3-Operanden-Befehle mit 2-Quellen- Operanden und einem Ziel-Operand in 2-Operanden-Befehle mit gemeinsamer Quelle und Ziel transformiert werden;
einen Befehls-Analyse-Mechanismus, der zur Analyse der Viel zahl von neuen Befehlen zur Bestimmung von Lebensdauer- Information für das eine oder mehrere Pseudoregister ausge legt ist;
einen Tot-Wert-Beseitigungsmechanismus, der die Lebensdauer- Information zum Einführen von einer oder mehreren Abhebeope rationen in die Vielzahl von neuen Befehlen verwendet, wobei die toten Werte beseitigt werden;
einen Initialisierungsmechanismus, der zur Initialisierung einer Abbildungseinrichtung von einem oder mehreren Pseudo registern auf die Vielzahl von Stapelregistern ausgelegt ist;
einem Pseudoregister-Konversionsmechanismus, der zur Konver sion von jedem der Vielzahl von neuen Befehlen ausgelegt ist, wobei der Pseudoregister-Konversionsmechanismus auf weist,
einen Operanden-Ersetzungsmechanismus, der zum Ersetzen in nerhalb des neuen Befehls von einem oder mehreren Pseudore gistern durch eines oder mehrere der Vielzahl von Stapelre gistern unter Verwendung der Abbildungseinrichtung ausgelegt ist;
einen Anpassungsmechanismus, der zur Erneuerung der Abbil dungseinrichtung zur Wiedergabe der Stapel-Effekte beim Ab bilden des neuen Befehls ausgelegt ist, wobei die Vorrichtung Techniken beinhaltet, die zur Erzeu gung von Befehlen mit fest vergebenen Namen verwendbar sind zur Erzeugung von Befehlen, die die Vielzahl von Stapel- Adressen verwenden.
einen Befehlserzeugungs-Mechanismus, der zur Erzeugung einer Vielzahl von Befehlen ohne Ablege- oder Abhebeoperationen ausgelegt ist, deren Operanden eines oder mehrere Pseudore gister mit festen Namen anstatt eine Vielzahl von Stapelre gistern sind, die tatsächlich in der Ziel- Computerarchitektur implementiert sind;
einen Befehlstransformations-Mechanismus, der zur Transfor mation der Vielzahl von Befehlen in eine Vielzahl von neuen Befehlen mit einem Operanden-Format ausgelegt ist, das dem jenigen der Befehle der Ziel-Computerarchitektur entspricht, wobei insbesondere 3-Operanden-Befehle mit 2-Quellen- Operanden und einem Ziel-Operand in 2-Operanden-Befehle mit gemeinsamer Quelle und Ziel transformiert werden;
einen Befehls-Analyse-Mechanismus, der zur Analyse der Viel zahl von neuen Befehlen zur Bestimmung von Lebensdauer- Information für das eine oder mehrere Pseudoregister ausge legt ist;
einen Tot-Wert-Beseitigungsmechanismus, der die Lebensdauer- Information zum Einführen von einer oder mehreren Abhebeope rationen in die Vielzahl von neuen Befehlen verwendet, wobei die toten Werte beseitigt werden;
einen Initialisierungsmechanismus, der zur Initialisierung einer Abbildungseinrichtung von einem oder mehreren Pseudo registern auf die Vielzahl von Stapelregistern ausgelegt ist;
einem Pseudoregister-Konversionsmechanismus, der zur Konver sion von jedem der Vielzahl von neuen Befehlen ausgelegt ist, wobei der Pseudoregister-Konversionsmechanismus auf weist,
einen Operanden-Ersetzungsmechanismus, der zum Ersetzen in nerhalb des neuen Befehls von einem oder mehreren Pseudore gistern durch eines oder mehrere der Vielzahl von Stapelre gistern unter Verwendung der Abbildungseinrichtung ausgelegt ist;
einen Anpassungsmechanismus, der zur Erneuerung der Abbil dungseinrichtung zur Wiedergabe der Stapel-Effekte beim Ab bilden des neuen Befehls ausgelegt ist, wobei die Vorrichtung Techniken beinhaltet, die zur Erzeu gung von Befehlen mit fest vergebenen Namen verwendbar sind zur Erzeugung von Befehlen, die die Vielzahl von Stapel- Adressen verwenden.
44. Computerprogramm-Produkt, welches es gestattet, Techniken,
die zur Erzeugung von Befehlen mit festen Registernamen ver
wendbar sind bei der Erzeugung von Befehlen zu verwenden, die
eine Vielzahl von Stapelregistern verwenden, mit:
einem computerverwendbaren Speichermedium mit dem darin ent haltenen computerlesbaren Code, der einen Computer dazu ver anlaßt, einen Register-Stapel zu verwenden, der eine Viel zahl von Stapelregistern innerhalb einer Ziel- Computerarchitektur besitzt, wobei der computerlesbare Code aufweist:
einen computerlesbaren Code, der derart ausgelegt ist, daß er den Computer dazu veranlaßt, einen Befehlserzeugungs- Mechanismus auszuführen, der zur Erzeugung einer Vielzahl von Befehlen ohne Ablege- oder Abhebeoperationen ausgelegt ist, deren Operanden ein oder mehrere Pseudoregister mit fe sten Namen anstatt der Stapelregister sind, die tatsächlich in der Ziel-Computerarchitektur implementiert sind;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Be fehlstransformations-Mechanismus auszuführen, der zur Trans formation der Vielzahl von Befehlen in eine Vielzahl von neuen Befehlen mit einem Operanden-Format ausgelegt ist, das demjenigen der Befehle der Ziel-Computerarchitektur ent spricht, wobei insbesondere 3-Operanden-Befehle mit 2- Quellen-Operanden und einem Ziel-Operand in 2-Operanden- Befehle mit gemeinsamer Quelle und Ziel transformiert wer den;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Analy semechanismus auszuführen, der zur Analyse der Vielzahl von neuen Befehlen zur Bestimmung von Lebensdauer-Informationen für eines oder mehrere Pseudoregister ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Tot- Wert-Eliminierungsmechanismus auszuführen, der zur Verwen dung der Lebensdauer-Information für das Einführen von einer oder mehrerer Abhebeoperationen in die Vielzahl von neuen Befehlen ausgelegt ist, wobei die toten Werte eliminiert werden;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Initia lisierungs-Mechanismus auszuführen, der zur Initialisierung einer Abbildungseinrichtung von einer oder mehrerer Pseudo register zu einer Vielzahl von Stapelregistern ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Pseudo register-Konversionsmechanismus auszuführen, der zur Konver sion von jedem der Vielzahl von neuen Befehlen ausgelegt ist, wobei der Pseudoregister-Konversionsmechanismus auf weist:
einen computerlesbaren Programm-Code, der derart ausgelegt ist, daß er den Computer dazu veranlaßt, einen Operanden- Ersetzungsmechanismus auszuführen, der zum Ersetzen inner halb des neuen Befehls von einem oder mehreren Pseudoregi stern durch eines oder mehrere der Vielzahl von Stapelregi ster unter Verwendung der Abbildungseinrichtung ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Anpas sungsmechanismus auszuführen, der zum Erneuern der Abbil dungseinrichtung zur Wiedergabe der Stapel-Effekte bei der Abbildung des neuen Befehls ausgelegt ist;
wobei das Produkt Techniken, die zur Erzeugung von Befehlen mit festen Registernamen verwendbar sind, zur Erzeugung von Befehlen beinhaltet, die die Vielzahl von Stapelregister verwenden.
einem computerverwendbaren Speichermedium mit dem darin ent haltenen computerlesbaren Code, der einen Computer dazu ver anlaßt, einen Register-Stapel zu verwenden, der eine Viel zahl von Stapelregistern innerhalb einer Ziel- Computerarchitektur besitzt, wobei der computerlesbare Code aufweist:
einen computerlesbaren Code, der derart ausgelegt ist, daß er den Computer dazu veranlaßt, einen Befehlserzeugungs- Mechanismus auszuführen, der zur Erzeugung einer Vielzahl von Befehlen ohne Ablege- oder Abhebeoperationen ausgelegt ist, deren Operanden ein oder mehrere Pseudoregister mit fe sten Namen anstatt der Stapelregister sind, die tatsächlich in der Ziel-Computerarchitektur implementiert sind;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Be fehlstransformations-Mechanismus auszuführen, der zur Trans formation der Vielzahl von Befehlen in eine Vielzahl von neuen Befehlen mit einem Operanden-Format ausgelegt ist, das demjenigen der Befehle der Ziel-Computerarchitektur ent spricht, wobei insbesondere 3-Operanden-Befehle mit 2- Quellen-Operanden und einem Ziel-Operand in 2-Operanden- Befehle mit gemeinsamer Quelle und Ziel transformiert wer den;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Analy semechanismus auszuführen, der zur Analyse der Vielzahl von neuen Befehlen zur Bestimmung von Lebensdauer-Informationen für eines oder mehrere Pseudoregister ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Tot- Wert-Eliminierungsmechanismus auszuführen, der zur Verwen dung der Lebensdauer-Information für das Einführen von einer oder mehrerer Abhebeoperationen in die Vielzahl von neuen Befehlen ausgelegt ist, wobei die toten Werte eliminiert werden;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Initia lisierungs-Mechanismus auszuführen, der zur Initialisierung einer Abbildungseinrichtung von einer oder mehrerer Pseudo register zu einer Vielzahl von Stapelregistern ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Pseudo register-Konversionsmechanismus auszuführen, der zur Konver sion von jedem der Vielzahl von neuen Befehlen ausgelegt ist, wobei der Pseudoregister-Konversionsmechanismus auf weist:
einen computerlesbaren Programm-Code, der derart ausgelegt ist, daß er den Computer dazu veranlaßt, einen Operanden- Ersetzungsmechanismus auszuführen, der zum Ersetzen inner halb des neuen Befehls von einem oder mehreren Pseudoregi stern durch eines oder mehrere der Vielzahl von Stapelregi ster unter Verwendung der Abbildungseinrichtung ausgelegt ist;
einen computerlesbaren Programm-Code, der derart konfigu riert ist, daß er den Computer dazu veranlaßt, einen Anpas sungsmechanismus auszuführen, der zum Erneuern der Abbil dungseinrichtung zur Wiedergabe der Stapel-Effekte bei der Abbildung des neuen Befehls ausgelegt ist;
wobei das Produkt Techniken, die zur Erzeugung von Befehlen mit festen Registernamen verwendbar sind, zur Erzeugung von Befehlen beinhaltet, die die Vielzahl von Stapelregister verwenden.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/121,167 US6018799A (en) | 1998-07-22 | 1998-07-22 | Method, apparatus and computer program product for optimizing registers in a stack using a register allocator |
Publications (1)
Publication Number | Publication Date |
---|---|
DE19934424A1 true DE19934424A1 (de) | 2000-01-27 |
Family
ID=22395001
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE19934424A Withdrawn DE19934424A1 (de) | 1998-07-22 | 1999-07-22 | Verfahren, Vorrichtung und Computer-Programm-Produkt zur Optimierung von Registern in einem Stapel unter Verwendung eines Register-Zuordners |
Country Status (5)
Country | Link |
---|---|
US (1) | US6018799A (de) |
JP (1) | JP2000066901A (de) |
CA (1) | CA2278322A1 (de) |
DE (1) | DE19934424A1 (de) |
GB (1) | GB2343028B (de) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6662361B1 (en) * | 2000-01-14 | 2003-12-09 | International Business Machines Corporation | Method, system, program, and data structures for transforming an instruction in a first bit architecture to an instruction in a second bit architecture |
US7120904B1 (en) * | 2000-04-19 | 2006-10-10 | Intel Corporation | Data-flow method for optimizing exception-handling instructions in programs |
US6883165B1 (en) | 2000-09-28 | 2005-04-19 | International Business Machines Corporation | Apparatus and method for avoiding deadlocks in a multithreaded environment |
US6912647B1 (en) | 2000-09-28 | 2005-06-28 | International Business Machines Corportion | Apparatus and method for creating instruction bundles in an explicitly parallel architecture |
US6886094B1 (en) | 2000-09-28 | 2005-04-26 | International Business Machines Corporation | Apparatus and method for detecting and handling exceptions |
US6799262B1 (en) | 2000-09-28 | 2004-09-28 | International Business Machines Corporation | Apparatus and method for creating instruction groups for explicity parallel architectures |
US6779106B1 (en) | 2000-09-28 | 2004-08-17 | International Business Machines Corporation | Apparatus and method for an enhanced integer divide in an IA64 architecture |
US6675376B2 (en) * | 2000-12-29 | 2004-01-06 | Intel Corporation | System and method for fusing instructions |
JP3763518B2 (ja) * | 2001-05-29 | 2006-04-05 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ、そのコンパイル方法およびプログラム |
GB2380003A (en) * | 2001-07-03 | 2003-03-26 | Digital Comm Technologies Ltd | Method and apparatus for executing stack based programs using a register based processor |
GB2377288A (en) * | 2001-07-06 | 2003-01-08 | Digital Comm Technologies Ltd | Executing branch instructions of a stack based program on a register based processor |
US7415723B2 (en) * | 2002-06-11 | 2008-08-19 | Pandya Ashish A | Distributed network security system and a hardware processor therefor |
US7627693B2 (en) * | 2002-06-11 | 2009-12-01 | Pandya Ashish A | IP storage processor and engine therefor using RDMA |
US20050278707A1 (en) * | 2004-06-09 | 2005-12-15 | Intel Corporation | Method and system providing virtual resource usage information |
US7661099B2 (en) * | 2004-06-29 | 2010-02-09 | International Business Machines Corporation | Using idempotent operations to improve transaction performance |
KR100597414B1 (ko) | 2004-10-21 | 2006-07-05 | 삼성전자주식회사 | 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법 |
KR100725393B1 (ko) | 2005-05-19 | 2007-06-07 | 삼성전자주식회사 | 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법 |
US7647482B2 (en) * | 2006-03-31 | 2010-01-12 | Intel Corporation | Methods and apparatus for dynamic register scratching |
US9141557B2 (en) | 2006-12-08 | 2015-09-22 | Ashish A. Pandya | Dynamic random access memory (DRAM) that comprises a programmable intelligent search memory (PRISM) and a cryptography processing engine |
US7996348B2 (en) | 2006-12-08 | 2011-08-09 | Pandya Ashish A | 100GBPS security and search architecture using programmable intelligent search memory (PRISM) that comprises one or more bit interval counters |
US9690591B2 (en) * | 2008-10-30 | 2017-06-27 | Intel Corporation | System and method for fusing instructions queued during a time window defined by a delay counter |
US20120185670A1 (en) * | 2011-01-14 | 2012-07-19 | Toll Bret L | Scalar integer instructions capable of execution with three registers |
JP5846006B2 (ja) * | 2012-03-29 | 2016-01-20 | 富士通株式会社 | プログラム、コード生成方法および情報処理装置 |
US9921814B2 (en) | 2015-08-24 | 2018-03-20 | International Business Machines Corporation | Control flow graph analysis |
WO2018174925A1 (en) * | 2017-03-20 | 2018-09-27 | Intel Corporation | Systems, methods, and apparatuses for dot production operations |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5276891A (en) * | 1990-01-11 | 1994-01-04 | Bull Hn Information Systems Inc. | Alignment of sign, data, edit byte operand results for storage in memory |
US5339238A (en) * | 1991-03-07 | 1994-08-16 | Benson Thomas R | Register usage tracking in translating code for different machine architectures by forward and reverse tracing through the program flow graph |
US5634118A (en) * | 1995-04-10 | 1997-05-27 | Exponential Technology, Inc. | Splitting a floating-point stack-exchange instruction for merging into surrounding instructions by operand translation |
US5898850A (en) * | 1997-03-31 | 1999-04-27 | International Business Machines Corporation | Method and system for executing a non-native mode-sensitive instruction within a computer system |
GB2327784B (en) * | 1997-07-28 | 2002-04-03 | Microapl Ltd | A method of carrying out computer operations |
-
1998
- 1998-07-22 US US09/121,167 patent/US6018799A/en not_active Expired - Fee Related
-
1999
- 1999-07-14 GB GB9916534A patent/GB2343028B/en not_active Expired - Fee Related
- 1999-07-21 CA CA002278322A patent/CA2278322A1/en not_active Abandoned
- 1999-07-22 JP JP11207155A patent/JP2000066901A/ja active Pending
- 1999-07-22 DE DE19934424A patent/DE19934424A1/de not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
GB2343028A (en) | 2000-04-26 |
US6018799A (en) | 2000-01-25 |
GB2343028B (en) | 2003-01-08 |
JP2000066901A (ja) | 2000-03-03 |
CA2278322A1 (en) | 2000-01-22 |
GB9916534D0 (en) | 1999-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE19934424A1 (de) | Verfahren, Vorrichtung und Computer-Programm-Produkt zur Optimierung von Registern in einem Stapel unter Verwendung eines Register-Zuordners | |
DE69918334T2 (de) | Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen | |
DE19945992B4 (de) | Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren | |
DE112005003852B4 (de) | Verfahren und Vorrichtung zum Vektorisieren mehrerer Eingabebefehle | |
DE112012000303B4 (de) | Dynamische binäre Optimierung | |
DE69722138T2 (de) | Code-Optimierer für Pipeline-Rechner | |
DE60034263T2 (de) | Verfahren zum Identifizieren von Aufrufen in Javapaketen wobei die Ziele sicher im selben Paket liegen | |
US6725448B1 (en) | System to optimally create parallel processes and recording medium | |
DE60208710T2 (de) | Plattformunabhängige im-voraus-kompilierung | |
DE69909945T2 (de) | Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen | |
DE19681256C2 (de) | Ausführung von Anwendungen am Platz vom Speicher | |
DE112005002317B4 (de) | Verfahren für die Verarbeitung von Abhängigkeitsketten | |
DE69737750T2 (de) | Erst- und Zweitprozessoren verwendetes Verfahren | |
DE69825751T2 (de) | Garbage-sammlungs-anordnung und verfahren mit begrenzter pausenzeit und mit einer schreibschranke die mit einer quelleninstanz eines partiell relokierten objektes assoziiert ist | |
CN1186722C (zh) | 用于使用寄存器分配器建立调用约定序言和收尾程序代码的方法和装置 | |
DE19983504B4 (de) | Verbesserung der Portabilität von digitalen Bildern | |
DE112020003128T5 (de) | Dilatierte faltung mit systolischem array | |
DE60028069T2 (de) | Verfahren und vorrichtung zur kontexterhaltung unter ausführung von übersetzten befehlen | |
DE112012000195T5 (de) | Ein Algorithmus zur Vektorisierung und Speicherkoaleszierung während Kompilierung | |
DE112012000628T5 (de) | Systeme und Verfahren zur Verarbeitung von maschinellen Lernalgorithmen in einer Mapreduce-Umgebung | |
DE19534752A1 (de) | Verfahren und System zum Liefern einer Unterstützung für eine spekulative Ausführung | |
DE202014010942U1 (de) | Rahmenumgebung für anwenderorientierte, profilgesteuerte Optimierungen | |
DE60002327T2 (de) | Ableitung von operandtypen innerhalb einer zwischensprache | |
DE102004061597A1 (de) | Betriebssystem, das den Lauf von Echtzeitprogrammen ermöglicht, Steuerungsverfahren hierfür sowie Verfahren zum Laden von DLLs | |
US20040226005A1 (en) | Method and system for register allocation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8139 | Disposal/non-payment of the annual fee |