DE69832932T2 - Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor - Google Patents

Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor Download PDF

Info

Publication number
DE69832932T2
DE69832932T2 DE69832932T DE69832932T DE69832932T2 DE 69832932 T2 DE69832932 T2 DE 69832932T2 DE 69832932 T DE69832932 T DE 69832932T DE 69832932 T DE69832932 T DE 69832932T DE 69832932 T2 DE69832932 T2 DE 69832932T2
Authority
DE
Germany
Prior art keywords
constant
command
size
vliw
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69832932T
Other languages
English (en)
Other versions
DE69832932D1 (de
Inventor
Kensuke Odani
Akira Yawata-shi Kyoto-fu Tanaka
Shuichi Takarazuka-shi Hyogo-ken Takayama
Ryoichiro Settsu-shi Osaka-fu Koshimura
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Application granted granted Critical
Publication of DE69832932D1 publication Critical patent/DE69832932D1/de
Publication of DE69832932T2 publication Critical patent/DE69832932T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

  • 1. Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft eine Programmkonvertierungs-Vorrichtung zum Generieren eines ausführbaren Codes für einen VLIW-Prozessor durch Übersetzen, Verknüpfen und Bearbeiten eines Quellprogramms, das in einer höheren Programmiersprache geschrieben ist, und ein Aufzeichnungsmedium. Insbesondere betriftt die Erfindung eine Technik zum Unterteilen von Befehlen mit Konstanten in einem Quellprogramm in Teile und zum Ausführen einer parallelen Ablaufsteuerung für die unterteilten Befehle.
  • 2. Stand der Technik
  • VLIW- (Very Long Instruction Word, sehr langes Befehlswort) Prozessoren enthalten eine Vielzahl von Operationseinheiten, die eine Vielzahl von Operationen, die in jedem VLIW angeordnet sind, parallel ausführen. VLIWs werden von Programmkonvertierungs-Vorrichtungen generiert, nämlich Kompilierern, die eine Parallelität in Quellprogrammen auf Operationsebene erkennen und eine Ablaufsteuerung für die Quellprogramme durchführen.
  • VLIWs sind jedoch Befehle mit fester Länge und sind daher als Code ineffizient. Das heißt, es ist in vielen Fällen notwendig, redundante Codes, wie beispielsweise Nulloperations-Codes ("nop"-Codes), in VLIWs einzufügen. VLIW-Prozessoren, die das Auftreten von redundanten Bereichen in VLIWs vermeiden, werden in den japanischen Patentanmeldungen H09-159058 und H9-159059 des gleichen Anmelders wie für diese Anmeldung offenbart.
  • Jeder dieser VLIW-Prozessoren enthält einen speziellen Konstantenpuffer und eine Funktion zum Ausführen eines Pogramms, in dem eine Konstante, die in jedem Befehl enthalten ist, so, wie sie ist, extrahiert oder extrahiert und in mehrere Teil-Codeelemente (partial digits) unterteilt und in verschiedenen VLIWs angeordnet wird. In dieser Spezifi kation beschreibt der Begriff "unterteilte Konstanten" diese unterteilten Teile einer Konstante oder gelegentlich ganze Konstanten. Jeder VLIW-Prozess führt dieses Programm aus, indem unterteilte Konstanten in dem Konstantenpuffer (in einer Codeelement-Richtung) gesammelt werden, um die ursprüngliche Konstante zu rekonstruieren, und wobei die rekonstruierte ursprüngliche Konstante als ein Sprungziel oder ein Operand verwendet wird. Es ist zu beachten, dass ein VLIW-Prozessor mit dieser Funktion im folgenden als ein "konstantenrekonstruierender VLIW-Prozessor" bezeichnet wird. Ein Kompilierer für den konstantenrekonstruierenden VLIW-Prozessor unterteilt lange Konstanten in einem Programm in unterteilte Konstanten und füllt redundante Bereiche in den Befehlen mit den unterteilten Konstanten, wodurch die Code-Effizienz des Programms verbessert wird.
  • Es wurde jedoch noch kein Kompilierer vorgeschlagen, der für den konstantenrekonstruierenden VLIW-Prozessor geeignet ist.
  • Dieser Kompilierer muss lange Konstanten in einem Programm in unterteilte Konstanten teilen und die unterteilten Konstanten in entsprechender Weise anordnen und die unterteilten Konstanten in entsprechender Weise in einer Vielzahl von VLIWs anordnen. Dadurch generiert der Kompilierer einen ausführbaren Code. Dies reduziert redundante Bereiche in Befehlen. Diese Funktion muss sicherstellen, dass jede ursprüngliche Konstante korrekt aus den unterteilten Konstanten, die in der Vielzahl von VLIWs angeordnet sind, rekonstruiert und definitiv von dem beabsichtigten Befehl verwendet wird.
  • US-A-5 423 012 offenbart einen Mikrocomputer, der Befehlswörter mit einer einheitlichen Wortlänge verwendet, in dem ein erstes oder zweites Befehlswort, das in einem Speicherbereich gespeichert wird, der durch eine Adresse eines Adressenregisters angegeben wird, in einer vorgegebenen Wortposition eines Befehls-Erstlesepuffers (instruction first-reading buffer) gelesen wird, der durch eine erste Verweisadresse angegeben wird, oder das erste oder zweite Befehlswort, das von einer Wortposition des Befehls-Erstlesepuffers gelesen wird, der durch eine zweite Verweisadresse angegeben wird, in einem Befehlsinterpretationsabschnitt über einen zweiten Schieber gelesen wird. Der Befehlsinterpretationsabschnitt interpretiert ein Befehlswort von einem Busschnittstellenabschnitt. In dem Fall des zweiten Befehlsworts (Datenbefehl) werden Daten, die für eine Berechnung notwendig sind, auf der Basis von Daten des zweiten Befehlsworts, erzeugt, wie beispielsweise unmittelbare Daten und Offset-Daten. In dem Fall des ersten Befehlsworts wird eine Berechnung auf der Basis von Daten ausgeführt, die durch einen Datenerweiterungsabschnitt erzeugt worden sind.
  • KURZDARSTELLUNG DER ERFINDUNG
  • Im Hinblick auf die festgestellten Probleme ist es die Aufgabe der vorliegenden Erfindung, wie in den Ansprüchen im Anhang dargelegt, einen Kompilierer bereitzustellen, der für konstantenrekonstruierende VLIW-Prozessoren verwendet wird, und einen ausführbaren Code bereitzustellen, der für die konstantenrekonstruierenden VLIW-Prozessoren geeignet ist.
  • Zum Erfüllen der oben genannten Aufgabe konvertiert der Kompilierer der vorliegenden Erfindung eine Befehlsfolge, die sich aus seriell angeordneten Befehlen zusammensetzt, in eine VLIW-Folge für einen Prozessor. Der Kompilierer umfasst: einen Unterteilungsschritt zum Unterteilen jedes Befehls in der Befehlsfolge, der eine Konstante enthält, in eine Vielzahl von unterteilten Befehlen; einen Analyseschritt zum Analysieren von Abhängigkeitsbeziehungen zwischen jedem Befehl in der Befehlsfolge, der unterteilte Befehle enthält, die in dem Unterteilungsschritt gemäß einer Ausführungsreihenfolge für jeden Befehl in der Befehlsfolge erzeugt wurden; und einen Verschiebungsschritt zum Verschieben von Befehlen in der Befehlsfolge in Übereinstimmung mit den analysierten Abhängigkeitsbeziehungen, um VLIWs zu generieren, die sich jeweils aus einer Vielzahl von Befehlen zusammensetzen, die parallel ausführbar sind.
  • Mit den angegebenen Schritten wird jeder Befehl, der eine Konstante enthält, in einem Quellprogramm in wenigstens zwei kürzere Befehle unterteilt, und eine parallele Ablaufsteuerung wird unter Verwendung der kürzeren Befehle so durchgeführt, dass ein für den konstantenrekonstruierenden VLIW-Prozessor geeigneter Kompilierer ausgeführt werden kann. Das heißt, die Generierung von redundanten Bereichen in VLIWs wird unterdrückt.
  • Hier kann der Unterteilungsschritt enthalten: einen Befehlsgrößenbeurteilungs-Unterschritt zum Durchführen einer Befehlsgrößenbeurteilung, ob eine Größe eines Befehls, der eine Konstante enthält, gleich einer oder kleiner als eine Größe jedes Einheitsopera tionsfelds in einem VLIW-ist; und einen Unterteilungs-Unterschritt, der, wenn die Größe des Befehls, der die Konstante enthält, als größer als die Größe jedes Einheitsoperationsfelds beurteilt wird, den Befehl, der die Konstante enthält, in eine Vielzahl von unterteilten Befehlen unterteilt, deren Größen jeweils gleich der oder kleiner als die Größe jedes Einheitsoperationsfelds sind.
  • Mit den angegebenen Schritten werden nur Befehle, deren Größen größer als Operationsfelder von Objekt-VLIWs sind, unterteilt und der parallelen Ablaufsteuerung unterzogen. Selbst wenn daher ein Quellprogramm Befehle enthält, deren Größen für Operationsfelder von Objekt-VLIWs irrelevant sind, wird der Unterteilungsprozess nur an Befehlen durchgeführt, die unterteilt werden sollten, wodurch die Kompilierzeit reduziert wird.
  • Hier kann in dem Unterteilungs-Unterschritt der Befehl, der die Konstante enthält, in einen oder mehrere Befehle zum Speichern der Konstante in einem Speicherpuffer des Prozessors und einen Befehl zum Verwenden der gespeicherten Konstante unterteilt werden.
  • Mit dem angegebenen Prozess werden alle Konstanten in Befehlen in einem Konstantenpuffer gespeichert. Als Ergebnis dessen müssen Befehle, die Konstanten enthalten, die Konstanten nicht als Operanden enthalten, so dass ein Kompilierer, der für VLIWs mit kleinen Operationsfeldern zum Spezifizieren nur von Operationscodes geeignet ist, ausgeführt werden kann.
  • Hier kann in dem Unterteilungs-Unterschritt der Befehl, der die Konstante enthält, in einen oder mehrere Befehle unterteilt werden, um jeweils eine oder mehrere unterteilte Konstanten in den Speicherpuffer des Prozessors und einen Befehl zum Verwenden der gespeicherten unterteilten Konstanten zu speichern, wobei die unterteilten Konstanten durch Unterteilen der Konstante erhalten werden.
  • Mit dem angegebenen Prozess werden nur unterteilte Konstanten, welche die Größe von Konstanten-Bereichen in Objekt-VLIWs überschreiten, vorab in dem Konstantenpuffer gespeichert, und die folgenden Befehle verwenden die unterteilten Konstanten in dem Konstantenpuffer. Als Ergebnis dessen kann ein Kompilierer, der für VLIWs mit Operationsfeldern zum Spezifizieren von kurzen Operanden geeignet ist, ausgeführt werden.
  • Hier kann der Kompilierer des Weiteren einen Zusammensetzungsschritt enthalten, der, wenn zwei oder mehr unterteilte Befehle, die aus ein und demselben Befehl, der eine Konstante enthält, in dem Unterteilungs-Unterschritt generiert wurden, in ein und demselben VLIW in dem Verschiebungsschritt angeordnet werden, die zwei oder mehr unterteilten Befehle zu einem Befehl zusammenfasst.
  • Mit dem angegebenen Schritt können unpraktische Situationen ausgeschlossen werden, in denen ein Befehl, der als ein einzelner Befehl, (ein Befehl, der nicht unterteilt werden sollte), erhalten bleiben sollte, in zwei oder mehr Befehle unterteilt wird, die in verschiedenen Operationsfeldern eines VLIW angeordnet und ausgeführt werden, so dass die Ausführungsgeschwindigkeit reduziert wird. Außerdem kann die Zusammensetzung von Einrichtungsbefehlen für unterteilte Konstantengruppen (divided constant set instructions) und ungeeigneten Verwendungsbefehlen für unterteilte Konstanten (divided constant use instructions) vehindert werden.
  • Wenn hier in dem Befehlsgrößenbeurteilungs-Unterschritt die Endgröße nicht bestimmt worden ist, kann die Befehlsgrößenbeurteilung unter Verwendung einer angenommenen Größe für die Konstante durchgeführt werden. Der Kompilierer kann des Weiteren enthalten: einen Konstantengrößen-Beurteilungsschritt zum Verknüpfen einer Vielzahl von VLIW-Folgen und zum Bestimmen einer Endgröße jeder Konstante; und einen Einfügungsschritt, der, wenn die Endgröße größer als die angenommene Größe ist, einen Befehl zum Speichern einer unterteilten Konstante, die einer Differenz zwischen der Endgröße und der angenommenen Größe entspricht, in dem Speicherpuffer und zum Einfügen des generierten Befehls in eine entsprechende VLIW-Folge generiert.
  • Mit den angegebenen Schritten kann Inkonsistenz während der Unterteilungs- und Verknüpfungs-Prozesse auf Grund von Kennungsgrößen (label sizes), die während des Kompilierens und Assemblierens nicht bestimmt worden sind, vermieden werden. Daher kann ein Kompilierer, der zur Entwicklung eines Programms geeignet ist, das Objektmodule verknüpft, die in einer Vielzahl von Kompilierungseinheiten generiert wurden, ausgeführt werden.
  • Wenn hier in dem Befehlsgrößenbeurteilungs-Unterschritt die Endgröße nicht bestimmt worden ist, kann die angenommene Größe auf die maximale Adressengröße oder Konstantengröße gesetzt werden, die von dem Prozessor handhabbar ist, oder auf die am häufigsten verwendete Adressengröße oder Konstantengröße.
  • Mit dem angegebenen Prozess kann Veränderlichkeit auf Grund der angenommenen Größen vermieden werden, so dass die Generierung von VLIWs mit Nulloperations-Codes unterdrückt werden kann.
  • Hier kann der Kompilierer den Unterteilungsschritt nach dem Konstantengrößen-Bestimmungsschritt erneut ausführen, wobei in dem Befehlsgrößenbeurteilungs-Unterschritt in dem erneut ausgeführten Unterteilungsschritt die Befehlsgrößenbeurteilung unter Berücksichtigung der Endgröße durchgeführt wurde, die in dem Konstantengrößen-Bestimmungsschritt bestimmt wurde.
  • Mit dem angegebenen Prozess wird während der Unterteilung einer Konstante die endgültige Kennungsgröße so berücksichtigt, dass die Befehlseinfügung nicht durchgeführt werden muss, und ein ausführbarer Code, in dem die Code-Größe und Ausführungszeit reduziert sind, generiert werden kann.
  • Hier kann der Kompilierer den Analyseschritt und den Verschiebungsschritt erneut ausführen, die auf den erneut ausgeführten Unterteilungsschritt folgen.
  • Mit dem angegebenen Prozess wird jede Konstante entsprechend unterteilt, und die Optimierung durch die parallele Ablaufsteuerung wird wiederholt, so dass ein ausführbarer Code mit höherer Code-Effizienz generiert werden kann.
  • Hier ist der ausführbare Code der vorliegenden Erfindung eine VLIW-Folge für einen Prozessor, der eine Vielzahl von Befehlen parallel ausführt, wobei ein VLIW in der VLIW-Folge eine Konstante enthält, die in einem Speicherpuffer des Prozessors gespeichert werden soll, der durch wenigstens ein VLIW in der VLIW-Folge implizit angegeben wird, und ein anderes VLIW, das auf das VLIW folgt und das erste ist, das auf den Spei cherpuffer nach dem VLIW verweist, einen Befehl zum Verwenden der Konstante in dem Speicherpuffer enthält.
  • In dem angegebenen Code werden jede Konstante und jeder Befehl, der eine Konstante verwendet, jeweils in zwei kürzere Konstanten und Befehle unterteilt, werden in VLIWs angeordnet und ablaufgesteuert, um durch den konstantenrekonstruierenden Prozessor rekonstruiert zu werden. Daher kann ein ausführbarer Code, der für den konstantenrekonstruierenden VLIW-Prozessor geeignet ist, nämlich ein ausführbarer Code von hoher Code-Effizienz, bei dem die redundanten Bereiche in VLIWs unterdrückt werden, bereitgestellt werden.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Diese und andere Aufgaben, Vorteile und Merkmale der Erfindung gehen aus ihrer folgenden Beschreibung in Zusammenhang mit den folgenden begleitenden Zeichnungen hervor, die eine bestimmte Ausführungsform der Erfindung veranschaulichen.
  • 1 ist ein Blockschaltbild, das ein Beispiel der Architektur des Prozessors 100 zeigt, für den der Kompilierer der vorliegenden Erfindung verwendet wird;
  • 2A und 2B zeigen zwei Formate von VLIWs, die durch den Kompilierer der vorliegenden Erfindung generiert worden sind;
  • 3A bis 3C zeigen drei Formate für ein 12-Bit-Operationsfeld von VLIWs;
  • 4A und 4B zeigen zwei Formate für ein 24-Bit-Operationsfeld von VLIWs;
  • 5 ist ein Blockschaltbild, das die Konstruktion des Kompilierers und dazugehörige Eingabe-/Ausgabe-Daten zeigt;
  • 6 ist ein Ablaufdiagramm, das die Verarbeitung der Konstanten-Unterteilungseinheit 12 des Kompilierers der vorliegenden Erfindung zeigt;
  • 7 ist ein Ablaufdiagramm, das die Verarbeitung der Abhängigkeitsdiagramm-Generierungseinheit 20 des Kompilierers der vorliegenden Erfindung zeigt;
  • 8 ist ein Ablaufdiagramm, das eine Verarbeitung der Befehlsverschiebungseinheit 21 des Kompilierers der vorliegenden Erfindung zeigt;
  • 9 ist ein Blockschaltbild, das die detaillierte Konstruktion der Verknüpfereinheit 17 des Kompilierers der vorliegenden Erfindung zeigt;
  • 10 ist ein Ablaufdiagramm, das die Verarbeitung der Befehlseinfügungseinheit 23 der Verknüpfereinheit 17 zeigt;
  • 11A bis 11C zeigen eine Reihe eines Eingabe- und Ausgabe-Codes und dazugehörige Daten von Beispiel 1;
  • 12 ist ein endgültiges Abhängigkeitsdiagramm, das von der Abhängigkeitsdiagramm-Generierungseinheit 20 generiert wird, wenn der in 11B gezeigte serielle Assemblercode in die parallele Ablaufsteuerungseinheit 13 eingegeben wird;
  • 13 ist ein Blockschaltbild, das die Konstruktion eines üblichen Kompilierers zeigt;
  • 14 zeigt ein Abhängigkeitsdiagramm, das durch die Abhängigkeitsdiagramm-Generierungseinheit 920 des üblichen Kompilierers generiert wird;
  • 15 zeigt VLIWs, die durch die Befehlsverschiebungseinheit 921 des üblichen Kompilierers generiert werden;
  • 16 zeigt einen parallelen Assemblercode, der durch den üblichen Kompilierer generiert wird;
  • 17A bis 17G zeigen eine Reihe eines Eingabe- und Ausgabe-Codes und dazugehörige Daten von Beispiel 2;
  • 18A bis 18E zeigen eine Reihe eines Eingabe- und Ausgabe-Codes und dazugehörige Daten von Beispiel 2, die durch jedes Element des Kompilierers der vorliegenden Erfindung generiert werden, wenn die generierten Speicherstelleninformationen 40 wieder in die Konstanten-Unterteilungseinheit 12 eingegeben werden;
  • 19A bis 19E zeigen eine Reihe eines Eingabe- und Ausgabe-Codes und dazugehörige Daten von Beispiel 3;
  • 20A bis 20F zeigen eine Reihe eines Eingabe- und Ausgabe-Codes und dazugehörige Daten von Beispiel 4;
  • 21A und 21B zeigen, dass die Funktion der Konstanten-Unterteilungseinheit 12 der vorliegenden Erfindung von zwei verschiedenen Standpunkten aus ausgedrückt werden kann; und
  • 22 zeigt einen vereinfachten Inhalt einer CD-ROM, die eine VLIW-Folge aufzeichnet, die durch den Kompilierer der vorliegenden Erfindung generiert worden ist.
  • BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
  • Eine Ausführungsform des Kompilierers der vorliegenden Erfindung wird im Folgenden unter Bezugnahme auf die Figuren beschrieben.
  • <Anforderungen an die Hardware>
  • Der vorliegende Kompilierer ist ein Kreuzkompilierer, der ein Quellprogramm, das in einer höheren Programmiersprache geschrieben ist, übersetzt und verknüpft, um ein ausführbares Programm für einen VLIW-Prozessor zu generieren, der später beschrieben wird. Der vorliegende Kompilierer wird durch ein Programm erhalten, das durch ein allgemeines Computersystem ausgeführt werden kann, nämlich eine Entwicklungs-Workstation oder einen Arbeitsplatzrechner. Daher kann der vorliegende Kompilierer oder der durch den vorliegenden Kompilierer generierte Code in einem Aufzeichnungsmedium, wie beispielsweise einer Diskette, einer CD-ROM oder einem Halbleiterspeicher gespeichert und verteilt werden.
  • Hier ist zu beachten, dass der "Kompilierer" in dieser Spezifikation nicht als Kompilierer im engeren Wortsinn interpretiert werden sollte, der Assemblercode durch Übersetzen von Quellcode generiert, der in einer höheren Programmiersprache geschrieben ist, sondern als ein Kompilierer im weiteren Sinn interpretiert werden sollte, der zusätzlich eine Funktion zum Generieren von Maschinensprachen-Objektcode durch Übersetzen des Assemblercodes und eine Funktion zum Verknüpfen des Objektcodes besitzt.
  • <Zielprozessor>
  • Vor der Beschreibung des vorliegenden Kompilierers werden zunächst Funktionen beschrieben, die für den Zielprozessor erforderlich sind.
  • <Architektur>
  • Der Zielprozessor ist ein konstantenrekonstruierender VLIW-Prozessor, der oben beschrieben wurde.
  • 1 ist ein Blockschaltbild, das eine Beispielarchitektur des Zielprozessors zeigt.
  • Der Zielprozessor 100 ist ein Prozessor, der feste 32-Bit-VLIWs ausführt. Der Prozessor enthält die Befehls-Abrufschaltung 101, das Befehlsregister 102, drei Befehlsdecodierer 103105, den Konstantenpuffer 107, der ein spezialisiertes Schieberegister zum Sammeln von Konstanten bis zu 32 Bits zum Rekonstruieren einer ursprünglichen Konstante ist, die Registergruppe 108, die sechzehn 32-Bit-Register R0–R15 enthält, und zwei Operationseinheiten 109 und 110, die ihre Operationen parallel ausführen.
  • Beim Ausführen eines Programms, in dem unterteilte Konstanten, die aus jedem ursprünglichen Befehl extrahiert wurden, in verschiedenen VLIWs angeordnet sind, besitzt der VLIW-Prozessor 100 eine Funktion zum Sammeln der unterteilten Konstanten, indem er sie in den Konstantenpuffer 107 verschiebt, um die ursprüngliche Konstante zu rekonstruieren. Nach der Rekonstruktion verwendet der VLIW-Prozessor 100 die rekon struierte Konstante als ein Sprungziel oder einen Operanden. Unmittelbar, nachdem ein in dem Konstantenpuffer 107 gespeicherter Wert verwendet wird (auf ihn verwiesen worden ist), wird der gespeicherte Wert definitiv gelöscht, das heißt, durch Nullen (0) ersetzt, um die nächste Sammlung vorzubereiten.
  • Ein Kompilierer für den VLIW-Prozessor 100 muss sicherstellen, dass während der Ausführung eines Programms alle unterteilten Konstanten definitiv in dem Konstantenpuffer 107 in entsprechender Reihenfolge gespeichert werden, um die ursprüngliche Konstante zu rekonstruieren, und dass die rekonstruierte Konstante definitiv durch einen vorgesehenen Befehl verwendet wird. Das heißt, wenn eine Konstante in jedem Befehl unterteilt wird, und die unterteilten Konstanten in einer Vielzahl von VLIWs angeordnet werden, muss der Kompilierer die Ablaufsteuerung in verschiedener Hinsicht durchführen, wie beispielsweise einer Ausführungsreihenfolge des vorliegenden Befehls und anderer dazugehöriger Befehle, um VLIWs zu generieren, so dass die ursprüngliche Konstante definitiv aus den unterteilten Konstanten rekonstruiert wird, und die rekonstruierte Konstante von dem ursprünglichen Befehl verwendet wird.
  • In dieser Spezifikation verweist ein "VLIW" auf einen Code, der eine Gruppe von Operationen spezifiziert, die durch den VLIW-Prozessor 100 in einem Zyklus parallel auszuführen sind, während ein "Befehl" (ausgenommen für das VLIW) auf den Code verweist, der eine einzelne Operation spezifiziert. Des Weiteren verweist eine "Konstante" auf einen Wert, der explizit in einem Befehl (einem Direktbefehl) spezifiziert wird, und eine Kennung (label), die während einer Verknüpfung bestimmt wird.
  • 2A und 2B zeigen zwei Formate von VLIWs, die durch den VLIW-Prozessor 100 ausgeführt werden (ein Zwei-Operationen-Format und ein Drei-Operationen-Format).
  • Jedes VLIW setzt sich aus drei Feldern zusammen (dem ersten 8-Bit-Feld 51, dem zweiten 12-Bit-Feld 52 und dem dritten 12-Bit-Feld 53).
  • In dem in 2A gezeigten Drei-Operationen-Feld gibt das erste Feld 51 Formatinformationen an, die ein VLIW-Format und die erste Operation spezifizieren, das zweite Feld 52 gibt die zweite Operation an, und das dritte Feld 53 gibt die dritte Operation an.
  • In dem in 2B gezeigten Zwei-Operationen-Feld gibt das erste Feld 51 die Formatinformation und die erste Operation an, und der 24-Bit-Bereich, der aus dem zweiten Feld 52 und dem dritten Feld 53 besteht, gibt die zweite Operation an.
  • Die Format-Information gibt eines der zwei Formate an und gibt ein oder mehrere Felder an, die nur Konstanten enthalten, die in dem Konstantenpuffer 107 gesammelt werden sollen (das zweite Feld 52, das dritte Feld 53, oder beide, das zweite und das dritte Feld 52 und 53).
  • Die erste Operation ist auf einen Sprungbefehl begrenzt. Eine Sprungkennung (eine Sprungzieladresse) für den Sprungbefehl wird durch den Konstantenpuffer 107, das zweite Feld 52, das dritte Feld 53 oder eine Kombinationen von solchen angegeben.
  • Die zweite und dritte Operation sind standardmäßige Transfer-/arithmetisch-logische Befehle, die keine Sprungbefehle enthalten. Es ist zu beachten, dass Befehle, für die Speicherzugriff erforderlich ist, wie beispielsweise Lade- oder Speicherbefehle, entweder auf die zweite Operation oder die dritte Operation begrenzt sind. Diese standardmäßigen arithmetisch-logischen Befehle sind entweder 12 Bits lang oder 24 Bits lang. Obwohl sie hauptsächlich durch 12 Bits ausgedrückt werden, werden die standardmäßigen Transfer-/arithmetisch-logischen Befehle durch 24 Bits ausgedrückt, wenn in den Befehlen lange Operanden enthalten sind.
  • 3A bis 3C zeigen drei Formate für ein 12-Bit-Operationsfeld. 3A zeigt ein Format für eine Zwischenregister-Operation; 3B ein Format für einen Operation, die ein Register und ein 4-Bit-Konstante verwenden; 3C ein Format nur zum Spezifieren einer unterteilten 12-Bit-Konstante, die in dem Konstantenpuffer 107 gespeichert werden soll.
  • 4A bis 4B zeigen zwei Formate ein 24-Bit-Operationsfeld. 4A zeigt ein Format für eine Operation, die ein Register und eine 16-Bit-Konstante verwendet; 4B ein Format nur zum Spezifizieren einer unterteilten 24-Bit-Konstante, die in dem Konstantenpuffer 107 gespeichert werden soll.
  • (Befehlssatz)
  • Die Hauptbefehle in dem Befehlssatz des VLIW-Prozessor 100 werden im Folgenden beschrieben.
  • {(Beispiel 1) mov 0x1234, R0}
  • Dieser Befehl ist ein Transferbefehl, um eine 16-Bit-Konstante "0x1234", (wobei Ox eine Hexadezimalzahl ist), im Register R0 zu setzen. Dieser Befehl ist der gleiche wie bei einem Standardprozessor.
  • Dieser Befehl enthält eine 16-Bit-Konstante. Dementsprechend wird dieser Befehl für eine 24-Bit-Operation verwendet. Das bedeutet, dass ein anderer standardmäßiger Transfer-/arithmetisch-logische Befehl nicht in dem VLIW angeordnet werden kann, das diesen Befehl enthält.
  • {(Beispiel 2) sfst 0x1234:12u}
  • Dieser Befehl ist ein Transferbefehl, um die höherwertigen 12 Bits "0x1234: 12h" der 16-Bit-Konstante "0x1234" im Konstantenpuffer 107 einzurichten, indem der Inhalt in den Konstantenpuffer 107 verschoben wird, und ist ein Einrichtungsbefehl für unterteilte Konstanten.
  • Hier ist der " Einrichtungsbefehl für unterteilte Konstanten " ein Befehl zum Sammeln von unterteilten Konstanten in einem implizit bestimmten Speicherbereich, (dem Konstantenpuffer 107), und ist ein eindeutiger Befehl für den VLIW-Prozessor 100. Die unterteilte Konstante kann alle Zahlen oder Teilzahlen einer Sprungkennung sein, die für eine Sprungoperation verwendet wird, oder besteht aus Teilzahlen einer Konstante, die für einen Transfer/arithmetisch-logischen Befehl verwendet wird.
  • In dem endgültigen ausführbaren Code für diesen Befehl enthält ein Feld, das diesen Befehl enthält, nur die unterteilte 12-Bit-Konstante, wodurch der Befehl zu einer 12-Bit-Operation gemacht wird. Das erste Feld 51 enthält Formatinformationen, die den Befehl spezifizieren. Dementsprechend kann das VLIW, das diesen Befehl enthält, nur eine weitere 12-Bit-Operation enthalten.
  • {(Beispiel 3) mov 0x1234:4L, R0}
  • Dieser Befehl ist ein Verwendungsbefehl für unterteilte Konstanten. Genauer ist er ein Transferbefehl zum Einrichten einer 16-Bit-Konstante im Register R0, indem die unterteilte Konstante, die in dem Konstantenpuffer 107 als die höherwertigen 12 Bits und die niederwertigen 4 Bits der Konstante "0x1234" gespeichert werden, die durch diesen Befehl (0x1234:4L) als die niederwertigen 4 Bits spezifiziert werden, zusammengesetzt wird. Hier ist ein "Verwendungsbefehl für unterteilte Konstanten" ein Befehl zum Verwenden von unterteilen Konstanten, die in einem implizit bestimmten Speicherbereich gespeichert sind, (dem Konstantenpuffer 107), und ist ein eindeutiger Befehl für den VLIW-Prozessor 100.
  • Der Befehl von Beispiel 3 ist eine 12-Bit-Operation. Dementsprechend kann ein VLIW, das diesen Befehl enthält, nur eine weitere 12-Bit-Operation enthalten.
  • Hier ist zu beachten, dass das Ausführungsergebnis des Befehls von Beispiel 1 das gleich ist wie dasjenige, das durch aufeinander folgendes Ausführen der Befehle von Beispiel 2 und Beispiel 3 erhalten wird. Dementsprechend kann der Kompilierer zwei 12-Bit-Befehle generieren, nämlich den Einrichtungsbefehl für unterteilte Konstanten von Beispiel 2 und den Verwendungsbefehl für unterteilte Konstanten von Beispiel 3, statt des 24-Bit-Befehls von Beispiel 1. Wenn in einem Befehl ein redundanter Bereich vorhanden ist, kann der redundante Bereich dadurch mit dem Einrichtungsbefehl für unterteilte Konstanten gefüllt werden, wodurch die Code-Effizienz verbessert wird.
  • <Konstruktion des Kompilierers>
  • 5 ist ein Blockschaltbild, das die Konstruktion des vorliegenden Kompilierers und dazugehörige Eingabe-/Ausgabe-Daten zeigt.
  • Der vorliegende Kompilierer kann grob in drei Gruppen unterteilt werden. Die erste Gruppe generiert den seriellen Assemblercode 42 aus dem Quellcode 41, der in einer höheren Sprache geschrieben ist, (der stromaufwärts des Kompilierers liegende Teil 10 und die Assemblercode-Generierungseinheit 11). Die zweite Gruppe generiert den pa rallelen Assemblercode 43 und den Objektcode 44a44b, indem der serielle Assemblercode 42 der parallelen Ablaufsteuerung unterzogen wird, die eindeutig ist für den VLIW-Prozessor 100, (die Konstanten-Unterteilungseinheit 12, die parallele Ablaufsteuerungseinheit 13, die Konstanten-Zusammensetzungseinheit 14, die Code-Ausgabeeinheit 15 und die parallele Assemblereinheit 16). Die dritte Gruppe generiert den endgültigen ausführbaren Code 46 durch Verknüpfen einer Vielzahl von verschiebbarem Objektcode 44a und 44b (die Verknüpfereinheit 17).
  • Die Verschiebungsinformationen 45a45b und Speicherstelleninformationen 40 beziehen sich auf Kennungen und werden in die Verknüpfereinheit 17 eingegeben oder von dieser ausgegeben. Die Verschiebungsinformationen 45a45b und Speicherstelleninformationen 40 werden verwendet, um endgültige Kennungsadressen zu bestimmen und werden auch in die Konstanten-Unterteilungseinheit 12 eingegeben, um beim Generieren von optimalem Code verwendet zu werden. Die Eingabe-/Ausgabedaten 4045 und andere Zwischensprachendaten werden auf einer Festplatte des oben beschriebenen Computersystems als Dateien gespeichert oder werden in einem Speicher als temporäre Daten gespeichert.
  • (Stromaufwärts des Kompilierers liegender Teil 10)
  • Der stromaufwärts des Kompilierers liegende Teil 10 liest einen Quellcode 41 in höherer Sprache, der in einem Dateiformat gespeichert ist, führt eine syntaktische Analyse und eine semantische Analyse am Quellcode 41 durch und generiert einen internen Format-Code. Des Weiteren wird der interne Format-Code je nach Bedarf so optimiert, dass die Größe des endgültig generierten ausführbaren Codes und die Ausführungszeit reduziert werden. Die Verarbeitung des stromaufwärts des Kompilierers liegenden Teils 10 ist die gleiche wie diejenige für den stromaufwärts des Kompilierers liegenden Teil eines üblichen Kompilierers (eines Kompilierers für einen normalen Prozessor, nicht für einen konstantenrekonstruierenden VLIW-Prozessor).
  • (Assemblercode-Generierungseinheit 11)
  • Die Assemblercode-Generierungseinheit 11 generiert einen seriellen Assemblercode 42 aus dem internen Format-Code, der durch den stromaufwärts des Kompilierers lie genden Teil 10 generiert und optimiert wurde. Hier besteht der "serielle Assemblercode" aus seriell angeordneten Assembler-Befehlen für Operationen und ist ein Assemblercode für einen normalen Prozessor (einen Prozessor mit einer Operationseinheit). Die Verarbeitung der Assemblercode-Generierungseinheit 11 ist die gleiche wie diejenige der Assemblercode-Generierungseinheit eines üblichen Kompilierers.
  • (Konstanten-Unterteilungseinheit 12)
  • Die Konstanten-Unterteilungseinheit 12 liest den Assemblercode 42, der durch die Assemblercode-Generierungseinheit 11 generiert worden ist, und unterteilt alle Verwendungsbefehle für lange Konstanten, die in dem Assemblercode 42 enthalten sind, in Einrichtungsbefehle für unterteilte Konstanten und Verwendungsbefehle für unterteilte Konstanten. Das heißt, Verwendungsbefehle für lange Konstanten werden durch zwei Arten von Befehlen ersetzt (Einrichtungsbefehle für unterteilte Konstanten und Verwendungsbefehle für unterteilte Konstanten). Mit den beiden Befehlsarten wird der gleiche Prozess durchgeführt wie derjenige, der mit einem Verwendungsbefehl für lange Konstanten durchgeführt wird. Während dieses Ersetzungsprozesses kann der Verwendungsbefehl für lange Konstanten abhängig von der Länge der langen Konstante, die in einem Verwendungsbefehl für lange Konstanten enthalten ist, durch zwei oder mehrere Einrichtungsbefehle für unterteilte Konstanten und einen Verwendungsbefehl für unterteilte Konstanten ersetzt werden.
  • Hier ist eine "lange Konstante" eine Konstante, die zu lang ist, um innerhalb eines Einheits-Operationsfelds in einem VLIW geschrieben zu werden. Insbesondere (1), wenn sie durch einen Sprungbefehl verwendet wird, ist eine lange Konstante eine Konstante, die nicht innerhalb des ersten Operationsfelds geschrieben werden kann, (eine Sprungkennung, die durch ein oder mehrere Bits ausgedrückt wird), und (2), wenn sie durch einen Transfer-/arithmetisch-logischen Befehl verwendet wird, ist eine lange Konstante eine Konstante, die nicht innerhalb eines in 3B gezeigten 12-Bit-Operationsfelds geschrieben werden kann, (eine Konstante, die durch 5 oder mehrere Bits ausgedrückt wird). Des Weiteren ist ein "Verwendungsbefehl für unterteilte Konstanten" ein Befehl, der eine lange Konstante verwendet.
  • Andererseits wird eine Konstante, die innerhalb eines Einheits-Operationsfelds in einem VLIW geschrieben werden kann, also eine Konstante, die durch einen Transfer-/arithmetisch-logischen Befehl verwendet und durch 4 oder weniger Bits ausgedrückt wird, als eine "kurze Konstante" bezeichnet. Ein Befehl, der eine kurze Konstante verwendet, wird als ein "Verwendungsbefehl für kurze Konstanten" bezeichnet. Es ist zu beachten, dass der Verwendungsbefehl für unterteilte Konstanten eine kurze Konstante enthält, (eine Konstante von 4 oder weniger Bits), und daher ein Verwendungsbefehl für kurze Konstanten ist.
  • Das Folgende ist eine ausführliche Beschreibung der Verarbeitung der Konstanten-Unterteilungseinheit 12.
  • 6 ist ein Ablaufdiagramm, das die Verarbeitung der Konstanten-Unterteilungseinheit 12 zeigt.
  • Die Konstanten-Unterteilungseinheit 12 führt den folgenden Prozess (Schritte S2–S4) für jeden Befehl durch, der in dem Assemblercode 42 enthalten ist (Schritte S1–S5).
  • Zunächst bestimmt die Konstanten-Unterteilungseinheit 12 die Größe einer Kennung, (die Anzahl von Bits, die erforderlich sind, um eine Adresse auszudrücken, die durch die Kennung angegeben wird), die in einem zu verarbeitenden Befehl enthaften ist, (der im folgenden einfach als ein "Zielbefehl" bezeichnet wird) (Schritt S2).
  • Insbesondere, wenn die Größe einer Kennung bestimmt werden kann, weil die Kennung eine örtliche Kennung ist, die in der gleichen Kompiliereinheit des Quellcodes 41 vorhanden ist, oder wenn die Größe explizit durch irgendeine Information angegeben wird, wie beispielsweise die Speicherstelleninformation 40, wird die Größe zu der Kennung als Größeninformation, so wie sie ist, hinzugefügt. Wenn die Größe einer Kennung jedoch nicht bestimmt werden kann, weil die Kennung eine externe Kennung ist, die in einer anderen Kompiliereinheit des Quellcodes 41 vorhanden ist, wird der Kennung eine temporäre Größe als Kennungsinformation hinzugefügt. Es ist zu beachten, dass in dieser Ausführungsform die temporäre Größe mit 16 Bits vorgegeben ist, was gemäß statistischer Analyse die häufigste Adressengröße ist.
  • Die Konstanten-Unterteilungseinheit 12 bestimmt dann, ob der Zielbefehl ein Verwendungsbefehl für lange Konstanten ist (Schritt S3).
  • Wenn beurteilt wird, dass der Zielbefehl ein Verwendungsbefehl für lange Konstanten ist, wird der Befehl in eine oder mehrere Einrichtungsbefehle für unterteilte Konstanten und einen Verwendungsbefehl für unterteilte Konstanten unterteilt (Schritt S4).
  • Insbesondere, wenn der Verwendungsbefehl für lange Konstanten ein Sprungbefehl ist, wird die fange Konstante, (eine Adresse, die durch eine Sprungkennung angegeben wird), in 12-Bit-Teile in der Reihenfolge ab dem niedrigstwertigen Bit unterteilt. Die Konstanten-Unterteilungseinheit 12 generiert einen oder mehrere Einrichtungsbefehle für unterteilte Konstanten, die erhaltene unterteilte Konstanten in dem Konstantenpuffer 107 aufeinander folgend ab dem höchstwertigen Bit einrichten, und einen Verwendungsbefehl für unterteilte Konstanten (einen Befehl, der dem Operations-Code eines Sprungbefehls entspricht). Der Zielbefehl wird durch den generierten einen oder mehrere Einrichtungsbefehle für unterteilte Konstanten und einen Verwendungsbefehl für unterteilte Konstanten ersetzt. Wenn die lange Konstante in dem Befehl beispielsweise 19 Bits aufweist, werden der langen Konstante führende Nullen hinzugefügt, damit sich 24 Bits, (ein Vielfaches von 12 Bits), ergeben, und sie wird in die höherwertigen 12 Bits und die niederwertigen 12 Bits unterteilt. insgesamt werden drei Befehle, nämlich ein Einrichtungsbefehl für unterteilte Konstanten für die unterteilte Konstante mit den höherwertigen 12 Bits, ein Einrichtungsbefehl für unterteilte Konstanten für die unterteilte Konstante mit den niederwertigen 12 Bits und ein Verwendungsbefehl für unterteilte Konstanten in dieser Reihenfolge generiert. Der Zielbefehl wird durch diese generierten Befehle ersetzt.
  • Andererseits, wenn der Verwendungsbefehl für lange Konstanten ein Transfer-/arithmetisch-logischer Befehl ist, entfernt die Konstanten-Unterteilungseinheit 12 die Entsprechung einer kurzen Konstanten, (die niederwertigen 4 Bits), und unterteilt die restliche lange Konstante in 12-Bit-Einheiten, ausgehend von ihrem niedrigstwertigen Bit. Die Konstanten-Unterteilungseinheit 12 generiert einen oder mehrere Einrichtungsbefehle für unterteilte Konstanten, die erhaltene unterteilte Konstanten in dem Konstantenpuffer 107 aufeinander folgend ab dem höchstwertigen Bit einrichten, und einen Verwendungsbefehl für unterteilte Konstanten (einen Befehl, der den Operations-Code des Transfer /arithmetisch-logischen Befehls und einen Operanden enthält, der die kurze Konstante angibt). Der Zielbefehl wird durch die generierten Befehle ersetzt. Wenn die lange Konstante in dem Befehl beispielsweise 19 Bits aufweist, werden der langen Konstante führende Nullen hinzugefügt, damit sich 28 Bits, (2 Bits × n +4 Bits), ergeben, und sie wird in die höherwertigen 12 Bits, die mittleren 12 Bits und die niederwertigen 4 Bits unterteilt. Insgesamt werden drei Befehle, nämlich ein Einrichtungsbefehl für unterteilte Konstanten für die unterteilte Konstante mit den höherwertigen 12 Bits, ein Einrichtungsbefehl für unterteilte Konstanten für die unterteilte Konstante mit den mittleren 12 Bits und ein Einrichtungsbefehl für unterteilte Konstanten, der die unterteilte Konstante mit den niederwertigen 4Bits enthält, in dieser Reihenfolge generiert. Der Zielbefehl wird durch diese generierten Befehle ersetzt.
  • Hier ist zu beachten, dass zwei verschiedene Verfahren zum Unterteilen einer langen Konstante verwendet werden, abhängig davon, ob ein Verwendungsbefehl für lange Konstanten ein Sprungbefehl oder ein Transfer-/arithmetisch-logischer Befehl ist. Der Grund dafür ist, dass eine unterteilte Konstante, (eine Sprungkennung), nicht in das erste Feld 51 eingefügt werden kann, in das ein Sprungbefehl eingefügt ist, wogegen eine unterteilte Konstante, (eine kurze Konstante), in das zweite Feld 52 oder das dritte Feld 53 eingefügt werden kann, in die ein Transfer-/arithmetisch-logischer Befehl eingefügt ist.
  • (Parallele Ablaufsteuerungseinheit 13)
  • Die parallele Ablaufsteuerungseinheit 13 empfängt einen seriellen Assemblercode, aus dem Verwendungsbefehle für lange Konstanten durch die Konstanten-Unterteilungseinheit 12 beseitigt worden sind. Die parallele Ablaufsteuerungseinheit 13 erkennt die Parallelität des seriellen Assemblercodes auf der Assembler-Befehlsebene und generiert einen parallelen Assemblercode, der in VLIWs gepackt wird, die dem in 2A gezeigten Drei-Operationen-Format oder dem in 2B gezeigten Zwei-Operationen-Format entsprechen. Hier ist der "parallele Assemblercode" ein Assemblercode für einen VLIW-Prozessor, wobei eine Folge von parallelen Assemblerbefehlen verwendet wird, um eine Vielzahl von Operationen anzugeben, die parallel ausgeführt werden können.
  • Die parallele Ablaufsteuerungseinheit 13 enthält die Abhängigkeitsdiagramm-Generierungseinheit 20 und die Befehlsverschiebungseinheit 21.
  • (Abhängigkeitsdiagramm-Generierungseinheit 20)
  • Die Abhängigkeitsdiagramm-Generierungseinheit 20 generiert ein Abhängigkeitsdiagramm für die Assemblercode-Ausgabe aus der Konstanten-Unterteilungseinheit 12. Hier ist das "Abhängigkeitsdiagramm" ein direktionales Diagramm, das die Ausführungs-Reihenfolgenbeziehungen zwischen Assembler-Befehlen mit Verknüpfungen, (auch als Pfeile oder Flanken bezeichnet) ausdrückt, deren Knoten die Befehle sind, und die Ausführungsreihenfolge von Befehlen in dem Assemblercode regelt.
  • Die Abhängigkeitsdiagramm-Generierungseinheit 20 wiederholt die im Folgenden beschriebene Verarbeitung (Schritte S12–S27) für jeden Befehl in dem seriellen Assemblercode, aus dem Verwendungsbefehle für lange Konstanten durch die Konstanten-Unterteilungseinheit 12 (Schritte S11–S29) beseitigt worden sind.
  • Nach dem Generieren des Knotens eines Zielbefehls (Schritt S12) wiederholt die Abhängigkeitsdiagramm-Generierungseinheit 20 die folgenden drei Prozesse, (1) die Generierung eines Abhängigkeitsdiagramms basierend auf der ausschließlichen Steuerung über die Registergruppe 108 (Schritte S13–S18), (2) die Generierung eines Abhängigkeitsdiagramms basierend auf der ausschließlichen Steuerung über den Speicher (Schritte S19–S24), und (3) die Generierung eines Abhängigkeitsdiagramms basierend auf der ausschließlichen Steuerung über den Konstantenpuffer 107 (Schritte S25–S28). Diese Prozesse werden im Folgenden ausführlicher beschrieben.
  • Zuerst generiert die Abhängigkeitsdiagramm-Generierungseinheit 20 einen Knoten, der einem Zielbefehl entspricht (Schritt S12). Insbesondere generiert die Abhängigkeitsdiagramm-Generierungseinheit 20 Informationen, die den Zielbefehl mit dem Knoten in Beziehung setzen.
  • Die Abhängigkeitsdiagramm-Generierungseinheit 20 beurteilt, ob der Zielbefehl auf ein Register verweist (Schritt S13). Hier gibt "auf ein Register verweisen" an, dass der Wert des Registers gelesen wird.
  • Wenn auf ein Register verwiesen wird, wird der vorherige Register-Definitionsbefehl, (ein vorheriger Befehl, der das Register definiert), angegeben, und eine Verknüpfung wird von dem angegebenen Befehl zu dem Zielbefehl hergestellt (Schritt S14). Insbesondere werden Informationen generiert, die eine Verknüpfung von dem Knoten, der dem angegebenen Befehl entspricht, zu dem Knoten angeben, der dem Zielbefehl entspricht.
  • In dieser Spezifikation bedeutet "Registerdefinition", dass ein Wert in einem Register verworfen wird, und ein neuer Wert in dem Register eingerichtet wird. Des Weiteren bedeutet "voheriger Befehl" den letzten Befehl vor einem Zielbefehl.
  • Wenn ein einzelner Befehl auf eine Vielzahl von Registern verweist, wiederholt die Abhängigkeitsdiagramm-Generierungseinheit 20 die Schritte S13 und S14 für jedes Register. Diese Wiederholung lässt sich auch auf die folgenden Schritte anwenden.
  • Als Nächstes beurteilt die Abhängigkeitsdiagramm-Generierungseinheit 20, ob der Zielbefehl ein Register definiert (Schritt S15).
  • Wenn der Zielbefehl ein Register definiert, wird der vorherige Register-Steuerbefehl, (ein vorheriger Befehl, der das Register steuert), angegeben, und es wird beurteilt, ob der angegebene Befehl ein Register-Definitionsbefehl ist (Schritt S16). Hier bedeutet "Register-Steuerung" die Definition eines und den Verweis auf ein Register.
  • Wenn das Beurteilungsergebnis so ausfällt, dass der angegebene Befehl ein Register-Definitionsbefehl ist, wird eine Verknüpfung von dem Register-Definitionsbefehl zu dem Zielbefehl hergestellt (Schritt S17).
  • Wenn der angegebene Befehl andererseits ein Register-Verweisbefehl und kein Register-Definitionsbefehl ist, wird der vorherige Register-Definitionsbefehl angegeben, und es werden Verknüpfungen zu dem Zielbefehl von jedem Register-Verweisbefehl, (Befehle zum Verweisen auf das Register), hergestellt, der zwischen dem vorherigen Register-Definitionsbefehl und dem Zielbefehl liegt (Schritt S18).
  • Die mit oben beschriebenen Registerverweisen und Registerdefinitionen zusammenhängende Verarbeitung (Schritte S13–S18) wird auch für den Speicher durchgeführt (Schritte S19–S24).
  • Nach dem Prozess beurteilt die Abhängigkeitsdiagramm-Generierungseinheit 20, ob der Zielbefehl ein Einrichtungsbefehl für unterteilte Konstanten ist (Schritt S25).
  • Wenn der Zielbefehl ein Einrichtungsbefehl für unterteilte Konstanten ist, wird eine Verknüpfung von dem vorherigen Konstantenpuffer-Steuerbefehl zu dem Zielbefehl hergesiellt (Schritt S26). Hier ist ein "Konstantenpuffer-Steuerbefehl" ein Befehl zum Steuern (Definieren und Verweisen) des Konstantenpuffers 107, nämlich ein Einrichtungsbefehl für unterteilte Konstanten und ein Verwendungsbefehl für unterteilte Konstanten.
  • Schließlich beurteilt die Abhängigkeitsdiagramm-Generierungseinheit 20, ob der Zielbefehl ein Verwendungsbefehl für unterteilte Konstanten ist (Schritt S27).
  • Wenn der Zielbefehl ein Verwendungsbefehl für unterteilte Konstanten ist, wird eine Verknüpfung von dem vorherigen Konstantenpuffer-Steuerbefehl zu dem Zielbefehl hergestellt (Schritt S28).
  • Es ist zu beachten, dass es Unterschiede zwischen dem Prozess zum Generieren eines Abhängigkeitsdiagramms in Bezug auf Register (Schritte S13–S18) und dem Prozess zum Generieren eines Abhängigkeitsdiagramms in Bezug auf den Konstantenpuffer 107 (Schritte S25–S28) gibt. Der Grund liegt dann, dass jeder Einrichtungsbefehl für unterteilte Konstanten und Verwendungsbefehle für unterteilte Konstanten, auf die der Konstantenpuffer 107 zugreift, ein Befehl zum Verweisen auf das und auch Definieren des Konstantenpuffers 107 ist. Das heißt, der Konstantenpuffer 107 enthält ein Schieberegister, so dass ein Einrichtungsbefehl für unterteilte Konstanten ein Verschiebe- und Einrichtungsbefehl ist (ein Verweis- und Definitionsbefehl). Weil der Inhalt des Konstantenpuffers 107 unmittelbar nach dem Verweisen auf den Inhalt gelöscht wird, ist ein Verwendungsbefehl für unterteilte Konstanten ein Verweis- und Definitionsbefehl.
  • (Befehlsverschiebungseinheit 21)
  • In Übereinstimmung mit der Ausführungsreihenfolge, die durch das Abhängigkeitsdiagramm angegeben wird, das durch die Abhängigkeitsdiagramm-Generierungseinheit 20 generiert wird, verschiebt die Befehlsverschiebungseinheit 21 Befehle in der seriellen Assemblercode-Ausgabe von der Konstanten-Unterteilungseinheit 12 durch Packen der Befehle in VLIW-Einheiten des Zielprozessors 100. Dadurch verschiebt die Befehlsverschiebungseinheit 21 Befehle so, dass die größtmögliche Anzahl von Befehlen parallel ausgeführt wird, wodurch die Ausführungszeit reduziert wird.
  • Die Verarbeitung der Befehlsverschiebungseinheit 21 wird im Folgenden ausführlich beschrieben.
  • 8 ist ein Ablaufdiagramm, das die Verarbeitung der Befehlsverschiebungseinheit 21 zeigt.
  • Die Befehlsverschiebungseinheit 21 wiederholt den folgenden Prozess (Schritte S42–S50), bis alle Befehle in dem seriellen Assemblercode verschoben sind, (alle Befehle werden in VLIW-Einheiten gepackt und von der parallelen Ablaufsteuerungseinheit 13 ausgegeben (Schritte S41–S51).
  • Zunächst prüft die Befehlsverschiebungseinheit 21 das Abhängigkeitsdiagramm, um alle Befehle zu klassifizieren, die zum gegenwärtigen Zeitpunkt in eine ausgebbare Befehlsgruppe ausgegeben werden können (Schritt S42). Hier ist ein "ausgebbarer Befehl" ein Befehl, der nicht von einem vorherigen Befehl abhängt und deshalb unabhängig ausgeführt (ausgegeben) werden kann. Die Beispiele von ausgebbaren Befehlen sind (1) ein Zielbefehl, zu dem keine Verknüpfung in dem Abhängigkeitsdiagramm vorhanden ist und (2) ein Zielbefehl, dessen Verknüpfungsquellenknoten Befehlen, die ausgegeben worden sind, oder Einrichtungsbefehlen für unterteilte Konstanten in dem Abhängigkeitsdiagramm entspricht.
  • Des Weiteren setzt sich die "ausgebbare Befehlsgruppe" aus allen Befehlen zusammen, die zum gegenwärtigen Zeitpunkt ausgegeben werden können. Wie oben beschrieben, enthält die ausgebbare Befehlsgruppe Zielbefehle, deren Verknüpfungsquelle ein Einrichtungsbefehl für unterteilte Konstanten ist. Der Grund dafür liegt dann, dass, selbst wenn ein VLIW einen Einrichtungsbefehl für unterteilte Konstanten und einen Verwen dungsbefehl für unterteilte Konstanten enthält, diese Befehle durch einen einzelnen Befehl von der Konstanten-Zusammensetzungseinheit 14 ersetzt werden können, wie im Folgenden beschrieben, so dass diese Befehle ausgeführt werden können, ohne irgendwelche Probleme zu verursachen.
  • Nachdem eine ausgebbare Befehlsgruppe generiert worden ist (Schritt S42), wird ein Prozess zum Auswählen und Löschen eines Befehls aus der Gruppe (Schritte S45–S48) wiederholt, bis alle Befehle aus der Gruppe ausgewählt und gelöscht worden sind (Schritte S43–S49).
  • Es ist zu beachten, dass, wenn ein VLIW generiert wird, der Prozess die Schleife verlässt (Schritte S43–S49), eine andere ausgebbare Befehlsgruppe generiert (Schritt S42) und den gleichen Prozess wiederholt (Schritte S45–S48) (Schritte S43–S49). Der Grund dafür ist, dass zum Zeitpunkt, zu dem Befehle, aus denen sich das generierte VLIW zusammensetzt, aus der ausgebbaren Befehlsgruppe gelöscht werden, neue ausgebbare Befehle generiert worden sein können.
  • Zuerst beurteilt die Befehlsverschiebungseinheit 21, ob ein VLIW aus Befehlen in einer Ausgabe-Ablaufsteuerungs-Befehlsgruppe erstellt werden kann (ob irgendwelche weiteren Befehle in das VLIW eingefügt werden können) (Schritt S44).
  • Hier sind "Ausgabe-Ablaufsteuerungsbefehle" Befehle, die in ein generiertes einzelnes VLIW aufgenommen werden können und parallel ausgeführt werden, wogegen die "Ausgabe-Ablaufsteuerungs-Befehlsgruppe" Befehle temporär aufnimmt, um die maximale Anzahl von Ausgabe-Ablaufsteuerungsbefehlen, (die maximale Anzahl von Ausgabe-Ablaufsteuerungsbefehlen, die in einem VLIW angeordnet werden können), zu sammeln. Das heißt, es werden nur Befehle, die von der ausgebbaren Befehlsgruppe in die Ausgabe-Ablaufsteuerungs-Befehlsgruppe verschoben worden sind, von der parallelen Ablaufsteuerungseinheit 13 als Befehle ausgegeben, die ein generiertes VLIW bilden.
  • Wenn beurteilt wird, dass ein VLIW in Schritt S44 nicht generiert werden kann, wählt die Befehlsverschiebungseinheit 21 einen Befehl aus der ausgebbaren Befehlsgruppe aus, was dazu führt, dass die Ausführungszeit und die Code-Größe reduziert werden (Schritt S45). Insbesondere berechnet die Befehlsverschiebungseinheit 21 Schätzwerte für die Gesamtanzahl von aus einem Grundblock generierten VLIWs, indem auf das Abhängigkeitsdiagramm verwiesen wird, und wählt den Befehl aus, der zu dem niedrigsten Schätzwert führt.
  • Danach beurteilt die Befehlsverschiebungseinheit 21, ob der ausgewählte Befehl, (ein Zielbefehl), in die Ausgabe-Ablaufsteuerungs-Befehlsgruppe aufgenommen werden kann (Schritt S46). Wenn zu diesem Zeitpunkt ein oder mehrere Befehle in die Ausgabe-Ablaufsteuerungs-Befehlsgruppe aufgenommen worden sind, beurteilt die Befehlsverschiebungseinheit 21 hier, ob die aufgenommenen Befehle und der Zielbefehl ein VLIW bilden können, (ob ein VLIW ausgegeben werden kann) (Schritt S46).
  • Wenn zum Beispiel ein 12-Bit-Befehl in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe vorhanden ist, und der in Schritt S45 ausgewählte Befehl 24 Bits lang ist, können diese Befehle kein VLIW bilden. Daher beurteilt die Befehlsverschiebungseinheit 21, dass diese Befehle nicht ausgegeben werden können. Wenn kein Einrichtungsbefehl für unterteilte Konstanten der Verknüpfungsquelle des momentanen Knotens ausgegeben worden ist und nicht in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe vorhanden ist, beurteilt die Befehlsverschiebungseinheit 21, dass keine Befehle ausgegeben werden können. Dies verhindert die Generierung eines fehlerhaften Codes, bei dem ein Verwendungsbefehl für unterteilte Konstanten ohne Einrichtungsbefehle für unterteilte Konstanten ausgegeben wird.
  • Wenn die Befehlsverschiebungseinheit 21 beurteilt, dass ein Befehl, der in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe enthalten ist, und ein Zielbefehl in Schritt S46 ein VLIW bilden können, wird der Zielbefehl von der ausgebbaren Befehlsgruppe zu der Ausgabe-Ablaufsteuerungs-Befehlsgruppe übertragen (Schritte S47 und S48).
  • Wenn andererseits die Befehlsverschiebungseinheit 21 beurteilt, dass ein Befehl, der in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe enthalten ist, und ein Zielbefehl in Schritt S46 kein VLIW bilden können, kann der Zielbefehl zu diesem Zeitpunkt nicht ausgegeben werden und wird somit aus der ausgebbaren Befehlsgruppe entfernt (Schritt S48).
  • Wenn die Befehlsverschiebungseinheit 21 beurteilt, dass ein VLIW in Schritt S44 aus Befehlen in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe gebildet werden kann, werden die Befehle aus der Ausgabe-Ablaufsteuerungs-Befehlsgruppe entfernt und als ein VLIW (Schritt S50) ausgegeben. Es ist zu beachten, dass, wenn der Prozess von Schritt S49 mit Schritt S50 fortfährt, Fälle auftreten, in denen nicht alle Operationsfelder eines VLIW mit Befehlen gefüllt werden können, die in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe bleiben. In diesem Fall wird ein VLIW ausgegeben, dessen leere Operationsfelder mit Nulloperations- (nop) Befehlen gefüllt sind.
  • Auf diese Weise wird der serielle Assemblercode, der in die parallele Ablaufsteuerungseinheit 13 eingegeben wird, in VLIWs gepackt, um einen parallelen Assemblercode zu generieren, der dann ausgegeben wird.
  • (Konstanten-Zusammensetzungseinheit 14)
  • Wenn ein oder mehrere Einrichtungsbefehle für unterteilte Konstanten und ein Verwendungsbefehl für unterteilte Konstanten, die aus ein und demselben Verwendungsbefehl für lange Konstanten durch die Konstanten-Unterteilungseinheit 12 generiert werden, durch die parallele Ablaufsteuerungseinheit 13 (in ein und demselben Zyklus) in ein und dasselbe VLIW gepackt werden, ersetzt die Konstanten-Zusammensetzungseinheit 14 diese Befehle durch einen Verwendungsbefehl für lange Konstanten, den sie durch Zusammensetzen dieser Befehle erhält. In ähnlicher Weise, wenn eine Vielzahl von Einrichtungsbefehlen für unterteilte Konstanten, die aus ein und demselben Verwendungsbefehl für lange Konstanten generiert worden sind, (in ein und demselben Zyklus) in ein und dasselbe VLIW gepackt werden, ersetzt die Konstanten-Zusammensetzungseinheit 14 diese Befehle durch einen Einrichtungsbefehl für unterteilte Konstanten, den sie durch Zusammensetzen dieser Befehle erhält. Dies entspricht einem Fall, in dem die Konstanten-Unterteilungseinheit 12 keine lange Konstante unterteilt haben muss (keine unterteilten Konstanten in einer Vielzahl von VLIWs angeordnet haben muss).
  • (Code-Ausgabeeinheit 15)
  • Die Code-Ausgabeeinheit 15 wandelt einen Assemblercode mit internem Format, der durch die Konstanten-Zusammensetzungseinheit 14 zusammengesetzt (ersetzt) worden ist, in einen Assemblercode mit Textformat um und gibt den umgewandelten Code, (den parallelen Assemblercode 43) als Dateien aus.
  • (Parallele Assemblereinheit 16)
  • Die parallele Assemblereinheit 16 wandelt den parallelen Assemblercode 43, der von der Code-Ausgabeeinheit 15 ausgegeben wird, in eine Maschinensprache um, die für den VLIW-Prozessor 100, für den der vorliegenden Kompilierer verwendet wird, reserviert ist, und generiert den Objektcode 44a44b und die Verschiebungsinfonnationen 45a45b. Während dieses Prozesses werden die Formatinformationen bestimmt, die in dem ersten Feld 51 eines VLIW angeordnet werden soll. In dem Fall eines VLIW, das zum Beispiel einen oder mehrere Einrichtungsbefehle für unterteilte Konstanten enthält, generiert die parallele Assemblereinheit 16 einen Maschinen-Code für Felder mit nur einer unterteilten Konstante und die Formatinformationen, welche die Felder angeben.
  • Jede der Verschiebungsinformationen 45a45b setzt sich aus Informationen zusammen, die den Namen einer Kennung für jeden Objektcode 44a, die Adresse eines Befehls, der die Kennung verwendet, und die Größe der Kennung angibt. Diese Kennungsgröße ist die Größe, die von der Konstanten-Unterteilungseinheit 12 bestimmt wird, (die in dem in 6 gezeigten Schritt S2 bestimmte Kennungsgröße), und ist ein temporärer Wert (16 Bits in dem oben genannten Beispiel) in dem Fall einer externen Kennung.
  • (Verknüpfereinheit 17)
  • Die Verknüpfereinheit 17 verknüpft die Vielzahl von verschiebbarem Objektcode 44a44b, der in verschiedenen Kompiliereinheiten generiert wurde, bestimmt unbestimmte Kennungen, die in dem Objektcode enthalten sind, und generiert den ausführbaren Code 46 und die Verschiebungsinformationen 40 für den VLIW-Prozessor 100.
  • 9 ist ein Blockschaltbild, das die detaillierte Konstruktion der Verknüpfereinheit 17 zeigt.
  • Die Verknüpfereinheit 17 enthält die Kennungsadressen-Berechnungseinheit 22, die Befehlseinfügungseinheit 23 und die Ausgabeeinheit 24.
  • Die Kennungsadressen-Berechnungseinheit 22 berechnet eine Adresse jeder Kennung, nachdem die Vielzahl von verschiebbarem Objektcode 44a44b, der in die Verknüpfereinheit eingegeben wurde, verknüpft worden ist. Dadurch wird auch die Größe jeder Kennung bestimmt. Dieser Prozess ist der gleiche wie derjenige einer Kennungsadressen-Berechnungseinheit eines üblichen Kompilierers.
  • Wenn die Größe einer Kennung, die durch die Kennungsadressen-Berechnungseinheit 22 berechnet worden ist, größer als die Größe ist, die durch die Verschiebungsinformationen 45a45b angegeben wird, welche die Größe ist, die durch die Konstanten-Unterteilungseinheit 12 bestimmt worden ist, fügt die Befehlseinfügungseinheit 23 den erforderlichen Einrichtungsbefehl für unterteilte Konstanten ein, um der Situation gerecht zu werden.
  • 10 ist ein Ablaufdiagramm, das die Verarbeitung der Befehlseinfügungseinheit 23 zeigt.
  • Die Befehlseinfügungseinheit 23 ruft nacheinander jede Kennung aus dem Objektcode 44a44b ab, der in die Verknüpfereinheit 17 eingegeben wurde, und wiederholt den folgenden Prozess (Schritte S62–S64) für jede der abgerufenen Kennungen (Schritte S61–S65).
  • Zunächst werden die Verschiebungsinformationen einer abgerufenen Kennung, (einer Zielkennung), aus den Verschiebungsinformationen 45a45b ausgelesen, die in die Verknüpfereinheit 17 eingegeben wurden (Schritt S62).
  • Danach beurteilt die Verknüpfereinheit 17, ob die Größe, die von der Kennungsadressen-Berechnungseinheit 22 berechnet worden ist, größer ist als diejenige der Zielkennung, die durch die gelesenen Verschiebungsinfonnationen angegeben wird (Schritt S63).
  • Wenn dies der Fall ist, werden ein oder mehrere Einrichtungsbefehle für unterteilte Konstanten generiert, um unterteilte Konstanten zu speichern, die der Differenz zwischen diesen Größen entsprechen. Ein neues VLIW, das die generierten Einrichtungsbefehle für unterteilte Konstanten und einen Nulloperations-Befehl enthält, wird unmittelbar vor dem VLIW eingefügt, das den Befehl enthält, der die Zielkennung verwendet (Schritt S64).
  • Dadurch, selbst wenn die Größe einer temporären Kennung, die durch die Konstanten-Unterteilungseinheit 12 bestimmt wird, kleiner ist als die tatsächlich erforderliche Größe, wird die Differenz zwischen diesen Größen erkannt und eine notwendige Behandlung vorgenommen.
  • Die Ausgabeeinheit 24 generiert die Speicherstelleninformationen 40, welche die Größe jeder Kennung angeben, die durch die Kennungsadressen-Berechnungseinheit 22 und eine Befehlsliste, die auf die Kennungen verweist, bestimmt wird, und gibt die Speicherstelleninformationen 40 mit dem ausführbaren Code 46 aus, der nach der Verarbeitung der Befehlseinfügungseinheit 23 erhalten wird.
  • <Funktion des Kompilierers>
  • Das Folgende ist eine Beschreibung der Funktion der charakteristischen Elemente des vorliegenden Kompilierers für spezifische Befehle.
  • <Beispiel 1>
  • Die folgende Beschreibung betrifft eine Funktion der Konstanten-Unterteilungseinheit 12 und der parallelen Ablaufsteuerungseinheit 13, wobei der in 11A gezeigte serielle Assemblercode durch die Assemblercode-Generierungseinheit 11 generiert und in die Konstanten-Unterteilungseinheit 12 eingegeben wird.
  • Der in 11A gezeigte Assemblercode 401 und 402 wird im Folgenden beschrieben.
  • {(Befehl 401) add R1, R2}
  • Der Wert im Register R1 wird zu dem Wert im Register R2 addiert, und das Ergebnis wird im Register R2 gespeichert.
  • {(Befehl 402) Ld (LabeL), R3}
  • Der Wert, der in dem Bereich mit der Speicheradresse gespeichert ist, die durch die Kennung "LabeL" angegeben ist, wird in das Register R3 geladen.
  • (Konstanten-Unterteilungseinheit 12)
  • Im Folgenden wird unter Bezugnahme auf das in 6 gezeigte Ablaufdiagramm die Funktion der Konstanten-Unterteilungseinheit 12 beschrieben, wenn der in 11a gezeigte serielle Assemblercode 42 eingegeben wird.
  • Die Konstanten-Unterteilungseinheit 12 wiederholt die Verarbeitung zum Unterteilen langer Konstanten (Schritte S1–S5) für jeden der drei in 11A gezeigten Befehle. Allerdings enthalten die Befehle 400 und 401 in diesem Beispiel weder Kennungen noch lange Konstanten und werden daher nicht verarbeitet.
  • Die Konstanten-Unterteilungseinheit 12 kann die Größe der Kennung "LabeL" im Befehl 402 nicht bestimmen und nimmt daher an, dass die Größe 16 Bits ist (Schritt S2).
  • Dementsprechend beurteilt die Konstanten-Unterteilungseinheit 12, dass der Befehl 402 ein Verwendungsbefehl für lange Konstanten ist (Schritt S3) und ersetzt diesen Verwendungsbefehl für lange Konstanten 402 durch einen oder mehrere Einrichtungsbefehle für unterteilte Konstanten und einen Verwendungsbefehl für unterteilte Konstanten (Schritt S4).
  • 11B zeigt einen Code, der durch die Konstanten-Unterteilungseinheit 12 generiert wird, wenn der in 11A gezeigte serielle Assemblercode 42 eingegeben wird.
  • Wie in dieser Figur gezeigt, wird der Verwendungsbefehl für lange Konstanten 402 in 11A durch den Einrichtungsbefehl für unterteilte Konstanten 405 und den Verwendungsbefehl für unterteilte Konstanten 406 ersetzt.
  • (Abhängigkeitsdiagram-Generierungseinheit 20)
  • Die folgende Beschreibung basiert auf der Annahme, dass der in 11B gezeigte serielle Assemblercode in die parallele Ablaufsteuerungseinheit 13 eingegeben wird. Die Funktion der Abhängigkeitsdiagramm-Generierungseinheit 20 in diesem Fall wird im Folgenden unter Bezugnahme auf das in 7 gezeigte Ablaufdiagramm beschrieben.
  • Die Abhängigkeitsdiagramm-Generierungseinheit 20 wiederholt ein und denselben Prozess für jeden der drei in 11B gezeigten Befehle (Schritt S11–S29).
  • 12 zeigt das durch die Abhängigkeitsdiagramm-Generierungseinheit 20 generierte Abhängigkeitsdiagramm in dem Fall, in dem der in 11B gezeigte serielle Assemblercode in die parallele Ablaufsteuerungseinheit 13 eingegeben wird.
  • {(Befehl 403) mov R0, R1}
  • Die Abhängigkeitsdiagramm-Generierungseinheit 20 generiert den Knoten 601, der diesem Befehl 403 entspricht (Schritt S12).
  • Danach, weil dieser Befehl auf das Register R0 verweist, sollte eine Verknüpfung von einem vorherigen Befehl, der das Register R0 definiert, hergestellt werden (Schritte S13 und S14). Allerdings sind keine vorherigen Befehle vorhanden, so dass diese Verknüpfung nicht hergestellt werden kann.
  • In ähnlicher Weise, weil dieser Befehl 403 das Register R1 definiert, sollte ein vorheriger Befehl, der das Register R1 steuert, angegeben werden (Schritte S15 und S16). Allerdings sind keine vorherigen Befehle vorhanden, so dass keine Verknüpfung hergestellt werden kann.
  • Hier ist zu beachten, dass dieses Beispiel zum einfacheren Verständnis nur einen Grundblock, (eine Prozessroutine mit einem Eingang und einem Ausgang), verwendet. Wenn jedoch ein Abhängigkeitsdiagramm für ein Programm generiert wird, das eine Vielzahl von Grundblöcken enthält, Kann die Vielzahl von Grundblöcken unter Verwendung virtueller Knoten verarbeitet werden, die vohergehende Grundblöcke und folgende Grundblöcke angeben.
  • {(Befehl 404) add R1, R2}
  • Der Befehl 404 ist als nächster zu verarbeiten, und daher generiert die Abhängigkeitsdiagramm-Generierungseinheit 20 den Knoten 603, der diesem Befehl 404 entspricht (Schritt S12).
  • Weil der Befehl 404 auf das Register R1 verweist, spezifiziert die Abhängigkeitsdiagramm-Generierungseinheit 20 den vorherigen Befehl 403, der das Register R1 definiert, und stellt die Verknüpfung 602 von dem Befehl 403 zu dem Befehl 404 her (Schritte S13 und S14).
  • Weil der Befehl 404 das Register R2 definiert, sollte der vorherige Befehl, der das Register R2 steuert, angegeben werden (Schritte S15 und S16). Allerdings ist kein solcher vorhergehender Befehl vorhanden, so dass keine Verknüpfung hergestellt wird.
  • {(Befehl 405) sfst LabeL:12u}
  • Der Befehl 405 ist als nächster zu verarbeiten, und daher generiert die Abhängigkeitsdiagramm-Generierungseinheit 20 den Knoten 604, der diesem Befehl 405 entspricht (Schritt S12).
  • Der Befehl 405 steuert kein Register oder einen Speicher und wird daher dem Verknüpfungsprozess in den Schritten S13–S24 nicht unterzogen.
  • Der Befehl 405 ist ein Einrichtungsbefehl für unterteilte Konstanten, so dass die Abhängigkeitsdiagramm-Generierungseinheit 20 versucht, einen vorherigen Steuerbefehl für den Konstantenpuffer anzugeben (Schritte S25 und S26). Allerdings ist kein solcher vorhergehender Befehl vorhanden, so dass keine Verknüpfung hergestellt wird.
  • {(Befehl 406) Ld (LabeL:4L, R3}
  • Abschließend ist der Befehl 406 ist zu verarbeiten, und daher generiert die Abhängigkeitsdiagramm-Generierungseinheit 20 den Knoten 606, der diesem Befehl 406 entspricht (Schritt S12).
  • Weil der Befehl 406 das Register R3 definiert, versucht die Abhängigkeitsdiagramm-Generierungseinheit 20, einen vorherigen Befehl anzugeben, der das Register R3 steuert (Schritte S15 und S16).). Allerdings ist kein solcher vorhergehender Befehl vorhanden, und daher wird keine Verknüpfung hergestellt.
  • Der Befehl 406 ist ein Verwendungsbefehl für unterteilte Konstanten, so dass die Abhängigkeitsdiagramm-Generierungseinheit 20 den vorherigen Steuerbefehl 405 für den Konstantenpuffer angibt und die Verknüpfung 605 vom Befehl 405 zum Befehl 406 herstellt (Schritte S27 und S28).
  • Auf diese Weise werden die Verknüpfung 602 vom Befehl 403 zum Befehl 404 und die Verknüpfung 605 vom Befehl 405 zum Befehl 406 hergestellt, wie in 12 gezeigt.
  • (Befehlsverschiebungseinheit 21)
  • In Übereinstimmung mit der Ausfühnungsreihenfolge, die durch das in 12 gezeigte Abhängigkeitsdiagramm angegeben wird, verschiebt die Befehlsverschiebungseinheit 21 den in 11B gezeigten seriellen Assemblercode parallel. Das Folgende ist eine Beschreibung der Funktion der Befehlsverschiebungseinheit 21 in diesem Fall unter Bezugnahme auf das in 8 gezeigte Ablaufdiagramm.
  • Bis alle der vier Befehle 403406, die in 11B gezeigt sind, ausgegeben sind, wiederholt die Befehlsverschiebungseinheit 21 den Ablaufsteuerungs-Zyklus (Schritte S41–S51), der einen Prozess zum Generieren der ausgebbaren Befehlsgruppe (Schritt S42) und einen Prozess zum gleichzeitigen Verbrauchen eines Befehls in der generierten ausgebbaren Befehlsgruppe (Schritte S43–S50) enthält.
  • (Erster Ablaufsteuerungszyklus)
  • Im ersten Ablaufsteuerungszyklus generiert die Befehlsverschiebungseinheit 21 eine Gruppe, die sich aus den drei Befehlen 403, 405 und 406 als die ausgebbare Befehlsgruppe zusammensetzt (Schritt S42). Der Grund dafür ist, dass die Befehle 403 und 405 Befehle ohne Verknüpfungen von anderen Knoten zu ihren Knoten sind, und der Befehl 406 einem Knoten entspricht, dessen Verknüpfungsquellenknoten einem Einrichtungsbefehl für unterteilte Konstanten entspricht.
  • In der Ausgabe-Ablaufsteuerungs-Befehlsgruppe gibt es keinen Befehl, so dass die Befehlsverschiebungseinheit 21 beurteilt, dass aus Befehlen in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe in Schritt S44 kein VLIW erstellt werden kann, und der Prozess mit dem ersten Verbrauchszyklus fortfährt, indem er einen optimalen Befehl auswählt (Schritt S45). In diesem Beispiel wird der Befehl 403 ausgewählt.
  • Weil die Ausgabe-Ablaufsteuerungs-Befehlsgruppe keinen Befehl enthält, verschiebt die Befehlsverschiebungseinheit 21 den ausgewählten Befehl 403 in die Ausgabe-Ablaufsteuerungs-Befehlsgruppe (Schritt S47) und entfernt den Befehl 403 aus der ausgebbaren Befehlsgruppe (Schritt S48).
  • Zu diesem Zeitpunkt bleiben die Befehle 405 und 406 in der ausgebbaren Befehlsgruppe, so dass der Prozess mit dem zweiten Verbrauchszyklus fortfährt (Schritt S44–S48).
  • Die Ausgabe-Ablaufsteuerungs-Befehlsgruppe enthält nicht genügend Befehle, um ein VLIW zum gegenwärtigen Zeitpunkt zu füllen, so dass die Befehlsverschiebungseinheit 21 beurteilt, dass ein VLIW in Schritt S44 nicht aus Befehlen in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe erstellt werden kann. In diesem Beispiel wählt die Befehlsverschiebungseinheit 21 den Befehl 405 als einen optimalen Befehl aus (Schritt S45).
  • Beide ausgewählten Befehle 405 und 403 in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe sind 12-.Bit-Befehle und können daher ein VLIW aufbauen. Daher verschiebt die Befehlsverschiebungseinheit 21 die Befehle 405 in die Ausgabe-Ablaufsteuerungs-Befehlsgruppe (Schritt S47) und entfernt den Befehl 405 aus der ausgebbaren Befehlsgruppe (Schritt S48).
  • Zu diesem Zeitpunkt bleibt nur der Befehl 406 in der ausgebbaren Befehlsgruppe, und die Ausgabe-Ablaufsteuerungs-Befehlsgruppe enthält die Befehle 403 und 405. Als Ergebnis dessen beurteilt die Befehlsverschiebungseinheit 21, dass ein VLIW in Schritt S44 aus Befehlen in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe erstellt werden kann, entfernt diese Befehle 403 und 405 aus der Ausgabe-Ablaufsteuerungs-Befehlsgruppe und gibt ein VLIW aus, das diese Befehle enthält (Schritt S50).
  • Wenn die Befehlsverschiebungseinheit 21 den Befehl 406 statt den Befehl 405 als einen optimalen Befehl in dem zweiten Verbrauchszyklus auswählt (Schritt S45), ist der Einrichtungsbefehl 405 für unterteilte Konstanten, von dem eine Verknüpfung zu dem Knoten des Befehls 406 hergestellt wird, nicht ausgegeben worden und ist nicht in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe enthalten. Daher beurteilt die Befehlsverschiebungseinheit 21, dass ein Befehl, der in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe enthalten ist, und ein Zielbefehl in Schritt S46 kein VLIW bilden können, und der Befehl 406 wird aus der ausgebbaren Befehlsgruppe entfernt. Als Ergebnis dessen wird ein und dasselbe VLIW, (das VLIW, das die Befehle 403 und 405 enthält), in diesem Fall ausgegeben.
  • 11C zeigt VLIWs, (parallelen Assemblercode), der durch die Befehlsverschiebungseinheit 21 generiert wird, wenn der in 11B gezeigte serielle Assemblercode in die parallele Ablaufsteuerungseinheit 13 eingegeben wird. Es ist zu beachten, dass ein Code in dem ersten Feld 51 eines VLIW zum einfacheren Verständnis weggelassen wird.
  • Der erste Ablaufsteuerungszyklus generiert das VLIW 407, das in 11C gezeigt wird.
  • (Zweiter Ablaufsteuerungszyklus)
  • Der zweite Ablaufsteuerungszyklus beginnt mit dem Befehl 406, der in der ausgebbaren Befehlsgruppe bleibt.
  • Die Befehlsverschiebungseinheit 21 fügt den Befehl 404 neu zu der ausgebbaren Befehlsgruppe hinzu (Schritt S42). Der Grund dafür ist, dass der Befehl 403 dem Knoten entspricht, von dem eine Verknüpfung zu dem Knoten des Befehls 404 hergestellt wird. Als Ergebnis dessen wird eine ausgebbare Befehlsgruppe, die sich aus den Befehlen 404 und 406 zusammensetzt, generiert.
  • In der Ausgabe-Ablaufsteuerungs-Befehlsgruppe ist kein Befehl vorhanden, so dass die Befehlsverschiebungseinheit 21 beurteilt, dass in Schritt S44 kein VLIW aus Befehlen in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe hergestellt werden kann, und der Prozess fährt mit dem ersten Verbrauchszyklus fort, indem ein optimaler Befehl ausgewählt wird (Schritt S45). In diesem Beispiel wählt die Befehlsverschiebungseinheit 21 den Befehl 404 aus.
  • In diesem Fall ist in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe kein Befehl vorhanden, so dass die Befehlsverschiebungseinheit 21 den Befehl 404 in die Ausgabe-Ablaufsteuerungs-Befehlsgruppe verschiebt (Schritt S47) und den Befehl 404 aus der ausgebbaren Befehlsgruppe entfernt (Schritt S48).
  • Zu diesem Zeitpunkt bleibt nur der Befehl 406 in der ausgebbaren Befehlsgruppe. Der Prozess fährt mit dem zweiten Verbrauchszyklus in der gleichen Weise fort, wie beim ersten Ablaufsteuerungszyklus, so dass der Befehl 406 ebenfalls von der ausgebbaren Befehlsgruppe in die Ausgabe-Ablaufsteuerungs-Befehlsgruppe übertragen wird (Schritte S44–S48).
  • Die Ausgabe-Ablaufsteuerungs-Befehlsgruppe enthält die Befehle 404 und 406 zum gegenwärtigen Zeitpunkt, so dass die Befehlsverschiebungseinheit 21 beurteilt, dass in Schritt S44 ein VLIW aus Befehlen in der Ausgabe-Ablaufsteuerungs-Befehlsgruppe erstellt werden kann. Die Befehle 404 und 406 werden aus der Ausgabe-Ablaufsteuerungs-Befehlsgruppe entfernt und als das zweite VLIW ausgegeben (Schritt S50). Das heißt, der zweite Ablaufsteuerungszyklus generiert das VLIW 408, das in 11C gezeigt ist.
  • Dadurch packt die Befehlsverschiebungseinheit 21 alle Befehle, die in die parallele Ablaufsteuerungseinheit 13 eingegeben wurden, in VLIWs, die sie dann ausgibt (Schritte S41–S51). Dann beendet die Befehlsverschiebungseinheit 21 ihren Ablaufsteuerugsprozess.
  • (Vergleich mit einem üblichen Kompilierer)
  • Zwei in 11C gezeigte VLIWs werden aus dem in 11A gezeigten seriellen Assemblercode durch die Verarbeitung der Konstanten-Unterteilungseinheit 12 und der parallelen Ablaufsteuerungseinheit 13 generiert. Dieser Prozess wird mit dem Fall eines üblichen Kompilierers verglichen, um die Merkmale des vorliegenden Kompilierers aufzuzeigen.
  • 13 ist ein Blockschaltbild, das die Konstruktion des üblichen Kompilierers zeigt.
  • Während die grundlegenden Funktionen des üblichen Kompilierers die gleichen sind wie diejenigen des Kompilierers der Ausführungsform, besitzt der übliche Kompilierer nicht die Funktionen, die der Konstanten-Unterteilungseinheit 12 und der Konstanten-Zusammensetzungseinheit 14 entsprechen. Daher besitzt der übliche Kompilierer nicht die Funktionen, die den anderen Elementen 910917, 920 und 921 entsprechen.
  • Wenn die Assemblercode-Generierungseinheit 911 daher beispielsweise den in 11A gezeigten seriellen Assemblercode generiert, wird der serielle Assemblercode in die parallele Ablaufsteuerungseinheit 913 so eingegeben, wie er ist. Als Ergebnis dessen generiert die Abhängigkeitsdiagramm-Generierungseinheit 920 das in 14 gezeigte Abhängigkeitsdiagramm.
  • Die Befehlsverschiebungseinheit 921 verschiebt die in 11A gezeigten Befehle gemäß dem Abhängigkeitsdiagramm 925. Wie in 14 gezeigt, hängen die Befehle 400 und 401 voneinander ab und können so nicht nebeneinander vorhanden sein, (können kein VLIW konstruieren). Der Befehl 402 ist 24 Bits lang, so dass der Befehl 402 nicht mit anderen Befehlen 400 und 401 nebeneinander vorhanden sein kann. Daher generiert die Befehlsverschiebungseinheit 921 drei VLIWs 930932, die in 15 gezeigt sind.
  • Wie durch Vergleichen von 15 und 11C ersichtlich ist, ist die Code-Größe des parallelen Assemblercodes, der durch den üblichen Kompilierer generiert wird, größer als diejenige der Ausführungsform von einem VLIW. Daher ist ein weiterer Zyklus für die Ausführung des Codes erforderlich, der durch den üblichen Kompilierer generiert wird.
  • Der Grund dafür ist, dass der Kompilierer der Ausführungsform das VLIW 932 in 15 in kleine Befehle unterteilt, (einen oder mehrere Einrichtungsbefehle für unterteilte Konstanten und einen Verwendungsbefehl für unterteilte Konstanten), und die kleinen Be fehle in den VLIWs 930 und 931 angeordnet werden, um die redundanten Bereiche in diesen VLIWs zu füllen.
  • <Beispiel 2>
  • Das Folgende ist eine Beschreibung der Funktion der Verknüpfereinheit 17 und des Optimierungsprozesses in dem Fall, in dem der in 17A gezeigte serielle Assemblercode durch die Assemblercode-Generierungseinheit 11 generiert wird und in die Konstanten-Unterteilungseinheit 12 eingegeben wird.
  • (Verknüpfereinheit 17)
  • 17A17G zeigen eine Reihe eines spezifischen Codes und dazugehörige Informationen zur Erläuterung der Funktion der Verknüpfereinheit 17.
  • 17A zeigt den seriellen Assemblercode 42, der durch die Assemblercode-Generierungseinheit 11 von Beispiel 2 generiert worden ist. 17B zeigt einen Code, der durch die Konstanten-Unterteilungseinheit 12 generiert worden ist, in die der serielle Assemblercode 42 eingegeben wird. 17C zeigt einen parallelen Assemblercode, der durch die parallele Ablaufsteuerungseinheit 13 generiert worden ist, in die der generierte Code eingegeben wird. 17D und 17E zeigen den Objektcode 44a und die Verschiebungsinformationen 45a, die durch die parallele Assemblereinheit 16 generiert worden sind, in die der generierte parallele Assemblercode eingegeben wird. 17F und 17G zeigen den ausführbaren Code 46 und die Speicherstelleninformationen 40, die durch die Verknüpfereinheit 17 generiert worden sind, in die der Objektcode 44a und die Verschiebungsinformationen 45a eingegeben werden.
  • In diesem Beispiel ist zu beachten, dass für die ausführliche Erläuterung des Codes, der durch die Assemblercode-Generierungseinheit 11, die Konstanten-Unterteilungseinheit 12 und die parallele Ablaufsteuerungseinheit 13 generiert wird, 17A17C zusätzliche Informationen anzeigen, die durch Codes gefolgt von dem Zeichen "@" angegeben werden, wobei die zusätzlichen Informationen zusammen mit jedem Befehl generiert werden. Diese zusätzlichen Informationen enthalten einen Kennzeichner zum Spezifizieren jedes Befehls und von Informationen, die sich auf unterteilte Konstanten beziehen.
  • Die zusätzliche Information "@ID Zahl", die in 17A gezeigt ist, ist der Kennzeichner eines Befehls (ein Befehlskennzeichner) in der gleichen Zeile. In 17B stellen die zusätzlichen Informationen "LbU12" und "LbL4" jeweils die höherwertigen 12 Bits und die niederwertigen 4 Bits der Kennung "LabeL" dar, die zusätzliche Information "S16", (die Größeninformation), gibt an, dass die Kennung "LabeL" unterteilt ist, wobei ihre Größe mit 16 Bits angenommen wird, und die zusätzliche Information "M" gibt an, dass der vorliegenden Befehl der erste in den Befehlen zum Speichern von unterteilten Teilen der Kennung "LabeL" in den Konstantenpuffer 107 ist.
  • Der in 17A gezeigte Befehl "DS" ist ein Dummy-Befehl zum Verwalten eines Speicherbereichs (4 Bytes) zum Speichern der Kennung "LabeL".
  • Der in 17D gezeigte Objektcode 44a und die in 17E gezeigten Verschiebungsinformationen 45a werden in die Verknüpfereinheit 17 eingegeben.
  • In 17D geben die "Speicherstelleninformationen" in dem Objektcode relative Adressen jedes Befehls durch Offsets (in Byte-Einheiten) ab dem Beginn eines spezifischen Speicherbereichs (eines Segments oder eines Abschnitts) an. Das Zeichen "0x" gibt an, dass die auf das Zeichen folgende Zahl in hexadezimaler Weise ausgedrückt wird. Die Zeichen "LabeL:12u" und "LabeL:4L" stellen jeweils die höherwertigen 12 Bits und die niederwertigen 4 Bits der Kennung "LabeL" dar, wobei die beiden Teile unterteilte Konstanten sind.
  • Wie in 17E gezeigt, setzen sich die Verschiebungsinformationen 45a aus der "Kennung", den Speicherstelleninformationen", welche die Speicherstelle eines Befehls angeben, der auf die Kennung verweist, und den "zusätzlichen Informationen" zusammen, die den Befehl begleiten. Hier setzen sich die Speicherstelleninformationen aus einer Adresse eines VLIW und einer Zahl zusammen, welche die Speicherstelle eines Einheitsoperationsfelds in dem VLIW angibt, das einen Befehl enthält, der auf die Kennung verweist, wobei die VLIW-Adressenwerte sich um 32 Bits (4 Bytes) voneinander unterscheiden.
  • In diesem Beispiel wird auf die Kennung "LabeL" durch einen Befehl verwiesen, der in dem dritten Operationsfeld des VLIW angeordnet ist, das sich an der relativen Adresse "0x1000" befindet, und dieses VLIW enthält die zusätzlichen Informationen "ID102. LbU12. S16. M". Auf die Kennung "LabeL" wird auch durch den Befehl verwiesen, der in dem dritten Operationsfeld des VLIW angeordnet ist, das sich an der relativen Adresse "0x1004" befindet, und dieses VLIW enthält die zusätrlichen Informationen "ID102. LbL4. S16".
  • Das Folgende ist eine Beschreibung der Funktion der Verknüpfereinheit 17, wenn der (in 17D gezeigte) Objektcode 44a und die (in 17E gezeigten) Verschiebungsinformationen empfangen werden.
  • In diesem Beispiel berechnet die Kennungsadressen-Berechnungseinheit 22, dass die endgültige Größe der Kennung "LabeL" 28 Bits beträgt, indem auf anderen, gleichzeitig eingegebenen Objektcode verwiesen wird.
  • Die Befehlseinfügungseinheit 23 richtet die Kennung "LabeL" als die Zielkennung ein (Schritt S61) und extrahiert Verschiebungsinformationen der Zielkennung "LabeL" aus den Verschiebungsinformationen 45a, die in die Verknüpfereinheit 17 eingegeben wurden (Schritt S62).
  • Die Befehlseinfügungseinheit 23 vergleicht die Größeninformation "S16", die in den zusätzlichen Informationen der Verschiebungsinformationen enthalten ist, mit der Größe " 28 Bits" der Zielkennung, die durch die Kennungsadressen-Berechnungseinheit 22 berechnet worden ist (Schritt S63).
  • In diesem Fall ist die Größe, die von der Kennungsadressen-Berechnungseinheit 22 berechnet worden ist, größer als die Größe, die durch die Größeninformation angegeben wird. Daher spezifiziert die Befehlseinfügungseinheit 23 eine der Verschiebungsinformationen 429 oder 430 für die in 17E gezeigte Kennung "LabeL", welche die zusätzliche Information "M" enthält, (in diesem Beispiel die Verschiebungsinformation 429). Dann fügt die Befehlseinfügungseinheit 23 ein neues VLIW ein, das einen Nulloperations- (nop) Code und einen oder mehrere Einrichtungsbefehle für unterteilte Konstanten unmittelbar vor dem VLIW 425 enthält, das den Speicherstelleninformationen (0x100. 3) entspricht (Schritt S64).
  • Wie in 17F gezeigt, wird das sich daraus ergebende VLIW 431 zusätzlich unmittelbar vor dem VLIW 432 eingefügt. Es ist zu beachten, dass in diesem VLIW 431 die Kennung "LabeL:12u" die höherwertigen 12 Bits der 28-Bit-Kennung "LabeL" angibt, das heißt, Bits, welche die 16 Bits überschreiten, die durch die Größeninformation der Verschiebungsinformationen angegeben werden. In dem VLIW 432 gibt die unterteilte Konstante "LabeL:12m" ebenso die mittleren 12 Bits der 28-Bit-Kennung "LabeL" an.
  • Auf diese Weise, wenn sich die temporäre Kennungsgröße, die während des Kompilierens, (der Konstantenunterteilung durch die Konstanten-Unterteilungseinheit 12), angenommen wird, von der endgültigen Kennungsgröße unterscheidet, wird ein Befehl eingefügt, um die Differenz zu korrigieren.
  • Schließlich generiert die Ausgabeeinheit 24 die Speicherstelleninformationen 40, welche die Kennungsgröße enthalten, die durch die Kennungsadressen-Berechnungseinheit 22 berechnet worden ist, und gibt die Speicherinformationen mit dem ausführbaren Code 46 aus, der erhalten worden ist, nachdem die Befehlseinfügungseinheit 23 den Befehlseinfügungsprozess durchgeführt hat (17F).
  • Die Speicherstelleninformationen 436 der Kennung "LabeL" enthalten die Kennungsgröße "28" und den Kennzeichner "@ID102" des Befehls, der auf die Kennung verweist. Wenn hier die (später beschriebene) Optimierung, die diese Speicherstelleninformationen 40 verwendet, nicht durchgeführt wird, wird diese Ausgabe von der Verknüpfereinheit der endgültige ausführbare Code 46.
  • (Optimierung unter Verwendung der Speicherstelleninformationen 40)
  • Das Folgende ist eine Beschreibung der Funktion des Kompilierers, wenn die oben beschriebenen Speicherstelleninformationen 40 in die Konstanten-Unterteilungseinheit 12 zurück eingespeist werden, und die Verarbeitung durch die folgenden Einheiten wiederholt wird.
  • 18A18E zeigen einen Code und dazugehörige Informationen, die von jedem Komponentenelement generiert werden, wenn die generierten Speicherstelleninformationen 40 in die Konstanten-Unterteilungseinheit 12 zurück eingespeist werden.
  • 18A zeigt den Code, der durch die Konstanten-Unterteilungseinheit 12 aus dem in 17A gezeigten seriellen Assemblercode 42 und den in 17G gezeigten Speicherstelleninformationen 40 generiert worden ist. 18B zeigt einen parallelen Assemblercode, der durch die parallele Ablaufsteuerungseinheit 13 aus dem generierten Code generiert worden ist. 18C und 18D zeigen jeweils den Objektcode 44a und die Verschiebungsinformationen 45a, die durch die parallele Assemblereinheit 16 aus dem parallelen Assemblercode generiert worden sind. 18E zeigt den ausführbaren Code, der durch die Verknüpfereinheit 17 aus dem Objektcode 44a und den Verschiebungsinformationen 45a generiert worden ist.
  • Unter Verweis auf die eingegebenen Speicherstelleninformationen 40 bestimmt die Konstanten-Unterteilungseinheit 12, dass die Größe der externen Kennung des Befehls mit dem Befehlskennzeichner "ID102" 28 Bits beträgt, (Schritt S2 in 6), und unterteilt die 28-Bit-Kennung "LabeL" (Schritte S3 und S4). Als Ergebnis dessen wird der Befehl 412 in 17A durch drei Befehle 442–444 ersetzt, die in 18A gezeigt sind. Die zusätzliche Information "LbM12" des Befehls 443 gibt an, dass dieser Befehl auf die mittleren 12 Bits der Kennung "LabeL" verweist.
  • Die parallele Ablaufsteuerungseinheit 13 generiert einen parallelen Assemblercode ohne Nulloperations- (nop) Codes (siehe 18B), indem ein Abhängigkeitsdiagramm und Verschiebungsbefehle gemäß dem in 7 und 8 gezeigten Verfahren generiert werden.
  • Die parallele Assemblereinheit 16 generiert den Objektcode 44a, der dem parallelen Assembler-Code (siehe 18C) und den Verschiebungsinformationen 45a (siehe 18D) entspricht. Es ist zu beachten, dass die in 18C gezeigte Legende "LabeL.12m" die mittleren 12 Bits der Kennung "LabeL" darstellt.
  • In der Verknüpfereinheit 17 berechnet die Kennungsadressen-Verknüpfungseinheit 22, dass die Größe der Kennung "LabeL" wiederum 28 Bits beträgt, und daher fügt die Be fehlseinfügungseinheit 23 keinen weiteren Befehl ein, der sich auf die Kennung "LabeL" bezieht (Schritt S63 in 10). Daher wird der in 18E gezeigte ausführbare Code 46 generiert.
  • Wie aus einem Vergleich der 18E und 17F ersichtlich ist, ist die Code-Größe des ausführbaren Codes, der durch Zurücksenden der Speicherstelleninformationen 40 an die Konstanten-Unterteilungseinheit 12 (siehe 18E) optimiert worden ist, kleiner als diejenige des anderen ausführbaren Codes (siehe 17F) von einem VLIW.
  • Hier ist zu beachten, dass der ausführbare Code, der auf diese Weise generiert worden ist, (siehe 18E), zu Zielumgebungen, die mit VLIW-Prozessoren 100 ausgestattet sind, mittels eines Aufzeichnungsmediums transportiert werden kann, wie beispielsweise einer Diskette, einer CD-ROM oder einem Halbleiterspeicher oder durch Datenübertragungen über ein Übertragungsmedium.
  • <Beispiel 3>
  • Das Folgende ist eine Beschreibung der Funktion der Konstanten-Unterteilungseinheit 12 und der parallelen Ablaufsteuerungseinheit 13 in dem Fall, in dem ein serieller Assemblercode 42, der einen in 19A gezeigten Sprungbefehl enthält, durch die Assemblercode-Generierungseinheit 11 generiert wird und in die Konstanten-Unterteilungseinheit 12 eingegeben wird.
  • 19A zeigt den seriellen Assemblercode 42, der durch die Assemblercode-Generierungseinheit 11 von Beispiel 3 generiert worden ist.
  • Der Sprungbefehl 473 in dieser Figur wird im Folgenden beschrieben.
  • {(Befehl 473) caLL_func}
  • Die Ausführungssteuerung des VLIW-Prozessors 100 bewegt sich zur Sprungkennung "_func".
  • In diesem Beispiel ist die Größe dieser Sprungkennung "_func" 12 Bits lang, und das Argument R1 wird auf die Funktion "_func" übertragen, wenn die Steuerung zu der Funktion verzweigt.
  • 19B zeigt den Code, der durch die Konstanten-Unterteilungseinheit 12 aus dem in 19A gezeigten seriellen Assemblercode 42 generiert worden ist.
  • Der Sprungbefehl 473 wird von der 12-Bit-Sprungkennung "_func" begleitet, so dass der Befehl 473 in den Einrichtungsbefehl 477 für unterteilte Konstanten zum Speichern der Sprungkennung "_func" in dem Konstantenpuffer 107 und den Verwendungsbefehl 478 für unterteilte Konstanten, der dem Operations-Code "caLL" des Sprungbefehls 473 entspricht, unterteilt wird.
  • 19C zeigt ein Abhängigkeitsdiagramm, das durch die Abhängigkeitsdiagramm-Generierungseinheit 20 in dem Fall generiert wird, in dem der in 19B gezeigte Code eingegeben wird.
  • Weil das Argument R1 in der Funktion "_func" verwendet wird, hängt der Sprungbefehl 478 vom Befehl 474 ab.
  • 19D zeigt die ausgebbare Befehlsgruppe und die Ausgabe-Ablaufsteuerungs-Befehlsgruppe, die temporär durch die Befehlsverschiebungseinheit 21 in dem Fall generiert wird, in dem der in 19B gezeigte Code und das in 19C gezeigte Abhängigkeitsdiagramm eingegeben werden.
  • In dem zweiten Ablaufsteuerungszyklus wird der Sprungbefehl (caLL) 478 in die Ausgabe-Ablaufsteuerungs-Befehlsgruppe aufgenommen.
  • 19E zeigt den parallelen Assemblercode, der durch die Befehlsverschiebungseinheit 21 generiert worden ist. Diese Figur zeigt auch den Code in dem ersten Feld 51 von VLIWs.
  • Auf diese Weise generieren die Konstanten-Unterteilungseinheit 12 und die parallele Ablaufsteuerungseinheit 13 des vorliegenden Kompilierers den parallelen Assemblerco de von zwei VLIWs, die in 19E gezeigt sind, aus dem in 19A gezeigten seriellen Assemblercode.
  • Das Folgende ist eine Beschreibung des Falles, in dem der gleiche serielle Assemblercode 42 in einen üblichen Kompilierer eingegeben wird.
  • 16 zeigt einen parallelen Assemblercode, der durch den üblichen Kompilierer generiert werden kann.
  • Der übliche Kompilierer kann den in 19A gezeigten Sprungbefehl 473 nicht unterteilen, so dass wenigstens ein 13-Bit-Feld, nämlich zwei aufeinander folgende Felder, für diesen Befehl erforderlich sind. Daher wird ein paralleler Assemblercode für drei VLIWs 940942 generiert, und in diesen VLIWs sind viele redundante Bereiche vorhanden.
  • <Beispiel 4>
  • Die folgende Beschreibung konzentriert sich auf die Funktion der Konstanten-Zusammensetzungseinheit 14 in dem Fall, in dem der in 20A gezeigte serielle Assemblercode 42 durch die Assemblercode-Generierungseinheit 11 generiert wird und in die Konstanten-Unterteilungseinheit 12 eingegeben wird.
  • 20A zeigt den seriellen Assemblercode 42, der durch die Assemblercode-Generierungseinheit 11 von Beispiel 4 generiert worden ist.
  • Es ist zu beachten, dass in diesem Beispiel, während die Größe der Sprungkennung "_func", die durch den Sprungbefehl 803 verwendet wird, wie in Beispiel 3 12 Bits beträgt, kein Argument zur Funktion "_func" übertragen wird, wenn die Steuerung zu der Funktion verzweigt.
  • 20B zeigt den Code, der durch die Konstanten-Unterteilungseinheit 12 aus dem in 20A gezeigten seriellen Assemblercode 42 generiert worden ist.
  • Der Sprungbefehl 503 wird wie in Beispiel 3 in den Einrichtungsbefehl 507 für unterteilte Konstanten und den Verwendungsbefehl 508 für unterteilte Konstanten unterteilt.
  • 20C zeigt ein Abhängigkeitsdiagramm, das durch die Abhängigkeitsdiagramm-Generierungseinheit 20 aus dem in 20B gezeigten Code generiert worden ist.
  • 20D zeigt die ausgebbare Befehlsgruppe und die Ausgabe-Ablaufsteuenmgs-Befehlsgruppe, die temporär durch die Befehlsverschiebungseinheit 21 aus dem in 20B gezeigten Code und dem in 20C gezeigten Abhängigkeitsdiagramm generiert worden ist.
  • Im Gegensatz zu Beispiel 3 werden in dem zweiten Ablaufsteuerungszyklus der Einrichtungsbefehl 507 für unterteilte Konstanten und der Verwendungsbefehl 508 für unterteilte Konstanten in die Ausgabe-Ablaufsteuerungs-Befehlsgruppe aufgenommen.
  • 20E zeigt den parallelen Assemblercode, der durch die Befehlsverschiebungseinheit 21 generiert worden ist.
  • Der parallele Assemblercode setzt sich aus zwei VLIWs 509 und 510 zusammen. Die aus dem Sprungbefehl 503 generierten Befehle 507 und 508 werden jeweils in dem ersten Feld 51 und dem zweiten Feld 52 des VLIW 510 angeordnet.
  • 20F zeigt den Code, der durch die Konstanten-Zusammensetzungseinheit 13 aus dem in 20E gezeigten parallelen Assemblercode generiert worden ist.
  • Die Konstanten-Zusammensetzungseinheit 14 erkennt, dass der Einrichtungsbefehl 507 für unterteilte Konstanten und der Verwendungsbefehl 508 für unterteilte Konstanten, die aus ein und demselben Verwendungsbefehl für lange Konstanten, (dem Sprungbefehl 503), generiert worden sind, in ein und demselben VLIW angeordnet sind. Dementsprechend ersetzt die Konstanten-Zusammensetzungseinheit 14 diese Befehle 507 und 508 durch einen Verwendungsbefehl für lange Konstanten, (einen Befehl mit dem gleichen Format wie der ursprüngliche Sprungbefehl 503), der erhalten wird, indem die Befehle 507 und 508 zusammengesetzt werden. Dadurch werden Probleme gelöst, die verursacht werden, wenn die Konstanten-Unterteilungseinheit 12 eine Konstante unnötigerweise unterteilt, (da unterteilte Konstanten die unterteilten Konstanten nicht in einer Vielzahl von VLIWs angeordnet haben müssen).
  • Der Zielprozessor des Kompilierers der Ausführungsform ist dem VLIW-Prozessor ähnlich, der durch die japanische offengelegte Patentanmeldung H9-159058 oder H9-159059 offenbart worden ist. Der vorliegende Kompilierer kann für jeden konstantenrekonstruierenden Prozessor verwendet werden, der ein Programm ausführt, das durch Unterteilen von Befehlen in Teile und Anordnen der unterteilten Befehlsteile in einer Vielzahl von VLIWs erstellt wird.
  • Während der Kompilierer der Ausführungsform VLIWs in zwei in den 2A und 2B gezeigten Formaten generiert, kann dieser Kompilierer VLIWs in jedem Formattyp generieren, wie beispielsweise VLIWs, die sich jeweils aus drei 16-Bit-Operationsfeldern zusammensetzen. Der Grund dafür ist, dass die vorliegende Erfindung eine Technik zum Unterteilen von Konstanten ist, die in Befehlen enthalten sind, und zum Durchführen einer parallelen Ablaufsteuerung gemäß der Größe der Operationsfelder von VLIWs.
  • Der VLIW-Prozessor 100, welcher der Zielprozessor des Kompilierers der Ausführungsform ist, enthält ein 32-Bit-Schieberegister (den Konstantenpuffer 107). Das Schieberegister wird, unmittelbar nachdem auf einen in dem Schieberegister gespeicherten Wert verwiesen wird, mit Nullen (0) gefüllt. Die vorliegende Erfindung ist jedoch nicht darauf beschränkt, dass der Prozessor mit dem Konstantenpuffer 107 auf diese Weise arbeitet. Die vorliegende Erfindung kann für einen Prozessor mit einem Konstantenpuffer zum Speichern von zwei oder mehreren unabhängigen Konstanten und zum Verwenden von Befehlen verwendet werden, die explizit Speicherbereiche der Konstanten angeben und den verwendeten Inhalt löschen. Insbesondere, wenn ein Einrichtungsbefehl für unterteilte Konstanten generiert wird, kann auch ein Befehl zum Angeben des Speicherbereichs generiert werden. Und wenn ein Verwendungsbefehl für unterteilte Konstanten generiert wird, kann auch ein Befehl zum Löschen des Inhalts generiert werden.
  • In der Ausführungsform werden feste Werte, wie beispielsweise 4 Bits oder 12 Bits verwendet, wenn Konstanten unterteilt werden. Die vorliegende Erfindung ist jedoch nicht auf diese Werte beschränkt.
  • Wenn in der Ausführungsform die Größe einer Kennung nicht bestimmt werden kann, wird angenommen, dass die Größe die häufigste Adressengröße (16 Bits) besitzt. Die Größe kann jedoch auch als die maximale Adressengröße des Zielprozessors angenommen werden. Des Weiteren, wenn eine Konstante, deren Größe nicht bestimmt werden kann, ein Operand für einen Transfer-/arithmetisch-logischen Befehl ist, kann die Größe der Konstante als die maximale Konstantengröße des Zielprozessors oder als die häufigste Konstantengröße angenommen werden. Die angenommene Größe kann als ein Standardwert vorab gespeichert oder durch einen Benutzer als eine Option angegeben werden, wenn der Kompilierer aktiviert wird.
  • Wie aus der speziellen Beschreibung für Schritt S4 in 6 klar wird, kann die Funktion der Konstanten-Unterteilungseinheit 12 von zwei Standpunkten aus ausgedrückt werden. Das heißt, von dem ersten Standpunkt aus arbeitet die Konstanten-Unterteilungseinheit 12 als ein Mittel zum Unterteilen jedes Befehls, der eine Konstante enthält, aus eingegebenen Befehlen, (jedem Verwendungsbefehl für lange Konstanten), in eine Vielzahl von Befehlen (einen oder mehrere Einrichtungsbefehle für unterteilte Konstanten und einen Verwendungsbefehl für unterteilte Konstanten), wie in 21A gezeigt. Von dem zweiten Standpunkt aus arbeitet die Konstanten-Unterteilungseinheit 12 als ein Mittel zum Unterteilen jeder Konstante in eingegebenen Befehle, (jeder 28 Bit langen Konstante), in eine Vielzahl von Teilen und zum Generieren einer Vielzahl von Befehlen, die jeweils die unterteilten Konstanten-Teile enthalten, (einen Einrichtungsbefehl für unterteilte Konstanten für die unterteilte Konstante mit den höherwertigen 12 Bits, einen Einrichtungsbefehl für unterteilte Konstanten für die unterteilte Konstante mit den mittleren 12 Bits und einen Verwendungsbefehl für unterteilte Konstanten für die kurze Konstante mit den niederwertigen 12 Bits) gemäß den eingegebenen Befehlen, wie in 21B gezeigt.
  • In Beispiel 1 fügt die Befehlsverschiebungseinheit 21 zu dem Befehl 406, der in der ausgebbaren Befehlsgruppe in dem ersten Ablaufsteuerungszyklus bleibt, den Befehl 404, mit dem zweiten Zyklus fortzufahren, hinzu. Die Befehlsverschiebungseinheit 21 kann jedoch den Inhalt der ausgebbaren Befehlsgruppe löschen und für jeden Zyklus neu berechnen.
  • Hier ist zu beachten, dass ein ausführbarer Code, der durch den Kompilierer der Ausführungsform generiert worden ist, zu einer Zielumgebung, die den generierten Code ausführt, mittels eines Aufzeichnungsmediums, wie beispielsweise einer Diskette, einer CD-ROM oder einem Halbleiterspeicher oder über Datenübertragungen über ein Übertragungsmedium transportiert werden kann.
  • 22 zeigt einen vereinfachten Inhalt der CD-ROM 200, welche die in 18E gezeigte VLIW-Folge 201 und die in 9E gezeigte VLIW-Folge 202 aufzeichnet, die durch den Kompilierer der Ausführungsform generiert worden sind. In der VLIW-Folge 201 enthalten die zwei VLIWs 458 und 459 Konstanten, die zusammengesetzt und in dem Speicherpuffer des Prozessors, der durch die VLIW-Folge implizit angegeben wird, gespeichert werden sollen. Das VLIW 460 folgt auf die zwei VLIWs 458 und 459 und ist das erste VLIW, das auf den Speicherpuffer verweist. Dieses VLIW 469 enthält eine Konstante und den Befehl (Ld) zum Verwenden einer Konstante, die erhalten wird, indem die Konstante und die in den zwei oder mehreren VLIWs enthaltenden Konstanten zusammengesetzt werden. In der VLIW-Folge 202 enthält das VLIW 480 die Konstante (sfst), die in dem Speicherpuffer des Prozessors, der durch die VLIW-Folge implizit angegeben wird, gespeichert werden soll. Das VLIW 481, das auf das VLIW 480 folgt und das erste VLIW ist, das auf den Speicherpuffer verweist, enthält den Befehl (caLL) zum Verwenden der Konstante (_func), die in dem Speicherpuffer gespeichert ist.
  • Der Kompilierer selbst der vorliegenden Erfindung kann ebenfalls in einem Aufzeichnungsmedium gespeichert werden, wie beispielsweise einer Diskette, einer CD-ROM oder einem Halbleiterspeicher, und wie ein durch den Kompilierer erhaltener ausführbarer Code verteilt werden.

Claims (34)

  1. Verfahren zum Konvertieren einer Befehlsfolge, die sich aus seriell angeordneten Befehlen (42) zusammensetzt, in eine VLIW-Folge (VLIW = Very Long Instuction Word, sehr langes Befehlswort) (46) für einen Prozessor, wobei das Verfahren Folgendes umfasst: einen Unterteilungsschritt zum Unterteilen jedes eine Konstante enthaltenden Befehls in der Befehlsfolge in mehrere unterteilte Befehle; gekennzeichnet durch einen Analyseschritt zum Analysieren von Abhängigkeitsbeziehungen zwischen jedem Befehl in der Befehlsfolge, die unterteilte Befehle enthält, die in dem Unterteilungsschritt erzeugt wurden, gemäfß einer Ausführungsreihenfolge jedes Befehls in der Befehlsfolge und einen Verschiebungsschritt zum Verschieben von Befehlen in der Befehlsfolge in Übereinstimmung mit den analysierten Abhängigkeitsbeziehungen, um VLIWs zu erzeugen, die sich jeweils aus mehreren Befehlen zusammensetzen, die parallel ausführbar sind.
  2. Verfahren nach Anspruch 1, wobei der Unterteilungsschritt Folgendes beinhaltet: einen Befehlsgröflenbeurteilungsunterschritt (S2, S3) zum Durchführen einer Befehlsgrößenbeurteilung, ob eine Größe eines eine Konstante enthaltenden Befehls zu einer Größe jedes Einheitsoperationsfelds in einem VLIW gleich oder kleiner als diese ist; und einen Unterteilungsunterschritt (S4), der, wenn die Größe des die Konstante enthaltenden Befehls als gröber als die Größe jedes Einheitsoperationsfelds beurteilt wird, den die Konstante enthaltenden Befehl in mehrere unterteilte Befehle unterteilt, deren Größen zu der Größe jedes Einheitsoperationsfelds gleich oder kleiner als diese sind.
  3. Verfahren nach Anspruch 2, wobei der die Konstante enthaltende Befehl im Unterteilungsunterschritt (S4) in einen oder mehrere Befehle zum Speichern der Konstante in einem Speicherpuffer des Prozessors und einen Befehl zum Verwenden der gespeicherten Konstante unterteilt wird.
  4. Verfahren nach Anspruch 3, das weiterhin einen Zusammensetzungsschritt umfasst, der, wenn zwei oder mehr unterteilte Befehle, die in dem Unterteilungsunterschritt aus ein und demselben, eine Konstante enthaltenden Befehl erzeugt wurden, in dem Verschiebungsschritt in ein und demselben VLIW angeordnet werden, die zwei oder mehr unterteilten Befehle zu einem Befehl zusammensetzt.
  5. Verfahren nach Anspruch 4, wobei die Befehlsgrößenbeurteilung in dem Befehlsgrößenbeurteilungsunterschritt unter Verwendung einer für die Konstante angenommenen Größe durchgeführt wird und das Verfahren weiterhin Folgendes umfasst: einen Konstantengrößenbestimmungsschritt zum Verknüpfen von mehreren VLIW-Folgen und Bestimmen einer Endgröße jeder Konstante und einen Einfügungsschritt, der, wenn die Endgröße größer als die angenommene Größe ist, einen Befehl zum Speichern einer unterteilten Konstante, die einer Differenz zwischen der Endgröße und der angenommenen Größe entspricht, in dem Speicherpuffer erzeugt und den erzeugten Befehl in eine entsprechende VLIW-Folge einfügt.
  6. Verfahren nach Anspruch 5, wobei die angenommene Größe in dem Befehlsgrößenbeurteilungsunterschritt auf eine maximale Konstantengröße gesetzt wird, die von dem Prozessor handhabbar ist.
  7. Verfahren nach Anspruch 6, das weiterhin einen Schritt zum erneuten Ausführen des Unterteilungsschritts nach dem Konstantengrößenbestimmungsschritt umfasst, wobei die Befehlsgrößenbeurteilung in dem Befehlsgrößenbeurteilungsunterschritt in dem erneut ausgeführten Unterteilungsschritt unter Berücksichtigung der in dem Konstantengrößenbestimmungsschritt bestimmten Endgröße durchgeführt wird.
  8. Verfahren nach Anspruch 7, das weiterhin einen Schritt zum erneuten Ausführen des Analyseschritts und des Verschiebungsschritts nach dem erneut ausgeführten Unterteilungsschritt umfasst.
  9. Verfahren nach Anspruch 5, wobei die angenommene Größe der Konstante in dem Befehlsgrößenbeurteilungsunterschritt auf eine am häufigsten verwendete Konstantengröße gesetzt wird.
  10. Verfahren nach Anspruch 5, das weiterhin einen Schritt zum erneuten Ausführen des Unterteilungsschritts nach dem Konstantengrößenbestimmungsschritt umfasst, wobei die Befehlsgrößenbeurteilung in dem Befehlsgrößenbeurteilungsunterschritt in dem erneut ausgeführten Unterteilungsschritt unter Berücksichtigung der in dem Konstantengrößenbestimmungsschritt bestimmten Endgröße durchgeführt wird.
  11. Verfahren nach Anspruch 2, wobei der die Konstante enthaltende Befehl in dem Unterteilungsunterschritt in ein oder mehrere Befehle zum jeweiligen Speichern einer oder mehrerer unterteilter Konstanten in einem Speicherpuffer des Prozessors und einen Befehl zum Verwenden der gespeicherten unterteilten Konstanten unterteilt wird, wobei die unterteilten Konstanten durch Unterteilen der Konstante erhalten werden.
  12. Verfahren nach Anspruch 11, das weiterhin einen Zusammensetzungsschritt umfasst, der, wenn zwei oder mehr unterteilte Befehle, die in dem Unterteilungsunterschritt aus ein und demselben, eine Konstante enthaltenden Befehl erzeugt wurden, in dem Verschiebungsschritt in ein und demselben VLIW angeordnet werden, die zwei oder mehr unterteilten Befehle zu einem Befehl zusammensetzt.
  13. Verfahren nach Anspruch 12, wobei die Befehlsgrößenbeurteilung in dem Befehlsgrößenbeurteilungsunterschritt unter Verwendung einer für die Konstante angenommenen Größe durchgeführt wird und das Verfahren weiterhin Folgendes umfasst: einen Konstantengrößenbestimmungsschritt zum Verknüpfen von mehreren VLIW-Folgen und Bestimmen einer Endgröße jeder Konstante und einen Einfügungsschritt, der, wenn die Endgröße größer als die angenommene Größe ist, einen Befehl zum Speichern einer unterteilten Konstante, die einer Differenz zwischen der Endgröße und der angenommenen Größe entspricht, in dem Speicherpuffer erzeugt und den erzeugten Befehl in eine entsprechende VLIW-Folge einfügt.
  14. Verfahren nach Anspruch 13, wobei die angenommene Größe in dem Befehlsgrößenbeurteilungsunterschritt auf eine maximale Konstantengröße gesetzt wird, die von dem Prozessor handhabbar ist.
  15. Verfahren nach Anspruch 14, das weiterhin einen Schritt zum erneuten Ausführen des Unterteilungsschritts nach dem Konstantengrößenbestimmungsschritt umfasst, wobei die Befehlsgrößenbeurteilung in dem Befehlsgrößenbeurteilungsunterschritt in dem erneut ausgeführten Unterteilungsschritt unter Berücksichtigung der in dem Konstantengrößenbestimmungsschritt bestimmten Endgröße durchgeführt wird.
  16. Verfahren nach Anspruch 15, das weiterhin einen Schritt zum erneuten Ausführen des Analyseschritts und des Verschiebungsschritts nach dem erneut ausgeführten Unterteilungsschritt umfasst.
  17. Verfahren nach Anspruch 13, wobei die angenommene Größe der Konstante in dem Befehlsgrößenbeurteilungsunterschritt auf eine am häufigsten verwendete Konstantengröße gesetzt wird.
  18. Verfahren nach Anspruch 13, das weiterhin einen Schritt zum erneuten Ausführen des Unterteilungsschritts nach dem Konstantengrößenbestimmungsschritt umfasst, wobei die Befehlsgrößenbeurteilung in dem Befehlsgrößenbeurteilungsunterschritt in dem erneut ausgeführten Unterteilungsschritt unter Berücksichtigung der in dem Konstantengrößenbestimmungsschritt bestimmten Endgröße durchgeführt wird.
  19. Verfahren zum Konvertieren einer Befehlsfolge, die sich aus seriell angeordneten Befehlen (42) zusammensetzt, in eine VLIW-Folge (46) für einen Prozessor, wobei das Verfahren Folgendes umfasst: einen Unterteilungsschritt zum Unterteilen jeder Konstante in der Befehlsfolge in mehrere unterteilte Konstanten und Erzeugen von mehreren Befehlen, die jeweils eine der mehreren unterteilten Konstanten enthalten; gekennzeichnet durch einen Analyseschritt zum Analysieren von Abhängigkeitsbeziehungen zwischen jedem Befehl in der Befehlsfolge, die die erzeugten mehreren Befehle enthält, gemäß einer Ausführungsreihenfolge jedes Befehls in der Befehlsfolge und einen Verschiebungsschritt zum Verschieben von Befehlen in der Befehlsfolge in Übereinstimmung mit den analysierten Abhängigkeitsbeziehungen, um VLIWs zu erzeugen, die sich jeweils aus mehreren Befehlen zusammensetzen, die parallel ausführbar sind.
  20. Verfahren nach Anspruch 19, wobei der Unterteilungsschritt Folgendes beinhaltet: einen Befehlsgrößenbeurteilungsunterschritt (S2, S3) zum Durchführen einer Befehlsgrößenbeurteilung, ob eine Größe der Konstante zu einer Größe jedes Einheitsoperationsfelds in einem VLIW gleich oder kleiner als diese ist; und einen Unterteilungsunterschritt (S4), der, wenn die Größe der Konstante als größer als die Größe jedes Einheitsoperationsfelds beurteilt wird, die Konstante in mehrere unterteilte Konstanten unterteilt, deren Größen zu der Größe jedes Einheitsoperationsfelds gleich oder kleiner als diese sind.
  21. Verfahren nach Anspruch 20, wobei in dem Unterteilungsunterschritt (S4) ein. Befehl zum Speichern einer unterteilten Konstante, die in dem Unterteilungsunterschritt erhalten wurde, in einem Speicherpuffer des Prozessors und ein Befehl zum Verwenden der gespeicherten unterteilten Konstante erzeugt werden.
  22. Verfahren nach Anspruch 21, das weiterhin einen Zusammensetzungsschritt umfasst, der, wenn zwei oder mehr Befehle, die in dem Unterteilungsschritt erzeugt wurden, in dem Verschiebungsschritt in ein und demselben VLIW angeordnet werden, die zwei oder mehr Befehle zusammensetzt.
  23. Verfahren nach Anspruch 22, wobei die Befehlsgrößenbeurteilung in dem Befehlsgrößenbeurteilungsunterschritt unter Verwendung einer für die Konstante angenommenen Größe durchgeführt wird und das Verfahren weiterhin Folgendes umfasst: einen Konstantengrößenbestimmungsschritt zum Verknüpfen von mehreren VLIW-Folgen und Bestimmen einer Endgröße der Konstante und einen Einfügungsschritt, der, wenn die Endgröße größer als die angenommene Größe ist, einen Befehl zum Speichern einer unterteilten Konstante, die einer Differenz zwischen der Endgröße und der angenommenen Größe entspricht, in dem Speicherpuffer erzeugt und den erzeugten Befehl in eine entsprechende VLIW-Folge einfügt.
  24. Verfahren nach Anspruch 23, wobei die angenommene Größe in dem Befehlsgrößenbeurteilungsunterschritt, wenn die Endgröße noch nicht bestimmt worden ist, auf eine maximale Konstantengröße gesetzt wird, die von dem Prozessor handhabbar ist.
  25. Verfahren nach Anspruch 24, das weiterhin einen Schritt zum erneuten Ausführen des Unterteilungsschritts nach dem Konstantengrößenbestimmungsschritt umfasst, wobei die Befehlsgrößenbeurteilung in dem Befehlsgrößenbeurteilungsunterschritt in dem erneut ausgeführten Unterteilungsschritt unter Berücksichtigung der in dem Konstantengrößenbestimmungsschritt bestimmten Endgröße durchgeführt wird.
  26. Verfahren nach Anspruch 25, das weiterhin einen Schritt zum erneuten Ausführen des Analyseschritts und des Verschiebungsschritts nach dem erneut ausgeführten Unterteilungsschritt umfasst.
  27. Verfahren nach Anspruch 23, wobei die angenommene Größe der Konstante in dem Befehlsgrößenbeurteilungsunterschritt, wenn die Endgröße noch nicht bestimmt worden ist, auf eine am häufigsten verwendete Konstantengröße gesetzt wird.
  28. Verfahren nach Anspruch 23, das weiterhin einen Schritt zum erneuten Ausführen des Unterteilungsschritts nach dem Konstantengrößenbestimmungsschritt umfasst, wobei die Befehlsgrößenbeurteilung in dem Befehlsgrößenbeurteilungsunterschritt in dem erneut ausgeführten Unterteilungsschritt unter Berücksichtigung der in dem Konstantengrößenbestimmungsschritt bestimmten Endgröße durchgeführt wird.
  29. Aufzeichnungsmedium, das ein Programm zum Durrchführen eines Verfahrens nach einem der Ansprüche 1 bis 28 aufzeichnet.
  30. Aufzeichnungsmedium, das eine VLIW-Folge (202) für einen Prozessor aufzeichnet, der mehrere Befehle parallel ausführt, wobei die VLIW-Folge durch ein Verfahren nach einem der Ansprüche 1 bis 18 erzeugt wird, wobei ein erstes VLIW (480) in der VLIW-Folge eine Konstante enthält, die in einem Speicherpuffer des Prozessors gespeichert werden soll, der von mindestens einem VLIW in der VLIW-Folge implizit angezeigt wird, und ein zweites VLIW (481; 408), das auf das erste VLIW folgt und nach dem ersten VLIW ein erstes dabei ist, auf den Speicherpuffer zu verweisen, Folgendes enthält: (i) einen Befehl zum Verwenden der Konstante in dem Speicherpuffer und/oder (ii) einen Befehl, der eine Konstante enthält und zum Verwenden einer Konstante ist, die durch Zusammensetzen der in diesem Befehl enthaltenen Konstante und der Konstante in dem Speicherpuffer erhalten wird.
  31. Aufzeichnungsmedium nach Anspruch 30, wobei die in dem ersten VLIW (480) enthaltene Konstante eine Sprungadresse ist und der in dem zweiten VLIW (481) enthaltene Befehl ein Sprungbefehl ist, der keine Sprungadresse enthält.
  32. Aufzeichnungsmedium, das eine VLIW-Folge (201) für einen Prozessor aufzeichnet, der mehrere Befehle parallel ausführt, wobei die VLIW-Folge durch ein Verfahren nach einem der Ansprüche 19 bis 28 erzeugt wird, wobei die VLIW-Folge zwei oder mehr VLIWs (458, 459) enthält, die jeweils eine Konstante enthalten, die in einem Speicherpuffer des Prozessors gespeichert und zusammengesetzt werden sollen, der von mindestens einem VLIW in der VLIW-Folge implizit angezeigt wird, und ein anderes VLIW (460), das auf den zwei oder mehr VLIWs folgt und nach den zwei oder mehr VLIWs ein erstes dabei ist, auf den Speicherpuffer zu verweisen, Folgendes enthält: (i) einen Befehl zum Verwenden der zusammengesetzten Konstante in dem Speicherpuffer und/oder (ii) einen Befehl, der eine Konstante enthält und zum Verwenden einer Konstante ist, die durch Zusammensetzen der in diesem Befehl enthaltenen Konstante und der Konstanten in dem Speicherpuffer erhalten wird.
  33. Vorrichtung zum Konvertieren einer Befehlsfolge, die sich aus seriell angeordneten Befehlen (42) zusammensetzt, in eine VLIW-Folge (46) für einen Prozessor, wobei die Vorrichtung Folgendes umfasst: ein Unterteilungsmittel (12) zum Unterteilen jedes eine Konstante enthaltenden Befehls in der Befehlsfolge in mehrere unterteilte Befehle; gekennzeichnet durch ein Analysemittel (20) zum Analysieren von Abhängigkeitsbeziehungen zwischen jedem Befehl in der Befehlsfolge, die unterteilte Befehle enthält, die in dem Unterteilungsschritt erzeugt wurden, gemäß einer Ausführungsreihenfolge jedes Befehls in der Befehlsfolge und ein Verschiebungsmittel (21) zum Verschieben von Befehlen in der Befehlsfolge in Übereinstimmung mit den analysierten Abhängigkeitsbeziehungen, um VLIWs zu erzeugen, die sich jeweils aus mehreren Befehlen zusammensetzen, die parallel ausführbar sind.
  34. Vorrichtung zum Konvertieren einer Befehlsfolge, die sich aus seriell angeordneten Befehlen (42) zusammensetzt, in eine VLIW-Folge (46) für einen Prozessor, wobei die Vorrichtung Folgendes umfasst: ein Unterteilungsmittel (12) zum Unterteilen jeder Konstante in der Befehlsfolge in mehrere unterteilte Konstanten und Erzeugen von mehreren Befehlen, die jeweils eine der mehreren unterteilten Konstanten enthalten; gekennzeichnet durch ein Analysemittel (20) zum Analysieren von Abhängigkeitsbeziehungen zwischen jedem Befehl in der Befehlsfolge, die die erzeugten mehreren Befehle enthält, gemäß einer Ausführungsreihenfolge jedes Befehls in der Befehlsfolge und ein Verschiebungsmittel (21) zum Verschieben von Befehlen in der Befehlsfolge in Übereinstimmung mit den analysierten Abhängigkeitsbeziehungen, um VLIWs zu erzeugen, die sich jeweils aus mehreren Befehlen zusammensetzen, die parallel ausführbar sind.
DE69832932T 1997-08-29 1998-08-28 Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor Expired - Lifetime DE69832932T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP23514497A JP3327818B2 (ja) 1997-08-29 1997-08-29 プログラム変換装置及び記録媒体
JP23514497 1997-08-29

Publications (2)

Publication Number Publication Date
DE69832932D1 DE69832932D1 (de) 2006-02-02
DE69832932T2 true DE69832932T2 (de) 2006-07-06

Family

ID=16981713

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69832932T Expired - Lifetime DE69832932T2 (de) 1997-08-29 1998-08-28 Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor

Country Status (5)

Country Link
US (1) US6367067B1 (de)
EP (2) EP0899656B1 (de)
JP (1) JP3327818B2 (de)
KR (1) KR100496946B1 (de)
DE (1) DE69832932T2 (de)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3327818B2 (ja) 1997-08-29 2002-09-24 松下電器産業株式会社 プログラム変換装置及び記録媒体
JP2000132404A (ja) 1998-10-22 2000-05-12 Matsushita Electric Ind Co Ltd 命令列最適化装置
US6457173B1 (en) * 1999-08-20 2002-09-24 Hewlett-Packard Company Automatic design of VLIW instruction formats
GB2358491A (en) * 1999-09-03 2001-07-25 Sgs Thomson Microelectronics A relocation format for linking
US6675377B1 (en) * 1999-09-13 2004-01-06 Matsushita Electric Industrial Co., Ltd. Program conversion apparatus
JP2002091762A (ja) * 2000-09-14 2002-03-29 Denso Corp プログラム生成装置
US7331040B2 (en) * 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
GB0202728D0 (en) * 2002-02-06 2002-03-27 Transitive Technologies Ltd Condition code flag emulation for program code conversion
SE521753C2 (sv) * 2002-02-08 2003-12-02 Xelerated Ab Förfarande och system för att uppfylla realtidskrav för en dataprocessor
US8141068B1 (en) * 2002-06-18 2012-03-20 Hewlett-Packard Development Company, L.P. Compiler with flexible scheduling
EP1378824A1 (de) * 2002-07-02 2004-01-07 STMicroelectronics S.r.l. Verfahren zur Ausführung von Programmen in einem Mehrprozessorsystem, und entsprechenes Prozessorsystem
JP3847672B2 (ja) 2002-07-03 2006-11-22 松下電器産業株式会社 コンパイラ装置及びコンパイル方法
US7574583B2 (en) 2002-09-24 2009-08-11 Silicon Hive B.V. Processing apparatus including dedicated issue slot for loading immediate value, and processing method therefor
US7444620B2 (en) * 2003-02-28 2008-10-28 Bea Systems, Inc. Systems and methods for a common runtime container framework
JP2005173645A (ja) * 2003-12-05 2005-06-30 Ibm Japan Ltd プログラム開発支援装置、プログラム開発支援方法、プログラム、及び、記録媒体
JP4283131B2 (ja) * 2004-02-12 2009-06-24 パナソニック株式会社 プロセッサ及びコンパイル方法
US7401329B2 (en) * 2005-04-25 2008-07-15 Arm Limited Compiling computer programs to exploit parallelism without exceeding available processing resources
US20070083736A1 (en) * 2005-10-06 2007-04-12 Aravindh Baktha Instruction packer for digital signal processor
JP4879589B2 (ja) * 2006-01-20 2012-02-22 パナソニック株式会社 コンパイラ装置
KR20090009981A (ko) * 2006-06-15 2009-01-23 닛본 덴끼 가부시끼가이샤 프로세서 및 명령 제어 방법
JP5240200B2 (ja) * 2007-10-03 2013-07-17 日本電気株式会社 データ処理装置および方法
EP2282268B1 (de) * 2009-07-23 2012-11-21 STMicroelectronics Srl Schnittstellenvorrichtung und -verfahren, beispielsweise für System-on-Chip
JP5059174B2 (ja) * 2010-08-10 2012-10-24 株式会社東芝 プログラム変換装置、およびそのプログラム
US9477476B2 (en) * 2012-11-27 2016-10-25 Qualcomm Incorporated Fusing immediate value, write-based instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media
US9424045B2 (en) 2013-01-29 2016-08-23 Arm Limited Data processing apparatus and method for controlling use of an issue queue to represent an instruction suitable for execution by a wide operand execution unit
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9372695B2 (en) * 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9875107B2 (en) * 2015-01-19 2018-01-23 International Business Machines Corporation Accelerated execution of execute instruction target
DE102018113475A1 (de) * 2018-06-06 2019-12-12 Infineon Technologies Ag Rechenwerk zum rechnen mit maskierten daten

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2835103B2 (ja) * 1989-11-01 1998-12-14 富士通株式会社 命令指定方法及び命令実行方式
JP3004108B2 (ja) * 1991-11-27 2000-01-31 株式会社東芝 情報処理装置
JPH05197545A (ja) * 1991-12-10 1993-08-06 Mitsubishi Electric Corp マイクロコンピュータ
US5557761A (en) * 1994-01-25 1996-09-17 Silicon Graphics, Inc. System and method of generating object code using aggregate instruction movement
JP3430635B2 (ja) * 1994-06-17 2003-07-28 富士通株式会社 定数参照最適化処理装置
US5600810A (en) * 1994-12-09 1997-02-04 Mitsubishi Electric Information Technology Center America, Inc. Scaleable very long instruction word processor with parallelism matching
JPH08161169A (ja) * 1994-12-09 1996-06-21 Toshiba Corp Vliw方式の計算機システム及びvliwの解釈・実行方法
JPH08194626A (ja) * 1995-01-17 1996-07-30 Hitachi Ltd 即値生成方法
US5669001A (en) * 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US5867711A (en) * 1995-11-17 1999-02-02 Sun Microsystems, Inc. Method and apparatus for time-reversed instruction scheduling with modulo constraints in an optimizing compiler
US5826054A (en) * 1996-05-15 1998-10-20 Philips Electronics North America Corporation Compressed Instruction format for use in a VLIW processor
US5787302A (en) * 1996-05-15 1998-07-28 Philips Electronic North America Corporation Software for producing instructions in a compressed format for a VLIW processor
US5805850A (en) * 1997-01-30 1998-09-08 International Business Machines Corporation Very long instruction word (VLIW) computer having efficient instruction code format
US6219779B1 (en) * 1997-06-16 2001-04-17 Matsushita Electric Industrial Co., Ltd. Constant reconstructing processor which supports reductions in code size
US5941983A (en) * 1997-06-24 1999-08-24 Hewlett-Packard Company Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues
KR19990017608A (ko) * 1997-08-25 1999-03-15 유재희 신호 처리 프로세서의 연산 유닛 및 입출력 장치
JP3327818B2 (ja) 1997-08-29 2002-09-24 松下電器産業株式会社 プログラム変換装置及び記録媒体

Also Published As

Publication number Publication date
JP3327818B2 (ja) 2002-09-24
EP0899656A2 (de) 1999-03-03
KR19990024036A (ko) 1999-03-25
US6367067B1 (en) 2002-04-02
EP0899656B1 (de) 2005-12-28
EP1628213A2 (de) 2006-02-22
KR100496946B1 (ko) 2005-09-09
EP0899656A3 (de) 2002-01-02
JPH1173325A (ja) 1999-03-16
DE69832932D1 (de) 2006-02-02
EP1628213A3 (de) 2009-01-07

Similar Documents

Publication Publication Date Title
DE69832932T2 (de) Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor
DE69122294T2 (de) Verbindungstechnik für Prozessoren, die auf Befehlsebene parallel arbeiten
DE69434967T2 (de) Programmumsetzungseinheit und verbesserter Prozessor für Adressierung
DE69909945T2 (de) Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen
DE69924857T2 (de) Programm-kode-umwandlung
EP0689694B1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE68926956T2 (de) Anordnung zur teilung eines generischen kodes für ein digitales datenverarbeitungssystem
DE68921906T2 (de) Verfahren für ein Multiprozessorsystem mit sich selbst zuordnenden Prozessoren.
DE69735342T2 (de) Binärprogrammkonvertiergerät und -verfahren
DE69938218T2 (de) Vorrichtung und Verfahren zum Laden eines Java Anwendungsprogramms
DE68925646T2 (de) Pipeline-multiprozessorsystem
DE69123629T2 (de) Maschinenarchitektur für skalaren Verbundbefehlssatz
DE68925523T2 (de) Erzeugung eines wirksamen Kodes für einen unähnliche Registrierräume enthaltenden Computer
DE3750515T2 (de) Verfahren zur Zugriffssteuerung einer Datenbasis.
DE69534113T2 (de) Kompression der Befehlswörter eines Rechners
DE19815865B4 (de) Kompiliersystem und Verfahren zum rekonfigurierbaren Rechnen
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE69030425T2 (de) Verfahren und Vorrichtung zur Kompilierung von Rechnerprogrammen mit Registerzuweisung zwischen Prozeduren
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE68928340T2 (de) Fliessband-Datenprozessor
DE69722138T2 (de) Code-Optimierer für Pipeline-Rechner
DE3688171T2 (de) Nach Ziel anpassbarer Kompiler.
EP0502857A1 (de) Verfahren zur dynamischen bindung von definierbaren programmelementen eines interaktiven datenverarbeitungssystems.
DE2459006A1 (de) Verfahren und einrichtung zur entwicklung absoluter adressen bei segmentadressierung
DE19945992A1 (de) Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: PANASONIC CORP., KADOMA, OSAKA, JP