DE69614183T2 - Programmübersetzungsgerät und Prozessor, die eine schnelle Ausführung von Unterprogrammsprungbefehlen erreichen - Google Patents
Programmübersetzungsgerät und Prozessor, die eine schnelle Ausführung von Unterprogrammsprungbefehlen erreichenInfo
- Publication number
- DE69614183T2 DE69614183T2 DE69614183T DE69614183T DE69614183T2 DE 69614183 T2 DE69614183 T2 DE 69614183T2 DE 69614183 T DE69614183 T DE 69614183T DE 69614183 T DE69614183 T DE 69614183T DE 69614183 T2 DE69614183 T2 DE 69614183T2
- Authority
- DE
- Germany
- Prior art keywords
- instruction
- branch
- register
- subroutine
- file
- 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.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 claims description 32
- 238000013519 translation Methods 0.000 claims description 22
- 238000001514 detection method Methods 0.000 claims description 8
- 230000006870 function Effects 0.000 description 8
- 230000003111 delayed effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
- G06F8/4451—Avoiding pipeline stalls
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Description
- Die vorliegende Erfindung bezieht sich auf ein Programm-Übersetzungsgerät, das Quellenprogramme in Maschinen-Instruktions-Sequenzen umsetzt und die Maschinen- Instruktions-Sequenzen miteinander verknüpft, und auf einen Prozessor, der die Maschinen-Instruktions-Sequenzen ausführt, die durch das Programm-Übersetzungsgerät erzeugt worden sind. Die vorliegende Erfindung bezieht sich insbesondere auf ein Programm-Übersetzungsgerät und einen Prozessor, die frei von Pipeline-Blockierungen während der Ausführung einer Verzweigungs-Instruktion, die eine Verzweigung zu einem Unterprogramm bewirkt, sind.
- Eine Pipeline-Verarbeitung ist eine der grundsätzlichen Techniken zum Beschleunigen der Arbeit einer CPU, die nachfolgend als ein Prozessor bezeichnet wird.
- Bei der Pipeline-Verarbeitung wird der Prozeß einer Instruktion in eine Vielzahl von Stufen unterteilt und alle Stufen werden zu derselben Zeit ausgeführt, um den Prozeß zu beschleunigen.
- Allerdings wird die Ausführung einer Verzweigungs-Instruktion durch eine Pipeline- Blockierung begleitet, was dazu führt, daß die Funktionsweise der Pipeline-Verarbeitung fehlschlägt, das theoretische Niveau zu erreichen. Dieses Phänomen wird als Verzweigungs-Gefahr bezeichnet.
- Fig. 1 zeigt eine Instruktions-Sequenz, die die Verzweigungs-Gefahr mit sich bringt.
- Fig. 2 stellt den Pipeline-Ablauf der Instruktions-Sequenz in Taktzyklen 1 bis 6 dar. Das Pipeline-Verarbeiten ist aus drei Stufen zusammengesetzt: Instruktions-Abruf (nachfolgend IF), Instruktions-Decodieren (nachfolgend DEC) und Instruktions-Ausführung und effektive Adressen-Generation (nachfolgend EX).
- Es wird angenommen, daß eine Instruktion 1 eine Verzweigungs-Instruktion ist, die eine Verzweigung zu einem Unterprogramm bewirkt, das an einer Adresse A startet. Die Instruktion 1 wird an einer IF-Stufe im Taktzyklus 1 abgerufen und wird an einer EX-Stufe im Taktzyklus 3 ausgeführt. Demzufolge wird eine Instruktion A an der Adresse A in dem Taktzyklus 4 abgerufen und wird in dem Taktzyklus 6 ausgeführt. Die Ausführung der Instruktion A wird drei Taktzyklen nach der Ausführung der Instruktion 1 verzögert, da die Instruktionen 2 und 3 bereits in der Pipeline-Verarbeitung sind und aufgehoben bzw. für Null erklärt werden müssen. Das Vorhandensein von Pipeline-Blockierungen ist in grau in Fig. 2 angezeigt.
- Ein Verfahren zum Lösen einer solchen Verzweigungs-Gefahr ist als verzögertes Verzweigungs-Verfahren bekannt, auf das in David A. Petterson and John L. Hennesy " Computer Architecture: A Quantitative Approach", Morgan Kaufmann Publishers, 1990, Seiten 265-270, Bezug genommen ist.
- In dem verzögerten Verzweigungs-Verfahren plant ein Compiler ablaufmäßig Instruktionen in der Art und Weise, daß eine Verzweigungs-Ziel-Instruktion zuvor in einer Stelle (Abzweig-Verzögerungs-Schlitz) plaziert wird, die unmittelbar der Verzweigungs-Instruktion folgt.
- Fig. 3 stellt eine Instruktions-Sequenz dar, wo Verzweigungs-Ziel-Instruktionen A und B an Verzweigungs-Verzögerungs-Schlitzen plaziert sind, nämlich Adressen 2 und 3 jeweils.
- Fig. 4 stellt den Pipeline-Fluß der Instruktions-Sequenzen, gezeigt in Fig. 3, dar. Wie aus dem Pipeline-Ablauf ersichtlich ist, bewirkt das verzögerte Verzweigungs-Verfahren kein Pipeline-Blockieren, da nicht notwendige Instruktionen nicht abgerufen werden. Demzufolge ist dabei kein Auftreten der Verzweigungs-Gefahr vorhanden.
- Allerdings besitzt das verzögerte Verzweigungs-Verfahren noch einen Nachteil dahingehend, daß eine Verzweigungs-Ziet-Instruktion nicht immer zu einem Verzweigungs- Verzögerungs-Schlitz bewegt werden kann, und, als Folge, wird eine Verzweigungs- Gefahr nicht immer gelöst.
- Genauer gesagt kann das Unterprogramm, das an der Adresse A in Fig. 1 startet, nicht durch den Compiler erkannt werden. Allgemein stellt ein Compiler eine Datei von Programmen als eine Einheit zusammen. Wenn ein Programm, das die Instruktion 1 umfaßt, und ein Unterprogramm, das die Instruktionen A und B umfaßt, in unterschiedlichen Dateien gespeichert werden, und wenn nur die Datei mit dem Programm gegeben ist, kann der Compiler nicht die Instruktionen A und B in den Verzweigungs-Verzögerungs-Schlitzen plazieren. Demzufolge ist, in dem Fall, bei dem eine Verzweigung zu einer Instruktion genommen wird, die in einer anderen Datei gespeichert ist, die Verzweigungs-Gefahr noch unvermeidbar.
- Um ein solches Problem zu lösen, kann ein Programm erzeugt werden, keine Verzweigung zu einem Unterprogramm in einer anderen Datei zu bewirken, oder alle in Bezug stehenden Unterprogramme können in derselben Datei durch Prüfen der Verzweigungs- Punkte eines Programms im voraus gespeichert werden.
- Allerdings muß in jedem Fall immer berücksichtigt werden, Verzweigungs-Ziel- Unterprogramme einzurichten, wenn ein Programm erzeugt wird, was die Betriebseffektivität beim Auslegen und Entwickeln von Programmen verschlechtert. Weiterhin muß die Größe von Dateien so erhöht werden, daß eine große Menge Zeit für eine Programm- Translation bzw. -Übersetzung erforderlich ist.
- Im Hinblick auf diese Probleme ist es die Aufgabe der vorliegenden Erfindung, ein Programm-Übersetzungs- bzw. -Translationsgerät zu schaffen, das ein Objekt-Progamm erzeugt, das ein Unterprogramm aufrufen kann, ohne ein Pipeline-Blockieren zu verursachen, sogar dann, wenn eine Instruktion, um ein Unterprogramm aufzurufen, und das Unterprogramm, das aufgerufen werden soll, in unterschiedlichen Dateien gespeichert ist, und schafft weiterhin einen Prozessor, der das Objekt-Programm ausführt.
- Die Aufgabe wird durch das Programm-Übersetzungsgerät und den Prozessor gelöst, die wie folgt arbeiten.
- Wenn ein Quellen-Programm in eine Maschinen-Instruktions-Sequenz übersetzt bzw. umgesetzt wird, wird die Stack- bzw. Ablagegröße, die für den Prozeß jedes Unterprogramms notwendig ist, umfaßt in dem Quellen-Programm, erfaßt und in einer Datei zusammen mit der Maschinen-Instruktions-Sequenz des entsprechenden Unterprogramms gespeichert. Dann wird, wenn die Maschinen-Instruktions-Sequenzen in unterschiedlichen Dateien miteinander verknüpft werden, eine Verzweigungs-Instruktion, die eine Verzweigung zu einem Unterprogramm bewirkt, von den Maschinen-Instruktions-Sequenzen erfaßt, eine Stack- bzw. Ablagegröße, die für den Prozeß des Verzweigungs-Ziel-Unterprogramms erforderlich ist, von der Datei gelesen, wo das Verzweigungs-Ziel-Unterprogramm gespeichert ist, und die Verzweigungs-Instruktion wird durch eine Instruktion ersetzt, die aufeinanderfolgend eine Verzweigungs-Operation durchführt, die eine Verzweigung zu dem Verzweigungs-Ziel-Unterprogramm bewirkt, und eine Ablage-Reservierungs-Operation, die eine Ablage für die Ablagegröße reserviert, durchführt.
- Der Prozessor, der ein solches Objekt-Programm ausführt, ruft keine Instruktion ab, die eine Ablage reserviert, nachdem eine Verzweigung zu einem Unterprogramm bewirkt worden ist. Anstelle davon führt der Prozessor dieselben Operationen, wie aufeinanderfolgendes Abrufen einer Instruktion, was eine Verzweigung zu einem Unterprogramm bewirkt, und eine andere Instruktion, die eine Ablage reserviert, durch.
- Die Aufgabe wird auch durch das Programm-Übersetzungsgerät und den Prozessor gelöst, die wie folgt arbeiten.
- Wenn ein Quellen-Programm in eine Maschinen-Instruktions-Sequenz übersetzt wird, wird der Name eines Registers, der in dem Prozeß jedes Unterprogramms gesichert werden muß, in dem Quellen-Programm erfaßt und in einer Datei zusammen mit der Maschinen- Instruktions-Sequenz des entsprechenden Unterprogramms gespeichert.
- Dann wird, wenn die Maschinen-Instruktions-Sequenzen in unterschiedlichen Dateien verknüpft werden, eine Verzweigungs-Instruktion, die eine Verzweigung zu einem Unterprogramm bewirkt, von den Maschinen-Instruktions-Sequenzen erfaßt, der Name des Registers, der gesichert werden soll, wird von der Datei, wo das Verzweigungs-Ziel- Unterprogramm gespeichert ist, gelesen, und die Verzweigungs-Instruktion wird durch eine Instruktion ersetzt, die darauffolgend eine Verzweigungs-Operation, die eine Verzweigung zu dem Verzweigungs-Ziel-Unterprogramm bewirkt, und eine Register-Sicherungs- Operation, die die Inhalte des Registers sichert, durchgeführt.
- Der Prozessor, der ein solches Objekt-Programm ausführt, ruft keine Instruktion ab, die die Inhalte des Registers reserviert, nachdem eine Verzweigung zu einem Unterprogramm verursacht worden ist. Anstelle davon führt der Prozessor dieselben Operationen wie sequentielles Abrufen einer Instruktion, was eine Verzweigung zu einem Unterprogramm und einer anderen Instruktion bewirkt, was die Inhalte des Registers sichert, durch. Die Aufgabe wird auch durch das Programm-Übersetzungsgerät und den Prozessor gelöst, die wie folgt arbeiten.
- Wenn ein Quellen-Programm in eine Maschinen-instruktions-Sequenz übersetzt wird, werden die Ablagegröße, die für den Prozeß jedes Unterprogramms notwendig ist, und der Name eines Registers, der in dem Prozeß jedes Unterprogramms gesichert werden soll, umfaßt in dem Quellen-Programm, erfaßt und in einer Datei zusammen mit der Maschinen-Instruktions-Sequenz des entsprechenden Unterprogramms gespeichert.
- Dann wird, wenn die Maschinen-Instruktions-Sequenzen in unterschiedlichen Dateien verknüpft werden, eine Verzweigungs-Instruktion, die eine Verzweigung zu einem Unterprogramm bewirkt, von den Maschinen-Instruktions-Sequenzen erfaßt, die Ablagegröße und der Name des Registers werden von der Datei gelesen, wenn das Verzweigungs-Ziel- Unterprograrnm gespeichert ist, und die Verzweigungs-Instruktion wird durch eine Instruktion ersetzt, die aufeinanderfolgend eine Verzweigungs-Operation durchführt, die eine Verzweigung zu einem Verzweigungs-Ziel-Unterprogramm bewirkt, und eine Ablage- Reservierungs-Operation, die einen Ablage für die Ablagegröße reserviert, und eine Register-Sicherungs-Operation, die die Inhalte des Registers sichert, durch.
- Der Prozessor, der ein solches Objekt-Programm ausführt, ruft nicht eine Instruktion, die eine Ablage für die Ablagegröße reserviert, und eine Instruktion, die die Inhalte des Registers speichert, nachdem eine Verzweigung zu einem Unterprogramm verursacht worden ist, ab. Anstelle davon führt der Prozessor dieselben Operationen wie ein sequentielles Abrufen einer Instruktion, die eine Verzweigung zu einem Unterprogramm bewirkt, einer Instruktion, die die Ablage reserviert, und einer Instruktion, die die Inhalte des Registers sichert, durch.
- Wie zuvor erläutert ist, haben das Programm-Übersetzungsgerät und der Prozessor der vorliegenden Erfindung Hochgeschwindigkeits-Verzweigungs-Operationen frei von einer Pipeline-Blockierung erreicht, gerade wenn eine Instruktion, ein Unterprogramm aufzurufen, und das Unterprogramm, das aufgerufen werden soll, in unterschiedlichen Dateien gespeichert sind.
- Diese und andere Aufgaben, Vorteile und Merkmale der Erfindung werden aus der nachfolgenden Beschreibung davon ersichtlich werden, die in Verbindung mit den beigefügten Zeichnungen vorgenommen wird, die eine spezifische Ausführungsform der Erfindung darstellen. In den Zeichnungen:
- Fig. 1 zeigt eine Instruktions-Sequenz, die eine Verzweigungs-Gefahr verursacht.
- Fig. 2 stellt den Pipeline-Ablauf der Instruktions-Sequenz, dargestellt in Fig. 1, dar, wenn sie durch den herkömmlichen Prozessor ausgeführt wird.
- Fig. 3 stellt die Instruktions-Sequenz, dargestellt in Fig. 1, in dem Fall dar, wo die Verzweigungs-Ziel-Instruktionen an Verzweigungs-Verzögerungs-Schlitzen plaziert werden.
- Fig. 4 stellt den Pipeline-Ablauf der Instruktions-Sequenz, dargestellt in Fig. 3, dar, wenn sie durch den herkömmlichen Prozessor ausgeführt wird.
- Fig. 5 stellt das Blockdiagramm des Programm-Übersetzungsgeräts der vorliegenden Erfindung dar.
- Fig. 6 stellt die Quellen-Liste eines Hauptprogramms f(), gespeichert in der Eingangs- Datei 101, dar.
- Fig. 7 stellt die Quellen-Liste eines Unterprogramms g(), gespeichert in der Eingangs- Datei 102; dar.
- Fig. 8 stellt eine Liste von Maschinen-Instruktionen dar, die in dem Hauptprogramm f() umfaßt sind, das in der Ausgangs-Datei 106 gespeichert ist.
- Fig. 9 stellt eine Liste von Maschinen-Instruktionen dar, die in dem Unterprogramm g() umfaßt sind, das in der Ausgangs-Datei 107 gespeichert ist.
- Fig. 10 stellt eine Liste von Objekt-Programmen dar, die in der Ausführungs-Datei 113 gespeichert sind.
- Fig. 11 stellt ein Blockdiagramm des Aufbaus des Prozessors der vorliegenden Erfindung dar.
- Fig. 12A stellt eine Instruktions-Sequenz dar, die eine gewöhnliche Verzweigungs- Instruktion: jsr, umfaßt, und Fig. 12B stellt einen Pipeline-Ablauf der Ausführung der Instruktions-Sequenz dar.
- Fig. 13A stellt eine Instruktions-Sequenz dar, die die Unterprogramm-Aufruf-Instruktion: call, umfaßt, und Fig. 13B stellt einen Pipeline-Ablauf der Ausführung der Instruktions- Sequenz dar.
- Fig. 5 stellt das Blockdiagramm des Programm-Übersetzungsgeräts der vorliegenden dar. Fig. 5 umfaßt Eingangs-Dateien 101 und 102 und Ausgangs-Dateien 106 und 107, die verarbeitet werden sollen, und eine Ausführungs-Datei 113, die erzeugt werden soll.
- Das Programm-Übersetzungsgerät ist hauptsächlich aus einer Translations- bzw. Übersetzungs-Einheit 103 und eine Verknüpfungs-Einheit 108 aufgebaut.
- Die Übersetzungs-Einheit 103 übersetzt hauptsächlich Quellen-Programme, die in einer Sprache mit hohem Niveau geschrieben sind, in Maschinen-Instruktions-Sequenzen. Die Übersetzungs-Einheit 103 nimmt die Eingangs-Dateien 101 und 102 auf und verarbeitet sie, wo Quellen-Programme gespeichert sind, und gibt die Ausgangs-Dateien 106 und 107 aus, wo Maschinen-Instruktions-Sequenzen gespeichert sind.
- Die Übersetzungs-Einheit übersetzt eine Datei als eine Einheit. Zum Beispiel bestimmt, wenn die Übersetzungs-Einheit 103 die Eingangs-Datei 101 nur empfängt, sie automatisch den Namen für die Eingangs-Datei 101 und gibt die Ausgangs-Datei 106 aus.
- Die Übersetzungs-Einheit 103 ist aus einer Maschinen-Instruktions-Erzeugungs-Einheit 104 und einer Bestimmungs-Einheit 105 aufgebaut. Die Maschinen-Instruktions- Erzeugungs-Einheit 104 übersetzt ein gegebenes Quellen-Programm in eine Maschinen- Instruktions-Saquenz über einige Analysen, wie beispielsweise eine semantische Analyse. Die Bestimmungs-Einheit 105 ist aus einer Ablagegröße-Bestimmungs-Einheit 105a und einer Sicherungs-Register-Bestimmungs-Einheit 105b aufgebaut.
- Die Ablagegröße-Bestimmungs-Einheit 105a berechnet eine Ablagegröße, um den Prozeß jedes Unterprogramms eines gegebenen Quellen-Programms aufzunehmen, erzeugt eine Pseudo-Instruktion, die die Ablagegröße, die berechnet ist, anzeigt, und plaziert die Pseudo-Instruktion an dem Anfang der Maschinen-Instruktions-Sequenz des Unterprogramms. Die Ablagegröße bezieht sich auf die Größe eines Operationsbereichs, der für den Prozeß eines Unterprogramms verwendet werden soll, und die Pseudo-Instruktion wird dazu verwendet, Informationen über die Ablagegröße, die berechnet ist, zu einer Verknüpfungs- Einheit 108 zu führen.
- Die Sicherungs-Register-Bestimmungs-Einheit 105b erfaßt ein Register, das vor dem Prozeß jedes Unterprogramms gesichert werden soll, erzeugt eine Pseudo-Instruktion, die das Register, das erfaßt ist, anzeigt, und plaziert die Pseudo-Instruktion an dem Anfang der Maschinen-Instruktions-Sequenz des Unterprogramms. Das Register, das gesichert werden soll, besitzt einen Wert, der dahingehend angenommen wird, daß er in dem Prozeß des Unterprogramms geteilt wird. Die Pseudo-Instruktion wird dazu verwendet, Informationen über das Register, das gesichert werden soll, zu der Verknüpfungs-Einheit 108 zu führen.
- Die Verknüpfungs-Einheit 108 erzeugt ein Objekt-Programm durch hauptsächlich Verknüpfen von Maschinen-Instruktions-Sequenzen, die der Prozessor der vorliegenden Erfindung ausführen kann. Gleichzeitig verarbeitet die Verknüpfungs-Einheit 108 die Pseudo-Instruktionen, die durch die Übersetzungs-Einheit 103 erzeugt worden sind. Da die Verknüpfungs-Operation dieselbe wie eine gewöhnliche Verknüpfungs-Operation ist, ist die Einheit, die für die Operation verantwortlich ist, nicht dargestellt.
- Die Verknüpfungs-Einheit 108 empfängt die Ausgangs-Dateien 106 und 107 und verarbeitet sie und gibt daraufhin die Ausführungs-Datei 113 aus.
- Die Verknüpfungs-Einheit 108 ist aus einer Verzweigungs-Instruktions-Erfassungs-Einheit 109, einer Datei-Such-Einheit 110, einer Akquisitions-Einheit 111 und einer Unterprogramm-Aufruf-Erzeugungs-Einheit 112 zusammengesetzt. Die Akquisitions-Einheit 111 ist aus einer Ablagegröße-Akquisitions-Einheit 111a und einer Sicherungs-Register- Akquisitions-EEinheit 111b aufgebaut.
- Die Verzweigungs-Instruktions-Erfassungs-Einheit 109 erfaßt eine Verzweigungs- Instruktion von einer Ausgangs-Datei, die empfangen ist, und informiert die Datei-Such- Einheit 110 über die Verzweigungs-Instruktion, die erfaßt ist. In diesem Fall bezieht sich die Verzweigungs-Instruktion auf eine Instruktion, die eine Verzweigung zu einem Unterprogramm bewirkt.
- Die Datei-Such-Einheit 110 identifiziert die Namen der Datei, wo ein Verzweigungs-Ziel- Unterprograrnm, bezeichnet durch die Verzweigungs-Instruktion, gespeichert ist, und informiert die Ablagegröße-Akquisitions-Einheit 111a und die Sicherungs-Register- Akquisitions-Einheit 111b über das Datei-Label, das identifiziert ist, zusammen mit dem Namen des Verzweigungs-Ziel-Unterprogramms.
- Die Ablagegröße-Akquisitions-Einheit 111a interpretiert die Pseudo-Instruktion, die an dem Anfang des Verzweigungs-Ziel-Unterprogramms in der Datei plaziert ist, die durch die Datei-Such-Einheit 110 informiert worden ist. Die Ablagegröße-Akquisitions-Einheit 111a informiert darin die Unterprogramm-Aufruf-Instruktions-Erzeugungs-Einheit 112 über die Ablagegröße die für den Prozeß des Unterprogramms notwendig ist.
- Die Sicherungs-Register-Akquisitions-Einheit 111b interpretiert die Pseudo-Instruktion in derselben Art und Weise und informiert die Unterprogramm-Aufruf-Instruktions- Erzeugungs-Einheit 112 über das Register, das gesichert werden soll.
- Die Unterprogramm-Aufruf-Instruktions-Erzeugungs-Einheit 112 erzeugt eine spezielle Unterprogramm-Aufruf-Instruktion, und zwar basierend auf der Ablagegröße und dem Register, informiert durch die Akquisitions-Einheit 111. Die spezielle Unterprogramm-Aufruf- Instruktion ist eine Maschinen-Instruktion, die der Prozessor in einer Sequenz von drei Operationen durchführt: eine Verzweigungs-Operation, eine Ablage-Reservierungs- Operation und eine Register-Sicherungs-Operation, ohne eine Pipeline-Blockierung zu verursachen.
- Die Verknüpfungs-Einheit 108 ersetzt eine Verzweigungs-Instruktion, die eine Verzweigung zu dem Unterprogramm bewirkt, gegen die spezielle Unterprogramm-Aufruf- Instruktionen, die durch die Unterprogram-Aufruf-Instruktions-Erzeugungs-Einheit 112 erzeugt worden ist. Die Verknüpfungs-Einheit 108 erzeugt dann ein Objekt-Programm, von den Maschinen-Instruktionen für eine Ablage-Reservierung und eine Register-Sicherung verzögert werden, und gibt das Objekt-Programm als die Ausführungs-Datei 113 aus. Der Prozeß der Verknüpfungs-Einheit 108 wird für jedes Verzweigungs-Instruktion vorgenommen, die durch die Verzweigungs-Instruktions-Erfassungs-Einheit 109 erfaßt worden ist.
- Die Operation bzw. Betriebsweise des Programm-Übersetzungsgeräts der vorliegenden Erfindung wird nachfolgend, mit einem spezifischen Programm, erläutert.
- Wie in Fig. 6 dargestellt ist, speichert die Eingangs-Datei 101 momentan das Hauptprogramm f(), das ein Unterprogramm g() mit zwei Argumenten aufruft.
- Wie in Fig. 7 dargestellt ist, speichert die Eingangs-Datei 102 momentan ein Unterprogramm g(), das die Summe und die Differenz zwischen den zwei Argumenten berechnet. Wenn die Übersetzungs-Einheit 103 die Eingangs-Datei 101 empfangen hat, übersetzt sie das Hauptprogramm f() in eine Maschinen-Instruktions-Sequenz, bestimmt die Ablagegröße, die durch das Hauptprogramm f() erforderlich ist, und das Register, das gesichert werden soll, und erzeugt die Ausgangs-Datei 106 und gibt sie aus, wie dies in Fig. 8 dargestellt ist.
- In derselben Art und Weise übersetzt, wenn die Übersetzungs-Einheit 103 die Eingangs- Datei 102, dargestellt in Fig. 7, empfangen hat, sie das Unterprogramm g() in eine Maschinen-Instruktions-Sequenz, bestimmt die Ablagegröße, die durch das Unterprogramm g() erforderlich ist, und das Register, das gesichert werden soll, und erzeugt die Ausgangs-Datei 107 und gibt sie aus, wie dies in Fig. 9 dargestellt ist.
- Die Bedeutung jeder der Maschinen-Instruktionen in den Ausgangs-Dateien 106 und 107 ist wie folgt.
- _f zeigt das Label der Funktion an.
- .STACKSIZE s zeigt an, daß die Ablagegröße, die für den Prozeß der Funktion erforderlich ist, s-Byte lang ist.
- .REGLIST r1, r2 zeigt an, daß Register, die vor dem Prozeß der Funktion gesichert werden sollen, r1 und r2 sind.
- sp zeigt einen Ablage-Hinweiszeiger an.
- #xxxx zeigt an, daß der Zwischen-Wert xxxx ist.
- (sp+xxx) zeigt Daten an, deren Adresse sp+xxxx in dem Speicher ist.
- add src, dst zeigt an, daß ein Wert von dst+src zu dst bewegt wird.
- sub src, dst zeigt an, daß ein Wert von dst-src zu dst bewegt wird.
- mov src, dst zeigt an, daß src zu dst bewegt wird.
- jsr label zeigt an, daß 4 von sp subtrahiert wird, die Adresse der nächsten Instruktion zu (sp) bewegt wird, und die Instruktionen in Label ausgeführt werden.
- rts zeigt an, daß die Instruktionen, angezeigt durch (sp), ausgeführt werden, und 4 wird zu sp addiert.
- In Fig. 8 sind die Instruktionen, angezeigt als 41 und 42, durch die Bestimmungs-Einheit 105 und die Maschinen-Instruktions-Erzeugungs-Einheit 104 jeweils erzeugt worden. Die Ablagegröße-Bestimmungs-Einheit 105a bestimmt, daß das Hauptprogramm f() die Ablagegröße von 8 Byte benötigt, und erzeugt die Pseudo-Instruktion: .STACKSIZE 8. Dies kommt daher, daß das Hauptprogramm f(), das das Unterprogramm g() aufruft, nachdem die zwei Argumente 1 und 2 an den Ablagen gespeichert sind, eine 4-Byte Ablage benötigt, um jedes Argument zu speichern.
- Die Sicherungs-Register-Bestimmungs-Einheit 105b erzeugt nur die Pseudo-Instruktion:
- .REGLIST, da dort kein Register vorhanden ist, das vor dem Prozeß des Hauptprogramms f() gesichert werden muß.
- In Fig. 9 sind die Instruktionen, angezeigt als 51 und 52, durch die Bestimmungs-Einheit 105 und die Maschinen-Instruktions-Erzeugungs-Einheit 104 jeweils erzeugt worden.
- Die Ablagegröße-Bestimmungs-Einheit 105a bestimmt, daß das Unterprogramm g() die Ablagegröße von 16 Byte benötigt, und erzeugt die Pseudo-Instruktion: .STACKSIZE 16. Dies kommt daher, daß der Prozeß des Unterprogramms g() eine 16-Byte Ablage als einen Bereich benötigt, um die Werte der zwei Register zu sichern und um zwei Berechnungs-Ergebnisse: a und b, zu sichern.
- Die Sicherungs-Register-Bestimmungs-Einheit 105b bestimmt, daß die Register r1 und r2 vor dem Prozeß des Unterprogamms g() gesichert werden sollten, und erzeugt die Pseudo-Instruktion: .REGLIST r1, r2.
- Wenn die Verknüpfungs-Einheit 108 die Ausgangs-Dateien 106 und 107 empfangen hat, die durch die Übersetzungs-Einheit 103 erzeugt worden sind, erfaßt die Verzweigungs- Instruktions-Erfassungs-Einheit 109 eine Verzweigungs-Instruktion von diesen Ausgangs- Dateien.
- Die Verzweigungs-Instruktion: jsr _g, wird von der Ausgangs-Datei 106, dargestellt in Fig. 8, durch die Verzweigungs-Instruktions-Erfassungs-Einheit 109 erfaßt, und die Erfassung wird zu der Datei-Such-Einheit 110 berichtet.
- Die Datei-Aufruf-Einheit 110 sucht die Ausgangs-Dateien 106 und 107 auf und ihr ist bekannt, daß das Verzweigungs-Ziel-Unterprogramm _g in der Ausgangs-Datei 107 definiert ist. Dann berichtet die Datei-Aufruf-Einheit 110 dies zu der Ablagegröße-Akquisitions- Einheit 111a und der Sicherungs-Register-Akquisitions-Einheit 111b.
- Die Ablagegröße-Akquisitions-Einheit 111a und die Sicherungs-Register-Akquisitions- Einheit 111b akquirieren Informationen über die Ablagegröße, die erforderlich ist (16 Byte) und die Register, die gesichert werden sollen (r1 und r2), und zwar von der Pseudo- Instruktion, die an dem Anfang (51) des Unterprogramms _g plaziert ist, und berichtet die Informationen zu der Unterprogramm-Aufruf-Instruktions-Erzeugungs-Einheit 112.
- Basierend auf den Informationen erzeugt die Unterprogramm-Aufruf-Instruktions- Erzeugungs-Einheit 112 eine Unterprogramm-Aufruf-Instruktion: call _g, #16, r1, r2. Die Unterprogramm-Aufruf-Instruktion: call label, 1sz, rn, rm, ist eine einzelne Maschinen- Instruktion, die bewirkt, daß die Register rn und rm zu (sp-4) und (sp-8) in den Taktzyklen mit einer Verzweigungs-Gefahr gesichert werden sollen, und bewirkt auch, daß sp um 1sz reduziert werden soll, nachdem 4 von sp subtrahiert ist, die Adresse der nächsten Instruktion zu (sp) bewegt wird und die Instruktionen in_label ausgeführt werden.
- Mit anderen Worten ist die Ausführung der Unterprogramm-Aufruf-Instruktion: call _g, #16, r1, r2, äquivalent zu der Ausführung der folgenden Instruktions-Sequenz, ohne daß eine Verzweigungs-Gefahr verursacht wird.
- jsr _g
- rnov r1, (sp-4)
- rnov r2, (sp-8)
- add #-16, sp
- Die Verknüpfungs-Einheit 108 ersetzt die Verzweigungs-Instruktion: jsr _g, die in der Ausgangs-Datei 106 gespeichert ist, durch die Unterprogramm-Aufruf-Instruktion: call _g, #16, r1, r2, und erzeugt ein Objekt-Programm, das nicht die Instruktion: mov r1, (sp-4), mov r2, (sp-8), für ein Register-Sichern, und die Instruktion: add #-16, sp, für eine Ablage- Reservierung, umfaßt, und gibt das Objekt-Programm als eine Ausführungs-Datei 113 aus.
- Fig. 10 stellt eine Liste der Instruktionen dar, die in der Ausführungs-Datei 113 gespeichert sind. Die Unterprogramm-Aufruf-Instruktion: call _g, #16, r1, r2, wird dazu verwendet, das Unterprogramm _g von dem Hauptprogramm f aufzurufen, und die Instruktionen für ein Register-Sichern und eine Ablage-Reservierung werden von dem Anfang des Unterprogramms _g verzögert.
- Wie zuvor erläutert ist, fügt in dem Programm-Übersetzungsgerät der vorliegenden Erfindung, wenn ein Ouellen-Programm in eine Maschinen-Instruktions-Sequenz übersetzt wird, die Übersetzungs-Einheit 103 die Informationen über eine notwendig Ablagegröße und ein Register, das gesichert werden soll, als eine Pseudo-Instruktion an dem Anfang der Maschinen-Instruktions-Sequenz jedes Unterprogramms hinzu.
- Dann ersetzt, wenn die Maschinen-Instruktions-Sequenzen miteinander verknüpft werden, die Verknüpfungs-Einheit 108 eine Verzweigungs-Instruktion, die eine Verzweigung zu einem Unterprogramm in einer anderen Datei bewirkt, gegen eine einzelne Unterprogramm-Aufruf-Instruktion, die eine Verzweigung-zu-Unterprogramm-Operation, eine Register-Sicherungs-Operation und eine Ablage-Reservierungs-Operation sequentiell durchführt, ohne eine Verzweigungs-Blockierung zu verursachen, und zwar unter Bezugnahme auf die Pseudo-Instruktion, die an dem Anfang des Unterprogramms plaziert ist. Darauffolgend kann der Prozessor der vorliegenden Erfindung, der die Programme ausführt, die durch die Verknüpfungs-Einheit 108 erzeugt worden sind, eine Verzweigungs-Operation unter einer hohen Geschwindigkeit ausführen, ohne die Verzweigungs-Gefahr zu verursachen, gerade dann, wenn eine Verzweigung zu einem Unterprogramm, definiert in einer unterschiedlichen Datei, verursacht ist.
- Fig. 11 zeigt ein Blockdiagramm, das den Aufbau des Prozessors der vorliegenden Erfindung darstellt.
- Der Prozessor ist aus einem Instruktions-Puffer 701, einem Instruktions-Decodierer 702, einer Ausführungs-Einheit 703, einem Register 704, einem Ablage-Hinweiszeiger 705, einem Programmzähler 706, einem Berechnungs-Schaltkreis 707, einem Daten-Puffer 708, einem Adressen-Puffer 709 und dem internen Bus 710 aufgebaut.
- Der Daten-Puffer 708 und der Adressen-Puffer 709 führen Daten zwischen dem internen Bus 710 und einem externen Daten-Bus 711 und zwischen dem internen Bus 710 und einem externen Adressen-Bus 712 jeweils.
- Das Register 704 speichert temporär Daten für Berechnungen und Adressen eines nicht dargestellten Hauptspeichers.
- Der Ablage-Hinweiszeiger 705 speichert Adressen, die Ablage-Bereiche, vorgesehen in dem Hauptspeicher, anzeigen.
- Der Programmzähler 706 speichert die Adresse einer Instruktion, die als nächste von dem Hauptspeicher abgerufen werden soll.
- Der Berechnungs-Schaltkreis 707 führt eine logische Operation mit zwei unterschiedlichen Daten, die empfangen sind, durch.
- Der Instruktions-Puffer 701 ruft Instruktionen ab und speichert sie auf einer Basis zuerst eingegeben, zuerst ausgegeben.
- Der Instruktions-Decodierer 702 empfängt Instruktionen von dem Instruktions-Puffer 701, decodiert sie eine nach der anderen, und berichtet die Decodierergebnisse zu der Ausführungs-Einheit 703. Der Instruktions-Decodierer 702 besitzt Funktionen eines Decodierens aller vorbestimmten Instruktionen und eines Verschickens von Informationen einzigartig zu jeder der vorbestimmten Instruktionen zu der Ausführungs-Einheit 703; allerdings stellt der Unterprogramm-Aufruf-Instruktions-Decodierer 702a eine Funktion eines Decodierens von Unterprogramm-Aufruf-Instruktionen dar.
- Die Ausführungs-Einheit 703 steuert jede der Einheiten 701-709 durch Verwendung eines nicht dargestellten, internen Steuersignals, und zwar basierend auf den Informationen, die von dem Instruktions-Decodierer 702 empfangen sind, und gibt ein nicht dargestelltes, externes Signal ein oder gibt es aus.
- Unter den Funktionen der Ausführungs-Einheit 703 stellt die Unterprogramm-Aufruf- Instruktions-Ausführungs-Einheit 703a eine Funktion einer Ausführung von Unterprogramm-Aufruf-Instruktionen dar.
- Der Instruktions-Puffer 701, der Instruktions-Decodierer 702 und die Ausführungs-Einheit 703 arbeiten als eine IF-Stufe, eine DEC-Stufe und eine EX-Stufe jeweils, um dadurch einen Pipeline-Vorgang aufzubauen.
- Das Nachfolgende ist die Betriebsweise des Prozessors der vorliegenden Erfindung, um eine gewöhnliche Verzweigungs-Instruktion auszuführen: jsr. Fig. 12A stellt eine Instruktions-Sequenz dar, die eine gewöhnliche Verzweigungs-Instruktion: jsr, umfaßt, und Fig. 12B stellt einen Pipeline-Ablauf der Ausführung der Instruktions-Sequenz dar.
- Die Verzweigings-Instruktion; jsr _g, wird durch den Instruktions-Puffer 701 in dem Taktzyklus 1 abgerufen, durch den Instruktions-Decodierer 702 in dem Taktzyklus 2 decodiert und durch die Ausführungs-Einheit 703 in dem Taktzyklus 3 ausgeführt.
- In dem Taktzyklus 3 aktualisiert die Ausführungs-Einheit 703 den Wert des Programmzählers 706 zu der Verzweigungs-Ziel-Adresse _g. Darauffolgend wird die Instruktion: mov r1, (sp-4), an der Adresse _g, zu dem Instruktions-Puffer 701 in dem Taktzyklus 4 bewegt. Um die nächste Instruktion: mov r1, (sp-4), auszuführen, die der Instruktion: jsrg, folgt, vernachlässigt die Ausführungs-Einheit 703 die Instruktionen, begleitet durch die Verzweigungs-Gefahr, die in grau in Fig. 12B erscheint. Darauffolgend führt die Ausführungs- Einheit 703 die Instruktion: mov r1, (sp-4), zwei Taktzyklen nach der Ausführung der Instruktion: jsr _g, aus.
- Die Betriebsweise der vorliegenden Erfindung, die bis hier erläutert ist, ist von derjenigen des herkömmlichen Prozessors unterschiedlich.
- Das Nachfolgende ist eine Erläuterung der Betriebsweise, um die Unterprogramm-Aufruf- Instruktion: call, durch den Prozessor der vorliegenden Erfindung, auszuführen. Fig. 13A stellt eine Instruktions-Sequenz dar, die die Unterprogramm-Aufruf-Instruktion: call, umfaßt, und Fig. 13 B stellt einen Pipeline-Ablauf der Ausführung der Instruktions-Sequenz dar.
- Wie die Unterprogramm-Aufruf-Instruktion: call _g, #16, r1, r2, die eine einzelne Instruktion ist, durch den Interprogramm-Aufruf-Instruktions-Decodierer 702a decodiert ist, und durch die Unterprogramm-Aufruf-Ausführungs-Einheit 703a ausgeführt ist, führt der Prozessor Operationen durch, die gleich zu der aufeinanderfolgenden Ausführung der folgenden vier Instruktionen sind.
- Das bedeutet
- jsr _g wird zuerst ausgeführt, und dann
- mov r1, (sp-4)
- mov r2, (sp-8)
- add #-1 f3, sp
- werden in den Taktzyklen, begleitet durch die Verzweigungs-Gefahr, ausgeführt.
- Demzufolge ist der Pipeline-Ablauf, dargestellt in Fig. 13B, äquivalent zu der Ausführung der Unterprogramm-Aufruf-Instruktion: call _g, #16, r1, r2, durch die Ausführungs-Einheit 703.
- Die Verzweigungs-Instruktion: jsr _g wird durch den Instruktions-Puffer 701 in dem Taktzyklus 1 abgerufen, durch den Instruktions-Decodierer 702 in dem Taktzyklus 2 decodiert und durch die Ausführungs-Einheit 703 in dem Taktzyklus 3 ausgeführt.
- Die Ausführungs-Einheit 703, die die Verzweigungs-Instruktion: jsr _g, im Taktzyklus 3, ausgeführt hat, führt die Instruktion: mov r1, (sp-4), im Taktzyklus 4 aus.
- Der Pipeline-Ablauf, dargestellt in Fig. 13B, stellt keine Gefahr dar, obwohl dieselben Instruktionen, wie sie in Fig. 12B dargestellt sind, dort verarbeitet werden.
- Dies zeigt, daß dann, wenn der Prozessor der vorliegenden Erfindung die Unterprogramm- Aufruf-Instruktion: call _g, #16, r1, r2, ausführt, die Verzweigungs-Gefahr erfolgreich gelöst wird, und weiterhin ist die Zeit, um die Unterprogramm-Aufruf-Instruktion auszuführen, um 2 Taktzyklen kürzer als die Zeit, um eine gewöhnliche Verzweigungs-Instruktion auszuführen.
- Das Programm-Übersetzungsgerät und der Prozessor der vorliegenden Erfindung, die zuvor erläutert sind, umfassen die folgenden Fälle 1)-6).
- 1) Obwohl die Unterprogramm-Aufruf-Instruktions-Erzeugungs-Einheit 112 eine einzelne Maschinen-Instruktion: call _g, #16, r1, r2, in der ersten Ausführungsform erzeugt, kann mehr als eine Maschonen-Instruktion erzeugt werden. Zum Beispiel können die folgenden vier Maschinen-Instruktionen erzeugt werden:
- call _g
- rnov r1, (sp-4)
- rnov r2, (sp-8)
- add #-16, sp
- Das bedeutet, daß die Unterprogramm-Aufruf-Instruktion: call _g, den Prozessor dazu bringt, zu dem Unterprogramm _g zu verzweigen und die drei Instruktionen aufeinanderfolgend, ohne die Verzweigungs-Gefahr zu verursachen, auszuführen.
- 2) Die Unterprogramm-Aufruf-Instruktion, die in der ersten Ausführungsform erzeugt werden soll, ist eine Verzweigungs-Instruktion, die zwei Operation einsetzt: eine Ablage- Reservierung und eine Register-Sicherung. Allerdings kann eine Verzweigungs- Instruktion, die irgendeine Operation mit sich bringt, ausgeführt werden. Zum Beispiel kann, wenn eine Verzweigung zu einem Unterprogramm vorgenommen werden soll, das keine Register-Sicherung benötigt, eine Verzweigungs-Instruktion, die nur eine Ablage- Reservierung, wie beispielsweise call _g, #16, einsetzt, erzeugt werden.
- 3) Die Maschinen-Instruktions-Erzeugungs-Einheit 104 kann durch einen normalen Compiler ersetzt werden, der ein Programm in ein umordenbares Objekt-Programm zusammenstellt, und die Verknüpfungsfunktion der Verknüpfungs-Einheit 108 kann durch eine allgemeine Verknüpfungs-Vorrichtung ersetzt werden, die ein Objekt-Programm durch Verknüpfen der Objekt-Programme erzeugt. Diese Ersetzungen realisieren einen C- Sprach-Compiler, der dem Programm-Übersetzungsgerät der ersten Ausführungsform entspricht.
- 4) Unterprogramm-Aufruf-Instruktionen werden ausschließlich durch die Verknüpfungs- Einheit 108 in der ersten Ausführungsform erzeugt; allerdings kann die Übersetzungs- Einheit 103 zusätzlich zu der Verknüpfungs-Einheit 108 mit den Einheiten 109-112 vorgesehen werden. Dieser Aufbau ermöglicht der Übersetzungs-Einheit 103, eine Unterprogramm-Aufruf Instruktion zu erzeugen, die ein Unterprogramm aufruft, das in derselben Datei gespeichert ist.
- 5) Die Unterprogramm-Aufruf-Ausführungs-Einheit 703a führt die einzelne Unterprogramm-Aufruf-Instruktion: call _g, #16, r1, r1, durch Dividieren von diesen in vier aufeinanderfolgende Instruktionen der zweiten Ausführungsform aus. Dies wird, was nicht gesagt werden muß, durch ein nicht dargestelltes Mikroprogramm und eine verdrahtete Logik realisiert.
- 6) Die zweite Ausführungsform stellt das Vermeiden einer Pipeline-Blockierung für zwei Taktzyklen dar, was durch die Verzweigungs-Instruktion: jsr, verursacht wird; allerdings können andere Pipeline-Blockierungen ebenso vermieden werden.
- Zum Beispiel ist es, gerade wenn eine Pipeline-Blockierung für drei Zyklen durch den Pipeline-Ablauf, dargestellt in Fig. 12, aufgrund einer zu großen Zugriffszeit des ROM, wo ein Unterprogramm _g gespeichert ist, verursacht ist, ersichtlich, daß dieselben Ergebnisse wie der Pipeline-Ablauf, dargestellt in Fig. 13, erhalten werden. In einem solchen Fall ist die Ausführungszeit der Instruktions-Sequenz um drei Taktzyklen kürzer als die Ausführungszeit der Instruktions-Sequenz in dem Ablauf, der in Fig. 12 dargestellt ist. Demzufolge können nicht nur Pipeline-Blockierungen, die während der Ausführung einer Verzweigung-Instruktion verursacht werden, sondern auch solche, die während des Abrufens einer Verzweigungs-Instruktion verursacht werden, vermieden werden.
- Obwohl die vorliegende Erfindung vollständig anhand von Beispielen unter Bezugnahme auf die beigefügten Zeichnungen beschrieben worden ist, sollte angemerkt werden, daß verschiedene Änderungen und Modifikationen für Fachleute auf dem betreffenden Fachgebiet ersichtlich werden. Deshalb sollten sie, ohne daß solche Änderungen und Modifikationen außerhalb des Schutzumfangs der vorliegenden Erfindung liegen, so ausgelegt werden, daß sie darin umfaßt sind.
Claims (9)
1. Programm-Übersetzungsgerät, das eine Übersetzungs-Einheit und eine Verknüpfungs-
Einheit aufweist, wobei die Übersetzungs-Einheit Quellen-Programme in Maschinen-
Instruktions-Sequenzen übersetzt, die Maschinen-Instruktions-Sequenzen in Dateien
hinein speichert und die Dateien ausgibt, wobei die Verknüpfungs-Einheit eine Maschinen-
Instruktions-Sequenz, gespeichert in einer Datei, mit einer anderen Maschinen-
Instruktions-Sequenz, gespeichert in einer anderen Datei, verknüpft,
wobei die Übersetzungs-Einheit aufweist:
eine Ablagegröße-Bestimmungs-Einrichtung zum Bestimmen einer Ablagegröße, die für
einen Prozeß jedes Unterprogramms, umfaßt in einem Quellen-Programm, erforderlich ist,
und zum Speichern der Ablagegröße, die bestimmt ist, in eine entsprechende Datei hinein
zusammen mit einer Maschinen-Instruktions-Sequenz eines entsprechenden
Unterprogramms; und
wobei die Verknüpfungs-Einheit aufweist:
eine Verzweigungs-Instruktions-Erfassungs-Einrichtung zum Erfassen einer
Verzweigungs-Instruktion von den Maschinen-Instruktions-Sequenzen, gespeichert in den
Dateien, wobei die Verzweigungs-Instruktion eine Verzweigung zu einem Unterprogramm
bewirkt;
eine Datei-Such-Einrichtung zum Bezeichnen einer Datei, wo ein Verzweigungs-Ziel-
Unterprogramm gespeichert ist, wobei das Verzweigungs-Ziel-Unterprogramm das
Unterprogramm ist, zu dem hin die Verzweigungs-Instruktion eine Verzweigung bewirkt hat;
eine Ablagegröße-Akquisitions-Einrichtung zum Lesen einer Ablagegröße, die für einen
Prozeß des Verzweigungs-Ziel-Unterprogramms erforderlich ist, von der Datei, die durch
die Datei-Such-Einrichtung bezeichnet ist; und
eine erste Ersetzungs-Einrichtung zum Ersetzen der Verzweigungs-Instruktion gegen
mindestens eine Instruktion, die eine Verzweigungs-Operation und eine Ablage-
Reservierungs-Operation aufeinanderfolgend durchführt, wobei die Verzweigungs-
Operation eine Verzweigung zu dem Verzweigungs-Ziel-Unterprogramm bewirkt, und die
Ablage-Reservierung-Operation eine Ablage für die Ablagegröße, gelesen durch die
Ablagegröße-Akquisitions-Einrichtung, reserviert.
2. Programm-Übersetzungsgerät nach Anspruch 1, wobei die erste Ersetzungs-
Einrichtung die Verzweigungs-Instruktion gegen eine einzelne, erste, spezielle Instruktion
ersetzt.
3. Prozessor mit einem Pipeline-Ablauf zum Ausführen von Maschinen-Instruktions-
Sequenzen, zugeführt durch das Programm-Übersetzungsgerät nach Anspruch 1,
umfassend eine erste, spezielle Instruktion, wobei der Prozessor aufweist:
eine erste Instruktions-Decodier-Enrichtung zum Bestimmen, ob eine gegebene
Maschinen-Instruktion die erste, spezielle Instruktion ist; und
eine erste Ausführungseinrichtung zum, wenn die gegebene Maschinen-Instruktion
dahingehend bestimmt worden ist, daß sie die erste, spezielle Instruktion ist, Durchführen einer
Verzweigungs-Operation und einer Ablage-Reservierungs-Operation aufeinanderfolgend,
wobei die Verzweigungs-Operation eine Verzweigung zu einer Verzweigungs-Ziel-
Adresse, umfaßt in der ersten, speziellen Instruktion, bewirkt und die Ablage-
Reservierungs-Operation eine Ablage für eine Ablagegröße, umfaßt in der ersten,
speziellen Instruktion, reserviert.
4. Programm Übersetzungsgerät, das eine Übersetzungs-Einheit und eine Verknüpfungs-
Einheit aufweist, wobei die Übersetzungs-Einheit Quellen-Programme in Maschinen-
Instruktions-Sequenzen übersetzt, die Maschinen-Instruktions-Sequenzen in Dateien
hinein speichert und die Dateien ausgibt, wobei die Verknüpfungs-Einheit eine Maschinen-
Instruktions-Sequenz, gespeichert in einer Datei, mit einer anderen Maschinen-
Instruktions-Sequenz, gespeichert in einer anderen Datei, verknüpft,
wobei die Übersetzungs-Einheit aufweist:
eine Sicherungs-Register-Bestimmungs-Einrichtung zum Bestimmen eines Registers, das
gesichert werden soll, in einem Prozeß jedes Unterprogramms, umfaßt in einem Quellen-
Programm, und zum Speichern eines Namens des Registers in eine entsprechende Datei
hinein zusammen mit einer Maschinen-Instruktion eines entsprechenden
Unterprogramms; und
wobei die Verknüpfungs-Einheit aufweist:
eine Verzweigungs-Instruktions-Erfassungs-Einrichtung zum Erfassen einer
Verzweigungs-Instruktion von den Maschinen-Instruktions-Sequenzen, gespeichert in den
Dateien, wobei die Verzweigungs-Instruktion eine Verzweigung zu einem Unterprogramm
bewirkt;
eine Datei-Such-Einrichtung zum Bezeichnen einer Datei, wo ein Verzweigungs-Ziel-
Unterprogramm gespeichert ist, wobei das Verzweigungs-Ziel-Unterprogramm das
Unterprogramm ist, zu dem die Verzweigungs-Instruktion eine Verzweigung bewirkt hat;
eine Sicherungs-Register-Akquisitions-Einrichtung zum Lesen des Namens des Registers,
bestimmt durch die Sicherungs-Register-Bestimmungs-Einrichtung, von der Datei, die
durch die Datei-Such-Einrichtung bezeichnet ist; und
eine zweite Ersetzungs-Einrichtung zum Ersetzen der Verzweigungs-Instruktion gegen
mindestens eine Instruktion, die eine Verzweigungs-Operation und eine Register-
Sicherungs-Operation aufeinanderfolgend durchführt, wobei die Verzweigungs-Operation
eine Verzweigung zu dem Verzweigungs-Ziel-Unterprogramm bewirkt, und die Register-
Sicherungs-Operation Inhalte des Registers sichert, dessen Name durch die Sicherungs-
Akquisitions-Einrichtung gelesen worden ist.
5. Programm-Übersetzungsgerät nach Anspruch 4, wobei die zweite Ersetzungs-
Einrichtung die Verzweigungs-Instruktion gegen eine einzelne, zweite, spezielle Instruktion
ersetzt.
6. Prozessor mit einem Pipeline-Ablauf zum Ausführen von Maschinen-Instruktions-
Sequenzen, zugeführt durch das Programm-Übersetzungsgerät nach Anspruch 5,
umfassend eine zweite, spezielle Instruktion, wobei der Prozessor aufweist:
eine zweite Instruktions-Decodier-Enrichtung zum Bestimmen, ob eine gegebene
Maschinen-Instruktion die zweite, spezielle Instruktion ist; und
eine zweite Ausführungseinrichtung für, wenn die gegebene Maschinen-Instruktion
dahingehend bestimmt worden ist, daß sie die zweite, spezielle Instruktion ist, Durchführen
einer Verzweigungs-Operation und einer Register-Sicherungs-Operation
aufeinanderfolgend, wobei die Verzweigungs-Operation eine Verzweigung zu einer Verzweigungs-Ziel-
Adresse, umfaßt in der zweiten, speziellen Instruktion, bewirkt, und die Register-
Sicherungs-Operation Inhalte eines Registers, bezeichnet durch die zweite, spezielle
Instruktion, sichert.
7. Programm-Übersetzungsgerät, das eine Übersetzungs-Einheit und eine Verknüpfungs-
Einheit aufweist, wobei die Übersetzungs-Einheit Quellen-Programme in Maschinen-
Instruktions-Sequenzen übersetzt, die Maschinen-Instruktions-Sequenzen in Dateien
hinein speichert und die Dateien ausgibt, wobei die Verknüpfungs-Einheit eine Maschinen-
Instruktions-Sequenz, gespeichert in einer Datei, mit einer anderen Maschinen-
Instruktions-Sequenz, gespeichert in einer anderen Datei, verknüpft,
wobei die Übersetzungs-Einheit aufweist:
eine Ablagegröße-Bestimmungs-Einrichtung zum Bestimmen einer Ablagegröße, die für
einen Prozeß jedes Unterprogramms, umfaßt in einem Quellen-Programm, erforderlich ist,
und Speichern der Ablagegröße, die bestimmt ist, in eine entsprechende Datei hinein
zusammen mit einer Maschinen-Instruktions-Sequenz eines entsprechenden
Unterprogramms; und
eine Sicherungs-Register-Bestimmungs-Einrichtung zum Bestimmen eines Registers, das
gesichert werden soll, in einem Prozeß jedes Unterprogramms, umfaßt in einem Quellen-
Programm, und Speichern eines Namens des Registers in eine entsprechende Datei
hinein zusammen mit einer Maschinen-Instruktion eines entsprechenden Unterprogramms;
und
wobei die Verknüpfungs-Einheit aufweist:
eine Verzweigungs-Instruktions-Erfassungs-Einrichtung zum Erfassen einer
Verzweigungs-Instruktion von den Maschinen-Instruktions-Sequenzen, die in den Dateien
gespeichert sind, wobei die Verzweigungs-Instruktion eine Verzweigung zu einem
Unterprogramm bewirkt;
eine Datei-Such-Einrichtung zum Bezeichnen einer Datei, wo ein Verzweigungs-Ziel-
Unterprogramm gespeichert ist, wobei das Verzweigungs-Ziel-Unterprogramm das
Unterprogramm ist, zu dem die Verzweigungs-Instruktion eine Verzweigung hin bewirkt hat;
eine Ablagegröße-Akquisitions-Einrichtung zum Lesen einer Ablagegröße, die für einen
Prozeß des Verzweigungs-Ziel-Unterprogramms erforderlich ist, von der Datei, die durch
die Datei-Such-Einrichtung bezeichnet ist; und
eine Sicherungs-Register-Akquisitions-Einrichtung zum Lesen des Namens des Registers,
bestimmt durch die Sicherungs-Register-Bestimmungs-Einrichtung, von der Datei, die
durch die Datei-Such-Einrichtung bezeichnet ist; und
eine dritte Ersetzungs-Einrichtung zum Ersetzen der Verzweigungs-Instruktion gegen
mindestens eine Instruktion, die eine Verzweigungs-Operation, eine Ablage-Reservierungs-
Operation und eine Register-Sicherungs-Operation aufeinanderfolgend durchführt, wobei
die Verzweigungs-Operation eine Verzweigung zu dem Verzweigungs-Ziel-
Unterprogramm bewirkt, die Ablage-Reservierungs-Operation eine Ablage für die
Ablagegröße, gelesen durch die Ablagegröße-Akquisitions-Einrichtung, reserviert, und die
Register-Sicherungs-Operation Inhalte des Registers, bezeichnet durch die Sicherungs-
Register-Akquisitions-Einrichtung, sichert.
8. Programm-Übersetzungsgerät nach Anspruch 7, wobei die dritte Ersetzungs-
Einrichtung die Verzweigungs-Instruktion gegen eine einzelne, dritte, spezielle Instruktion
ersetzt.
9. Prozessor mit einem Pipeline-Ablauf zum Ausführen von Maschinen-Instruktions-
Sequenzen, zugeführt durch das Programm-Übersetzungsgerät nach Anspruch 8,
umfassend eine dritte, spezielle Instruktion, wobei der Prozessor aufweist:
eine dritte Instruktions-Decodier-Enrichtung zum Bestimmen, ob eine gegebene
Maschinen-Instruktion die dritte, spezielle Instruktion ist; und
eine dritte Ausführungseinrichtung zum, wenn die gegebene Maschinen-Instruktion
dahingehend bestimmt worden ist, daß sie die zweite, spezielle Instruktion ist, Durchführen
einer Verzweigungs-Operation, einer Ablage-Reservierungs-Operation und einer Register-
Sicherungs-Operation aufeinanderfolgend, wobei die Verzweigungs-Operation eine
Verzweigung zu einer Verzweigungs-Ziel-Adresse bewirkt, die in der dritten, speziellen
Instruktion umfaßt ist, die Ablage-Reservierungs-Operation eine Ablage für die Ablagegröße,
umfaßt in der dritten, speziellen Instruktion, reserviert, und die Register-Sicherungs-
Operation Inhalte eines Registers, bezeichnet durch die dritte, spezielle Instruktion,
sichert.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP07111701A JP3130446B2 (ja) | 1995-05-10 | 1995-05-10 | プログラム変換装置及びプロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69614183D1 DE69614183D1 (de) | 2001-09-06 |
DE69614183T2 true DE69614183T2 (de) | 2001-11-29 |
Family
ID=14567971
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69614183T Expired - Lifetime DE69614183T2 (de) | 1995-05-10 | 1996-02-23 | Programmübersetzungsgerät und Prozessor, die eine schnelle Ausführung von Unterprogrammsprungbefehlen erreichen |
Country Status (7)
Country | Link |
---|---|
US (2) | US5758162A (de) |
EP (1) | EP0742517B1 (de) |
JP (1) | JP3130446B2 (de) |
KR (1) | KR100247900B1 (de) |
CN (1) | CN1099074C (de) |
DE (1) | DE69614183T2 (de) |
TW (1) | TW289812B (de) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790845A (en) * | 1995-02-24 | 1998-08-04 | Hitachi, Ltd. | System with reservation instruction execution to store branch target address for use upon reaching the branch point |
JP3130446B2 (ja) * | 1995-05-10 | 2001-01-31 | 松下電器産業株式会社 | プログラム変換装置及びプロセッサ |
US6513156B2 (en) * | 1997-06-30 | 2003-01-28 | Sun Microsystems, Inc. | Interpreting functions utilizing a hybrid of virtual and native machine instructions |
US6021273A (en) | 1997-06-30 | 2000-02-01 | Sun Microsystems, Inc. | Interpreter generation and implementation utilizing interpreter states and register caching |
US6016556A (en) * | 1997-07-17 | 2000-01-18 | Tektronix, Inc. | System for identifying an acquisition sample corresponding to a source code statement |
DE69836056T2 (de) * | 1997-08-29 | 2007-04-12 | Matsushita Electric Industrial Co., Ltd., Kadoma | Prozessor mit verringerter Zahl von bedingten Befehlen |
US6317796B1 (en) * | 1997-10-06 | 2001-11-13 | Sun Microsystems, Inc. | Inline database for receiver types in object-oriented systems |
US6212630B1 (en) | 1997-12-10 | 2001-04-03 | Matsushita Electric Industrial Co., Ltd. | Microprocessor for overlapping stack frame allocation with saving of subroutine data into stack area |
JP4041248B2 (ja) * | 1999-07-09 | 2008-01-30 | 松下電器産業株式会社 | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 |
US7421572B1 (en) * | 1999-09-01 | 2008-09-02 | Intel Corporation | Branch instruction for processor with branching dependent on a specified bit in a register |
JP3664473B2 (ja) * | 2000-10-04 | 2005-06-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムの最適化方法及びこれを用いたコンパイラ |
US7383443B2 (en) * | 2002-06-27 | 2008-06-03 | Microsoft Corporation | System and method for obfuscating code using instruction replacement scheme |
JP2004362086A (ja) * | 2003-06-03 | 2004-12-24 | Matsushita Electric Ind Co Ltd | 情報処理装置および機械語プログラム変換装置 |
US7788638B2 (en) * | 2003-11-21 | 2010-08-31 | Citigroup Global Markets Inc. | Method and system for data file processing |
EP2106584A1 (de) * | 2006-12-11 | 2009-10-07 | Nxp B.V. | Pipeline-prozessor und compiler/planer für branch-delay-slots mit veränderlicher anzahl |
US8813057B2 (en) * | 2007-03-31 | 2014-08-19 | Intel Corporation | Branch pruning in architectures with speculation support |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5321823A (en) * | 1988-07-20 | 1994-06-14 | Digital Equipment Corporation | Digital processor with bit mask for counting registers for fast register saves |
US5274820A (en) * | 1989-08-14 | 1993-12-28 | International Business Machines Corporation | Method and system for eliminating operation codes from intermediate prolog instructions |
US5222220A (en) * | 1989-11-16 | 1993-06-22 | Mehta Hemang S | Microprocessor stack built-in guards |
EP0463965B1 (de) * | 1990-06-29 | 1998-09-09 | Digital Equipment Corporation | Sprungvorhersageeinheit für hochleistungsfähigen Prozessor |
JPH0619721A (ja) * | 1991-02-21 | 1994-01-28 | Oki Electric Ind Co Ltd | 機械語翻訳最適化方式 |
US5450585A (en) * | 1991-05-15 | 1995-09-12 | International Business Machines Corporation | Compiler with delayed conditional branching |
JPH0744419A (ja) * | 1993-08-03 | 1995-02-14 | Nec Ic Microcomput Syst Ltd | マイコン開発支援装置 |
US5375242A (en) | 1993-09-29 | 1994-12-20 | Hewlett-Packard Company | Compiler architecture for cross-module optimization |
JP3130446B2 (ja) * | 1995-05-10 | 2001-01-31 | 松下電器産業株式会社 | プログラム変換装置及びプロセッサ |
-
1995
- 1995-05-10 JP JP07111701A patent/JP3130446B2/ja not_active Expired - Lifetime
-
1996
- 1996-01-22 US US08/589,802 patent/US5758162A/en not_active Expired - Lifetime
- 1996-02-23 DE DE69614183T patent/DE69614183T2/de not_active Expired - Lifetime
- 1996-02-23 EP EP96301214A patent/EP0742517B1/de not_active Expired - Lifetime
- 1996-02-27 TW TW085102244A patent/TW289812B/zh not_active IP Right Cessation
- 1996-03-22 CN CN96103712A patent/CN1099074C/zh not_active Expired - Lifetime
- 1996-05-10 KR KR1019960015311A patent/KR100247900B1/ko not_active IP Right Cessation
-
1997
- 1997-11-18 US US08/959,386 patent/US5978905A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPH08305581A (ja) | 1996-11-22 |
KR960042340A (ko) | 1996-12-21 |
EP0742517A3 (de) | 1997-05-28 |
EP0742517B1 (de) | 2001-08-01 |
US5978905A (en) | 1999-11-02 |
DE69614183D1 (de) | 2001-09-06 |
CN1099074C (zh) | 2003-01-15 |
JP3130446B2 (ja) | 2001-01-31 |
KR100247900B1 (ko) | 2000-03-15 |
TW289812B (de) | 1996-11-01 |
CN1138174A (zh) | 1996-12-18 |
US5758162A (en) | 1998-05-26 |
EP0742517A2 (de) | 1996-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69614183T2 (de) | Programmübersetzungsgerät und Prozessor, die eine schnelle Ausführung von Unterprogrammsprungbefehlen erreichen | |
DE69621694T2 (de) | Verfahren und Anordnung zur transparenten Emulation einer Befehlssatzarchitektur | |
DE69738188T2 (de) | Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor | |
DE69325086T2 (de) | Verfahren und System für spekulative Befehlsausführung | |
DE69228360T2 (de) | Registerlesekontrolle | |
DE68929215T2 (de) | Datenprozessor | |
DE3851488T2 (de) | Registerverwaltungssystem mit Ausführung von Befehlen in Unordnung in einem Computerprozessor. | |
DE3587591T2 (de) | Mikroprozessor für Forth-ähnliche Sprache. | |
DE69128980T2 (de) | Verfahren zur Optimierung von Rechnerkode | |
DE68928677T2 (de) | Verfahren und digitaler Computer zur Vorverarbeitung mehrerer Befehle | |
DE69132675T2 (de) | Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter | |
DE3788877T2 (de) | Einrichtung zur software-emulation. | |
WO1994022079A1 (de) | Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren | |
DE69600995T2 (de) | Fehlerbearbeitung in spekulativen befehlen | |
DE69622219T2 (de) | Optimierungsgerät zum Entfernen von Gefahren durch Arrangierung der Befehlsreihenfolge | |
DE68927029T2 (de) | Pipelineprozessor | |
DE3424962C2 (de) | ||
DE69032174T2 (de) | Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen | |
DE69030931T2 (de) | Mehrfachsequenzprozessorsystem | |
DE4207148A1 (de) | Superscalar-prozessor | |
EP1738257B1 (de) | Verfahren zum vermeiden von dateninkonsistenz zwischen zugriffen verschiedener funktionen einer anwendung auf eine globale variable in einer datenverarbeitungsanlage | |
DE69616867T2 (de) | Prozessor, der schnell von Unterprogrammen zurückkehrt, und Programmübersetzungsgerät, das Maschinenprogramme erzeugt, die schnell von Unterprogrammen zurückkehren | |
DE69325826T2 (de) | Rechner mit einer Parallelverarbeitungsfähigkeit | |
DE19526008C2 (de) | Befehlsvorholeinheit für einen Computer | |
DE68924883T2 (de) | Mikroprozessor mit Befehlspipeline. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: PANASONIC CORP., KADOMA, OSAKA, JP |