PatentDe  


Dokumentenidentifikation DE69836056T2 12.04.2007
EP-Veröffentlichungsnummer 0000899653
Titel Prozessor mit verringerter Zahl von bedingten Befehlen
Anmelder Matsushita Electric Industrial Co., Ltd., Kadoma, Osaka, JP
Erfinder Takayama, Shuichi, Takarazuka-shi, Hyogo-ken, 665-0876, JP;
Odani, Kensuke, Kyoto-shi, Kyoto-fu, 603-8175, JP;
Tanaka, Akira, Yawata-shi, Kyoto-fu, 614-8377, JP;
Higaki, Nobuo, Higashiyodogawa-ku, Osaka-shi, Osaka-fu, JP;
Suzuki, Masato, Toyonaka-shi, Osaka-fu, 560-0001, JP;
Tanaka, Tetsuya, Ibaraki-shi, Osaka-fu, 567-0877, JP;
Heishi, Taketo, Osaka-shi, Osaka-fu, 533-0023, JP;
Miyaji, Shinya, Hirakata-shi, Osaka-fu, 573-0165, JP
Vertreter Grünecker, Kinkeldey, Stockmair & Schwanhäusser, 80538 München
DE-Aktenzeichen 69836056
Vertragsstaaten DE, FR, GB, NL
Sprache des Dokument EN
EP-Anmeldetag 28.08.1998
EP-Aktenzeichen 983069196
EP-Offenlegungsdatum 03.03.1999
EP date of grant 04.10.2006
Veröffentlichungstag im Patentblatt 12.04.2007
IPC-Hauptklasse G06F 9/318(2006.01)A, F, I, 20051017, B, H, EP
IPC-Nebenklasse G06F 9/45(2006.01)A, L, I, 20051017, B, H, EP   G06F 9/38(2006.01)A, L, I, 20051017, B, H, EP   

Beschreibung[de]
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 bedingten 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 Arten 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 Einstellung „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 Entscheidungsergebnis 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 Entscheidungsergebnis „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 Code 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.


Anspruch[de]
Prozessor, der eine Befehlsfolge decodiert und ausführt, die aus Befehlen besteht, die mit einem Befehlssatz des Prozessors zugeordneten Befehlen übereinstimmen, wobei der Prozessor Folgendes umfasst:

ein Zustandshaltemittel (110), das, wenn ein vorgegebener Befehl ausgeführt wird, einen Erneuerungszustand für ein Ergebnis des Ausführens des vorgegebenen Befehls hält,

ein Decodiermittel (102), das nacheinander jeden Befehl in der Befehlsfolge decodiert,

dadurch gekennzeichnet, dass dem Befehlssatz erste bedingte Befehle zugeordnet sind, wobei sich eine erste Zustandsbedingung 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 einen Zustand oder mehrere Zustände beschreiben,

wobei der Prozessor des Weiteren Folgendes umfasst:

ein Entscheidungsmittel (104), das 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 Decodiermittel den ersten bedingten Befehl decodiert, und

ein Ausführmittel (103), das eine Operation, die von dem Operationscode in dem von dem Decodiermittel decodierten ersten bedingten Befehl beschrieben wird, nur dann ausführt, wenn ein Ergebnis der Entscheidung durch das Entscheidungsmittel positiv ist.
Prozessor nach Anspruch 1,

bei dem der Erneuerungszustand eine Beziehung zwischen der Größe zweier Vergleichsobjekte a und b zeigt, die einem Ergebnis der Ausführung einer Art von Vergleichsbefehl entspricht,

bei dem 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 Zustandsbedingungen 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".
Prozessor nach Anspruch 2, bei dem es sich bei einem in einem bedingten Befehl enthaltenen Operationscode um einen Transfer-Operationscode, einen arithmetischen Operationscode oder einen logischen Operationscode handelt. Befehlsumwandlungsverfahren, das mithilfe einer ersten bedingten Anweisung mit einer ersten Bedingung sowie einer zweiten bedingten Anweisung mit einer zweiten Bedingung, die sich gegenseitig ausschließen, ein in einer höheren Programmiersprache geschriebenes Computerprogramm in ein von einem Prozessor ausführbares Format umwandeln kann und Folgendes umfasst:

einen Schritt, bei dem das Computerprogramm, wenn es eine erste bedingte Anweisung enthält, in eine Befehlsfolge umgewandelt wird, die einen ersten Befehl enthält, laut dem eine vorgegebene Verarbeitungsoperation durchgeführt wird, wenn die erste Bedingung erfüllt ist, und

einen Schritt, bei dem das Computerprogramm, wenn es die zweite bedingte Anweisung enthält, in eine Befehlsfolge umgewandelt wird, die den ersten Befehl enthält.






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com