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-Zuordners

Info

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
Application number
DE19934424A
Other languages
English (en)
Inventor
David M Cox
David A Seberger
Serguei L Wenitsky
Serguei V Morosov
David R Wallace
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of DE19934424A1 publication Critical patent/DE19934424A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

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

Hintergrund der Erfindung Gebiet der Erfindung
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.
Hintergrund
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.
Zusammenfassung der Erfindung
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.
Beschreibung der bevorzugten Ausführungsformen
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:
Tabelle 1
wobei "prn" Pseudoregister "n" angibt.
Die Tabelle 2 stellt dar, wie die Pseudoregister den StapelRe­ gistern zugewiesen werden unter Verwendung des Register- Stapel-Zustands.
Tabelle 2
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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;
wobei die Techniken, die zur Erzeugung von Befehlen mit festen Registernamen verwendbar sind, zur Erzeu­ gung von Befehlen verwendet werden, die die Vielzahl von Stapelregistern verwenden.
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.
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.
DE19934424A 1998-07-22 1999-07-22 Verfahren, Vorrichtung und Computer-Programm-Produkt zur Optimierung von Registern in einem Stapel unter Verwendung eines Register-Zuordners Withdrawn DE19934424A1 (de)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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