-
HINTERGRUND
DER ERFINDUNG
-
1. Bereich
der Erfindung
-
Die
vorliegende Erfindung bezieht sich auf einen Prozessor und auf eine
Befehlsumwandlungsvorrichtung, und insbesondere auf eine Technik
zum Reduzieren der Anzahl von Befehlsarten und der Prozessorhardwarekomponenten,
wenn bedingte Befehle verwendet werden.
-
2. Stand der
Technik
-
In
den vergangenen Jahren führten
Verbesserungen der Leistung und der Verarbeitungsgeschwindigkeit
von Einrichtungen, die eingebettete Mikroprozessoren verwenden,
zu einer erhöhten
Nachfrage nach Mikroprozessoren (nachfolgend einfach als „Prozessoren" bezeichnet) mit
hoher Verarbeitungsleistung.
-
Eine
grundlegende Technik zum Erhöhen der
Verarbeitungsgeschwindigkeit ist eine Pipeline-Verarbeitung.
-
Bei
der Pipeline-Verarbeitung wird die Verarbeitung jedes Befehls in
mehrere Befehlseinheiten (Pipeline-Stufen) unterteilt, und die Pipeline-Stufen für verschiedene
Befehle werden parallel ausgeführt, so
dass die Verarbeitungsgeschwindigkeit verbessert wird.
-
Die
Pipeline-Verarbeitung wird jedoch gestört, wenn (Auftreten eines Pipeline-Abrisses)
ein Zweig ausgeführt
wird, wodurch die Ausführungsleistung
der Pipelines unter ein ideales Niveau verringert wird. Dieses Phänomen wird
als „branch
hazard" bezeichnet.
-
Bekannte
Prozessoren verwenden bedingte Befehle anstelle von Zweigbefehlen,
um branch hazards zu reduzieren und somit ihre Verarbeitungsleistung
zu verbessern. Die bedingten Befehle werden beispielsweise genauer
in „The
ARM RISC Chip-A Programmer's
Guide", Addison-Wesly
Publishing Company Inc. beschrieben.
-
30 zeigt
eine Befehlsfolge mit einem herkömmlichen
bedingten Transferbefehl. In 30 repräsentiert
jedes der Bezugssymbole „r0", „r1" und „r2" ein Register. Der
Befehl 3001 ist ein Transferbefehl zum Transferieren des
Wertes „1" zu dem Register „r0". Der Befehl 3002 ist
ein Vergleichsbefehl zum Vergleichen der Werte der Register „r1" und „r2" und zum Setzen verschiedener
Bitschalter, um das Vergleichsergebnis anzuzeigen. Der Befehl 3003 ist
ein bedingter Transferbefehl zur Bezugnahme auf die Bitschalter
und, wenn die Werte, die durch den Befehl 3002 miteinander
verglichen werden, gleich sind, zum Transferieren des Wertes „0" zu dem Register „r0".
-
31 zeigt
eine Liste von herkömmlichen bedingten
Transferbefehlen 3101. Diese Liste umfasst sechs Arten
von bedingten Transferbefehlen 3101. Die Bedingung 3102 ist
ein Zeichen, das eine Bedingung anzeigt, die durch jeden bedingten
Transferbefehl beschrieben ist. Wenn die Operationsobjekte „a" und „b" durch einen Vergleichsbefehl
miteinander verglichen werden, ist die Bedingung einer der folgenden
Fälle: „a" und „b" sind gleich; „a" und „b" sind nicht gleich; „a" ist größer als „b"; „a" ist größer als
oder gleich „b"; „a" ist kleiner als „b"; und „a" ist kleiner als
oder gleich „b". Jeder bedingte
Transferbefehl wird ausgeführt,
wenn seine Bedingung erfüllt ist.
-
32 zeigt
herkömmliche
Befehle, wie beispielsweise Vergleichsbefehle (CMP-Befehle) bedingte
Additionsbefehle zur Durchführung
einer Addition, wenn ihre Bedingungen erfüllt sind, bedingte Transferbefehle
zum Durchführen
eines Transfers, wenn ihre Bedingungen erfüllt sind, und bedingte Zweigbefehle
zum Durchführen
eines Zweiges, wenn ihre Bedingungen erfüllt sind. Bei diesen Befehlen beschreiben
die letzten beiden Zeichen des Operationscodes jedes Befehls im
mnemonischen Code die Bedingung.
-
Die
Anzahl von Bedingungsarten jedes bedingten Befehls und jedes bedingten
Zweigbefehls, die in 32 gezeigt sind, beträgt 10, da
die Bedingungen, wie in 32 gezeigt,
zusätzlich
zu den in 31 gezeigten Bedingungen Bedingungen
für Daten
mit Vorzeichen umfassen.
-
Somit
beträgt
die Gesamtanzahl von Befehlsarten, die einen Vergleichsbefehl, bedingte
Befehle für
jede von zwei Operationen (bedingte Transferbefehle und bedingte
Additionsbefehle) und bedingte Zweigbefehle umfassen, 31. Vorliegend
wird die Gesamtanzahl durch 11 + (10 × A) repräsentiert, wenn A Operationen
von bedingten Befehlen vorliegen. Es gibt auch bedingte Befehle,
deren Anzahl von Arten reduziert ist. Diese bedingten Befehle werden
genauer in „Hitachi
Single Chip RISC Microcomputer SH 7000/SH7600 Series Programming
Manual", Hitachi
Ltd., Seiten 57-58, 69-70 und 75-78 beschrieben.
-
33 zeigt
Vergleichsbefehle, bedingte Additionsbefehle und bedingte Zweigbefehle,
wobei die Anzahl von Befehlsarten reduziert ist.
-
Vorliegend
verwenden die bedingten Befehle und die bedingten Zweigbefehle,
die in 33 gezeigt sind, nur zwei Arten
von Bedingungen, nämlich diejenige,
bei der ein bedingter Bitschalter gesetzt ist, und diejenige, bei
der ein bedingter Bitschalter zurückgesetzt ist. Daher zeigt 33 zwei
Arten von bedingten Additionsbefehlen, zwei Arten von bedingten
Transferbefehlen, zwei Arten von bedingten Zweigbefehlen und fünf Arten
von Vergleichsbefehlen zum Setzen oder Zurücksetzen des bedingten Bitschalters.
-
Entsprechend
beträgt
die Gesamtanzahl von Befehlsarten einschließlich Vergleichsbefehlen, bedingten
Befehlen für
jede der zwei Operationen und bedingten Zweigbefehlen 11. Wenn es
vorliegend A Operationsarten von bedingten Befehlen gibt, so wird die
Gesamtanzahl von Befehlsarten einschließlich der Vergleichsbefehle,
der bedingten Befehle für
jede Operation und der bedingten Zweigbefehle durch 7 + (2 × A) repräsentiert.
-
Ein
Artikel von Mahlke S.A. et al mit dem Titel „A Comparison of Full and
Partial Predicted Execution Support for ILP Processors" von den Sitzungen des
Annual Symposium on Computer Architecture, New York, US, ACM, Band
SYMP, 22, 22. Juni 1995 (1995-06-22), Seiten 198-149, XP000687803
ISBN: 0-7803-3000-5 offenbart eine Diskussion über den Vorteil der vollständigen und
teilweise vorausgesagten Ausführungsunterstützung. Ferner
wird ein Compiler beschrieben, der sowohl eine teilweise als auch eine
vollständige
Vorhersage verwenden kann, um eine Beschleunigung in Large-Control-Intensitive-Programmen
zu erzielen.
-
Prozessoren,
die eine Pipeline-Verarbeitung durchführen, müssen nicht mehrere Arten von
bedingten Befehlen verwenden, um branch hazards soweit wie möglich zu
verringern.
-
Da
jedoch jeder Befehl, der durch einen Prozessor ausgeführt wird,
ein Bit-Muster mit vorbestimmter Länge aufweist, ist die Anzahl
von Befehlsarten, die der Prozessor verwenden kann, begrenzt.
-
Entsprechend
ist die Anzahl von Arten von bedingten Befehlen, die der Prozessor
verwenden kann, limitiert. Wenn die Anzahl von Befehlsarten zunimmt,
ist mehr Hardware erforderlich, um Befehle zu dekodieren, wodurch
die Kosten des Prozessors ansteigen.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
In
Bezug auf die zuvor beschriebenen Probleme ist es eine Aufgabe der
vorliegenden Erfindung, eine Befehlsumwandlungsvorrichtung zu schaffen,
welche die Anzahl von Befehlsarten reduziert, und ein Prozessor
zu schaffen, der weniger Hardwarekomponenten benötigt, wenn bedingte Befehle
verwendet werden.
-
Zur
Lösung
der zuvor beschriebenen Aufgabe umfasst der Prozessor gemäß der vorliegenden Erfindung,
der eine Befehlsfolge dekodiert und ausführt, die aus Befehlen besteht,
die mit einem Befehlssatz des Prozessors zugeordneten Befehlen übereinstimmen:
eine Zustandshalteeinheit, die, wenn ein vorgegebener Befehl ausgeführt wird,
einen Erneuerungszustand für
ein Ergebnis des Ausführens
des vorgegebenen Befehls hält;
wobei dem Befehlssatz erste bedingte Befehle zugeordnet sind, wobei
sich eine erste Zustandsbedingungen für einen ersten bedingten Befehl
und eine zweite Zustandsbedingung für einen zweiten bedingten Befehl, der
den gleichen Operationscode wie der erste bedingte Befehl aufweist,
gegenseitig ausschließen, dem
Befehlssatz der zweite bedingte Befehl nicht zugeordnet wird und
die erste Zustandsbedingung und die zweite Zustandsbedingung entweder
ein Zustand oder mehrere Zustände
beschreiben; eine Dekodiereinheit, die nacheinander jeden Befehl
in der Befehlsfolge dekodiert; eine Entscheidungseinheit, die entscheidet,
ob der Erneuerungszustand in dem Zustand oder den mehreren Zuständen enthalten
ist, die von der ersten Zustandsbedingung in dem ersten bedingten
Befehl beschrieben werden, wenn das Dekodiermittel den ersten be dingten
Befehl dekodiert; und eine Ausführeinheit,
die eine Operation, die von dem Operationscode in dem von dem Dekodiermittel dekodierten
ersten bedingten Befehl beschrieben wird, nur dann ausführt, wenn
ein Ergebnis der Entscheidung durch das Entscheidungsmittel positiv
ist.
-
Bei
dem beschriebenen Aufbau verwendet der Prozessor der vorliegenden
Erfindung einen Befehlssatz, der nur bedingte Befehle umfasst, die
eine exklusive Bedingung aus einem Paar von exklusiven Bedingungen
beschreiben, also keine bedingten Befehle, welche die anderen exklusiven
Bedingungen des Paares beschreiben. Daher wird die Anzahl von Arten
von bedingten Befehlen im Vergleich zu einem herkömmlichen
Prozessor reduziert.
-
Entsprechend
kann auch die Anzahl an Hardwarekomponenten eines Befehlsdekodierers
reduziert werden. Wenn die Anzahl von Befehlsarten begrenzt wird,
kann der Prozessor gemäß der vorliegenden
Erfindung ferner mit bedingten Befehlen von mehreren Operationen
versehen werden. Wenn der Prozessor gemäß der vorliegenden Erfindung
somit eine Pipeline-Verarbeitung durchführt, können entsprechend branch hazards
verringert werden.
-
Vorliegend
kann der Erneuerungszustand eine Beziehung zwischen der Größe zweier
Vergleichsobjekte a und b zeigen, die einem Ergebnis der Ausführung einer
Art von Vergleichsbefehl entspricht, wobei die Ausführung eines
ersten bedingten Befehls nur nach einem Vergleichsbefehl möglich ist und
dem Befehlssatz drei Arten von ersten bedingten Befehlen zugeordnet
werden, wobei die ersten Bedingungszustände der drei Arten von ersten
bedingten Befehlen folgendermaßen
lauten: 1. „a
= b" oder „a ≠ b"; 2. „a ≥ b" oder "a < b"; und 3. „a ≤ b" oder „a > b".
-
Bei
dem zuvor beschriebenen Aufbau verwendet der Prozessor gemäß der vorliegenden
Erfindung drei Arten von bedingten Befehlen für jede Operation, so dass die
Anzahl von Arten von bedingten Befehlen gegenüber einem herkömmlichen
Prozessor um die Hälfte
reduziert werden kann.
-
Entsprechend
können
die Hardwarekomponenten eines Befehlsdekodierers reduziert werden. Wenn
die Anzahl von Befehlsarten begrenzt wird, kann auch die Anzahl
von Ar ten von bedingten Befehlen gegenüber einem herkömmlichen
Prozessor um das doppelte erhöht
werden. Wenn der Prozessor gemäß der vorliegenden
Erfindung eine Pipeline-Verarbeitung durchführt, können somit branch harzards reduziert
werden.
-
Vorliegend
kann es sich bei einem in einem bedingten Befehl enthaltenen Operationscode
um einen Transfer-Operationscode, einen arithmetischen Operationscode
oder einen logischen Operationscode handeln.
-
Bei
dem zuvor beschriebenen Aufbau ist die Operation jedes bedingten
Befehls, der in dem Befehlssatz des Prozessors der vorliegenden
Erfindung enthalten ist, eine Transferoperation, eine arithmetische
Operation und eine logische Operation.
-
Entsprechend
kann der Prozessor gemäß der vorliegenden
Erfindung bedingte Transferbefehle, bedingte arithmetische Befehle
und bedingte logische Befehle verwenden. Wenn der Prozessor gemäß der vorliegenden
Erfindung eine Pipeline-Verarbeitung durchführt, können entsprechend branch hazards
verringert werden.
-
Wie
es zuvor beschrieben wurde, hat die vorliegende Erfindung große praktische
Verwendungen.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Diese
und andere Aufgaben, Vorteile und Merkmale der Erfindung werden
anhand der nachfolgenden Beschreibung unter Bezugnahme auf die beiliegenden
Zeichnung deutlich, die eine spezifische Ausführungsform der Erfindung zeigen,
wobei:
-
1 einen
Aufbau des Prozessors gemäß der vorliegenden
Erfindung zeigt, der Maschinenbefehle ausführt, die durch den Compiler
der vorliegenden Erfindung erzeugt werden;
-
2 eine
Liste von beispielhaften bedingten Transferbefehlen zeigt, welche
der Prozessor gemäß der ersten
Ausführungsform
ausführen
kann;
-
3 ein
Ablaufdiagramm ist, das die Operation des Compilers der ersten Ausführungsform zeigt;
-
4A und 4B Beispiele
von C-Quellprogrammen zeigen, die in C-Programmiersprache geschrieben
sind;
-
5A und 5B Zwischenbefehlsfolgen zeigen,
die keine bedingten Transferbefehle aufweisen und entsprechend von
den C-Quellprogrammen, die in den 4A und 4B gezeigt
sind, generiert werden;
-
6A und 6B Zwischencodefolgen zeigen,
bedingte Transferbefehle aufweisen und entsprechend von der Zwischencodefolge,
die in den 5A und 5B gezeigt
ist, erzeugt werden;
-
7A und 7B Maschinenbefehlsfolgen
zeigen, die entsprechend von den Zwischencodefolgen, die in den 6A und 6B gezeigt
sind, erzeugt werden;
-
8 ein
Ablaufdiagramm ist, das die Operation des Compilers der zweiten
Ausführungsform zeigt;
-
9 eine
Zwischencodefolge zeigt, die einen bedingten Transferbefehl umfasst,
der von dem in 4B gezeigten C-Quellprogramm
erzeugt wird;
-
10 eine
Liste von beispielhaften bedingten Zweigbefehlen zeigt, die der
Prozessor gemäß einer
dritten Ausführungsform
ausführen
kann;
-
11 ein
Ablaufdiagramm ist, das die Operation des Compilers gemäß der dritten
Ausführungsform
zeigt;
-
12 eine
Zwischencodefolge zeigt, die der Prozessor gemäß der dritten Ausführungsform dekodieren
kann und die von der Zwischencodefolge, die in 5B gezeigt
ist, erzeugt wird, die das Verfahren gemäß der dritten Ausführungsform
nicht dekodieren kann;
-
13 eine
Maschinenbefehlsfolge zeigt, die von der Zwischencodefolge, die
in 12 gezeigt ist, erzeugt wird;
-
14 Vergleichsbefehle,
einen bedingten Additionsbefehl, einen bedingten Transferbefehl
und einen bedingten Zweigbefehl einer vierten Ausführungsform
zeigt, wobei die Anzahl von Befehlsarten reduziert ist;
-
15 den
Aufbau des Compilers der vierten Ausführungsform zeigt;
-
16 ein
Beispiel des C-Quellcodes 1511 zeigt, das in C-Programmiersprache
geschrieben ist und dem Compiler der vierten Ausführungsform
zugeführt
wird;
-
17 den
ersten Zwischencode 1512 zeigt;
-
18 den
zweiten Zwischencode 1513 zeigt;
-
19 den
Maschinenbefehl 1515 zeigt;
-
20 ein
Ablaufdiagramm ist, das die Operation des Objektcodeerfassungsmittels 1502 und des
Umwandlungsmittels 1503 für bedingte Befehle der vierten
Ausführungsform
zeigt;
-
21 den
ersten Zwischencode 1512 zeigt;
-
22 ein
Ablaufdiagramm ist, das die Operation des Objektcodeerfassungsmittels 1502 und des
Umwandlungsmittels 1503 für bedingte Befehle der fünften Ausführungsform
zeigt;
-
23 den
ersten Zwischencode 1512;
-
24 ein
Ablaufdiagramm ist, das die Operation des Objektcodeerfassungsmittels 1502 und des
Umwandlungsmittels 1503 für bedingte Befehle gemäß einer
sechsten Ausführungsform
zeigt;
-
25 eine
Liste beispielhafter bedingter Additionsbefehle zeigt, die der Prozessor
gemäß der ersten
Ausführungsform
ausführen
kann;
-
26 ein
Beispiel eines C-Quellprogrammes zeigt, dass in C-Programmiersprache
geschrieben ist;
-
27 eine
Zwischencodefolge zeigt, die keine bedingten Additionsbefehle umfasst
und die von dem in 26 dargestellten C-Quellprogramm erzeugt
wird;
-
28 eine
Zwischencodefolge zeigt, die einen bedingten Additionsbefehl umfasst
und von der Zwischencodefolge, die in 27 gezeigt
ist, erzeugt wird;
-
29 eine
Maschinenbefehlsfolge zeigt, die von der Zwischencodefolge, die
in 28 gezeigt ist, erzeugt wird;
-
30 eine
Befehlsfolge zeigt, die einen herkömmlichen bedingten Transferbefehl
umfasst;
-
31 eine
Liste von herkömmlichen
Transferbefehlen zeigt;
-
32 einen
herkömmlichen
Vergleichsbefehl (CMP-Befehl), bedingte Additionsbefehle, die ausgeführt werden,
wenn ihre Bedingungen erfüllt sind,
bedingte Transferbefehle, die ausgeführt werden, wenn ihre Bedingungen
erfüllt
sind, und bedingte Zweigbefehle, die ausgeführt werden, wenn ihre Bedingungen
erfüllt
sind, zeigt; und
-
33 Vergleichsbefehle,
bedingte Additionsbefehle, bedingte Transferbefehle und bedingte Zweigbefehle
zeigt, bei denen die Anzahl von Befehlsarten reduziert ist.
-
BESCHREIBUNG
DER BEVORZUGTEN AUSFÜHRUNGSFORM
-
1 zeigt
den Aufbau des Prozessors gemäß der vorliegenden
Erfindung, der Maschinenbefehle, die durch den Compiler der vorliegenden
Erfindung erzeugt werden, ausführt.
-
Dieser
Prozessor umfasst das Operations-Bitschalter-Haltemittel 101,
das Befehlsdekodiermittel 102, das Befehlsausführmittel 103 und
das Befehlsausführhaltemittel 104.
-
Das
Operations-Bitschalter-Haltemittel 101 hält einen
Operations-Bitschalter, der einen Befehlsausführzustand zeigt, und gibt das
Operations-Bitschalter-Zustandssignal 111 aus, das den
Befehlsausführzustand
zeigt.
-
Das
Befehlsdekodiermittel 102 dekodiert Maschinenbefehle und
gibt das Befehlsausführmittelsteuersignal 112 aus.
Beim Dekodieren bedingter Befehle gibt das Befehlsdekodiermittel 102 das Kennzeichnungssignal 113 für einen
bedingten Befehl aus.
-
Das
Befehlsausführmittel 103 führt Befehle gemäß dem Befehlsausführmittelsteuersignalausgang
von dem Befehlsdekodiermittel 102 aus.
-
Das
Befehlsausführhaltemittel 104 empfängt das
Operations-Bitschalter-Zustandssignal 111, das von dem
Operations-Bitschalter-Haltemittel 101 ausgegeben wird,
und das Kennzeichnungssignal 113 für bedingte Befehle, das von
dem Befehlsdekodiermittel 102 ausgegeben wird. Wenn eine
Bedingung nicht erfüllt
ist, gibt das Befehlsausführhaltemittel 104 das
Befehlsausführhaltesignal 113 an
das Befehlsausführmittel 103 aus,
so dass das Befehlsausführmittel 103 seine
Befehlsausführung
beibehält.
-
Es
sollte vorliegend klar sein, dass bei diesem Prozess das Befehlsausführhaltemittel 104 durch
ein Befehlsausführfortsetzungsmittel
ersetzt werden kann, und, wenn eine Bedingung erfüllt ist, das
Befehlsausführfortsetzungsmittel
ein Befehlsausführsignal
an das Befehlsausführmittel 103 ausgeben
kann, so dass das Befehlsausführmittel 103 die
Befehle ausführt.
Der Prozessor, der das Befehlsausführhaltemittel 104 umfasst,
und der Prozessor, der das Befehlsausführfortsetzungsmittel aufweist, sind
im Wesentlichen identisch, ausgenommen der Tatsache, dass sie eine
inverse Logik aufweisen.
-
Ausführungsform 1
-
Unter
den sechs bedingten Transferbefehlen, die in 31 gezeigt
sind, dekodiert und führt der
Prozessor gemäß der ersten
Ausführungsform bedingte
Transferbefehle aus, die eine Bedingung von einem Paar von Bedingungen
in einer exklusiven Beziehung spezifizieren, wobei er jedoch bedingte Transferbefehle
nicht dekodiert und ausführt,
welche die andere Bedingung des Paars von Bedingungen beschreiben.
Vorliegend sind Beispiele von Bedingungen in einer exklusiven Beziehung „a = b" und „a ≠ b", und „a > b" und a ≤ b".
-
Genauer
gesagt, wenn zwei Operationsobjekte „a" und „b" durch einen Vergleichsbefehl miteinander
verglichen werden, dekodiert der vorliegende Prozessor einen bedingten
Befehl und führt
diesen aus, der eine Bedingung eines Paars von Bedingungen beschreibt,
die '„a" und „b" sind gleich' und '„a" und „b" sind nicht gleich' lauten.
-
In ähnlicher
Art und Weise dekodiert und führt
der vorliegende Prozessor einen bedingten Befehl aus, der eine Bedingung
eines Paars von Bedingungen beschreibt, die '„a" ist größer als „b"' und '„a" ist gleich oder
kleiner als „b"' lauten, und dekodiert und führt einen
bedingten Befehl aus, der eine Bedingung eines Paars von Bedingungen
beschreibt, die '„a" ist kleiner als „b"' und '„a" ist gleich oder
größer „b"' lauten.
-
2 zeigt
eine Liste von bedingten Transferbefehlen, die der vorliegende Prozessor
ausführen kann.
Diese Liste umfasst drei Arten von bedingten Transferbefehlen 201.
Jede der Bedingungen 202 ist ein Zeichen, das die Bedingung
zeigt, die durch einen bedingten Transferbefehl beschrieben ist.
Wenn zwei Operationsobjekte „a" und „b" durch einen Vergleichsbefehl
miteinander verglichen werden, bedeutet die Bedingung des Befehls „moveq" 203, dass „a" und „b" gleich sind; die
Bedingung des Befehls „movgt" 204 bedeutet,
dass „a" größer als „b" ist; und die Bedingung
des Befehls „movge" 205 bedeutet, dass „a" gleich oder größer als „b" ist. Jeder dieser bedingten
Transferbefehle führt
ein Transfer aus, wenn seine Bedingung erfüllt ist.
-
Der
vorliegende Compiler erzeugt nur die bedingten Transferbefehle,
die in 2 gezeigt ist, aus den bedingten Transferbefehlen,
die in 31 gezeigt sind.
-
3 ist
ein Ablaufdiagramm, das die Operation des Compilers gemäß der ersten
Ausführungsform
zeigt.
-
Die 4A und 4B zeigen
beispielhafte C-Quellprogramme, die in C-Programmiersprache geschrieben sind
und dem vorliegenden Compiler zugeführt werden.
-
Mit
dem C-Quellprogramm, das in 4A gezeigt
ist, werden die Variable „a" und die Variable „b" miteinander verglichen,
und, wenn sie gleich sind, wird „1" der Variablen „c" zugeordnet; wenn sie hingegen nicht
gleich sind, wird „0" der Variablen „c" zugeordnet, und
die Funktion „f" wird aufgerufen.
-
Die 5A und 5B zeigen
Zwischencodefolgen, die keine bedingten Transferbefehle umfassen
und jeweils von den C-Quellprogrammen, die in den 4A und 4B gezeigt
sind, im Schritt S301 des in 3 dargestellten
Ablaufdiagramms erzeugt. Es sollte klar sein, dass die 5A und 5B dieselben
Zwischencodefolgen zeigen, wie diejenigen, die durch einen herkömmlichen
Compiler während
der Umwandlung der C-Quellprogramme, die
in den 4A und 4B dargestellt
sind, in Maschinenbefehle erzeugt werden.
-
In 5A ist
der Zwischencode 501 ein Code zum Vergleichen der Variablen „a" und „b" und zum Setzen eines
Bitschalters, um das Vergleichsergebnis anzuzeigen; der Zwischencode 502 ist
ein Code zum Abzweigen zu dem Kennzeichen „Lt" 507, wenn die Variablen „a" und „b" gleich sind; der
Zwischencode 503 ist ein Code zum Transferieren der Einstellung
(„the
immediate") „0" zu der Variablen „c"; der Zwischencode 504 ist
ein Code zum Abzweigen zu dem Kennzeichen „L" 508; der Zwischencode 505 ist
ein Code zum Transferieren der Einstellung „1" zu der Variablen „c"; und der Zwischencode 506 ist
ein Code zum Aufrufen der Funktion „f".
-
In 5B ist
der Zwischencode 511 ein Code zum Vergleichen der Variablen „a" und „b" und zum Setzen eines
Bitschalters, zum Anzeigen des Vergleichsergebnisses; der Zwischencode 502 ist
ein Code zum Abzweigen des Kennzeichens „Lt" 517, wenn die Variablen „a" und „b" nicht gleich sind;
der Zwischencode 513 ist ein Code zum Transferieren der
Einstellung „0" zu der Variablen „c"; der Zwischencode 514 ist
ein Code zum Abzweigen des Kennzeichens „L" 518; der Zwischencode 515 ist
ein Code zum Transferieren der Einstellung „1" zu der Variablen „c"; und der Zwischencode 516 ist
ein Code zum Aufrufen der Funktion „f".
-
Die 6A und 6B zeigen
Zwischencodefolgen, die bedingten Transferbefehle umfassen. Diese
Zwischencodefolgen werden jeweils durch den vorliegenden Compiler
aus den Zwischencodefolgen, die keine bedingte Transferbefehle umfassen
und in den 5A und 5B gezeigt
sind, in den Schritten S302-S118 des in 3 dargestellten
Ablaufdiagramms erzeugt.
-
In 6A ist
der Zwischencode 601 ein Code zum Vergleichen der Variablen „a" und „b" und zum Setzen eines
Bitschalters zum Anzeigen des Vergleichsergebnisses; der Zwischencode 602 ist
ein Code zum Transferieren der Einstellung „0" zu der Variablen „c"; der Zwischencode 603 ist
ein Code zum Transferieren der Einstellung „1" zu der Variablen „c"; wenn die Variablen „a" und „b" gleich sind; und
der Zwischencode 604 ist ein Code zum Aufrufen der Funktion „f".
-
In 6B ist
der Zwischencode 611 ein Code zum Vergleichen der Variablen „a" und „b" und zum Einstellen
eines Bitschalters zum Anzeigen des Vergleichsergebnisses; der Zwischencode 612 ist
ein Code zum Transferieren der Einstellung „1" zu der Variablen „c"; der Zwischencode 613 ist
ein Code zum Transferieren der Einstellung „0" zu der Variablen „c"; wenn die Variablen „a" und „b" gleich sind; und
der Zwischencode 614 ist ein Code zum Aufrufen der Funktion „f".
-
Die 7A und 7B zeigen
Maschinenbefehlsfolgen. Die Maschinenbefehlsfolgen werden jeweils
durch den vorliegenden Compiler von den Zwischencodefolgen, die
bedingte Transferbefehle, die in den 6A und 6B gezeigt
sind, umfassen, im Schritt S319 des in 3 dargestellten
Ablaufdiagramms erzeugt. Es sollte klar sein, dass die Maschinenbefehlsfolgen,
die in den 7A und 7B gezeigt
sind, jeweils die gleichen wie diejenigen sind, die von den Zwischencodefolgen,
welche die in den 6A und 6B gezeigten
bedingten Transferbefehle umfassen, erzeugt werden.
-
In 7A ist
der Maschinenbefehl 701 ein Befehl zum Vergleichen der
Werte der Register „r0" und „r1" und zum Setzen eines
Bitschalters zum Anzeigen des Vergleichsergebnisses; der Maschinenbefehl 702 ist
ein Befehl zum Transferieren der Einstellung „0" zu dem Register „r2"; der Maschinenbefehl 703 ist
ein Befehl zum Transferieren der Ein stellung „1" zu dem Register „r2"; wenn die Werte der Register „r0" und „r1" gleich sind; und
der Maschinenbefehl 704 ist ein Befehl zum Aufrufen der
Funktion „f".
-
In 7B ist
der Maschinenbefehl 711 ein Befehl zum Vergleichen der
Werte der Register „r0" und „r1" und zum Setzen eines
Bitschalters zum Anzeigen des Vergleichsergebnisses; der Maschinenbefehl 712 ist
ein Befehl zum Transferieren der Einstellung „1" zu dem Register „r2"; der Maschinenbefehl 713 ist
ein Befehl zum Transferieren der Einstellung „0" zu dem Register „r2"; wenn die Werte der Register „r0" und „r1" gleich sind; und
der Maschinenbefehl 714 ist ein Befehl zum Aufrufen der
Funktion „f".
-
Nachfolgend
wird unter Bezugnahme auf 3 der Prozess
für denjenigen
Fall beschrieben, in dem das in 4A dargestellte
C-Quellprogramm dem vorliegenden Compiler zugeführt wird.
- (1a)
Das zugeführte
C-Quellprogramm wird in eine Zwischencodefolge ohne einen bedingten Transferbefehl
umgewandelt, und der Anfangswert „1" wird der Variablen n zugeordnet (Schritt S301).
Bei diesem Beispiel wird das in 4A gezeigte
C-Quellprogramm
in die Zwischencodefolge umgewandelt, die in 5A dargestellt
ist.
- (2a) Der Compiler entscheidet, ob der nte Zwischencode
ein Zwischencode ist, der einen bedingten Zweig beschreibt, dessen
Zweigziel der n + 3te Code ist (Schritt
S302). Dieser Prozess wird wiederholt, wobei jeweils n um 1 erhöht wird,
bis das Entscheidungsergebnis „Ja" lautet (bei dieser Wiederholung
lautet das Entscheidungsergebnis in Schritt S302 „Nein", woraufhin der Prozess
mit Schritt S314 fortfährt,
und das Ergebnis in Schritt S318 lautet „Ja"). Bei diesem Beispiel zeigt der Zwischencode 502,
der in 5A dargestellt ist, einen bedingten
Zweig an, dessen Zweigziel der n + 3te Code
ist, so dass das Entscheidungsergebnis in Schritt S302 „Ja" wird, wenn n gleich
2 ist, und der Prozess fährt
mit der Entscheidung in Schritt 303 fort.
- (3a) Der Compiler entscheidet, ob der n + 1te Zwischencode
einen Transfer anzeigt (Schritt 303). Wenn das Entscheidungsergebnis „Nein" lautet, wird n um
1 erhöht,
und der Prozess kehrt zu Schritt 302 zurück, um einen
Zwischencode ausfindig zu machen, der einen bedingten Zweig anzeigt
(in diesem Fall lautet das Entscheidungsergebnis in Schritt S303 „Nein", woraufhin der Prozess
mit Schritt S314 fortfährt,
und das Entschei dungsergebnis in Schritt S318 lautet „Ja"). In diesem Beispiel
ist der Zwischencode 503, der in 5A gezeigt
ist, ein Zwischencode, der einen Transfer anzeigt, so dass das Entscheidungsergebnis
in Schritt S303 „Ja" wird, wenn n + 1
gleich 3 ist, woraufhin der Prozess mit Schritt S304 fortfährt.
- (4a) Der Compiler entscheidet, ob der n + 2te Zwischencode
ein Zwischencode ist, der einen nicht-bedingten Zweig anzeigt, dessen
Zweigziel der n + 4te Code ist (Schritt
S304). Wenn das Entscheidungsergebnis „Nein" lautet, wird n um 2 erhöht, und
der Prozess kehrt zu Schritt S302 zurück, um einen Zwischencode ausfindig
zu machen, der einen bedingten Zweig anzeigt (in diesem Fall lautet
das Entscheidungsergebnis in Schritt S304 „Nein", woraufhin der Prozess mit Schritt
S315 fortfährt,
und das Entscheidungsergebnis in Schritt S318 lautet „Ja"). In diesem Beispiel
zeigt der Zwischencode 504, der in 5A gezeigt
ist, einen nicht-bedingten Zweig an, dessen Zweigziel der n + 4te Code ist, so dass, wenn n + 2 gleich 4
ist, das Entscheidungsergebnis in Schritt S304 „Ja" wird, woraufhin der Prozess mit Schritt
S304 fortfährt.
- (5a) Der Compiler entscheidet, ob der n + 3te Zwischencode
und der n + 1te Zwischencode Transfers zu
derselben Variablen anzeigen (Schritt S305). Wenn das Entscheidungsergebnis „Nein" lautet, wird n um
3 erhöht,
und der Prozess kehrt zu Schritt S302 zurück, um einen Zwischencode ausfindig
zu machen, der einen bedingten Zweig beschreibt (in diesem Fall
lautet das Entscheidungsergebnis in Schritt S305 „Nein", woraufhin der Prozess
mit Schritt S316 fortfährt,
und das Entscheidungsergebnis in Schritt S318 lautet „Ja"). In diesem Beispiel
beschreibt der Zwischencode 505, der in 5A gezeigt
ist, einen Transfer zu derselben Variablen wie der Zwischencode 503.
Daher, wenn n + 3 gleich 5 ist, wird das Entscheidungsergebnis in
Schritt S305 „Ja", und der Prozess
fährt mit
Schritt S306 fort.
- (6a) Der Compiler entscheidet, ob der vorliegende Prozessor
einen bedingten Transferbefehl ausführen kann, der dieselbe Bedingung
beschreibt, wie diejenige, die durch den nte Zwischencode, der
einen bedingten Zweig anzeigt, beschrieben ist (Schritt S306). Bei
diesem Beispiel ist die Bedingung, die durch den Zwischencode 502,
der einen in 5A gezeigten bedingten Zweig
anzeigt, beschrieben ist, diejenige, dass „a" und „b" gleich sind. Wein 2 gezeigt
ist, kann der vorliegende Prozessor einen bedingten Transferbefehl,
der dieselbe Bedingung beschreibt, ausführen, so dass das Entschei dungsergebnis „Ja" ist, woraufhin der
Prozess mit dem Umwandlungsprozess in Schritt S307 fortfährt.
- (7a) Der nte Zwischencode, der einen
bedingten Zweig anzeigt, wird gelöscht (Schritt S307).
- (8a) Der n + 2te Zwischencode, der einen
nicht-bedingten Zweig anzeigt, wird gelöscht (Schritt S308).
- (9a) Der n + 3te Zwischencode, der einen
Transfer anzeigt, wird in einen bedingten Transferbefehl konvertiert,
der dieselbe Bedingung beschreibt, wie diejenige, die durch den
nte Zwischencode, der einen bedingten Zweig
anzeigt, beschrieben ist (Schritt S309).
- (10a) N wird um 4 erhöht,
und der Compiler entscheidet, ob es einen weiteren zu verarbeitenden Zwischencode
gibt (Schritte S317 und S318). Wenn dies der Fall ist, werden die
Schritte S302-S318 wiederholt. In diesem Fall wird die Zwischencodefolge,
die einen bedingten Transferbefehl einschließen, der in 6A gezeigt
ist, erzeugt.
- (11a) Eine Zwischencodefolge, die bedingte Transferbefehle einschließt, wird
in eine Maschinenbefehlsfolge umgewandelt (Schritt S319). Bei diesem
Beispiel wird die Zwischencodefolge, die in 6A gezeigt
ist, in die in 7A dargestellte Maschinenbefehlsfolge
umgewandelt.
-
Die
nachfolgende Beschreibung bezieht sich auf den Prozess in demjenigen
Fall, in dem das in 4B gezeigte C-Quellprogramm
dem vorliegenden Compiler zugeführt
wird.
- (1b) In Schritt S301 wird das C-Quellprogramm, das
in 4B gezeigt ist, in die in 5B dargestellte
Zwischencodefolge umgewandelt.
- (2b) Der Zwischencode 512, der in 5B gezeigt
ist, zeigt einen bedingten Zweig an, dessen Zweigziel der n + 3te Zwischencode ist. Wenn n gleich 2 ist,
wird daher das Entscheidungsergebnis in Schritt S302 „Ja", und der Prozess
fährt mit Schritt
S303 fort.
- (3b) Der Zwischencode 513, der in 5B gezeigt
ist, zeigt einen Transfer an, so dass, wenn n + 1 gleich 3 ist,
das Entscheidungsergebnis in Schritt S303 „Ja" lautet, und der Prozess fährt mit der
Entscheidung in Schritt S304 fort.
- (4b) Der Zwischencode 514, der in 5B gezeigt
ist, zeigt einen nicht-bedingten Zweig an, dessen Zweigziel der
n + 4te Zwischencode ist. Wenn n + 2 gleich
4 ist, lautet daher das Entscheidungsergebnis in Schritt S304 „Ja", und der Prozess
fährt mit
der Entscheidung in Schritt S304 fort.
- (5b) Der Zwischencode 515, der in 5B gezeigt
ist, zeigt einen Transfer zu derselben Variablen an, wie der Zwischencode 513.
Wenn n + 3 gleich 5 ist, lautet daher das Entscheidungsergebnis
in Schritt S305 „Ja", und der Prozess
fährt Schritt
S306 fort.
- (6b) Die Bedingung, die durch den Zwischencode 512 beschrieben
ist, der einen bedingten Zweig, der in 5B dargestellt
ist, anzeigt, ist diejenige, dass „a" und „b" nicht gleich sind. Wie in 5B gezeigt
ist, kann der vorliegende Prozessor einen bedingten Transferbefehl,
der dieselbe Bedingung beschreibt, nicht ausführen, so dass das Entscheidungsergebnis
in Schritt S306 „Nein" lautet, und der
Prozess fährt
mit dem Umwandlungsprozess in Schritt S310 fort.
- (7b) Der der nte Zwischencode, der einen
bedingten Zweig anzeigt, wird gelöscht (Schritt S310).
- (8b) Der n + 2 Zwischencode, der einen nicht-bedingten Zweig
anzeigt, wird gelöscht
(Schritt 311).
- (9b) Der n + 1te Zwischencode, der einen
Transfer anzeigt, wird in einen bedingten Transferbefehl umgewandelt,
der eine exklusive Bedingung für den
Zustand beschreibt, der durch den nte Zwischencode,
der einen bedingten Zweig anzeigt, beschrieben ist (Schritt S312).
- (10b) Der n + 3te Transfercode und der
n + 1te Transfercode werden ausgetauscht.
- (11b) N wird um 4 erhöht,
und der Compiler entscheidet, ob es einen weiteren zu verarbeitenden Zwischencode
gibt (Schritte S317 und S318). Wenn dies der Fall ist, werden die
Prozesse in den Schritten S302-S318 wiederholt. Bei diesem Beispiel
wird die Zwischencodefolge, die einen bedingten Transferbefehl umfasst,
der in 6B dargestellt ist, erzeugt.
- (12b) In Schritt S319 wird die Zwischencodefolge, die in 6b gezeigt
ist, in die in 7B dargestellte Maschinenbefehlsfolge
umgewandelt.
-
Auf
diese Weise erzeugt der vorliegende Compiler nur bedingte Transferbefehle,
die der vorliegende Prozessor ausführen kann.
-
Ausführungsform 2
-
8 ist
ein Ablaufdiagramm, das die Operation des Compilers der vorliegenden
Ausführungsform
zeigt.
-
9 zeigt
eine Zwischencodefolge, die einen bedingten Transferbefehl umfasst.
Diese Zwischencodefolge wird durch den vorliegenden Compiler aus
dem in 4B gezeigten C-Quellprogramm in
Schritt S801 des in 8 gezeigten Ablaufdiagramms
erzeugt. Es sollte klar sein, dass 9 dieselbe
Zwischencodefolge wie diejenige zeigt, die durch einen herkömmlichen
Compiler zum Erzeugen eines bedingten Transferbefehls während der
Umwandlung des in 4B gezeigten C-Quellprogramms
in Maschinenbefehle erzeugt werden.
-
In 9 ist
der Zwischencode 901 ein Code zum Vergleichen der Variablen „a" und „b" und zum Einstellen
eines Bitschalters zum Anzeigen des Vergleichsergebnisses; der Zwischencode 902 ist
ein Code zum Transferieren der Einstellung „0" zu der Variablen „c"; der Zwischencode 903 ist
ein Code zum Transferieren der Einstellung „1" zu der Variablen „c", wenn die Variablen „a" und „b" nicht gleich sind;
und der Zwischencode 904 ist ein Code zum Aufrufen der
Funktion „f".
-
Vorliegend
kann der Prozessor der vorliegenden Ausführungsform die bedingten Transferbefehle,
die in 2 gezeigt sind, wie der Prozessor gemäß der ersten
Ausführungsform
ausführen.
-
Nachfolgend
wird unter Bezugnahme auf Fig., wie beispielsweise 8,
der Prozess für
denjenigen Fall beschrieben, in dem das C-Quellprogramm, das in 4B dargestellt
ist, dem vorliegenden Prozessor zugeführt wird.
-
Es
sollte klar sein, dass hier der Schritt, der in 8 gezeigt
ist, der dieselbe Zahl wie ein in 3 dargestellter
Schritt aufweist, denselben Prozess wie zuvor ausführt.
- (1) Das zugeführte C Quellprogramm wird in
eine Zwischencodefolge konvertiert, die einen bedingten Transferbefehl
umfasst, und der Anfangswert „1" wird der Variablen
n zugeordnet (Schritt S801). Bei diesem Beispiel wird das in 4B gezeigte C-Quellprogramm in
die Zwischencodefolge konvertiert, die in 9 dargestellt
ist.
- (2) Der Compiler entscheidet, ob der nte Zwischencode
einen bedingten Transfer anzeigt (Schritt S802). Dieser Prozess
wird wiederholt, wobei n jeweils erhöht wird, bis das Entscheidungsergebnis „Ja" lautet (bei dieser
Wiederholung ist das Entscheidungsergebnis in Schritt S802 „Nein", woraufhin der Prozess
mit Schritt S807 fortfährt,
und das Entscheidungsergebnis in Schritt S808 lautet „Ja"). Bei diesem Beispiel
zeigt der in 9 dargestellte Zwischencode 903 einen bedingten
Transfer an, so dass das Entscheidungsergebnis in Schritt S802 „Ja" lautet, wenn n gleich
3 ist, und der Prozess fährt
mit der Entscheidung in Schritt S803 fort.
- (3) Der Compiler entscheidet, ob der vorliegende Prozessor den
nten bedingten Transfercode ausführen kann
(Schritt S803). Vorliegend ist die Bedingung, die durch den Zwischencode 903 beschrieben
ist, der einen bedingten Transfer anzeigt, diejenige, dass „a" und „b" nicht gleicht sind. Wie
in 2 gezeigt ist, kann der vorliegende Prozessor
einen bedingten Zweigbefehl, der diese Bedingung beschreibt, nicht
ausführen.
Daher lautet das Entscheidungsergebnis in diesem Schritt „Nein", und der Prozess
fährt mit
der Entscheidung in Schritt S804 fort.
- (4) Der Compiler entscheidet, ob der n – 2te Zwischencode
einen Vergleich anzeigt (Schritt S804). Wenn das Entscheidungsergebnis „Nein" lautet, fährt der
Prozess mit dem inversen Umwandlungsprozess in Schritt S810 fort;
wenn es „Ja" lautet, fährt der
Prozess mit der Entscheidung in Schritt S805 fort. Bei diesem Beispiel
zeigt der in 9 dargestellte Zwischencode 901 einen
Vergleich an, so dass, wenn n – 2
gleich 1 ist, das Entscheidungsergebnis in Schritt S804 „Ja" lautet und der Prozess
fährt mit
S805 fort.
- (5) Der Compiler entscheidet, ob der n – 1te Zwischencode
einen Transfer zu derselben Variablen anzeigt, wie der nte Zwischencode, der einen bedingten Transfer
anzeigt (Schritt S805). Wenn das Entscheidungsergebnis „Nein" lautet, fährt der Prozess
mit dem Löschprozess
von bedingten Transferbefehlen in Schritt S810 fort; wenn das Entscheidungsergebnis
hingegen „Ja" lautet, fährt der
Prozess mit dem Umwandlungsprozess in Schritt S805 fort. Bei diesem
Beispiel zeigt der in 9 dargestellte Zwischencode 902 einen Transfer
zu derselben Variablen an, wie der Zwischencode 903, der
einen bedingten Transfer anzeigt. Wenn n – 1 gleich 3 ist, lautet das
Entscheidungsergebnis in Schritt S805 entsprechend „Ja", und der Prozess
fährt mit
dem Umwandlungsprozess in Schritt S806 fort.
- (6) Die Bedingung des nte Zwischencodes,
der einen bedingten Transfer anzeigt, wird zu einer exklusiven Bedingung
geändert
und die Transferwerte der n – 1ten
und nte Zwischencodes werden ausgetauscht
(Schritt S806). Bei diesem Beispiel wird die Bedingung, die durch
den Zwischencode 903 beschrieben ist, der einen in 9 gezeigten bedingten
Zweig anzeigt, bei der „a" und „b" nicht gleicht sind
(≠), in eine
exklusive Bedingung (gleich =) geändert. Das bedeutet, dass „c =: ne
1" zu „c =: eq
1" geändert wird.
- (7) N wird um 1 erhöht,
und der Compiler entscheidet, ob es einen weiteren zu verarbeitenden Zwischenbefehl
gibt (Schritte S807 und S808). Wenn dies der Fall ist, wird der
Prozess in den Schritten S802-S808 wiederholt. Bei diesem Beispiel
wird die Zwischencodefolge, die einen bedingten Transferbefehl,
der in 6B gezeigt ist, einschließt, erzeugt.
- (8) In Schritt S319 wird die Zwischencodefolge, die in 6b gezeigt
ist, in die in 7B dargestellte Maschinenbefehlsfolge
umgewandelt.
- (9) Jeder bedingte Transferbefehl, der nicht durch den vorliegenden
Prozessor ausgeführt
werden kann, und der auch nicht in dem Umwandlungsprozess in Schritt
S806 umgewandelt werden kann, wird in einen originalen Zwischencode
umgekehrt umgewandelt (Schritt S810). In diesem Fall wird dieser
Prozess nicht durchgeführt.
-
Wie
zuvor beschrieben wurde, konvertiert der vorliegende Compiler nicht-ausführbare bedingte Transferbefehle
in ausführbare
bedingte Transferbefehle für
den vorliegenden Prozessor.
-
Ausführungsform 3
-
Der
Prozessor der vorliegenden Ausführungsform
dekodiert und führt
nur bedingte Zweigbefehle, die eine Bedingung aus einem Paar von
Bedingungen in einer exklusiven Beziehung beschreiben, aus den sechs
Arten von bedingten Zweigbefehlen, welche dieselben Bedingungen
wie diejenigen beschreiben, die durch die sechs Arten von bedingten Transferbedingungen 3101,
die in 31 gezeigt sind, beschreiben,
aus.
-
10 zeigt
eine Liste von beispielhaften bedingten Zweigbefehlen, die der vorliegende
Prozessor ausführen
kann. Diese Liste umfasst drei Arten von bedingten Zweigbedingungen 1001.
Jede der Bedingungen 1002 ist ein Zeichen, das eine Bedingung
anzeigt, die durch einen bedingten Zweigbefehl beschrieben ist.
Wenn zwei Operationsobjekte „a" und „b" durch einen Vergleichsbefehl
miteinander verglichen werden, bedeutet die Bedingung des „beq" 1003, dass „a" und „b" gleich sind; die
des „bgt" 1004, dass „a" größer als „b" ist; und die des „bge" 1005, dass „a" größer als
oder gleich als „a" ist. Jeder bedingte
Zweigbefehl zeigt einen Zweig an, der durchgeführt wird, wenn seine Bedingung
erfüllt
ist. Es sollte klar sein, dass in dieser Ausführungsform der vorliegende
Prozessor keine anderen bedingten Befehle ausführen kann.
-
11 ist
ein Ablaufdiagramm, das die Operation des Compilers der dritten
Ausführungsform zeigt.
-
12 zeigt
eine Zwischencodefolge, die der vorliegende Prozessor dekodieren
kann. Diese Zwischencodefolge wird durch den vorliegenden Compiler
von der in 5B gezeigten Zwischencodefolge
erzeugt, die der vorliegende Prozessor nicht dekodieren kann, und
zwar in den Schritten S302-318 des in 11 dargestellten
Ablaufdiagramms.
-
In 12 ist
der Zwischencode 1201 ein Code zum Vergleichen der Variablen „a" und „b" und zum Setzen eines
Bitschalters zum Anzeigen des Vergleichsergebnisses; der Zwischencode 1202 ist ein
Code zum Abzweigen zu dem Kennzeichen „Lt" 1207, wenn die Variablen „a" und „b" gleich sind; der Zwischencode 1203 ist
ein Code zum Transferieren der Einstellung „1" zu der Variablen „c"; der Zwischencode 1204 ist
ein Code zum Abzweigen zu dem Kennzeichen „L" 1208; der Zwischencode 1205 ist ein
Code zum Transferieren der Einstellung „0" zu der Variablen „c"; und der Zwischencode 1206 ist
ein Code zum Aufrufen der Funktion „f".
-
13 zeigt
eins Maschinenbefehlsfolge. Diese Maschinenbefehlsfolge wird durch
den vorliegenden Compiler aus der Zwischencodefolge erzeugt, die
in 12 gezeigt ist, die der vorliegende Prozessor
in Schritt S319 des in 11 dargestellten Ablaufdiagramms
dekodieren kann. Es sollte klar sein, dass die 13 dieselbe
Maschinenbefehlsfolge wie diejenige zeigt, die durch einen herkömmlichen
Compiler aus der in 12 dargestellten Zwischencodefolge
erzeugt wird.
-
In 13 ist
der Maschinenbefehl 1301 ein Befehl zum Vergleichen von
Werten der Register „r0" und „r1" und zum Setzen eines
Bitschalters zum Anzeigen des Vergleichsergebnisses; der Maschinenbefehl 1302 ist
ein Befehl zum Abzweigen zu dem Kennzeichen „Lt" 1307, wenn die Werte der Register „r0" und „r1" gleich sind; der
Maschinenbefehl 1303 ist ein Befehl zum Transferieren der
Einstellung „1" zu dem Register „r2"; der Maschinenbefehl 1304 ist ein
Befehl zum Abzweigen zu dem Kennzeichen „L" 1308; der Maschinenbefehl 1305 ist
ein Befehl zum Transferieren der Einstellung „0" zu dem Register „r2"; und der Maschinenbefehl 1306 ist
ein Befehl zum Aufrufen der Funktion „f".
-
Nachfolgend
wird unter Bezugnahme auf 11 die
Verarbeitung des vorliegenden Compilers beschrieben, dem das in 4D dargestellte C-Quellprogramm zugeführt wird.
-
Es
sollte klar sein, dass jeder der in 11 dargestellten
Schritte, der dieselbe Bezugsziffer wie ein in 13 dargestellter
Schritt aufweist, dieselbe Verarbeitung wie zuvor ausführt.
- (1) In Schritt S301 wird das in 4B dargestellte C-Quellprogramm
in die Zwischencodefolge umgewandelt, die in 5B gezeigt
ist.
- (2) Der Zwischencode 512, der in 5B gezeigt ist,
zeigt einen bedingten Zweig an, dessen Zweigziel der n + 3te Zwischencode ist. Wenn n gleich 2 ist,
lautet das Entscheidungsergebnis in Schritt S302 daher „Ja", und der Prozess
fährt mit Schritt
S303 fort.
- (3) Der in 5B dargestellte Zwischencode 513 zeigt
einen Transfer an, so dass, wenn n + 1 gleich 3 ist, das Entscheidungsergebnis
in Schritt S303 „Ja" lauten wird, und
der Prozess fährt
mit der Entscheidung in Schritt S304 fort.
- (4) Der in 5B dargestellte Zwischencode 514 zeigt
einen nicht-bedingten Zweig an, dessen Zweigziel der n + 4te Zwischencode ist. Wenn n + 2 gleich 4
ist, lautet das Entscheidungsergebnis in Schritt S303 daher „Ja", und der Prozess
fährt mit der
Entscheidung in Schritt S304 fort.
- (5) Der in 5B dargestellte Zwischencode 515 zeigt
einen Transfer zu derselben Variablen wie der Zwischencode 513 an.
Wenn n + 3 gleich 5 ist, lautet das Entscheidungsergebnis in Schritt
S305 daher „Ja", und der Prozess
fährt mit
Schritt S306 fort.
- (6) Der Compiler entscheidet, ob der vorliegende Prozessor einen
bedingten Zweigbefehl derselben Bedingung wie diejenige ausführen kann,
die durch den nte Zwischencode beschrieben
ist, der einen bedingten Zweig anzeigt. Wenn das Entscheidungsergebnis „Ja" lautet, wird die
Umwandlungsverarbeitung nicht durchgeführt; wenn es hingegen „Nein" lautet, fährt der
Prozess mit der Umwandlungsverarbeitung fort (Schritt S1101). In
diesem Beispiel ist die Bedingung, die durch den Zwischencode 512 beschrieben
ist, der einen in 5B dargestellten bedingten Zweig anzeigt,
diejenige, dass „a" und „b" nicht gleich sind.
Wie anhand 10 zu erkennen ist, kann der
vorliegende Prozessor einen bedingten Zweigbefehl, der diese Bedingung
beschreibt, nicht ausführen,
so dass das Entscheidungsergebnis „Nein" lautet und der Prozess mit der Umwandlungsverarbeitung
in Schritt S 1102 fortfährt.
- (7) Die Bedingung, die durch den nte Zwischencode
spezifiziert ist, der einen bedingten Zweig anzeigt, wird in eine
exklusive Bedingung geändert
(Schritt S1102). In diesem Beispiel wird die Bedingung, die durch
den Zwischencode 512 beschrieben ist, der einen bedingten
Zweig anzeigt, also dass „a" und „b" nicht gleich sind
(≠), in eine exklusive
Bedingung geändert,
dass „a" und „b" gleich sind (=).
Genauer gesagt, wird „bne" in „beq" geändert.
- (8) Der n + 3te Transfercode und der
n + 1te Transfercode werden ausgetauscht
(Schritt S1103). Bei diesem Beispiel werden der fünfte Transfercode „c = 0" und der dritte Transfercode „c = 1" ausgetauscht.
- (9) In den Schritten S317 und S318 erzeugt der vorliegende Compiler
die ausführbare
Zwischencodefolge, die in 12 gezeigt
ist, für
den vorliegenden Prozessor.
- (10) In Schritt S319 wandelt der vorliegende Compiler die in 12 gezeigte
Zwischencodefolge in die in 13 dargestellte
Maschinenbefehlsfolge um.
-
Wie
zuvor beschrieben ist, wandelt der vorliegende Compiler nicht ausführbare bedingte
Zweigbefehle in ausführbare
bedingte Zweigbefehle für den
vorliegenden Prozessor um.
-
Ausführungsform 4
-
14 zeigt
Vergleichsbefehle, einen bedingten Additionsbefehl, einen bedingten
Transferbefehl und einen bedingten Zweigbefehl, wobei die Anzahl
von Befehlsarten reduziert wurde. Diese Befehle werden in der vorliegenden
Ausführungsform
verwendet.
-
In 14 verwendet
jeder der bedingten Befehle und der bedingte Zweigbefehl nur eine
Bedingung, wobei ein bedingter Bitschalter gesetzt ist. Daher zeigt 14 eine
Art eines bedingten Additionsbefehls, eine Art eines bedingten Zweigbefehls
und zehn Arten von Vergleichsbefehlen zum Einstellen und Zurücksetzen
des bedingten Bitschalters.
-
Daher
beträgt
die Gesamtanzahl von Befehlen, welche die Vergleichsbefehle, die
bedingten Befehle für
zwei Operationen und den bedingten Zweigbefehl umfassen, dreizehn.
Wenn vorliegend die Anzahl von Operationsarten von bedingten Befehlen
A beträgt,
so beträgt
die Gesamtanzahl von Befehlsarten, welche die Vergleichsbefehle,
die bedingten Befehle für
jede Operation und den bedingten Zweigbefehl umfassen, 11 + A.
-
Vorliegend
wird jede Gesamtanzahl von Befehlsarten, welche die Vergleichsbefehle,
die bedingten Additionsbefehle, die bedingten Transferbefehle und
die bedingten Zweigbefehle in den 14, 32 und 33 umfassen,
verglichen. Wenn die Anzahl von Arten von bedingten Befehlen A 0-3
ist, ist die Gesamtanzahl von Befehlsarten, die in 33 gezeigt
sind, am geringsten. Wenn die Anzahl von Arten von bedingten Befehlen
A gleich 4 ist, beträgt die
Gesamtanzahl von Befehlsarten, die in den 14 und 33 gezeigt
sind, fünfzehn,
welche die geringste ist (in diesem Fall beträgt die Gesamtanzahl von in 32 gezeigten
Befehlsarten 51). Wenn die Gesamtanzahl von Arten von bedingten
Befehlen A gleich 5 oder größer ist,
ist die Gesamtanzahl von Befehlsarten, die in 14 gezeigt sind,
am geringsten. Wenn A erhöht
wird, vergrößert sich
die Differenz zwischen diesen Fig..
-
Der
Prozessor der vorliegenden Ausführungsform
dekodiert und führt
die Vergleichsbefehle, den bedingten Additionsbefehl, den bedingten
Transferbefehl und den bedingten Zweigbefehl, die in 14 dargestellt
sind, aus.
-
15 zeigt
den Aufbau des vorliegenden Compilers.
-
Der
vorliegende Compiler umfasst das Zwischencodeerzeugungsmittel 1501,
das Objektcodeerfassungsmittel 1502, das Umwandlungsmittel 1503 für bedingte
Befehle, das Zwischencodeoptimierungsmittel 1504 und das
Maschinenbefehlserzeugungsmittel 1505.
-
16 zeigt
ein Beispiel des C-Quellcodes 1511. Dieser C-Quellcode
ist in C-Programmiersprache
geschrieben und wird dem vorliegenden Compiler zugeführt. Das
C-Quellprogramm, das in 16 gezeigt
ist, ist dasselbe, das in 4A dargestellt
ist und wird daher nachfolgend nicht erneut beschrieben.
-
Das
Zwischencodeerzeugungsmittel 1501 wandelt den C-Quellcode 1511 um
und erzeugt den ersten Zwischencode 1512. Diese Umwandlung
entspricht derjenigen, die durch einen herkömmlichen Compiler durchgeführt wird,
weshalb sie nachfolgend nicht beschrieben wird.
-
17 zeigt
den ersten Zwischencode 1512. Der erste Zwischencode 1512,
der in 17 gezeigt ist, entspricht demjenigen,
der in 5A gezeigt ist, und wird daher
nachfolgend nicht näher
erläutert.
-
Bei
dieser Ausführungsform
erzeugt der vorliegende Compiler den ersten Zwischencode 1512, der
in 17 gezeigt ist, aus dem C-Quellcode 1511, der
in 16 dargestellt ist.
-
Das
Objektcodeerfassungsmittel 1502 erfasst Befehlsfolgen,
deren vorbestimmte Operationen ausgeführt werden, wenn ihre vorbestimmten Bedingungen
erfüllt
sind.
-
Das
Umwandlungsmittel 1503 für bedingte Befehle konvertiert
eine Folge von Befehlen, die durch das Objektcodeerfassungsmittel 1502 erfasst wurden,
in bedingte Befehle und erzeugt den zweiten Zwischencode 1513 aus
dem ersten Zwischencode 1512. Das Objektcodeerfassungsmittel 1502 und
das Umwandlungsmittel 1503 für bedingte Befehle werden nachfolgend
noch genauer beschrieben.
-
18 zeigt
den zweiten Zwischencode 1513.
-
In 18 ist
der Zwischencode „a
cmpeq b" 1801 ein
bedingter Vergleichscode zum Vergleichen der Variablen „a" und „b". Wenn die Variablen
gleich sind, wird ein Operations-Bitschalter gesetzt, und wenn die
Variablen nicht gleich sind, wird der Operations-Bitschalter zurückgesetzt. Der Zwischencode „c = 0" 1802 ist
ein Code zum Transferieren der Einstellung „0" zu der Variablen „c". Der Zwischencode „c =: true 1" 1803 ist
ein Code, der ausgeführt
wird, wenn seine Bedingung erfüllt
ist. Mit diesem Zwischencode 1803 wird die Einstellung „1" dann zu der Variablen „c" transferiert, wenn
die Bedingung, die in dem vorangegangen Vergleichscode beinhaltet
ist, erfüllt
ist (wenn der Operations-Bitschalter
gesetzt ist). Der Zwischencode 1304 ist ein Code zum Aufrufen
der Funktion „f".
-
Bei
dieser Ausführungsform
erzeugt der vorliegende Compiler den zweiten Zwischencode 1513, der
in 18 gezeigt ist, aus dem in 17 dargestellten
ersten Zwischencode 1512.
-
Das
Zwischencodeoptimierungsmittel 1504 optimiert den zweiten
Zwischencode 1513 und erzeugt den Zwischencode 1514.
Diese Optimierung ist dieselbe, die durch einen herkömmlichen
Compiler durchgeführt
wird, weshalb sie nachfolgend nicht beschrieben wird.
-
Bei
dieser Ausführungsform,
wenn der in 18 dargestellte zweite Zwischencode 1513 empfangen
wird, führt
das Zwischencodeoptimierungsmittel 1504 die Optimierungsverarbeitung
nicht durch. Dies liegt daran, dass der zugeführte zweite Zwischencode keine
zu optimierenden Codes umfasst. Daher entspricht der dritte Zwischencode 1514 dem
in 18 dargestellten zweiten Zwischencode 1513.
-
Das
Maschinenbefehlserzeugungsmittel 1505 wandelt den dritten
Zwischencode 1514 um und erzeugt den Maschinenbefehl 1515.
Diese Umwandlung entspricht derjenigen, die durch einen herkömmlichen
Compiler durchgeführt
wird, weshalb sie nachfolgend nicht näher erläutert wird.
-
19 zeigt
den Maschinenbefehl 1515.
-
In 19 ist
der Maschinenbefehl „cmpeq r0,
r1" 1901 ein
bedingter Vergleichsbefehl zum Vergleichen von Werten der Register „r0" und „r1". Wenn die Werte
gleich sind, wird der Operations-Bitschalter gesetzt; wenn die Werte
nicht gleich sind, wird der Operations-Bitschalter zurückgesetzt.
Der Maschinenbefehl „mov
0, r2" 1902 ist
ein Transferbefehl zum Transferieren der Einstellung „0" zu dem Register „r2". Der Maschinenbefehl „movt 1,
r2" 1903 ist
ein Befehl, der ausgeführt
wird, wenn seine Bedingung erfüllt
ist. Bei diesem Maschinenbefehl 1903 wird die Einstellung „1" nur zu dem Register „r2" transferiert, wenn
die Bedingung durch das Ergebnis eines Vergleichsbefehls erfüllt ist
(wenn der Operations-Bitschalter gesetzt ist). Der Maschinenbefehl 1904 ist ein
Befehl zum Aufrufen der Funktion „f".
-
Bei
dieser Ausführungsform
erzeugt der vorliegende Compiler den in 19 gezeigten
Maschinenbefehl 1515 aus dem in 19 dargestellten
dritten Zwischencode 1514.
-
20 ist
ein Ablaufdiagramm, das die Operation des Objektcodeerfassungsmittels 1502 und des
Umwandlungsmittels 1503 für bedingte Befehle des vorliegenden
Compilers zeigt.
-
Nachfolgend
werden unter Bezugnahme auf 17 das
Objektcodeerfassungsmittel 1502 und das Umwandlungsmittel 1503 für bedingte
Befehle des vorliegenden Compilers beschrieben, dem der in 17 dargestellte
erste Zwischencode zugeführt wird.
- (1) Der erste Zwischencode wird dem Objektcodeerfassungsmittel 1502 und
dem Umwandlungsmittel 1503 für bedingte Befehle zugeführt, und der
Anfangswert „1" wird der Variablen
n zugeordnet (Schritt S2001). Bei diesem Beispiel wird der in 17 dargestellte
erste Zwischencode erzielt.
- (2) Der Compiler entscheidet, ob der nte Zwischencode
einen Vergleich anzeigt (Schritt S2002). Dieser Prozess wird wiederholt,
wobei n jeweils um eins erhöht
wird, bis das Entscheidungsergebnis „Ja" lautet (bei dieser Wiederholung lautet
das Entscheidungsergebnis in Schritt S2002 „Nein", woraufhin der Prozess mit Schritt S2011
fortfährt,
und das Entscheidungsergebnis in Schritt S2016 lautet „Ja"). Bei diesem Beispiel zeigt
der erste Zwischencode des ersten Zwischencodes einen Vergleich
an, so dass, wenn n gleich 1 ist, das Entscheidungsergebnis in Schritt S2002 „Ja" lautet, woraufhin
der Prozess mit der Entscheidung in Schritt S2003 fortfährt.
- (3) Der Compiler entscheidet, ob der n + 1te Zwischencode
einen bedingten Zweig anzeigt und ob sein Zweiziel der n + 4te Zwischencode ist (Schritt S2003). Wenn
das Entscheidungsergebnis „Nein" lautet, wird n um
eins erhöht,
woraufhin der Prozess zu Schritt S2002 zurückkehrt, um einen Zwischencode
aufzufinden, der einen Vergleich anzeigt (in diesem Fall lautet
das Entscheidungsergebnis in Schritt S2003 „Nein", woraufhin der Prozess mit Schritt
S2011 fortfährt,
und das Entscheidungsergebnis in Schritt S2016 lautet „Ja"). Bei diesem Beispiel
zeigt der in 17 dargestellte zweite Zwischencode
einen bedingten Zweig an, dessen Zweigziel der n + 4te Zwischencode
ist. Wenn n + 1 gleich 2 ist, wird das Entscheidungsergebnis in
Schritt S2003 daher „Ja" lauten, und der
Prozess fährt
mit der Entscheidung in Schritt S2004 fort.
- (4) Der Compiler entscheidet, ob der n + 2te Zwischencode
einen Transfer anzeigt (Schritt S2004). Wenn das Entscheidungsergebnis „Nein" lautet, wird n um
zwei erhöht
und der Prozess kehrt zu Schritt S2002 zurück, um einen Zwischencode aufzufinden,
der einen Vergleich anzeigt (in diesem Fall lautet das Entscheidungsergebnis
in Schritt S2004 „Nein", woraufhin der Prozess
mit Schritt S2012 fortfährt,
und das Entscheidungsergebnis in Schritt S2016 lautet „Ja"). Bei diesem Beispiel
zeigt der in 17 dargestellte dritte Zwischencode
einen Transfer an, sodass, wenn n + 2 gleich 3 ist, das Entscheidungsergebnis
in Schritt S2003 „Ja" lauten wird, und
der Prozess fährt
mit der Entscheidung in Schritt S2005 fort.
- (5) Der Compiler entscheidet, ob der n + 3te Zwischencode
einen nicht-bedingten Zweig anzeigt, dessen Zweigziel der n + 5te Zwischencode ist (Schritt S2005). Wenn
das Entscheidungsergebnis „Nein" lautet, wird n um
drei erhöht
und der Prozess kehrt zu Schritt S2002 zurück, um einen Zwischencode aufzufinden,
der einen Vergleich anzeigt (in diesem Fall lautet das Entscheidungsergebnis
in Schritt S2005 „Nein", woraufhin der Prozess
mit Schritt S2013 fortfährt,
und das Entscheidungsergebnis in Schritt S2016 lautet „Ja"). Bei diesem Beispiel
zeigt der in 17 dargestellte vierte Zwischencode
einen nicht-bedingten Zweig an, dessen Zweigziel der n + 5te Zwischencode. Wenn n + 3 gleich 4 ist,
wird daher das Entscheidungsergebnis in Schritt S2005 „Ja" lauten, und der
Prozess fährt
mit der Entscheidung in Schritt S2006 fort.
- (6) Der Compiler entscheidet, ob der n + 4te Zwischencode
einen Transfer zu derselben Variablen des n + 2te Zwischencodes
anzeigt (Schritt S2006). Wenn das Entscheidungsergebnis „Nein" lautet, wird n um
vier erhöht
und der Prozess kehrt zu Schritt S2002 zurück, um einen Zwischencode ausfindig
zu machen, der einen Vergleich anzeigt (in diesem Fall lautet das
Entscheidungsergebnis in Schritt S2006 „Nein", woraufhin der Prozess mit Schritt
S2014 fortfährt,
und das Entscheidungsergebnis in Schritt S2016 lautet „Ja"). Bei diesem Beispiel
zeigt der fünfte
Zwischencode einen Transfer zu derselben Variablen wie der dritte
Zwischencode an, sodass, wenn n + 4 gleich 5 ist, das Entscheidungsergebnis
in Schritt S2005 „Ja" lauten wird, und
der Prozess fährt
mit dem Umwandlungsprozess in Schritt S2006 fort.
- (7) Der nte Zwischencode, der einen
Vergleich anzeigt, wird in einen bedingten Vergleichscode geändert, der
dieselbe Bedingung wie der n + 1te Zwischencode
beschreibt, der einen bedingten Zweig anzeigt (Schritt S2007).
- (8) Der n + 1te Zwischencode, der einen
bedingten Zweig anzeigt, wird gelöscht (Schritt S2008).
- (9) Der n + 3te Zwischencode, der einen
nicht-bedingten Zweig anzeigt, wird gelöscht (Schritt S2009).
- (10) Der n + 4te Zwischencode, der einen
Transfer anzeigt, wird in einen Code geändert, der ausgeführt wird,
wenn seine Bedingung erfüllt
ist (Schritt S2010).
- (11) N wird um 5 erhöht,
und der Compiler entscheidet, ob es noch einen zu verarbeitenden Zwischencode
gibt (Schritte S2015 und S2016). Wenn dies der Fall ist, wird der
Prozess in den Schritten S2002 bis S2016 wiederholt. Bei diesem Beispiel
wird die in 18 dargestellte zweite Zwischencodefolge 1513 erzeugt.
- (12) Das Umwandlungsmittel 1503 für bedingte Befehle gibt den
zweiten Zwischencode aus (Schritt S2017).
-
Auf
diese Weise erzeugt der vorliegende Compiler bedingte Vergleichscodes
und Codes, die ausgeführt
werden, wenn ihre Bedingungen erfüllt sind. Der vorliegende Prozessor
kann diese Codes ausführen.
-
Ausführungsform 5
-
Der
Prozessor gemäß der fünften Ausführungsform
dekodiert und führt
die Vergleichsbefehle, den bedingten Additionsbefehl, den bedingten
Transferbefehl und den bedingten Zweigbefehl, die in 14 gezeigt
sind, wie der Prozessor gemäß der vierten
Ausführungsform
aus.
-
Der
vorliegende Prozessor umfasst dieselben Komponenten wie der in 15 dargestellte Prozessor
der vierten Ausführungsform.
-
Die
nachfolgende Beschreibung bezieht sich nur auf die Unterschiede
zwischen der vorliegenden Ausführungsform
und der vierten Ausführungsform.
-
21 zeigt
den ersten Zwischencode 1512. Der in 21 gezeigte
erste Zwischencode 1512 ist derselbe wie derjenige, der
in 6A gezeigt ist, und wird daher nachfolgend nicht
näher beschrieben.
-
Das
Zwischencodeerzeugungsmittel 1501 erzeugt den ersten Zwischencode 1512,
der in 21 gezeigt ist, aus dem C-Quellcode 1511,
der in 16 dargestellt ist. Diese Umwandlung
entspricht derjenigen, die von einem herkömmlichen Compiler zum Erzeugen
bedingter Transferbefehle durchgeführt wird, und wird daher nachfolgend
nicht näher
erläutert.
-
Das
Objektcodeerfassungsmittel 1502 und das Umwandlungsmittel 1503 für bedingte
Befehle erzeugen den in 18 dargestellten
zweiten Zwischencode 1513 aus dem in 21 gezeigten
ersten Zwischencode 1512.
-
22 ist
ein Ablaufdiagramm, das die Operation des Objektcodeerfassungsmittels 1502 und des
Umwandlungsmittels 1503 für bedingte Befehle gemäß der vorliegenden
Ausführungsform
zeigt.
-
Nachfolgend
werden unter Bezugnahme auf 21 die
Verarbeitung des Objektcodeerfassungsmittels 1502 und des
Umwandlungsmittels 1503 für bedingte Befehle des vorliegenden
Compilers beschrieben, dem der in 21 gezeigte
erste Zwischencode 1512 zugeführt wird.
- (1)
Der erste Zwischencode wird dem Objektcodeerfassungsmittel 1502 und
dem Umwandlungsmittel 1503 für bedingte Befehle zugeführt, und der
Anfangswert „1" wird der Variablen
n zugeordnet (Schritt S2201). Bei diesem Beispiel wird der in 21 dargestellte
erste Zwischencode erzielt.
- (2) Der Compiler entscheidet, ob der nte Zwischencode
des ersten Zwischencodes einen Vergleich anzeigt (Schritt S2202).
Dieser Prozess wird wiederholt, wobei n jeweils um eins erhöht wird,
bis das Entscheidungsergebnis „Ja" lautet (bei dieser
Wiederholung lautet das Entscheidungsergebnis in Schritt S2002 „Nein", woraufhin der Prozess
mit Schritt S2207 fortfährt,
und das Entscheidungsergebnis in Schritt S2210 lautet „Ja"). Bei diesem Beispiel
zeigt der erste Zwischencode des ersten Zwischencodes einen Vergleich
an, so dass, wenn n gleich 1 ist, das Entscheidungsergebnis in Schritt
S2202 „Ja" lauten wird, und
der Prozess fährt
mit der Entscheidung in Schritt S2203 fort.
- (3) Der Compiler entscheidet, ob der n + 1te Zwischencode
einen Transfer anzeigt (Schritt S2203). Wenn das Entscheidungsergebnis „Nein" lautet, wird n um
eins erhöht,
und der Prozess kehrt zu Schritt S2202 zurück, um einen Zwischencode ausfindig
zu machen, der einen Vergleich anzeigt (in diesem Fall lautet das
Entscheidungsergebnis in Schritt S2203 „Nein", woraufhin der Prozess mit Schritt
S2207 fortfährt,
und das Entscheidungsergebnis in Schritt S2210 lautet „Ja"). Bei diesem Beispiel
zeigt der zweite Zwischencode, der in 21 gezeigt
ist, einen Transfer an, so dass, wenn n + 1 gleich 2 ist, das Entscheidungsergebnis
in Schritt S2203 „Ja" lauten wird, und
der Prozess fährt
mit der Entscheidung in Schritt S2204 fort.
- (4) Der Compiler entscheidet, ob der n + 2te Zwischencode
einen bedingten Transfer zu derselben Variablen wie der n + 1te Zwischencode beschreibt (Schritt S2204).
Wenn das Entscheidungsergebnis „Nein" lautet, wird n um zwei erhöht und der
Prozess kehrt zu Schritt S2202 zurück, um einen Zwischencode ausfindig
zu machen, der einen Vergleich anzeigt (in diesem Fall lautet das
Entscheidungsergebnis in Schritt S2204 „Nein", woraufhin der Prozess mit dem Schritt
S2208 fortfährt,
und das Entscheidungsergebnis in Schritt S2210 lautet „Ja"). Bei diesem Beispiel
zeigt der in 21 gezeigte dritte Zwischencode
den bedingten Transfer zu derselben Variablen wie der zweite Zwischencode
an. Daher, wenn n + 2 gleich 3 ist, wird das Entscheidungsergebnis
in Schritt S2204 „Ja" lauten, und der
Prozess fährt
mit dem Umwandlungsprozess in Schritt S2205 fort.
- (5) Der nte Zwischencode, der einen
Vergleich anzeigt, wird in einen bedingten Vergleichsode umgewandelt,
der eine Bedingung in der exklusiven Beziehung mit derjenigen beschreibt,
die durch den n + 2te bedingten Transfer
beschrieben ist (Schritt S2205).
- (6) Der n + 2te Zwischencode, der einen
bedingten Transfer anzeigt, wird in einen Code umgewandelt, der
ausgeführt
wird, wenn Seine Bedingung erfüllt
ist (Schritt 2206).
- (7) N wird um 3 erhöht,
und der Compiler entscheidet, ob es noch einen weiteren zu verarbeitenden
Zwischencode gibt (Schritte S2209 und S2210). Ist dies der Fall,
wird der Prozess in den Schritten S2202 bis S2210 wiederholt. Bei
diesem Beispiel wird der in 18 dargestellte
Zwischencode 1513 erzeugt.
- (8) Das Umwandlungsmittel 1503 für bedingte Befehle gibt den
zweiten Zwischencode aus (Schritt S2211).
-
Auf
diese Weise erzeugt der vorliegende Compiler ausführbare bedingte
Vergleichscodes und Codes, die ausgeführt werden, wenn ihre Bedingungen
erfüllt
sind, für
den vorliegenden Prozessor.
-
Ausführungsform 6
-
Der
Prozessor gemäß der sechsten
Ausführungsform
dekodiert und führt
die Vergleichsbefehle, den bedingten Additionsbefehl, den bedingten
Transferbefehl und den bedingten Zweigbefehl, die in 14 gezeigt
sind, wie die Prozessoren gemäß der vierten
und fünften
Ausführungsform
aus.
-
Der
Compiler der sechsten Ausführungsform umfasst
dieselben Komponenten wie der Prozessor gemäß der vierten oder der fünften Ausführungsform, wie
es in 15 gezeigt ist.
-
Die
nachfolgende Beschreibung bezieht sich nur auf die Unterschiede
zwischen der vorliegenden Ausführungsform
und der vierten Ausführungsform.
-
23 zeigt
den ersten Zwischencode 1512.
-
In 23 ist
der Zwischencode 2301 ein Code zum Vergleichen der Variablen „a" und „b" und zum Setzen eines
Bitschalters, zum Anzeigen des Vergleichsergebnisses; der Zwischencode 2302 ist ein
Code zum Transferieren der Einstellung „0" zu der Variablen „c", wenn die Variablen „a" und „b" nicht gleich sind;
der Zwischencode 2303 ist ein Co de zum Transferieren der
Einstellung „1" zu der Variablen „c", wenn die Variablen „a" und „b" gleich sind; der
Zwischencode 2304 ist ein Code zum Aufrufen der Funktion „f" Das Zwischencodeerzeugungsmittel 1501 erzeugt
den in 23 dargestellten ersten Zwischencode 1512 aus
dem in 16 gezeigten C-Quellcode 1511.
Diese Umwandlung entspricht derjenigen, die von einem herkömmlichen
Compiler zum Erzeugen bedingter Transferbefehle durchgeführt wird,
und wird daher nachfolgend nicht näher erläutert.
-
Das
Objektcodeerfassungsmittel 1502 und das Umwandlungsmittel 1503 für bedingte
Befehle erzeugen den in 18 gezeigten
zweiten Zwischencode 1513 aus dem in 23 dargestellten ersten
Zwischencode 1512.
-
24 ist
ein Ablaufdiagramm, das die Operation des Objektcodeerfassungsmittels 1502 und des
Umwandlungsmittels 1503 für bedingte Befehle des vorliegenden
Prozessors zeigt.
-
Nachfolgend
wird die Verarbeitung des in 23 gezeigten
Zwischencodes 1512 durch das Objektcodeerfassungsmittel 1502 und
das Umwandlungsmittels 1503 für bedingte Befehle des vorliegenden
Compilers beschrieben.
- (1) Der erste Zwischencode
wird dem Objektcodeerfassungsmittel 1502 und dem Umwandlungsmittel 1503 für bedingte
Befehle zugeführt,
und der Anfangswert „1" wird der Variablen
n zugeordnet (Schritt S2401). Bei diesem Beispiel wird der in 23 erste
Zwischencode erzielt.
- (2) Der Compiler entscheidet, ob der nte Zwischencode
des ersten Zwischencodes einen Vergleich anzeigt (Schritt S2402).
Dieser Prozess wird wiederholt, wobei n jeweils um eins erhöht wird,
bis das Entscheidungsergebnis „Ja" lautet (bei dieser
Wiederholung lautet das Entscheidungsergebnis in Schritt S2402 „Nein", woraufhin der Prozess
mit Schritt S2409 fortfährt,
und das Entscheidungsergebnis in Schritt S2210 lautet „Ja"). Bei diesem Beispiel
zeigt der erste Zwischencode des ersten Zwischencodes einen Vergleich
an, so dass, wenn n gleich 1 ist, das Entscheidungsergebnis in Schritt
S2402 „Ja" lauten wird, und
der Prozess fährt
mit der Entscheidung in Schritt S2403 fort.
- (3) Der Compiler entscheidet, ob der n + 1te Zwischencode
einen bedingten Transfer anzeigt (Schritt S2403). Wenn das Entscheidungsergebnis „Nein" lautet, wird n um
eins erhöht,
und der Prozess kehrt zu Schritt S2402 zurück, um einen Zwischencode aufzufinden,
der einen Vergleich anzeigt (in diesem Fall lautet das Entscheidungsergebnis
in Schritt S2403 „Nein", woraufhin der Prozess
mit Schritt S2409 fortfährt,
und das Entscheidungsergebnis in Schritt S2412 lautet „Ja"). Bei diesem Beispiel
zeigt der in 23 gezeigte zweite Zwischencode
einen bedingten Transfer, so dass, wenn n + 1 gleich 2 ist, das
Entscheidungsergebnis in Schritt S2403 „Ja" lauten wird, und der Prozess fährt mit
der Entscheidung in Schritt S2404 fort.
- (4) Der Compiler entscheidet, ob der n + 2te Zwischencode
einen bedingten Transfer zu derselben Variablen wie der n + 1te Zwischencode anzeigt (Schritt S2404).
Wenn das Entscheidungsergebnis „Nein" lautet, wird n um zwei erhöht und der
Prozess kehrt zu Schritt S2402 zurück, um einen Zwischencode aufzufinden,
der einen Vergleich anzeigt (in diesem Fall lautet das Entscheidungsergebnis
in Schritt S2204 „Nein", woraufhin der Prozess
mit Schritt S2410 fortfährt,
und das Entscheidungsergebnis in Schritt S2412 lautet „Ja"). Bei diesem Beispiel
zeigt der dritte Zwischencode, der in 23 gezeigt
ist, einen bedingten Transfer zu derselben Variablen wie der zweite
Zwischencode an. Daher, wenn n + 2 gleich 3 ist, wird das Entscheidungsergebnis
in Schritt S2404 „Ja" lauten, und der
Prozess fährt mit
dem Umwandlungsprozess in Schritt S2405 fort.
- (5) Der Compiler entscheidet, ob die Bedingung des n + 2te Zwischencodes, der einen bedingten Transfer
anzeigt, in einer exklusiven Beziehung zu der Bedingung des n +
1te Zwischencodes, der einen bedingten Transfer
anzeigt, steht (Schritt S2405). Wenn das Entscheidungsergebnis „Nein" lautet, wird n um
zwei erhöht,
der Prozess kehrt zu Schritt S2402 zurück, um einen Zwischencode ausfindig
zu machen, der einen Vergleich anzeigt (in diesem Fall lautet das
Entscheidungsergebnis in Schritt S2405 „Nein", woraufhin der Prozess mit Schritt
S2410 fortfährt,
und das Entscheidungsergebnis in Schritt S2412 lautet „Ja"). Bei diesem Beispiel
steht die Bedingung des dritten Zwischencodes, der einen bedingten
Transfer anzeigt, in der exklusiven Beziehung mit der Bedingung
des zweiten Zwischencodes, der einen bedingten Transfer anzeigt.
Daher, wenn n + 2 gleich 3 ist, lautet das Entscheidungsergebnis
in Schritt S2405 „Ja", und der Prozess
fährt mit
dem Schritt S2406 fort.
- (6) Der nte Zwischencode, der einen
Vergleich anzeigt, wird in einen bedingten Vergleichsode umgewandelt,
der dieselbe Bedingung wie der n + 2te Zwischencode,
der einen bedingten Transfer anzeigt, beschreibt (Schritt S2406).
- (7) Der n + 1te Zwischencode, der einen
bedingten Transfer anzeigt, wird in einen Transfercode umgewandelt
(Schritt 2407).
- (8) Der n + 2te Zwischencode, der einen
bedingten Transfer anzeigt, wird in einen Code umgewandelt, der
ausgeführt
wird, wenn seine Bedingung erfüllt
ist (Schritt 2408).
- (9) N wird um 3 erhöht,
und der Compiler entscheidet, ob es einen weiteren zu verarbeitenden Zwischencode
gibt (Schritte S2411 und S2412). Wenn dies der Fall ist, wird der
Prozess in den Schritten S2402 bis S2412 wiederholt. In diesem Fall
wird der in 18 gezeigte zweite Zwischencode 1513 erzeugt.
Auf diese Weise erzeugt der vorliegende Compiler bedingte Vergleichscodes und
Codes, die ausgeführt
werden, wenn ihre Bedingungen erfüllt sind. Der vorliegende Prozessor kann
diese erzeugten Codes ausführen.
-
Der
Prozessor und der Compiler der vorliegenden Erfindung wurden zuvor
anhand von Ausführungsformen
beschrieben, wobei klar sein sollte, dass die vorliegende Erfindung
nicht auf die beschriebenen Beispiele beschränkt ist. Weitere Variationen
werden nachfolgend beschrieben.
- (1) Der Compiler
der vorliegenden Erfindung konvertiert einen Direktcode, der keinen
bedingten Transfercode umfasst, und einen Zwischencode, der einen
bedingten Transfercode umfasst, den der Prozessor der vorliegenden
Erfindung nicht ausführen
kann, in einem Zwischencode, der einen bedingten Transfercode umfasst,
den der Prozessor der vorliegenden Erfindung ausführen kann.
Der Compiler der vorliegenden Erfindung kann jedoch eine Maschinenbefehlsfolge,
die keine bedingten Transferbefehle umfasst, und eine Maschinenbefehlsfolge,
die bedingte Transferbefehle umfasst, die der Prozessor der vorliegenden Erfindung
nicht ausführen
kann, in eine Maschinenbefehlsfolge umwandeln, die bedingte Transferbefehle
umfasst, die der Prozessor der vorliegenden Erfindung ausführen kann.
- (2) In den zuvor beschriebenen Ausführungsformen werden Einstellungen
durch Transferbefehle transferiert. Jedoch können auch die Inhalte von Registern
oder eines Speichers transferiert werden.
- (3) In den zuvor beschriebenen Ausführungsformen werden Transferbefehle
in bedingte Befehle und in Befehle, die ausgeführt werden, wenn ihre Bedingungen
erfüllt
sind, umgewandelt. Jedoch können
auch arithmetische logische Befehle in diese Befehle umgewandelt
werden. Beispielsweise kann die erste Ausführungsform auf Additionsbefehle
angewendet werden, und eine Befehlsfolge, die bedingte Additionsbefehle
umfasst, kann erzeugt werden.
-
25 zeigt
eine Liste von bedingten Additionsbefehlen, die der Prozessor der
ersten Ausführungsform
ausführen
kann. Diese Liste umfasst drei Arten von bedingten Additionsbefehlen,
also die bedingten Additionsbefehle 2501. Die Bedingungen 2502 sind
Zeichen, die Bedingungen anzeigen, die durch entsprechende bedingte
Additionsbefehle beschrieben sind. Wenn zwei Operationsobjekte „a" und „b" durch einen Vergleichsbefehl
miteinander verglichen werden, bedeutet die Bedingung des „addeq" 2503, dass „a" und „b" gleich sind; die
Bedingung des „addgt" 2504 bedeutet,
dass „a" größer als „b" ist; und die Bedingung
des „addge" 2505 bedeutet,
dass „a" größer als
oder gleich „b" ist. Jeder bedingte
Additionsbefehl wird ausgeführt,
wenn seine Bedingung erfüllt
ist.
-
26 zeigt
ein Beispiel eines C-Quellprogramms, das in C-Programmiersprache
geschrieben ist.
-
27 zeigt
eine Zwischencodefolge, die keine bedingten Additionsbefehle umfasst,
die von den C-Quellprogrammen, das in 26 gezeigt
ist, erzeugt werden.
-
28 zeigt
eine Zwischencodefolge, die einen bedingten Additionsbefehl umfasst,
der von der in 27 dargestellten Zwischencodefolge
erzeugt wird.
-
29 zeigt
eine Maschinenbefehlsfolge, die von der in 28 gezeigten
Zwischencodefolge erzeugt wird.
-
Der
Compiler dieser Variation konvertiert das in 26 gezeigte
Programm in den in 27 dargestellten Zwischencode,
in den in 28 dargestellten Zwischencode
und in die Befehlsfolge, die einen bedingten Additionsbefehl, der
in 29 gezeigt ist, umfasst.
- (4)
In der vierten bis sechsten Ausführungsform sind
die Bedingungen der bedingten Befehle und des bedingten Zweigbefehls,
dass der bedingte Bitschalter gesetzt ist. Jedoch können die
Bedingungen auch dahingehend lauten, dass der bedingte Bitschalter
zurückgesetzt
ist.