DE102015101541A1 - Prozessor mit granulärer addier-direktwert-fähigkeit & verfahren - Google Patents

Prozessor mit granulärer addier-direktwert-fähigkeit & verfahren Download PDF

Info

Publication number
DE102015101541A1
DE102015101541A1 DE102015101541.2A DE102015101541A DE102015101541A1 DE 102015101541 A1 DE102015101541 A1 DE 102015101541A1 DE 102015101541 A DE102015101541 A DE 102015101541A DE 102015101541 A1 DE102015101541 A1 DE 102015101541A1
Authority
DE
Germany
Prior art keywords
register
instruction
instructions
processor
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE102015101541.2A
Other languages
English (en)
Inventor
c/o Imagination Technologie Sudhakar Ranganathan
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.)
MIPS Tech LLC
Original Assignee
Imagination Technologies 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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of DE102015101541A1 publication Critical patent/DE102015101541A1/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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
    • 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
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3557Indexed addressing using program counter as base address
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/505Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Ein Prozessor kann einen Doppelwort-großen Speicherraum (beispielsweise 64-Bit-Adressierung) adressieren. Der Prozessor kann ausgelegt sein, eine Reihe von drei Befehlen zu dekodieren, die 48 Bits eines beliebigen 64-Bit-Direktwertes veranlassen, in einem Register konstruiert zu werden und einen vierten Befehl, der den 64-Bit-Wert ergänzt und zu einer Speicherstelle verzweigt oder darauf zugreift, die unter Verwendung des 64-Bit-Werts im Register bestimmt wird. Ein separater Befehl in einer Befehlssatzarchitektur kann für ein nicht-zerstörendes Schreiben von 16-Bit-Teilen eines 16-Bit-Registers bereitgestellt werden.

Description

  • HINTERGRUND
  • Gebiet:
  • In einem Aspekt bezieht sich das Folgende auf eine Mikroprozessorarchitektur, und in einem spezielleren Aspekt auf mikroarchitektonische Implementierungen von offenbarten Prozessorarchitektur-Merkmalen.
  • Stand der Technik:
  • Eine Architektur eines Mikroprozessors bezieht sich auf einen Befehlssatz, der von einem Mikroprozessor durchgeführt werden kann, und was diese Befehle veranlassen, den Mikroprozessor zu tun. Architekturen von Mikroprozessoren können gemäß einer Vielfalt an charakteristischen Eigenschaften kategorisiert werden. Ein Hauptmerkmal besteht darin, ob der Befehlssatz als ”komplex” oder als von ”reduzierter Komplexität” angesehen wird. Die Begriffe Rechner mit komplexem Befehlssatz (Complex Instruction Set Computer) (CISC) bzw. Rechner mit reduziertem Befehlssatz (Reduced Instruction Set Computer) (RISC) wurden herkömmlicherweise verwendet, um auf diese Architekturen zu verweisen. Heute weisen viele moderne Prozessorarchitekturen Eigenschaften auf, die herkömmlicherweise lediglich mit CISC oder RISC Architekturen assoziiert wurden. In der Praxis besteht ein wesentlicher Bedeutungsunterschied zwischer einer RISC oder CISC Architektur darin, ob arithmetische Befehle Speicheroperationen ausführen.
  • Ein RISC Befehlssatz kann erfordern, dass alle Befehle genau die gleiche Anzahl an Bits (beispielsweise 32 Bits) aufweisen. Es kann auch erforderlich sein, dass diese Bits einem eingeschränkten Formatsatz entsprechend zugewiesen werden. Beispielsweise kann es erforderlich sein, dass alle Operationscodes von jedem Befehl die gleiche Anzahl an Bits (beispielsweise 6) aufweisen. Daraus ergibt sich, dass in einer solchen Architektur bis zu 2^6 (64) eindeutige Befehle bereitgestellt werden könnten. In einigen Fällen kann ein Hauptoperationscode einen Befehlstyp festlegen, und eine Anzahl an Bits kann als Funktionsidentifikator verwendet werden, der zwischen verschiedenen Varianten von solchen Befehlen unterscheidet (beispielsweise können alle Addier-Befehle den gleichen 6-stelligen Hauptoperationscode-Identifikator haben, aber jeweils unterschiedliche Arten von Addier-Befehlen, beispielsweise ein Addieren, das einen Überlauf ignoriert und ein Addieren, das einen Überlauf berücksichtigt).
  • Verbleibende Bits (abgesehen von den ”Operationscode” Bits) können gemäß identifizierenden Quelloperanden, einem Resultat Ergebnisziel oder Konstanten zugeordnet werden, die bei der Ausführung der Operation verwendet werden sollen, die durch die ”Operationscode”-Bits identifiziert wird. Eine arithmetische Operation kann beispielsweise 6 Bits für einen Operationscode verwenden, weitere 6 Bits für einen Funktionscode (hier kollektiv die ”Operationscode”-Bits), und dann ein Ziel- und zwei Quellenregister identifizieren, wobei jeweils 5 Bits verwendet werden. Obwohl es für eine RISC Architektur erforderlich sein kann, dass alle Befehle gleich lang sind, kann es sein, dass es nicht für jeden Befehl erforderlich ist, dass alle Bits voll besetzt sind, wenn auch alle Befehle noch immer ein Minimum von 32-Bit-Speicherung verwenden.
  • ZUSAMMENFASSUNG
  • Ein Aspekt der Offenbarung bezieht sich auf ein durch einen Prozessor implementiertes Verfahren. Das Verfahren umfasst ein Eingeben von vier Befehlen und das Dekodieren von jedem der vier Befehle, um einen jeweiligen Direktwert in jedem der vier Befehle zu identifizieren, ein Zielregister und einen jeweiligen anderen Teil des Zielregisters. Das Verfahren ermöglicht auch das Addieren aller Direktwerte aus den vier Befehlen zum aktuellen Inhalt der jeweiligen anderen Teile des durch jeden der vier Befehle festgelegten Zielregisters, und das anschließende Umleiten der Programmausführung an eine Speicheradresse, die unter Verwendung eines aus dem Addieren resultierenden Werts bestimmt wird.
  • In einem Beispiel können die vier Befehle der Reihe nach eingegeben werden, und ein letzter der vier Befehle identifiziert einen untersten Teil des Zielregisters und legt eine Verzweigung und/oder einen Sprung zu einer Zieladresse fest, die aus einem aus dem Addieren resultierenden Wert bestimmt wird. Beispielsweise können die ersten drei der Befehle für das Lesen eines aktuellen Wertes im Zielregister zuständig sein, wobei das Addieren in einer Art und Weise ausgeführt wird, dass der Inhalt von Teilen des von diesem Befehl nicht adressierten Zielregisters nicht zerstört wird, und der vierte Befehl in der Folge liest einen aktuellen Wert im Zielregister, führt das Addieren und entweder eine bedingte Verzweigung oder einen Sprung mit einer Zieladresse aus, die aus einem Ergebnis des Addierens berechnet wird.
  • Ein weiterer Aspekt der Offenbarung betrifft ein Erzeugen von Befehlen, die gemäß obigem Verfahren verarbeitet werden können. Ein Beispiel eines solchen Verfahrens beinhaltet ein Bestimmen eines Zielortes, an den die Programmsteuerung übertragen werden soll, von einem Ausgangsort, und ein Bestimmen eines auf dem Zielort und dem Ausgangsort basierenden Direktwertes. Das Verfahren umfasst ein Bereitstellen einer Befehlsfolge, wobei jeder Befehl Teile des bestimmten Direktwertes umfasst, einen entsprechenden anderen Teil eines Registers anzeigt, und Opcode-Beschreibungsdaten, derer sich der Prozessor bedienen soll, um eine Ausführungseinheit zu konfigurieren, um die dazugehörigen Teile des bestimmten Direktwertes bei jedem Befehl der Folge zum Inhalt beim jeweiligen anderen Teil des Registers zu addieren. Ein endgültiger Befehl in der Befehlsfolge umfasst Daten, die vom Prozessor interpretierbar sind, um das Übertragen der Programmsteuerung auf eine Speicheradresse zu initiieren, die basierend auf einem Wert, der aus der Ausführung der Befehlsfolge resultiert, bestimmt wird.
  • Ein weiterer Aspekt der Offenbarung bezieht sich auf ein Verfahren der Ausführung in einem Mikroprozessor, das das Erhalten von vier Befehlen von einer Befehlsquelle umfasst, die Dekodierung von drei der vier Befehle als Operationen, und jeder davon bewirkt, dass der Prozessor einen Direktwert zu einem Register an einer durch den Befehl angegebenen entsprechenden Stelle im Register addiert. Der Direktwert hat weniger Bits als eine Bit-Größe des Registers. Das Verfahren umfasst ein Ausführen der drei Befehle und dann ein Ausführen des vierten Befehls durch Addieren eines durch den vierten Befehl festgelegten Direktwertes zu einem Wert im Register, der sich aus dem Ausführen der drei Befehle ergibt, und anschließend eine Verwendung des Direktwertes bei der Bestimmung einer Speicheradresse für zumindest eine einer Verzweigungsoperation, einer Sprungoperation, einer Ladeoperation und einer Speicheroperation.
  • Ein weiterer Aspekt der Offenbarung beinhaltet einen Prozessor, umfassend eine Dekodiereinheit, die zur Dekodierung von Daten konfiguriert ist, welche von einer Befehlsquelle bereitgestellte Befehle darstellen. Die Befehle entsprechen einer Befehlssatzarchitektur, die einen Addier-Direktbefehlssatz enthält, die jeweils ein Register und/oder einen Direktwert festlegen. Die Dekodiereinheit ist konfiguriert, Befehle aus dem Addier-Direktbefehlssatz zu dekodieren, als Anzeige für einen jeweiligen eigenen Teil des Registers, zu dem der Direktwert dieses Befehls addiert werden soll, und dann das Ergebnis des Addierens zu speichern. Der Addier-Direktbefehlssatz richtet sich an insgesamt mindestens drei von vier eigenen Teilen des Registers. Eine Ausführungseinheit ist mit der Dekodiereinheit verbunden und ist zur Ausführung von Operationen gemäß den von der Dekodiereinheit erhaltenen Daten konfiguriert.
  • In einem Beispiel legt der Addier-Direktbefehlssatz jeweils ein Quellenregister und ein Zielregister und den Direktwert fest. Die Dekodiereinheit ist zur Dekodierung der Befehle dekodiert, als Anzeige für einen entsprechenden Teil des Quellenregisters, zu dem der Direktwert dieses Befehls in nicht zerstörerischer Weise addiert werden soll, und anschließend ein Ergebnis des Addierens im Zielregister zu speichern. In einem Beispiel umfassen die Addier-Direktbefehle einen Addier-Direktbefehl, der ein oberes Quartil des Registers anzeigt, einen Addier-Direktbefehl, der ein drittes Quartil des Registers anzeigt, und einen Addier-Direktbefehl, der das zweite Quartil des Registers anzeigt.
  • Ein weiterer Aspekt der Offenbarung bezieht sich auf einen Prozessor, der eine Registerdatei mit einer Mehrzahl an Registern umfasst, wobei die Mehrzahl an Registern Allzweckregister einer Größe, eine mit der Registerdatei verbundene Ausführungseinheit, wobei die Ausführungseinheit in der Lage ist, ein Addieren eines Direktwertes in nicht zerstörerischer Weise auszuführen, der ein Viertel der Größe beträgt, mit jedem eigenen Quartil aller Allzweckregister, und eine Dekodiereinheit umfasst, die konfiguriert ist, einen separaten Befehl zu dekodieren, um ein Addieren des Direktwertes mit jedem eigenen Quartil eines durch diesen Befehl festgelegten Allzweckregisters auszuführen.
  • Ein Aspekt beinhaltet auch ein Verfahren einer befehlsgesteuerten Ausführung in einem Mikroprozessor, der in der Lage ist, Registerteile von halber Wortgröße zu manipulieren. Das Verfahren umfasst ein Dekodieren und Ausführen von drei Befehlen, was den Mikroprozessor dazu veranlasst, Teile eines beliebigen Wertes in entsprechenden Teilen eines Registers von doppelter Wortgröße einzubringen; und das Dekodieren und Ausführen eines vierten Befehls, der den beliebigen Wert im Register ergänzt und ein Programmzählerregister auf einen bestimmten Wert einstellt, der auf dem im Register ergänzten Wert basiert.
  • Ein Aspekt betrifft ein Verfahren befehlsgesteuerter Ausführung in einem Mikroprozessor, das im Mikroprozessor ein Dekodieren eines Befehls in Daten umfasst, die eine Programmzählerreferenz, einen Registeridentifikator, einen Direktwert und einen Opcode-Identifikator anzeigen, und das den Opcode-Identifikator interpretiert, als Anzeige dafür, dass der Direktwert Vorzeichen-erweitert, Wort-ausgerichtet sein soll und zu einem aktuellen Wert des Programmzählers addiert werden soll, und ein Ergebnis des Addierens in einem durch die Verwendung des Register-Identifikators identifizierten Register gespeichert werden soll. Ein Prozessor kann ausgelegt werden, obiges Verfahren zu implementieren.
  • Eine Lade-Speicher-Einheit (Load Store Unit) (LSU) kann mit einer Registerdatei verbunden und konfiguriert werden, das Ergebnis zu empfangen und das Ergebnis im durch den Register-Identifikator identifizierten Register zu speichern. Eine Registerumbenennungseinheit kann konfiguriert werden, um ein durch den Register-Identifikator identifiziertes Architekturregister einem physischen Register in einer Registerdatei zuzuordnen.
  • Ein Aspekt der Offenbarung bezieht sich auf ein Verfahren betreffend das Verarbeiten von maschinenausführbaren Befehlen in einem Prozessor, umfassend: das Zugreifen auf Daten, die einen Befehl darstellen, der im Prozessor ausgeführt werden soll; Parsen der Daten, die den Befehl darstellen, um einen Opcode-Identifikator, einen Erstes-Register-Identifikator, einen Zweites-Register-Identifikator und einen Direktwert zu erhalten; Vergleichen eines Wertes aus dem Register, das durch den Erstes-Register-Identifikator mit einer vorbestimmten Konstante identifiziert wird; Anzeigen, ob der Vergleich einer durch den Befehl festgelegten Bedingung entspricht oder nicht; und Einrichten eines Programmzählers, der auf einer Verzweigungszieladresse basiert, die dazu bestimmt ist, den Direktwert und einen Wert aus dem durch den Zweites-Register-Identifikator identifizierten Register zu verwenden, in Reaktion auf den Vergleich, der der durch den Befehl festgelegten Bedingung entspricht.
  • Das Verfahren kann ferner ein Berechnen der Verzweigungszieladresse umfassen, indem der Direktwert zu einem Wert aus dem Inhalt des durch den Zweites-Register-Identifikator identifizierten Registers addiert wird. Der Befehl kann festlegen, dass die Bedingung darin besteht, ob der Wert im durch den Erstes-Register-Identifikator identifizierten Register gleich null ist.
  • Ein Aspekt der Offenbarung bezieht sich auf einen Prozessor, der eine Befehlseinheit, die konfiguriert ist, einen Befehl in Daten zu dekodieren, die einen Erstes-Register-Indentifikator, einen Zweites-Register-Indentifikator, einen Direktwert und einen Opcode-Indentifikator anzeigen; und eine Ausführungseinheit umfasst, die konfiguriert ist, in Reaktion auf Daten aus der Befehlseinheit, einen Wert aus dem durch den Erstes-Register-Indentifikator mit einer vorgegebenen Konstanten identifizierten Register zu vergleichen, um anzuzeigen, ob der Vergleich einer durch den Befehl festgelegten Bedingung entspricht oder nicht, wobei die Befehlseinheit konfiguriert ist, einen Programmzähler einzustellen, der auf einer Verzweigungszieladresse basiert, die unter Verwendung des Direktwerts und eines Werts aus dem durch den Zweites-Register-Identifikator identifizierten Register bestimmt wird, in Reaktion auf den Vergleich, der der durch den Befehl festgelegten Bedingung entspricht.
  • Ein Aspekt der Offenbarung bezieht sich auf ein Verfahren betreffend das Verarbeiten von maschinenausführbaren Befehlen in einem Prozessor. Das Verfahren ermöglicht ein Zugreifen auf Daten, die einen Befehl darstellen, der im Prozessor ausgeführt werden soll. Der Befehl wird dekodiert, um eine Referenz zu einem Register in einem Architekturregistersatz festzulegen, auf den ein Zugreifen mittels eines mit einer Benutzer-Modus-Berechtigung auszuführenden Codes beschränkt ist. Wird der Befehl mit der Benutzer-Modus-Berechtigungsebene (beispielsweise Ausführen des Codes in einem Benutzer-Modus oder in einem nicht berechtigtem Modus) assoziiert, dann wird die Referenz auf das Register als Referenz auf ein Register interpretiert, das einen Programmzählerwert speichert, und das Verfahren stellt dann eine durch den Befehl festgelegte Operation bereit, wobei der Programmzählerwert verwendet wird. Ein Beispiel für eine solche Operation ist eine Verzweigung hinsichtlich des Programmzählers. Ein Programmcode kann auf einem nicht-transitorischen Medium bereitgestellt werden, das Programmzähler-relative Befehle codiert, indem auf ein vorgegebenes Register verwiesen wird, das andernfalls einem Benutzer-Modus-Code nicht zugänglich wäre. Ein weiterer Aspekt der Offenbarung ist ein Prozessor mit einem Befehls-Dekodierer, der Befehle gemäß einer Implementierung des oben beschriebenen Verfahrens dekodiert.
  • Ein Aspekt der Offenbarung bezieht sich auf ein Verfahren betreffend ein Erstellen von maschinenausführbaren Befehlen, umfassend: Zugreifen auf einen Quellcode, der einen Befehl enthält, der eine Operation festlegt, die unter Verwendung eines Programmzählers als eine Eingabe und durch Erstellen von binären maschinenausführbaren Daten, die den Befehl darstellen, ausgeführt werden soll, wobei die binären maschinenausführbaren Daten eine Referenz auf ein Register innerhalb eines Architekturregistersatzes eines Prozessors enthalten, der in der Lage ist, den Befehl auszuführen, wobei das Register ein Register ist, das für eine unter der Kernel-Modus-Berechtigung laufende Software reserviert ist.
  • KURZE BESCHREIBUNG DER ZEICHNUNG
  • 1A und 1B stellen Blockschaltbilder dar, die sich auf einen Beispiel-Prozessor beziehen, der Aspekte der Offenbarung implementieren kann;
  • 2 beschreibt ein Beispiel zur Gestaltung eines 64-Bit-Direktwertes, wobei eine Befehlsfolge gemäß der Offenbarung verwendet wird;
  • 3 stellt ein exemplarisches Verfahren zur Bildung eines 64-Bit-Direktwertes dar, unter Verwendung einer Befehlsfolge gemäß der Offenbarung;
  • 4 stellt ein exemplarisches Verfahren zur Bildung eines 64-Bit-Direktwertes dar, unter Verwendung einer Befehlsfolge gemäß der Offenbarung;
  • 5 stellt ein funktionelles Blockschaltbild für einen Prozessor dar, der Befehle gemäß der Offenbarung implementiert;
  • 6 stellt ein Verfahren dar, durch das Befehle sich auf einen Programmzählerwert beziehen können, wobei ein Alias-Register verwendet wird;
  • 7 stellt ein funktionelles Blockschaltbild für einen Prozessor dar, der Befehle gemäß der Offenbarung implementiert;
  • 8 stellt ein durch einen Prozessor implementierbares Beispiel-Verfahren dar, der ein Addieren mit einem Verzweigung-bei-Überlauf-Befehl gemäß der Offenbarung ausführt;
  • 9A und 9B stellen ein funktionelles Blockschaltbild für einen Prozessor dar, der ein Addieren mit einem Verzweigung-bei-Überlauf-Befehl gemäß der Offenbarung implementiert;
  • 10 stellt ein Beispielverfahren betreffend der Erstellung eines maschinenausführbaren Codes dar, der Befehle gemäß der Offenbarung enthält;
  • 11 stellt ein Blockschaltbild eines Compilers dar, der Assembler-Codes, Objektcodes und Codes, beispielsweise Bytecodes, die in einer VM interpretiert oder zusammengestellt werden können, erstellen kann;
  • 12 stellt ein Software-orientiertes Blockschaltprogramm einer Maschine dar, die eine virtuelle Maschine implementiert, die Bytecodes und auch Anwendungen in Native-Codes und anderen Codes auf Ausführungseinheiten ausführen kann; und
  • 13 stellt ein Blockschaltbild eines exemplarischen Hardware-orientierten Blockschaltbilds einer Maschine dar, die Aspekte der Offenbarung implementieren kann.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die folgende Offenbarung verwendet Beispiele, die sich grundsätzlich auf einen RISC-Befehlssatz beziehen, und, genauer gesagt, auf Aspekte einer MIPS-Prozessorarchitektur. Die Verwendung solcher Beispiele schränkt die Anwendbarkeit der Offenbarung auf andere Prozessorarchitekturen und Implementierungen davon nicht ein.
  • Wie oben einleitend angeführt, weist jeder von einer Prozessorarchitektur gestützte Befehl einen Teil an Bits auf, die verfügbar sind, um die genaue Operation, die für einen gegebenen Befehl ausgeführt werden soll, zu identifizieren. Diese Anzahl an Bits ist durch eine Vielzahl an praktischen Erwägungen eingeschränkt. Eine Erwägung betrifft die Befehlslänge; ein 32-Bit-Befehl erfordert weniger Speicherraum als ein 64-Bit-Befehl. Eine Anzahl an Bits, die für die Identifizierung der Quellen- und Zielregister erforderlich sind, hängt von einer Anzahl von Architekturregistern ab, die unterstützt werden sollen, was sich dann darauf auswirkt, wie viele Bits für andere Zwecke übrig bleiben. Eine Komplexität an Logik, die erforderlich ist, um Befehle zu dekodieren, kann auch ein Faktor sein; beispielsweise eine Auswahl dahingehend, welche Operationscodes identifizieren, welche Befehle die Komplexität und allumfassende Effizienz der Dekodierlogik beeinflussen können.
  • Abgesehen von den technischen Bedenken, ist die Prozessorarchitekturauslegung auch von anderen Erwägungen beeinflusst. Eine wesentliche Überlegung ist die Unterstützung für vorangegangene Generationen einer vorgegebenen Prozessorarchitektur. Die Notwendikeit, Codes für eine neue Generation einer bestehenden Prozessorarchitektur wieder zusammenzustellen kann eine Annahme seitens der Kunden hemmen und erfordert mehr das Unterstützen der Infrastruktur als einer Prozessorarchitektur, die eine Rückwärts-Kompatibilität aufrechterhält. Um eine Rückwärts-Kompatibilität aufrechtzuerhalten, sollte die neue Prozessorarchitektur die gleichen Operationen für einen vorgegebenen Objektcode wie die vorangegangene Generation ausführen. Das bedeutet, dass die bestehenden Operationscodes (beispielsweise die Operationscodes und andere funktionelle Schalter oder Modifikatoren) in der neuen Prozessorarchitektur nicht verändert werden können. Da das Berechnen mit der Zeit einer Veränderung bedarf, kann es wünschenswert sein, Befehle hinzuzuaddieren, um gewisse Fähigkeiten zu unterstützen; beispielsweise Integer und Floating Point Single Instruction Multiple Data(SIMD)-Befehle zur Media-Processing-Beschleunigung.
  • 1A stellt ein Beispiel-Diagramm funktionaler Elemente eines Prozessors 50 dar, das Aspekte der Offenbarung implementieren kann. Die Beispiel-Elemente des Prozessors 50 werden zuerst vorgestellt und dann gegebenenfalls genauer beschrieben. Dieses Beispiel betrifft einen Prozessor, der zu einer Außer-Betrieb-(Out-Of-Order) Ausführung in der Lage ist; offenbarte Aspekte können jedoch in einer In-Betrieb-(In-Order)Prozessor-Implementierung verwendet werden. Beispielsweise stellt 1A funktionale Elemente einer mikroarchitektonischen Implementierung der Offenbarung dar, andere Implementierungen sind jedoch möglich. Auch können andere Prozessorarchitekturen Aspekte der Offenbarung implementieren. Die Namen, die einigen der in 1A dargestellten funktionalen Elemente gegeben sind, mögen sich zwar unter bestehenden Prozessorarchitekturen unterscheiden, diejenigen Fachleute mit gewöhnlichen Kenntnissen würden dieser Offenbarung jedoch entnehmen können, wie die Offenbarung auf verschiedenen Prozessorarchitekturen implementiert wird, einschließlich jener Architekturen, die auf schon bestehenden Architekturen basieren und sogar auf einer völlig neuen Architektur.
  • Der Prozessor 50 umfasst eine Abrufeinheit 52, die mit einem Befehlscache 54 verbunden ist. Der Befehlscache 54 ist mit einer Dekodier- und Umbenennungseinheit 56 verbunden. Die Dekodier- und Umbenennungseinheit 56 ist mit einer Befehlswarteschlange 58 verbunden, und auch mit einem Verzweigungsprädiktor, der einen Befehlübersetzungspuffer (instruction Translation Lookaside Buffer) (iTLB) 60 umfasst. Die Befehlswarteschlange 58 ist mit einem Umordnungspuffer (ReOrder Buffer) (ROB) 62 verbunden, der mit einer Quittierungseinheit 64 verbunden ist. Der ROB 62 ist verbunden mit (einer) Reservierungsstation(en) 68 und mit einem Lade-Speicher-Puffer (Load/Store Buffer) (LSB) 66. (Die) Reservierungsstation(en) 68 ist/sind mit der Ausführung-in-anderer-Reihenfolge-als-im-Programmcode-Pipeline (Out of Order (OO) execution pipeline(s)) 70 verbunden. (Die) Ausführungspipeline(s) 70 und der LSB 66 sind jeweils mit einer Registerdatei 72 verbunden. Die Registerdatei 72 ist mit (einem) L1 Datencache(s) 74 verbunden. L1 Cache(s) 74 sind mit L2 Cache(s) 76 verbunden. Der Prozessor 50 kann auch Zugriff auf weitere Speicherhierarchieelemente 78 haben. Die Abrufeinheit 52 erhält Befehle von einem Speicher (beispielsweise 12 Cache 76, der ein Cache sowohl für Daten als auch Befehle sein kann). Die Abrufeinheit 52 kann Anordnungen von einem Verzweigungsprädiktor 60 dahingehend erhalten, welche Befehle abgerufen werden sollen.
  • Funktionale Elemente des in 1A dargestellten Prozessors 50 können in verschiedenen Implementierungen verschieden groß und verschieden angeordnet sein. Beispielsweise kann die Abrufeinheit 52 jeweils 1, 2, 4, 8 oder mehr Befehle abrufen. Die Dekodier- und Umbenennungseinheit 56 können eine unterschiedliche Anzahl an Umbenennungsregistern unterstützen, und Warteschlange 58 kann eine unterschiedliche Höchstanzahl von Eingängen unter den Implementierungen unterstützen. Der ROB 62 kann unterschiedliche Größen an Befehlsfenstern unterstützen, während die Reservierungsstation(en) 68 in der Lage sein kann/können, eine unterschiedliche Anzahl an Befehlen für Operanden warten zu lassen, und in ähnlicher Weise kann der LSB 66 in der Lage sein, eine unterschiedliche Anzahl an ausstehenden Lese- und Schreibvorgängen zu unterstützen. Der Befehlscache 54 kann verschiedene Cache-Ersetzungsalgorithmen einsetzen, und gleichzeitig mehrere Algorithmen, für verschiedene Teile des Cache 54. Eine Definition der Tauglichkeit von verschiedenen mikroarchitektonischen Elementen erfordert eine Vielfalt an Kompromissen, die über den Schutzbereich der vorliegenden Offenbarung hinausgehen.
  • Implementierungen des Prozessors 50 können als Einfach-Strang konzipiert sein oder sie können Mehrfach-Stränge unterstützen. Implementierungen können auch Single Instruction Multiple Data(SIMD)-Ausführungseinheiten aufweisen. Ausführungseinheiten können Integer Operationen, Floating Point Operationen oder beide unterstützen. Zusätzliche Funktionseinheiten können für verschiedene Zwecke bereitgestellt werden. Beispielsweise können Encryption Offload Engines bereitgestellt werden. 1A wurde bereitgestellt, um einen Kontext für Aspekte der Offenbarung, die folgen, zu erzeugen und schließt keine dieser zusätzlichen Funktionseinheiten aus.
  • Einige Teile oder alle Elemente des Prozessors 50 können sich auf einem einzigen Halbleiter-Nacktchip befinden. In einigen Fällen können sich Speicherhierarchieelemente 78 auf einem weiteren Nacktchip befinden, der unter Verwendung eines Halbleiterverfahrens hergestellt wird, das genauer gesagt für die verwendete Speichertechnologie entworfen ist (beispielsweise DRAM). In einigen Fällen könne einige Teile von DRAM auf dem gleichen Nacktchip wie die anderen Elemente und anderen Teile auf einem weiteren Nacktchip aufgefunden werden. Das ist eine nicht erschöpfende Aufzählung von Gestaltungsmöglichkeiten, die für eine bestimmte Implementierung des Prozessors 50 gewählt werden können.
  • 1B zeigt, dass die Registerdatei 72 des Prozessors 50 32 Register umfassen kann. Jedes Register kann durch einen binären Code, der mit diesem Register assoziiert wird, identifiziert werden. In einem einfachen Beispiel identifiziert 00000b ein Register 0, 11111b ein Register 31, und Register dazwischen werden entsprechend nummeriert. Der Prozessor 50 führt eine Berechnung gemäß den durch einen Befehlsstrom bereitgestellen, spezifischen Konfigurationsinformationen aus. Diese Befehle haben ein durch die Architektur des Prozessors festgelegtes Format. Ein Befehl kann ein oder mehrere Quellenregister festlegen, und ein oder mehrere Zielregister für eine vorgegebene Operation. Die binären Codes für die Register werden innerhalb der Befehle verwendet, um verschiedene Register zu identifizieren. Jene Register, die durch Befehle identifiziert werden können, können als ”Architekturregister” bekannt sein, die einen großen Teil, aber nicht notwendigerweise den ganzen, der Beschaffenheit der für die Ausführung des Codes verfügbaren Maschine ausmachen. Implementationen eines bestimmten Architekturprozessors können eine große Anzahl an physischen Registern unterstützen. Das Vorhandensein von einer großen Anzahl an physischen Registern erlaubt eine spekulative Ausführung von Befehlen, die sich auf die gleichen Architekturregister beziehen. Registerdatei 72 kann eine unterschiedliche Anzahl und Art an Ports in unterschiedlichen Implementierungen haben. Beispielsweise können einige Implementationen zwei Ports unterstützen, während andere mehr unterstützen können. Einige Implementierungen können bestimmungsgemäße Read Ports und Write Ports aufweisen.
  • Befehle können unterschiedliche Formate aufweisen. In einigen Fällen kann ein Befehl eine Kategorie von Operationen festlegen, die den 6-Bit-Hauptoperationscode-Identifikator verwenden, und dann ein Funktions-Code-Feld enthalten, das die auszuführende, spezifische Operation festlegt. Beispielsweise können alle Additions-Operationen durch den gleichen 6-Bit-Hauptoperationscode-Identifikator identifiziert werden, die Funktionscodes jedoch werden variieren. Beispielsweise kann eine Additions-Operation eine Überlauf-Ausnahme ausführen, während eine andere Addition dies nicht tut. Diese können unter Verwendung unterschiedlicher Funktionscodes identifiziert werden. In dieser Offenbarung werden diese unterschiedlichen Felder zusammengefasst als ”Operationscode-Identifikator” (Opcode-Identifikator) bezeichnet, und dieser Begriff bezieht sich auf den Haupt-Opcode-Identifikator allein oder mit einem entsprechenden Funktionscode, je nach Bedarf im entsprechenden Kontext.
  • In die Dekodier- und Umbenennungseinheit 56 geladene binäre Daten (Maschinencode) können gemäß des Opcode-Identifikator-Teils von jedem Befehl interpretiert werden. Sind Befehle alle von der gleichen Länge, ist ein Parsen der binären Daten nicht erforderlich, um Befehlsgrenzen innerhalb eines vorgegebenen Datensatzes festzusetzen. Die unterschiedliche Verwendung der in jedem Befehl zur Verfügung stehenden Bits kann jedoch variieren. Beispielsweise können manche Befehle zwischen einem und drei Registern festlegen, und 0 und mehr Zwischenwerte. Auch werden, in Abhängigkeit vom Opcode, verschiedene Funktionselemente verschiedene, zu einem gegebenen Befehl zugehörige Datenanteile erhalten und verarbeiten müssen. Weitere Details betreffend Beispiele, wie unterschiedliche Arten von Befehlen gemäß der Offenbarung verarbeitet werden können, folgen. Scheduler Logik innerhalb eines Prozessors, der Aspekte der Offenbarung implementiert, kann festlegen, wie im Prozessor vorhandene Ressourcen verwendet werden können, um jeden Befehl auszuführen; eine solche Logik kann auch Ressourcen berücksichtigen, die für die Vollendung der Ausführung von anderen Befehlen erforderlich sind, sodass eine Befehls-Ebenen-Parallelität in effizienter Weise bereitgestellt werden kann.
  • Befehle zur Erstellung von großen beliebigen Werten
  • Moderne Rechensysteme weisen viel mehr Speicher im Vergleich zu jenem Speicherumfang auf, der bei der Gestaltung der meisten RISC-Rechnerarchitekturen vorhanden war. Beispielsweise ist es nicht ungewöhnlich, tragbare Rechner zu finden, die sechzehn oder mehr Gigabytes Direktzugriffsspeicher (Random Access Memory) (RAM) aufweisen, während Hochleistungsrechner 32, 64, 128, 256 oder mehr Gigabytes RAM aufweisen können. In einigen Rechensystemen wird ein größerer Adressumfang unter Verwendung einer 64-Bit-Adressierung unterstützt. Und obwohl mehr Prozessorarchitekturen eine 64-Bit-Adressierung unterstützen, bleiben Befehle, die für mit dem Speicherzugriff in Verbindung stehenden Aufgaben verfügbar sind, größtenteils unverändert.
  • Soll ein Programm sich von einem aktuellen Programmzähler woanders hin verzweigen oder springen, besteht beispielsweise eine Methode, die Zieladresse, zu der die Verzweigung oder der Sprung gemacht werden soll (allgemeiner eine Veränderung im Programmzähler), festzulegen, darin, einen Direktwert innerhalb des Verzweigungs- oder Sprungbefehls festzulegen. Die Anzahl der Bits, die verwendet werden können, um den Direktwert innerhalb eines Befehls darzustellen, ist jedoch beschränkt. In einer RISC-Architektur beispielsweise, in der alle Befehle 32 Bits aufweisen, und eine gewisse Anzahl an Bits dem Operationscode zugeordnet werden, um Operanden usw. festzulegen, kann es der Fall sein, dass nur 16 Bits für den Direktwert verfügbar sind, was eine Adressierung von 64k anderen Stellen ermöglicht. Eine Anzahl an Bytes, die unter Verwendung von 16 Bits adressiert werden können, hängt von einer Granularität ab, mit der der Speicher adressiert wird. Wird der Speicher bei 4 Byte-Inkrementen adressiert, dann kann ein 16-Bit-Direktwert 256 Kilobytes Speicherplatz adressieren, und wenn der Speicher Byte-adressierbar ist, können 64 Kilobytes von einem 16-Bit-Direktwert adressiert werden. Einige Architekturen können eine Wort-Ausrichtung für Direktwerte im Kontext des Programmzählers unterstützen (d. h., wenn der Programmzähler beispielsweise Wort-ausgerichtet ist, kann der in einer Verzweigung festgelegte Direktwert eher durch den Prozessor Wort-ausgerichtet sein, als explizit Wort-ausgerichtet durch den Direktwert selbst). Im Falle einer Verzweigung oder eines Sprungs bedeutet das, dass die Veränderung im Programmzähler auf dieses Ausmaß an adressierbarem Speicherplatz beschränkt sein kann. Einige Prozessorarchitekturen verwenden vielleicht einen Teil eines Programmzählers in Verbindung mit einem in einem Sprungbefehl festgelegten Direktbefehl. Solche Adressierbarkeitsbeschränkungen können für manche Situationen unangemessen sein.
  • Eine andere Art der Ausführung besteht darin, einen Verzweigungs- oder Sprungbefehl bereitzustellen, der sich auf ein Register bezieht, und ein Prozessor formuliert eine Zieladresse, die auf einer Kombination eines Wertes im Register und dem Direktwert basiert. In einer solchen Situation muß jedoch ein angemessener Wert im Register verfügbar gemacht werden. Beispielsweise kann in einem Prozessor gemäß einer MIPSTM Prozessorarchitektur ein Lade-Oberen-Direktbefehl (load upper immediate instruction) (LUI) verwendet werden, um einen 16-Bit-Direktwert in einem oberen Teil eines 32-Bit-Zielregisters zu speichern, und dann veranlasst ein logischer OR-Immediate (ORI) mit dem gleichen Zielregister und ein 16-Bit-Direktwert die unteren 16-Bits des Zielregisters dazu, sich einzustellen. Hier wird eine Unterscheidung zwischen einem Pseudobefehl (beispielsweise ein Lade-Direktwert) gemacht, der für die Ausführung (beispielsweise in LUI und ORI) durch einen Assembler für die tatsächliche Ausführung zergliedert wird.
  • Und ferner unterstützen aktuelle Prozessorarchitekturen Adressierungsabschnitte eines 64-Bit-Registers nicht direkt, um Direktwerte in diesen Abschnitten zu laden. Ein 64-Bit-Register hat beispielsweise 16-Bit-Abschnitte. Aktuelle Prozessorarchitekturen unterstützen ein Laden von Direktwerten in diesen 16-Bit-Abschnitten nicht direkt. Eher könnte ein 64-Bit-Direktwert unter der Verwendung eines LUI, gefolgt von einem ORI, der einen 32-Bit-Direktwert bildet, der für eine obere Hälfte des 64-Bit-Registers bestimmt ist, das in einem Allzweckregister gespeichert ist, gebildet werden. Dann verschiebt ein Verschiebungsbefehl diese 32 Bits in die obere Hälfte des 64-Bit-Registers. Dann werden die gleichen Befehle ausgeführt, um die beabsichtigten unteren 32 Bits in einem anderen Allzweckregister bereitzustellen. Die zwei Allzweckregister können dann addiert werden, um den endgültigen 64-Bit-Wert zu erhalten. Dann kann dieser Registerwert in einem Verzweigungs- oder Sprungbefehl verwendet werden. Somit erfordert das Verzweigen oder Springen zu einer beliebigen 64-Bit-Adresse 7 Befehle (LUI, ORI, SL, LUI, ORI, ADD, JMP/Branch.)
  • Eine Reihenfolge der Operationen ist in einer solchen Befehlsfolge auch von Bedeutung, denn der Lade-Oberen-Direktbefehl (load upper immediate instruction) (LUI) wirkt sich auf den im Befehl identifizierten, bestehenden Registerinhalt zerstörerisch aus, während der ORI keine Wirksamkeit entfalten kann, es sei denn der LUI geht ihm voran.
  • Das Folgende stellt einen Befehlssatz dar, der in einem Programmcode verwendet werden kann, um große (64 Bits oder mehr) Registerinhalte direkter zu steuern. Diese Befehle können auch in Befehlskontexten verwendet werden, die Programmsteuerungsorte verändern.
    Befehlsname Befehlsformat Kurze Beschreibung der vom Prozessor getätigten Schritte
    AUI rt, rs, imm16 Opcode rs rt imm16 $rt := $rs + sign_extend(imm16 << 16)
    AHI rt, rt, imm16 Opcode rt imm16 $rt := $rt + sign_extend(imm16 << 32)
    ATI rt, rt, imm16 Opcode rt imm16 $rt := $rt + sign_extend(imm16 << 48)
  • 2 stellt ein Diagramm dar, wie obige Befehle den Inhalt eines 64-Bit-Registers 100 beeinflussen können. 2 stellt ein Beispiel dar, in dem ein physisches Register 100 als ein Ziel für Befehle zugeordnet werden kann, die ein Architekturregister, genannt Allzweckregister (General Purpose (GP) register) 1 (GP1) festlegen. Mit anderen Worten zeigt das Beispiel in 2, dass eine Registerzuordnungsfunktion oder ein Scheduler das Register 100 dem ”rt” in den oben aufgezählten AHI-, ATI-, AUI-Befehlen zugeordnet hat. 2 zeigt, dass ATI GP1, GP1, imm, den in das obere Quartil des Registers 100 verschobenen festgelegten Direktwert zum aktuellen Wert in Register 100 zuordnet und diese Summe im Register 100 speichert. AHI GP1, GP1, imm führt eine solche Addition und Speicherung aus, für den in das dritte Quartil des Registers 100 verschobenen, festgelegten Direktwert (Immediate) (imm). AUI GP1, GP1, imm führt eine solche Addition und Speicherung für den in das zweite Quartil des Registers 100 verschobenen, festgelegten Direktwert (Immediate) (imm) aus. Das Beispiel der 2 zeigt, dass eine Vielzahl an Befehlen bereitgestellt werden kann, die die untersten Bits des Registers 100 beeinflussen. Beispielsweise kann ein Addier-Immediate GP1, GP1, imm bereitgestellt werden, der die gleiche Addition und Speicherung für den Direktwert ausführen wird, ohne verschoben zu werden. Ein weiteres Beispiel ist ein Sprungbefehl (Jump instruction) (JMP), der GP1 und einen Direktwert festlegt. Der Sprungbefehl addiert den festgelegten Direktwert zum Wert von GP1 und springt dann zu einem bestimmten Programmzähler, der auf dem resultierenden Wert der Addition basiert. Ein weiteres Beispiel ist ein bedingter Verzweigungsbefehl, der eine Bedingung aufweist, die keine Festlegung eines separaten Wertes (beispielsweise ein Erfordernis des Vergleichs zweier Register) erfordert. Ein Beispiel einer solchen bedingten Verzweigung ist eine Verzweigung-Nicht-Gleich-Null (Branch Not Equal to Zero) (BNEZ), die ein Register akzeptiert, bei dem ein Wert mit Null verglichen wird. So eine BNEZ kann auch einen Zweites-Register-Identifikator und einen Direktwert akzeptieren. Der Direktwert wird zum Inhalt des zweiten identifizierten Registers addiert, indem ein Verzweigungsziel berechnet wird, wenn die Verzweigung gewählt wird.
  • Der Registerinhalt, der verwendet wird, um eine endgültige Zieladresse des Sprunges oder der Verzweigung zu bestimmen, kann duch eine Folge von ATI-, AHI- und AUI-Befehlen eingerichtet werden, die dem Verzweigungsbefehl oder dem Sprungbefehl vorausgeht. Somit umfassen Aspekte der Offenbarung Befehlsfolgen, die diesen Effekt erzielen. 3 stellt ein Beispiel von vier Additionen (110, 112, 114, and 116) vor, wobei jede Addition einen entsprechenden 16-Bit-Direktwert dazu bringt, zu einem entsprechenden anderen Teil eines identifizierten Registers addiert zu werden. In diesem Beispiel kann die Gruppe der vier Additionen jeweils einen ATI-, AHI-, AUI- und AI-Befehl aufweisen, da ein Ausführen dieser Befehle sich nicht zerstörerisch auf den Inhalt des Registers auswirkt, das nicht von dieser bestimmten Addition adressiert ist. Dann kann bei 118 eine Verzweigung oder ein Sprung oder eine andere, auf dem Registerinhalt beruhende Änderung der Steuerung vorgenommen werden. Natürlich sind Befehle, die einen Programmzähler verändern, ein Beispiel für Befehle, die in Verbindung mit diesen ATI-, AHI-, AUI- und AI-Befehlen verwendet werden können, aber nicht ausschließlich.
  • 4 stellt eine andere Implementierung dar, bei der drei Additionen, die sich an die oberen drei Viertel des gleichen Registers richten, einen gewünschten beliebigen Wert in den oberen drei Vierteln dieses Registers (Vorgänge 132, 134, 136) erstellen, und dann kann ein endgültiger Befehl gemäß Befehlstyp (beispielsweise eine bedingte Verzweigung, wie oben beschrieben) tätig werden und den Registerinhalt verwenden und wahlweise einen festgelegten Direktwert, um eine Zieladresse zu bestimmen, und dann die Steuerung gegebenenfalls ändern. Somit stellt 4 eine Abfolge von vier Befehlen dar, die eine Änderung der Steuerung zu einer Stelle innerhalb der Adressierbarkeit von 64 Bits ermöglichen. Die meisten Prozessorarchitekturen würden diese 64 Bits zu 32 Bits auf beiden Seiten eines vorgegebenen Programmzählers anordnen. Diese Fähigkeit steht im Kontrast zum beispielhaften aktuellen Ansatz, der sieben Befehle braucht, um diesen Arbeitsvorgang durchzuführen.
  • Befehle, die diese Methodologie verwenden, können auch Befehle miteinbeziehen, die verknüpfen, wie beispielsweise ein Sprung und eine Verknüpfung, wo ein Wert, der sich auf einen aktuellen Programmzähler (beispielsweise ein erhöhter Programmzähler) bezieht, in einem Verknüpfungsregister gespeichert wird, und verwendet wird, um nach Vollendung einer vorgegebenen Routine wieder zurückzukehren.
    Befehlsname Befehlsformat Kurze Beschreibung der vom Prozessor getätigten Schritte
    JIC disp16(rt)) JIC rt disp16 Sprung zu $rt + sign_extend(disp16)
    JIALC disp16(rt)) JIALC rt disp16 Sprung zu $rt + sign_extend(disp16) und Verknüpfung
  • PC-bezogenes Addieren
  • Eine weitere Befehlskategorie, die implementiert werden kann, bezieht sich auf das Erstellen eines Wertes, der auf einem aktuellen Programmzähler und einem Direktwert basiert, der dann in einem festgelegten Zielregister gespeichert wird. Der Wert in so einem Zielregister kann dann als Basis für einen Verzweigungs- oder Sprungbefehl verwendet werden. Diese Befehlskategorie kann für dynamisches Verknüpfen verwendet werden, um eine breitere Palette an verfügbaren Adressen zu ermöglichen, wobei eine Programmzählerreferenz verwendet wird, im Gegensatz zu einem Speicherplatz, bei dem ein vorgegebenes Code-Segment im Speicher angebracht wurde. Diese Befehle können hilfreich bei der Umwandlung eines Quellcodeformats in ein Zwischen-Code-Format (beispielsweise ein ”Byte-Code” Format) sein, das übersetzt oder interpretiert werden kann, wie beispielsweise durch ein Just-In-Time(JIT)-Verfahren, wie beispielsweise im Kontext einer virtuellen Maschine, wie beispielsweise eine Java® virtuelle Maschine oder ein Derivat, wie beispielsweise eine virtuelle Maschine für Android®. Jeder derartige beispielhafte Codegenerierungsaspekt kann in einer Implementierung der Offenbarung verwendet werden. Darüber hinaus können diese Beispiele von Durchschnittsfachleuten verwendet werden, um zu verstehen, wie diese Beispiele in verschiedenen Umständen angewendet werden.
    AUIPA rs, imm16 Opcode rs imm16 $rs := ~0xFFFF & ($pc + sign_extend(imm16 << 16)) Addieren des Zeichen-erweiterten 16-Bit-Direktwerts, verschoben um 16 Bits, auf PC ausrichten und das Ergebnis in Rs speichern
    AUIP rs, imm16 Opcode rs imm16 $rs := ($pc + sign_extend (imm16 << 16)) Addieren des Zeichen-erweiterten 16-Bit-Direktwerts, verschoben um 16 Bits, zum PC-Wert und Speichern des Ergebnis in Rs.
    ADDIUP rs, pc, imm19 Opcode rs imm19 $rs := $pc + sign_extend(imm19 << 2) Addieren des Zeichen-erweiterten 19-Bit-Direktwerts, verschoben um 2 Bits (Wort-ausgerichtet), zum PC-Wert und Speichern des Ergebnis in Rs.
  • 5 stellt ein als Beispiel dienendes Blockschaltbild dar, in welcher Weise ein Prozessor die oben angeführten beispielhaften Befehle implementieren kann. 5 stellt eine Befehlseinheit 159 dar, die eine Befehlsdekodierung gemäß einer bestimmten Befehlscodierungsmethode gemäß der Prozessorarchitektur ausführt. Die Befehlseinheit 159 stellt für entsprechende Funktionseinheiten Steuerungsdaten bereit, um die für die Ausführung von jedem Befehl erforderlichen Aufgaben durchzuführen. Einige der Funktionseinheiten in 5 können nicht für alle Befehlstypen verwendet werden.
  • Beispielsweise kann im Fall eines Sprung-verlagerten-Direktwertes, der auf einem Inhalt eines Registers Rt basiert, eine Registerdatei 161 einen Indikator erhalten, um den Inhalt von Rt (Inhalt eines Registers, das durch ein vorangehendes $ identifiziert wird, $Rt zeigt beispielsweise den in Rt gespeicherten Wert an) abzurufen. Eine Arithmetisch-Logische-Einheit (Arithmetic Logic Unit) (ALU) 172 erhält $Rt. Auch ein Programmzählerwert 170 wird für die ALU 172 bereitgestellt. Ein festgelegter Direktwert wird einem Zeichen-Erweiterer 164 bereitgestellt, der ein Zeichen des Direktwertes auf eine Breite von Rt erweitert. Dieser Wert wird der ALU 172 bereitgestellt, ohne Verschiebung. Die ALU 172 addiert den zeichenerweiterten Direktwert dann zu $Rt hinzu und stellt diesen Wert für die Befehlseinheit 159 bereit, die dann die Ausführung bei einem auf diesem Wert basierenden Programmzähler beginnen wird. Wo der Befehl verknüpft werden soll, kann ein Programmzählerwert 162 in einem Verknüpfungsregister (diese Speicherung kann durch eine Lade-/Speichereinheit erreicht werden, die in 5 nicht dargestellt ist) gespeichert werden.
  • Ein Schieber 166 wird für jene Befehle verwendet, die eine Verschiebung eines Direktwertes zu einer entsprechenden relativen Stelle in einem Register erfordern (beispielsweise für die ATI-, AHI- und AUI-Befehle). Der Schieber 166 kann eine Eingabe direkt vom Befehl (d. h. ein unmodifizierter Direktwert) annehmen, oder einen zeichenerweiterten Direktwert. Dort, wo ein bestimmter Befehl die Verwendung eines verschobenen Wertes erfordert, würde die ALU 172 diesen Direktwert vom Schieber 166 erhalten, anstelle vom Zeichen-Erweiterer 164, oder als ein direkt im Befehl festgelegter unmodifizierter Direktwert.
  • Beispielsweise verwendet ein AUIP den Zeichen-Erweiterer 164 für einen festgelegten 16-Bit-Direktwert, der vom Schieber 166 verschoben wird, und dieser Wert wird durch die ALU 172 zum PC 170 addiert, und das Ergebnis wird in einem festgelegten Register gespeichert (Rs in 5). Somit stellt der AUIP ein Beispiel dar, bei dem ein 16-Bit-Direktwert für eine PC-bezogene Addition festgelegt sein kann. Der ADDIUP stellt ein Beispiel dar, bei dem ein größerer Direktwert festgelegt werden kann (19 Bits beispielsweise), der Zeichen-erweitert, durch 2 Bits verschoben, dann zu einem PC addiert wird, und dieser Wert dann in Rs gespeichert wird (im Beispiel von 5). Diese zwei Befehle stellen somit Beispiele für PC-bezogene Operationen dar, die für die Implementierung positionsunabhängigen Codierens verwendet werden können.
  • PC-bezogene Beladungen
  • Eine weitere Befehlskategorie, die beim positionsunabhängigen Codieren verwendet werden kann, sind Befehle, die einen Wert in ein festgelegtes Register laden, wo der Wert aus einer bestimmten Speicheradresse aus dem Programmzähler und einem durch den Befehl festgelegten, verlagerten Direktwert abgerufen wird. Der verlagerte Direktbefehl kann Zeichen-erweitert oder Null-erweitert sein. Die Beladungen können beispielsweise ein einziges Wort, Doppelwort-Beladungen sein. Andere Implementierungen können Vierwort-Beladungen bereitstellen. Die folgenden beispielhaften Befehle zeigen eine Kombination von Zeichen-Erweiterung versus Null-Erweiterung, Einwort- und Doppelwort-Beladungen, die auf einem 19-Bit-Direktwert basieren, der von zwei Bits verschoben wird, um eine Programmzähler-relative Adresse zu errechnen.
    LD rs, disp19(pc) Opcode Rs disp19 $rs := Doppelwort-Beladung von $pc + + sign_extend(disp19 << 2)
    LW rs, disp19(pc) Opcode Rs disp19 $rs := Zeichen-erweiterte Wort-Beladung von $pc + sign_extend(disp19 << 2)
    LWU rs, disp19(pc) Opcode Rs disp19 $rs := Null-erweiterte Wort-Beladung von $pc + sign_extend(disp19 << 2)
  • 6 stellt ein beispielhaftes Blockschaltbild dar, in welcher Weise ein Prozessor PC-bezogene Beladungen implementieren kann, mit Bezug auf oben angeführte beispielhafte Befehle. Die Befehlseinheit 159 dekodiert jeden Befehl und stellt der Lade-/Speichereinheit 175 einen Register-Identifikator bereit; dieses identifizierte Register wird aus dem Speicher (Speichereinheit 177, die eine Speicherhierarchie darstellt, aus der derartige Daten abgerufen werden können) abgerufene Daten erhalten. Ein Verlagerungswert (beispielsweise 19 Bit an Länge) wird für den Zeichen-Erweiterer 164 bereitgestellt, der an die ALU 172 ausgibt, die auch einen PC-Wert 170 erhält. Die ALU addiert den Zeichen-erweiterten Direktwert zu dem PC-Wert 170 hinzu und generiert dann eine Beladungs-Adresse 182. Die Lade-/Speichereinheit 175 schreibt dann Daten 180 in das Register Rs.
  • Andere Prozessorarchitekturen können Aspekte dieser Befehle gemäß einer für diese Architektur passenden Methode ausdrücken, und Implementierungen einer vorgegebenen Architektur können auch beträchtliche Variationen aufweisen. Beispielsweise kann ein Programmzähler in einem Register gespeichert werden, das nicht direkt durch einen Benutzer-Modus-Code schreib- oder lesbar ist. In gängigen MIPS® Prozessorarchitekturen beispielsweise können Befehle, die unter der Benutzer-Modus-Berechtigung ausgeführt werden, einen Programmzähler nicht direkt lesen oder schreiben. Und in der Tat ist der Programmzähler nicht in einem Register gespeichert, das in der durch einen Befehl adressierbaren Reichweite liegt; beispielsweise ist der Programmzähler nicht in einem vorbestimmten Register innerhalb der in 1B dargestellten Register gespeichert. Somit kann die Implementierung eines positionsunabhängigen Codes eine Herausforderung unter einer solchen Architektur sein. In einer Methode gemäß der Offenbarung werden Befehle, die PC-bezogene Operationen ausführen, codiert, um auf ein Zweckregister zu verweisen, das nicht durch einen korrekten Benutzer-Modus-Code verwendet wird (und daher einen Fehler erzeugen würde). In der MIPS® Architektur gibt es Register innerhalb des Allzweckregistersatzes, die für den Kernel-Modus-Software-Zugriff (genannt $k0–$k1) reserviert sind. Auf diese Register wird durch einen korrekt ausgeführten Benutzer-Modus-Code in gängigen MIPS Architekturprozessoren nicht Bezug genommen. Somit können in einer beispielhaften Architekturmethode eines oder beide dieser Register als ein Pseudonym für den Programmzähler verwendet werden, so dass, wenn dieses Register oder Register in einem Befehl identifiziert wird/werden, der Prozessor stattdessen einen Wert des Programmzählers verwendet.
  • Diese Methode ermöglicht ein Benutzer-Modus-Programm, um auf einen Programmzähler-Wert zuzugreifen, wenn auch die frühere Rückwärts-Kompatibilität mit MIPS Architekturbinären aufrechterhalten wird. Es wird typischerweise erwartet, dass Benutzer-Modus-Programme auf den Speicher durch eine Speicher-Verwaltungs-Einheit zugreifen, oder durch fixe Addressenanordnung (in einfache eingebettete Systeme). Ein Prozessor, der das oben beschriebene Beispiel implementiert, wäre auch in der Lage, die Berechtigung zu überprüfen, wenn ein Programm versucht, Daten aus einem bestimmten Wert zu laden oder einem bestimmten Wert einen Programmzähler beizugeben, ob die Berechnung relativ zu einem gängigen Programmzähler oder anders durchgeführt wurde.
  • Verzweigung mit Vergleichsberechnung und der Berechnung effektiver Adressen
  • 7 stellt ein beispielhaftes Blockschaltbild dar, in welcher Weise ein Prozessor bedingte Verzweigungs-Befehle implementieren kann, wo die Verzweigungs-Zieladresse sowohl basierend auf einem Direktwert als auch basierend auf dem Inhalt eines festgelegten Allzweckregisters berechnet werden kann. Insbesondere 7 zeigt ein Beispiel einer Verzweigung, die dahingehend konditioniert ist, ob ein Wert in einem festgelegten Register gleich oder nicht gleich einer vorbestimmten Konstante (beispielsweise 0) ist. Eine solche Befehlsform kann als B(E/NE)(Constant) Rs, Rt, Imm abgekürzt werden, wo die Effizienz derartiger Befehle darin liegt, sich zu einer effektiven Adresse zu verzweigen, die aus $Rt und Imm wenn $Rs entweder gleich (equal) (E) oder nicht gleich (not equal) (NE) einer Konstante ist, berechnet wird. In einigen Implementierungen wird die Konstante bei Null festgelegt und kann durch den Befehl nicht festgelegt werden, und dafür wird für jede andere Konstante auf Wunsch ein anderer Befehl bereitgestellt.
  • Die Befehlseinheit 159 dekodiert den Befehl und veranlasst, dass der Wert sowohl von Rs als auch von Rt aus dem Register 161 (was einige intermediäre Scheduling-Operationen mit sich bringen kann) abgerufen wird. $Rs ist der Wert, der in diesem Beispiel verglichen werden soll, und wird somit einem Komparator 192 bereitgestellt. Auch der Komparator gibt einen Wert der Konstante ein. Ist die Konstante 0, so kann ein Register aus den Allzweckregistern fest verdrahtet sein, um nur 0 zu speichern, und diese 0 kann aus dem Register bezogen sein. Es ist möglich, dass andere Befehle bereitgestellt werden, um den Inhalt eines Registers mit anderen Konstanten (und nicht so sehr die Konstante als einen Direktwert festzulegen) zu vergleichen. Der Komparator 192 erzeugt ein gleiches/nicht gleiches Signal, das zu einem Multiplexer 189 zurückgekoppelt wird, der zwischen einer Ausgabe eines PC-Inkrementierers 155 und einer Ausgabe der ALU 172 auswählt, die den Direktwert aus dem Befehl eingibt, und $Rt, und eine Zieladresse aus diesen Eingaben erstellt. Die Darstellung des PC-Inkrementierers 155 und des Multiplexers 189 dient der Erklärung, und tätsächliche Implementierungen dieser Offenbarungen können die Programmzählerbestimmungslogik auf die verschiedenste Art und Weise implementieren. Des Weiteren können Zieladressen gecached oder vorausgesagt werden, und solche Caching- oder Voraussagemethoden können im Kontext dieses Verfahrens und anderer Verfahren verwendet werden, wie auch Prozessoren, die solche Prozesse implementieren, um eine Verzweigungs- oder Sprungzieladresse zu bestimmen.
  • Additionen mit Verzweigungen bei Überlauf
  • 8 und 9A und 9B offenbaren Aspekte der Prozessorarchitekturimplementierungen, die Additionen (und/oder Subtraktionen) implementieren, und sich dann bei Überlauf (und bei Unterlauf) verzweigen. Der Einfachheit halber wird der Überlauf verwendet, um hier sowohl auf Überlauf als auch auf Unterlauf zu verweisen, und das Addieren ist beispielhaft für das Verhalten sowohl des Addierens als auch des Subtrahierens. 8 stellt ein Verfahren dar, das durch den in 9A dargestellten Funktionsfluss implementiert werden kann, wo die 9A ein spezielles Beispiel von BAVC Rs Rt Imm darstellt. Bei 301 wird ein Befehl durch die Befehlseinheit 159 dekodiert, und wenn der Befehl ein Fall eines Verzweigung-bei-Überlauf (Branch On Overflow) (BOV)-Befehls ist, dann sind die ALU 172 und die Verzweigungsziellogik 199 entsprechend konfiguriert. Diese Konfiguration bezieht mit ein, dass ein Verzweigungsziel unter der Verwendung des Programmzählers und des Direktwertes (Imm) berechnet wird. Des Weiteren identifiziert die Befehlseinheit 159 Rs und Rt an die Registerdatei 161, die für die ALU 172 $Rs und $Rt bereitstellt. In diesem Beispiel addiert die ALU 172 $Rt und $Rs hinzu und sorgt dafür, dass dieser Wert an Rs geschrieben wird. Des Weiteren überprüft die ALU 172 auf Überlauf, während sie die Addition implementiert.
  • Die ALU 172 generiert eine Überlauf-Anzeige 255, die für den Multiplexer 189 bereitgestellt wird, der zwischen einer Ausgabe des PC-Inkrementierers 155 und der Verzweigungszielberechnungslogik 199 auswählt, in Abhängigkeit vom Vorhandensein eines Überlaufs. 9B stellt ein Beispiel betreffend ein Überprüfen auf Überlauf in der ALU 172 auf 32-Bit-Grenzen dar. 9B stellt eine Überlauf-Erkennungslogik 196a und 196b dar, die mit einer Addierschaltung versehen ist, die 32-Bit-Teile von 64-Bit-Mengen, die addiert werden sollen (wobei 194a und 194b 32-Bit Teile eines 64-Bit-Operanden ($Rs oder Rt) sind, und 195a und 195b 32-Bit-Teile des anderen Operanden bei der Addition sind). Ein logisches OR 197 zeigt einen Überlauf an, wenn der Überlauf entweder bei 196a oder 196b detektiert wird. Der Überlauf kann für eine Addition/Subtraktion sowohl mit oder ohne Vorzeichen detektiert werden.
  • 10 stellt ein beispielhaftes Verfahren betreffend das Erstellen eines Maschinencodes aus einem Quellcode dar, im speziellen Beispiel betreffend eine Situation, in der eine Verzweigung oder ein Sprung einen großen Adressraum überqueren muss (was ein Anwendungsfall für die Anwendung der in Bezug auf die in den 25 dargestellten Sprung- und Verzweigungsbefehle ist). Insbesondere zeigt 10, dass eine Stelle im Quellcode für eine Verzweigung oder einen Sprung identifiziert werden kann. Dann wird eine Zieladresse für die Verzweigung oder den Sprung bestimmt und festgestellt, dass sie sich außerhalb einer Reichweite befindet, die unter der Verwendung eines 16-Bit-Offsets von der Referenzadresse (beispielsweise entweder ein Programmzähler oder eine Basis-Adresse) (was in diesem Zusammenhang als ”weit weg” bezeichnet wird) erreicht werden kann. Bei 324 werden Befehle festgesetzt, entweder eine vollständige oder eine unvollständige Zielverzweigungsadresse zu erstellen, beispielsweise können obere 48 Bits der Zielverzweigungsadresse bestimmt werden. Bei 326 wird ein Befehl festgesetzt, der die Steuerungsänderung durchführt, und wenn nur ein Teil der Zielverzweigungsadresse errechnet wurde, kann der Befehl die Zielverzweigungsadresse fertigstellen. Die bei 324 und 326 bestimmten Befehle können dann erstellt, relativ angeordnet und mit anderen Befehlen in der Befehlsfolge gespeichert werden. Dieses Verfahren ist beispielhaft. Hier kann die Zieladresse selbst in Bezug zu einem anderen Wert ausgedrückt werden. Wo beispielsweise ein Just-in-Time-Kompilierungsverfahren durchgeführt wird, kann die tatsächliche Stelle eines Befehlssatzes (für Verzweigungen oder Sprünge) und/oder von Daten (für einen Lade-Befehl) in einem Teil eines freien Speichers angebracht sein, der eine variable Beziehung in Bezug auf die Stelle des Befehls haben kann, der ausgeführt wird. Mit anderen Worten, wird ein Modul verknüpft, müssen relative Adressen durch bestimmte Werte ersetzt werden, die darauf basieren, wo der Code für das Modul im Speicher angebracht werden wird. Bei der Verknüpfung gemäß der Offenbarung, kann ein Verknüpfen aufgrund einer viel größeren Speicherbereichadressierbarkeit erleichtert werden, mit weniger Befehlen, und auch das Erstellen von Verknüpfungswerten in Bezug auf einen Programmzähler wird ermöglicht. Somit können die in einer Implementierung gemäß dem Beispiel von 10 durchgeführten einzelnen Schritte je nach dem Kontext, in dem das Verfahren durchgeführt wird, variieren.
  • Ein Prozessor kann mit einer Dekodiereinheit ausgelegt werden, die diese Offenbarungen implementiert. Der Prozessor kann so konfiguriert sein, dass er über einen von einer externen Quelle generierten Code arbeitet (beispielsweise ein Compiler, ein Assembler oder ein Interpreter). Eine solche Code-Generierung kann das Umwandeln eines Quellcodes in eine High-Level-Programmiersprache in einen Objekt-Code (beispielsweise ein ausführbarer Binär-Code oder eine Programmbibliothek, die dynamisch verknüpft werden können), oder das Erstellen einer Assembler-Sprachen-Ausgabe umfassen, die editiert und letztlich in einen Objekt-Code verwandelt werden könnte. Andere Situationen können das Umwandeln eines Quellcodes in ein Intermediate-Code-Format (beispielsweise ”Bytecode”Format) mit sich bringen, das übersetzt oder interpretiert werden kann, wie beispielsweise durch ein Just-In-Time(JIT)-Verfahren, wie im Kontext einer virtuellen Maschine, die eine interpretierte Sprache ausführt, wie Java® oder ein Derivat, wie beispielsweise Android®. Alle derartigen exemplarischen Code-Generierungsaspekte können in einer Implementierung der Offenbarung verwendet werden. Darüber hinaus können diese Beispiele von einem Durchschnittsfachmann verwendet werden, um zu verstehen, wie diese Beispiele auf verschiedene Verhältnisse angewendet werden.
  • 11 stellt ein Diagramm dar, in dem ein Compiler 430 einen Assembler 434 beinhaltet. Wahlweise kann der Compiler 430 einen Assembler-Code 432 gemäß der Offenbarung generieren. Dieser Assembly-Code könnte ausgegeben werden. Solch ein Assembler-Code kann in einer Textdarstellung vorkommen, die ”Pneumonics” für die verschiedenen Befehle enthält, wie auch für die Operanden and andere für den Befehl verwendete Informationen. Diese Pneumonics können so gewählt werden, dass die eigentliche Operation, die für jedes Assembler-Code-Element ausgeführt werden wird, durch das Pneumonic dargestellt ist. Mit anderen Worten, obwohl zugrundeliegende binäre Opcode-Identifikatoren innerhalb eines binären Codes die gleichen sein können, wenn sie diesen binären Code in einer Text-Assembler-Sprache darstellen, so würden die ausgewählten Pneumonics so ausgewählt werden, dass sie auch auf den anderen Elementen von jedem Assembler-Sprachen-Element basieren, wie beispielsweise relatives Register-Bestellen, was darauf Einfluß nimmt, welche Operation vom Prozessor durchgeführt werden wird und nicht einfach nur eine wörtliche Übersetzung des Binär-Opcode-Identifikators. 11 zeigt auch, dass der Compiler den Objekt-Code und den Bytecode ausgeben kann, die auf einer bestimmten Architektur interpretierbar, kompilierbar und ausführbar sein können. Hier wird ”Bytecode” verwendet, um jede Form eines intermediären maschinenlesbaren Formats zu identifizieren, das sich in vielen Fällen nicht direkt an eine physische Prozessorarchitektur richtet, sondern an eine Architektur einer virtuellen Maschine, die letztendlich eine solche Ausführung vornimmt. Eine physische Prozessorarchitektur kann so ausgestaltet sein, dass sie nichtsdestotrotz alle derartigen Bytecodes ausführt, und diese Offenbarung nimmt keine derartige Beschränkung vor.
  • 12 stellt ein Blockschaltbild einer exemplarischen Maschine 439 dar, auf die Aspekte der Offenbarung angewendet werden können. Ein Anwendungssatz steht zur Verfügung, um auf der Maschine 439 ausgeführt zu werden. Diese Anwendungen sind in Bytecode 440 codiert. Die Anwendungen können auch in einem nativen Maschinencode dargestellt sein; diese Anwendungen werden durch die Anwendungen 441 dargestellt. Die in Bytecode codierten Anwendungen werden in der virtuellen Maschine 450 ausgeführt. Die virtuelle Maschine 450 kann einen Interpreter und/oder einen Just-In-Time(JTI)-Compiler 452 umfassen. Die virtuelle Maschine 450 kann einen Speicher 454 von kompilierten Bytecodes aufrechterhalten, die für eine Anwendung wieder verwendet werden können. Die virtuelle Maschine 450 kann Bibliotheken von Native-Code-Bibliotheken 442 verwenden. Diese Bibliotheken sind Objekt-Code-Bibliotheken, die für physische Ausführungseinheiten 462 kompiliert sind. Eine Hardwareabstraktionsschicht 455 stellt verschiedenen anderen Hardware-Elementen abstrahierte Schnittstellen bereit, die zusammen als Geräte 464 identifiziert werden. HAL 455 kann im Benutzer-Modus ausgeführt werden. Die Maschine 439 führt auch einen Betriebssystemkernel 455 aus.
  • Die Geräte 464 können IO-Geräte und Sensoren umfassen, die zur Anwendung zur Verfügung gestellt werden sollen. Beispielsweise kann die HAL 455 eine Schnittstelle für ein Globales Positionierungssystem bereitstellen, einen Kompass, ein Gyroskop, einen Beschleunigungssensor, Temperatursensoren, ein Netz, Kurzbereichs-Kommunikationsressourcen, wie beispielsweise Bluetooth oder Nahfeldkommunikation, ein RFID Subsystem, eine Kamera, and so weiter.
  • Die Maschine 439 weist einen Befehlseinheitssatz 462 auf, der den Maschinencode verwendet, der die Ausführungseinheiten 462 konfiguriert, um eine Berechnung auszuführen. Ein solcher Maschinencode wird somit ausgeführt, um Anwendungen auszuführen, die als Bytecodes, als Native-Code-Bibliotheken, als Objektcodes von Benutzer-Anwendungen und Codes für Kernel 455 entstehen. Alle diese unterschiedlichen Maschinenkomponenten 439 können implementiert werden, indem hier die virtualisierten Befehlscodierungsoffenbarungen verwendet werden.
  • 13 stellt das Beispiel einer Maschine 505 dar, die Ausführungselemente und andere hier offenbarte Aspekte implementiert. 13 zeigt, dass verschiedene Implementierungen der Maschine 505 verschiedene Integrationsniveaus haben können. In einem Beispiel kann ein einziges Halbleiterelement ein Prozessormodul 558 implementieren, das Kerne 515517 enthält, einen Kohärenz-Manager 520, der die Kerne 515517 mit einem L2 Cache 525, einer E/A-Steuereinheit 530 und einem Interrupt-Controller 510 über eine Schnittstelle verbindet. Ein Systemspeicher 564 ist mit dem L2 Cache 525 über eine Schnittstelle verbunden. Der Kohärenz-Manager 520 kann eine Speicher-Management-Einheit beinhalten und betreibt ein Daten-Kohärenz-Management für Daten, die durch die Kerne 515517 betrieben werden. Kerne können auch Zugriff auf L1-Caches haben, die nicht separat dargestellt sind. In einer anderen Implementierung wird eine IO-Speicher-Verwaltungs-Einheit (IO Memory Management Unit) (IOMMU) 532 bereitgestellt. Die IOMMU 532 kann auf dem gleichen Halbleiterelement wie das Prozessormodul 558, als Modul 559 bezeichnet, bereitgestellt werden. Das Modul 559 kann auch mit den IO-Geräten 575577 über einen Interconnect 580 verbunden sein. Eine Kollektion des Prozessormoduls 558, das im Modul 559 beinhaltet ist, des Interconnects 580, und der IO-Geräte 575577 kann auf einem oder mehreren Halbleiterelementen ausgebildet werden. In der beispielhaften Maschine 505 der 13 können die Kerne 515517 jeweils einen oder mehrere Berechnungsstränge unterstützen, und gemäß der vorliegenden Offenbarungen architektonisch konzipiert sein.
  • Moderne Allzweckprozessoren erfordern normalerweise die Implementierung von mehr als zwei Milliarden Transistoren, während Grafikprozessoren mehr als fünf Milliarden Transistoren aufweisen können. Ein Ansteigen einer solchen Anzahl an Transistoren ist wahrscheinlich. Derartige Prozessoren haben diese Transistoren verwendet, um eine ansteigende komplexe Operationsumordnung, Vorhersage, mehr Parallelismus, größere Speicher (einschließlich mehr und größere Caches) und so weiter zu implementieren. Beispielsweise wird es notwendig werden, in der Lage zu sein, technische Angelegenheiten betreffend Prozessoren, ob allgemeiner Zweck oder spezifische Anwendung, im Detail auf einem der gegenständlichen Technologie entsprechenden Niveau beschreiben oder besprechen zu können. Im Allgemeinen wird eine Hierarchie an Konzepten angewendet, um es dem Durchschnittsfachmann zu ermöglichen, sich auf die Details der gegenständlichen Angelegenheit zu konzentrieren.
  • Beispielsweise übermitteln Merkmale auf hoher Ebene, beispielsweise welche Befehle ein Prozessor unterstützt, ein Detail auf architektonischer Ebene. Bei der Beschreibung von Hochtechnologie, wie beispielsweise ein Programmiermodell, ist ein solches Abstraktionsniveau angemessen. Ein mikroarchitektonisches Detail beschreibt ein Detail auf hoher Ebene betreffend eine Implementierung einer Architektur (wie auch die gleiche Mikroarchitektur in der Lage sein kann, verschiedene ISAs auszuführen). Und doch beschreibt das mikroarchitektonische Detail typischerweise verschiedene Funktionseinheiten und ihre Beziehung untereinander, beispielsweise wie und wann sich die Daten unter diesen verschiedenen Funktionseinheiten bewegen. Beispielsweise ist das Referenzieren auf diese Einheiten ihrer Funktionalität nach auch eine geeignete Abstraktionsebene, mehr als das Adressieren von Implementationen dieser Funktionseinheiten, da jede dieser Funktionseinheiten selbst Hunderttausende oder Millionen an Gattern umfassen kann. Wenn einige bestimmte Merkmale dieser Funktionseinheiten adressiert werden, kann es angemessen sein, Substitutionsfunktionen dieser Einheiten zu identifizieren, und diese zu abstrahieren, während der relevante Teil dieser Funktionseinheit genauer adressiert wird.
  • Letztlich kann eine präzise logische Anordnung der Gatter und Interconnecter (eine Netzliste), die diese Funktionseinheiten (im Kontext des ganzen Prozessors) implementiert, festgelegt werden. Wie eine solche logische Anordnung jedoch in einem bestimmten Chip (wie diese Logik und der Interconnect in einer bestimmten Ausgestaltung ausgelegt werden) physisch realisiert wird, kann in anderen Prozesstechnologien aus vielen Gründen anders sein. Viele der Details, die das Erstellen von Netzlisten für Funktionseinheiten als auch das tatsächliche Layout betreffen, werden unter Verwendung von Auslegungs-Automatisierung bestimmt, wobei von einer logischen Beschreibung auf hoher Ebene der zu implementierenden Logik ausgegangen wird (beispielsweise eine ”Hardware-Beschreibungssprache”).
  • Der Begriff ”Schaltung” impliziert nicht einen einzigen elektrisch verbundenen Schaltungssatz. Die Schaltung kann eine fixe, konfigurierbare oder programmierbare Funktion sein. Im Allgemeinen kann eine Schaltung, die eine Funktionseinheit implementiert eher oder besser konfiguriert werden als eine Schaltung, die einen bestimmten Teil einer Funktionseinheit implementiert. Beispielsweise kann eine Arithmetisch-Logische-Einheit (Arithmetic Logic Unit) (ALU) eines Prozessors den gleichen Teil der Schaltung in anderer Weise wiederverwenden, wenn sie andere arithmetische oder logische Operationen ausführt. Beispielsweise ist dieser Teil der Schaltung eine effektive Schaltung oder Teil der Schaltung für jede andere Operation, wenn er zur Ausführung konfiguriert ist oder irgendwie anders wechselseitig verbunden ist, andere Operationen durchzuführen. Eine solche Konfiguration kann beispielsweise von Befehlen, oder Mikrocodes kommen oder darauf basieren.
  • In all diesen Fällen vermittelt das Beschreiben von Prozessorteilen im Sinne seiner Funktionalität einem Durchschnittsfachmann die Struktur. Im Kontext dieser Offenbarung bezieht sich der Begriff ”Einheit” in einigen Implementierungen auf eine Klasse oder Gruppe der Schaltung, die die Funktionen oder die dieser Einheit zugeordneten Funktionen implementiert. Eine solche Schaltung kann zusätzliche Funktionen implementieren, und so bedeutet die Identifikation der Schaltung, die eine Funktion ausführt, nicht, dass die gleiche Schaltung, oder ein Teil davon, nicht auch andere Funktionen ausführen kann. Unter einigen Umständen kann die Funktionseinheit identifiziert werden, und dann kann die funktionale Beschreibung der Schaltung, die ein gewisses Merkmal unterschiedlich ausführt oder die ein neues Merkmal implementiert, beschrieben werden. Beispielsweise bezieht sich eine ”Dekodiereinheit” auf die Schaltung, die das Dekodieren von Prozessorbefehlen implementiert. Die Beschreibung erläutert, dass in einigen Aspekten die Dekodiereinheit, und somit die Schaltung, die eine solche Dekodiereinheit implementiert, das Dekodieren festgelegter Befehlstypen unterstützt. Das Dekodieren von Befehlen ist bei anderen Architekturen und Mikroarchitekturen anders, und der Begriff stellt keine Ausnahme dar, abgesehen von den expliziten Anforderungen der Patentansprüche. Beispielsweise können andere Mikroarchitekturen ein Dekodieren von Befehlen und ein Planen von Befehlen etwas anders gemäß den Ausgestaltungszielen dieser Implementierung implementieren. Ebenso gibt es Situationen, in denen die Strukturen ihre Namen von den Funktionen, die sie ausführen, beziehen. Beispielsweise beschreibt ein ”Dekodierer” von Programmbefehlen, der sich in einer vorgegebenen Art und Weise verhält, Strukturen, unterstützt dieses Verhalten. In einigen Fällen kann die Struktur permanente physische Unterschiede oder Adaptionen von Dekodierern aufweisen, die ein solches Verhalten nicht unterstützen. Eine solche Struktur kann durch eine vorläufige Adaption oder Konfiguration erstellt werden, wie eine, die unter der Programmsteuerung, einem Mikrocode oder einer anderen Konfigurationsquelle entstanden ist.
  • Es gibt verschiedene Methoden, eine Schaltung auszugestalten, eine Schaltung kann beispielsweise in Bezug auf eine Uhr synchron oder asynchron sein. Eine Schaltung kann statisch oder dynamisch ausgestaltet sein. Verschiedene Schaltungsausgestaltungsphilosophien können angewendet werden, um verschiedene Funktionseinheiten oder Teile davon zu implementieren. Fehlt eine kontextspezifische Basis, so umfasst die Schaltung alle diese Ausgestaltungsmethoden.
  • Obwohl die Schaltung oder die hier beschriebenen Funktionseinheiten sehr häufig durch eine elektrische Schaltung implementiert werden können, und, genauer gesagt, durch eine Schaltung, die hauptsächlich auf einem Transistor beruht, der in einen Halbleiter als ein primäres Schaltelement implementiert wird, soll dieser Begriff in Bezug auf die gerade offenbarte Technologie verstanden werden. Beispielsweise können unterschiedliche physische Prozesse in der Schaltung verwendet werden, die die Aspekte der Offenbarung implementiert, wie optische, nanoröhrenartige, mikroelektrische mechanische Elemente, Quanten-Schalter oder Speicherung, magnetoresistive logische Elemente und so weiter. Obwohl eine Auswahl an Technologie, die verwendet wird, eine Schaltung oder Funktionseinheiten gemäß der Technologie zu konstruieren, sich mit der Zeit verändern kann, ist diese Auswahl eine Implementierungsentscheidung, die gemäß des dann gängigen Technologiestandes gemacht werden soll. Das wird durch den Übergang von der Verwendung von Vakuumröhren als Schaltelemente zur Verwendung von Schaltungen mit diskreten Transistoren, zur Verwendung von integrierten Schaltungen, und einem Fortschritt in der Speichertechnologie, erläutert, und während es viele Erfindungen in allen diesen Bereichen gab, haben diese Erfindungen nicht unbedingt zu einer fundamentalen Änderung im Hinblick auf das grundsätzliche Funktionieren eines Computers geführt. Beispielsweise war die Verwendung von gespeicherten Programmen, die eine Befehlsfolge aufweisen, die aus einer Befehlssatzarchitektur ausgewählt wird, eine bedeutende Änderung von einem Computer, der ein physisches, neues Verdrahten zur Änderung des Programms forderte, in der Folge davon wurden jedoch viele Fortschritte hinsichtlich verschiedener Funktionseinheiten innerhalb eines solchen speicherprogrammierten Computers gemacht.
  • In verschiedenen Teilen der Offenbarung wurde das Bestimmen von Werten in Bezug auf einen Programmzähler offenbart. Beispielsweise beziehen sich einige offenbarte Aspekte auf das Addieren einer Menge zu einem Programmzählerwert oder andernfalls auf das Bestimmen einer Zielverzweigungsadresse. Es liegt auf der Hand, dass diese Offenbarungen das Addieren einer Menge zu einer anderen Menge umfassen, die der Programmzählerwert (beipielsweise der Programmzählerwert, der durch einen Wert inkrementiert wird, der eine Befehlsgröße, beispielsweise 4, in einer Situation anzeigt, wo Befehle 32 Bits ausmachen und der Speicher byte-adressierbar ist) bestimmt. Beispielsweise sollen diese Offenbarungen nicht so ausgelegt werden, dass sie Implementierungen ausschließen, in denen gewisse Details gemäß den Besonderheiten der Prozessorarchitektur oder der Mikroarchitektur variiert werden können.
  • Obwohl einige Themen in einer Sprache beschrieben sein mögen, die für Beispiele struktureller Merkmale und/oder Verfahrensschritte spezifisch ist, liegt es auf der Hand, dass der in den beigefügten Ansprüchen definierte Gegenstand nicht notwendigerweise auf diese beschriebenen Merkmale oder Vorgehensweisen beschränkt ist. Beispielsweise kann ein vorgegebenes strukturelles Merkmal innerhalb eines anderen strukturellen Elements subsumiert werden, oder unter bestimmen Komponenten aufgespalten oder an diese aufgeteilt werden. In ähnlicher Weise kann ein exemplarischer Teil eines Verfahrens als ein Nebenprodukt erzielt werden oder gleichzeitig unter Ausführung eines anderen Schrittes oder Verfahrens, oder kann als mehrfache separate Schritte in einigen Implementierungen ausgeführt werden. Beispielsweise sind Implementierungen gemäß dieser Offenbarung nicht auf diejenigen beschränkt, die eine 1:1 Entsprechung gegenüber den dargestellten und/oder beschriebenen Beispielen aufweisen.
  • Oben wurden verschiedene Beispiele an Computing-Hardware- und/oder Software-Programmierung erklärt wie auch Beispiele, wie eine solche Hardware/Software miteinander kommunizieren kann. Diese Beispiele der Hardware oder der Hardware, die mit der Software konfiguriert ist, und solche Kommunikationsschnittstellen stellen Mittel zur Erreichbarkeit der ihnen jeweils zugeteilten Funktionen bereit. Beispielsweise beinhaltet ein Mittel zur Ausführung von Implementierungen von hier beschriebenen Softwareverfahren den maschinenlesbaren Code, der verwendet wird, um eine Maschine zu konfigurieren, um ein solches Verfahren auszuführen. Einige Aspekte der Offenbarung beziehen sich auf Verfahren, die durch eine beschränkte Konfigurierbarkeit oder fixe Funktionsschaltungen durchgeführt werden, und in solchen Situationen umfassen Mittel zur Ausführung solcher Verfahren einen oder mehr besondere Zwecke und eine Hardware von beschränkter Programmierbarkeit. Eine solche Hardware kann durch eine Software, die auf einem Allzweck-Computer arbeitet, gesteuert oder aufgerufen werden.
  • Funktionsaspekte und beschriebene und/oder beanspruchte Verfahren können in einem Zweck-Computer oder Allzweck-Computer implementiert werden, der die Computer-Hardware, wie nachstehend genauer besprochen, umfasst. Solche Hardware, Firmware und Software kann auch auf einer Videokarte oder anderen externen oder internen Computersystemperipheriegeräten enthalten sein. Unterschiedliche Funktionalität kann in kundenspezifischen FPGAs oder ASICs oder anderen konfigurierbaren Prozessoren bereitgestellt werden, während eine andere Funktionalität in einem Management- oder Host-Prozessor bereitgestellt werden kann. Eine solche Verarbeitungsfunktionalität kann in Personal-Computern, Desktop Computern, Laptop Computern, Message Prozessoren, Handgeräten, Multi-Prozessorsystemen, in der auf einem Mikroprozessor basierenden oder programmierbaren Verbraucherelektronik, Spielkonsolen, Netzwerk-PCs, Minicomputern, Großrechnern, Mobiltelephonen, PDAs, Tabletcomputern und dergleichen verwendet werden.
  • Hier offenbarte Aspekte werden im Allgemeinen im Kontext größerer Systeme und Systemkomponenten existieren. Beispielsweise kann ein Verarbeiten über Netzwerke verteilt werden, wie beispielsweise Local Area Networks oder Wide Area Networks, und kann andernfalls unter der Verwendung von Peer-to-Peer-Technologien und dergleichen implementiert werden. Eine Aufteilung der Aufgaben kann auf Basis einer gewünschten Ausführung des Produktes oder des Systems, einem gewünschten Preis-Punkt, oder einer Kombination davon, bestimmt werden. In Ausführungsformen, die alle beschriebenen Einheiten zumindest teilweise in Software implementieren, können computer-ausführbare Befehle, die die Funktionseinheit darstellen, auf einem computerlesbaren Medium gespeichert werden, beispielsweise auf Magnetplatten, optischen Disks, einem Flash-Speicher, USB-Geräten, oder in Netzwerken der Speichergeräte, beispielsweise NAS oder SAN Ausstattung und dergleichen. Weitere sachdienliche Informationen, beispielsweise Daten zur Verarbeitung, können auch auf solchen Medien gespeichert werden.
  • Zusätzlich zu den Hardware-Ausführungsformen (beispielsweise innerhalb oder verbunden mit einer Zentraleinheit (Central Processing Unit) (”CPU”), einem Mikroprozessor, einem Mikrocontroller, einem digitale Signalprozessor, einem Prozessorkern, einem System-on-Chip (”SOC”), oder irgend einem anderen programmierbaren oder elektronischem Gerät) können die Implementierungen auch in einer Software (beispielsweise ein computer-lesbarer Code, Programmcode, in jeder Form zur Verfügung gestellte Befehle und/oder Daten, beispielsweise Quellen-, Objekt- oder Maschinensprache) enthalten sein, die in einem computer-verwendbaren (bespielsweise lesbaren) Medium zur Verfügung gestellt ist, und konfiguriert, die Software zu speichern. Eine solche Software kann beispielsweise die Funktion, die Fabrikation, die Modellierung, die Simulation, die Beschreibung und/oder das Testen des Gerätes und der hier beschriebenen Verfahren ermöglichen. Beispielsweise kann dies durch die Anwendung einer Programmiersprache (beispielsweise C, C++), GDSII Datenbanken, Hardwarebeschreibungssprachen (hardware description languages) (HDL) einschließlich Verilog HDL, VHDL, SystemC Register Transfer Level (RTL) und so weiter, oder anderer verfügbarer Programme, Datenbanken, und/oder (beispielsweise schematischer) Schaltkreiserfassungstools erzielt werden. Ausführungsformen können in einem computer-verwendbaren Medium bereitgestellt werden, umfassend nicht-flüchtige Speicher wie beispielsweise Speicher, die einen Halbleiter, eine Magnetplatte, eine optische Disk, Eisen-, resistiven Speicher und so weiter, enthalten.
  • Als spezielle Beispiele liegt es auf der Hand, dass Implementierungen offenbarter Geräte und Verfahren in einen Halbleiter-Intellectual-Property-Core implementiert werden können, wie beispielsweise einen Mikroprozessor-Core oder einen Teil davon, der in einer Hardwarebeschreibungssprache (HDL) eingebettet ist, die verwendet werden kann, um eine spezifische integrierte Schaltungsimplementierung zu erstellen. Ein computer-lesbares Medium kann solche Beschreibungssprachdaten enthalten oder speichern, und somit einen Herstellungsartikel darstellen. Ein nicht-flüchtiges maschinenlesbares Medium ist ein Beispiel für computerlesbare Medien. Beispiele anderer Ausführungsformen umfassen computerlesbare Medien, die eine Registertransfersprachbeschreibung (Register Transfer Language) (RTL) speichern, die für die Verwendung in einer speziellen Architektur oder mikroarchitektonischen Implementierung adaptiert sein kann. Des Weiteren können die hier beschriebenen Vorrichtungen und Verfahren als eine Kombination von Hardware und Software, die die Hardware konfiguriert oder programmiert, enthalten sein.
  • Auch ist in einigen Fällen hier eine Terminologie verwendet worden, da man es für vernünftiger hält, auf diese Art und Weise die hervorspringenden Punkte einem Durchschnittsfachmann zu übermitteln, jedoch sollte die Terminologie nicht zu einer Einschränkung des von den offenbarten Beispielen und anderen Aspekten eingeschlossenen Implementierungsumfanges führen.
  • Des Weiteren ist eine Anzahl an Beispielen in der vorangegangenen Offenbarung dargestellt und beschrieben worden. Notwendigerweise kann nicht jedes Beispiel jeden Aspekt darstellen, und die Beispiele stellen keine ausschließlichen Kompositionen eines solchen Aspekts dar. Stattdessen können in Bezug auf eine Figur oder ein Beispiel dargestellte und beschriebene Aspekte mit Aspekten verwendet oder kombiniert werden, die in Bezug auf andere Figuren dargestellt und beschrieben werden. Beispielsweise würde ein Durchschnittsfachmann diesen Offenbarungen entnehmen können, dass obige Offenbarung im Hinblick auf die Bestandteile der Ausführungsformen gemäß den Ansprüchen nicht einschränkend ist, und stattdessen der Schutzbereich der Anspüche die Weite und den Schutzbereich der vorliegenden Ausführungsformen definiert. Die Zusammenfassung kann eine oder mehr, aber nicht alle exemplarischen Ausführungsformen und Aspekte der Erfindung innerhalb des Schutzbereichs der Ansprüche anführen.

Claims (14)

  1. Durch einen Prozessor implementiertes Verfahren, umfassend: Eingeben von vier Befehlen; Dekodieren von jedem der vier Befehle, um einen jeweiligen Direktwert in jedem der vier Befehle zu identifizieren, ein Zielregister, und einen jeweiligen anderen Teil des Zielregisters; und Addieren aller Direktwerte aus den vier Befehlen zu einem aktuellen Inhalt der jeweiligen anderen Teile des durch jeden der vier Befehle festgelegten Zielregisters; und anschließendes Umleiten der Programmausführung an eine Speicheradresse, die unter Verwendung eines aus dem Addieren resultierenden Werts bestimmt wird.
  2. Verfahren zur Erstellung eines maschinenlesbaren Codes zur Ausführung in einem Prozessor nach Anspruch 1, wobei die vier Befehle der Reihe nach eingegeben werden, und ein letzter der vier Befehle einen untersten Teil des Zielregisters identifiziert, und eine Verzweigung und/oder einen Sprung zu einer Zieladresse, die aus dem aus dem Addieren resultierenden Wert bestimmt wird, festlegt.
  3. Verfahren zur Erstellung eines maschinenlesbaren Codes zur Ausführung in einem Prozessor nach Anspruch 1, wobei die vier Befehle der Reihe nach eingegeben werden, und erste drei der Befehle einen aktuellen Wert im Zielregister lesen, das Addieren in einer Art und Weise ausführen, dass der Inhalt von Teilen des von diesem Befehl nicht adressierten Zielregisters nicht zerstört wird, und der vierte Befehl in der Folge einen aktuellen Wert im Zielregister liest, das Addieren und entweder eine bedingte Verzweigung oder einen Sprung mit einer Zieladresse ausführt, die aus dem Ergebnis des Addierens berechnet wird.
  4. Verfahren zur Erstellung eines maschinenlesbaren Codes zur Ausführung in einem Prozessor, umfassend: Bestimmen eines Zielortes, an den die Programmsteuerung übertragen werden soll, von einem Ausgangsort; Bestimmen eines auf dem Zielort und dem Ausgangsort basierenden Direktwertes; und Bereitstellen einer Befehlsfolge, wobei jeder Befehl Teile des bestimmten Direktwertes beinhaltet, einen entsprechenden anderen Teil eines Registers anzeigt, und Opcode-Beschreibungsdaten, deren sich der Prozessor bedienen soll, um eine Ausführungseinheit zu konfigurieren, um die dazugehörigen Teile des bestimmten Direktwertes in jedem Befehl der Folge zum Inhalt beim jeweiligen anderen Teil des Registers zu addieren, und wobei ein endgültiger Befehl in der Befehlsfolge Daten beinhaltet, die vom Prozessor interpretierbar sind, um das Übertragen der Programmsteuerung auf eine Speicheradresse zu initiieren, die basierend auf einem Wert, der aus der Ausführung der Befehlsfolge resultiert, bestimmt wird.
  5. Verfahren nach Anspruch 4, wobei die Anzahl der Bits im Direktwert ein Viertel der Anzahl von Bits im Register beträgt und der Befehl durch die Dekodiereinheit dekodiert wird, als Anzeige für eine von drei unterschiedlichen Verschiebungsmengeen, wobei jede davon auf eine eines zweiten Quartils, eines dritten Quartils und eines vierten Quartils des Registers gerichtet ist.
  6. Prozessor, umfassend: eine Dekodiereinheit, die zur Dekodierung von Daten konfiguriert ist, welche von einer Befehlsquelle bereitgestellte Befehle darstellen, wobei die Befehle einer Befehlssatzarchitektur entsprechen, die einen Addier-Direktbefehlssatz enthält, wobei jeder Befehl jeweils ein Zielregister und/oder einen Direktwert festlegt, und die Dekodiereinheit konfiguriert ist, Befehle aus dem Addier-Direktbefehlssatz zu dekodieren, als Anzeige für einen entsprechenden eigenen Teil des Zielregisters, zu dem der Direktwert dieses Befehls addiert werden soll, und dann das Ergebnis des Addierens zu speichern, wobei der Addier-Direktbefehlssatz sich an insgesamt mindestens drei von vier eigenen Teilen des Zielregisters richtet; und eine Ausführungseinheit, die mit der Dekodiereinheit verbunden ist, und zur Ausführung von Operationen gemäß den von der Dekodiereinheit erhaltenen Daten konfiguriert ist.
  7. Prozessor nach Anspruch 6, wobei der Addier-Direktbefehlssatz jeweils ein Quellenregister, das Zielregister und den Direktwert festlegt, und die Dekodiereinheit zur Dekodierung der Befehle konfiguriert ist, als Anzeige für einen entsprechenden Teil des Quellenregisters, zu dem der Direktwert dieses Befehls in nicht zerstörerischer Weise addiert werden soll, und anschließend ein Ergebnis des Addierens im Zielregister gespeichert wird.
  8. Prozessor nach Anspruch 7, wobei das Quellenregister und das Zielregister als das gleiche Register festgelegt werden.
  9. Prozessor nach Anspruch 6, wobei der Addier-Direktbefehlssatz einen Addier-Direktbefehl umfasst, der ein oberes Quartil des Registers anzeigt, einen Addier-Direktbefehl, der ein drittes Quartil des Registers anzeigt, und einen Addier-Direktbefehl, der das zweite Quartil des Registers anzeigt.
  10. Prozessor nach Anspruch 6, wobei die Anzahl der Bits im Direktwert ein Viertel der Anzahl an Bits im Register darstellt und der Befehl durch die Dekodiereinheit dekodiert wird, als Anzeige für eine von drei unterschiedlichen Verschiebungsmengen, wobei jede davon auf eine eines zweiten, eines dritten und eines vierten Quartils des Registers gerichtet ist.
  11. Prozessor nach Anspruch 6, wobei die Dekodiereinheit ausgelegt ist, den Addier-Direktbefehlssatz in eine Folge einzugeben, die ersten drei der Addier-Direktbefehle jeweils ein Quellenregister, ein Zielregister und einen Direktwert festlegen, und die Dekodiereinheit jeden der ersten drei Befehle dazu bringt, einen aktuellen Wert im durch diesen Befehl festgelegten Quellenregister zu lesen, das Addieren auf eine Art und Weise ausgeführt wird, dass der Inhalt von Teilen des von dem Befehl adressierten Zielregisters nicht zerstört wird, und der vierte Befehl in der Folge einen aktuellen Wert im Quellenregister liest, das Addieren und entweder eine bedingte Verzweigung oder einen Sprung mit einer Zieladresse ausführt, die aus einem Ergebnis des Addierens berechnet wird.
  12. Verfahren nach Anspruch 6, wobei das Zielregister 64 Bits ausmacht und jeder der Direktwerte 16 Bits ausmacht.
  13. Verfahren nach Anspruch 6, wobei die Ausführungseinheit eine Lade-/Speichereinheit ist, die zur Ausführung von Befehlen ausgelegt ist, die entweder Daten aus einem Speicher laden oder Daten in einem Speicher speichern.
  14. Verfahren nach Anspruch 6, wobei die Ausführungseinheit eine Befehlsabrufeinheit ist, die ausgelegt ist, einen Programmzähler zu warten und das Abrufen von Daten zu steuern, die Befehle aus einem Speicher darstellen.
DE102015101541.2A 2014-02-12 2015-02-03 Prozessor mit granulärer addier-direktwert-fähigkeit & verfahren Withdrawn DE102015101541A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201461939167P 2014-02-12 2014-02-12
US61/939,167 2014-02-12

Publications (1)

Publication Number Publication Date
DE102015101541A1 true DE102015101541A1 (de) 2015-08-27

Family

ID=53774983

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015101541.2A Withdrawn DE102015101541A1 (de) 2014-02-12 2015-02-03 Prozessor mit granulärer addier-direktwert-fähigkeit & verfahren

Country Status (4)

Country Link
US (2) US10768930B2 (de)
CN (1) CN104834503A (de)
DE (1) DE102015101541A1 (de)
GB (3) GB2529777B (de)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11126433B2 (en) * 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US20170123792A1 (en) * 2015-11-03 2017-05-04 Imagination Technologies Limited Processors Supporting Endian Agnostic SIMD Instructions and Methods
FR3047577A1 (fr) * 2016-02-10 2017-08-11 Upmem Instruction combinee d'addition et de verification de bornes
US10061580B2 (en) 2016-02-25 2018-08-28 International Business Machines Corporation Implementing a received add program counter immediate shift (ADDPCIS) instruction using a micro-coded or cracked sequence
CN109491659B (zh) * 2017-09-11 2022-06-21 龙芯中科技术股份有限公司 指令转换方法和装置
US11016776B2 (en) * 2017-12-22 2021-05-25 Alibaba Group Holding Limited System and method for executing instructions
US10747631B2 (en) * 2018-01-19 2020-08-18 DinoplusAI Holdings Limited Mission-critical AI processor with record and replay support
GB2570326B (en) * 2018-01-22 2020-06-10 Advanced Risc Mach Ltd Multiple guard tag setting instruction
US11762566B2 (en) 2018-01-22 2023-09-19 Arm Limited Programmable mapping of guard tag storage locations
US10915320B2 (en) * 2018-12-21 2021-02-09 Intel Corporation Shift-folding for efficient load coalescing in a binary translation based processor
CN110058882B (zh) * 2019-03-14 2023-01-06 深圳市比昂芯科技有限公司 一种用于cnn加速的opu指令集定义方法
US11036512B2 (en) * 2019-09-23 2021-06-15 Microsoft Technology Licensing, Llc Systems and methods for processing instructions having wide immediate operands
US20210303309A1 (en) * 2020-03-27 2021-09-30 Intel Corporation Reconstruction of flags and data for immediate folding
JP7487535B2 (ja) * 2020-04-08 2024-05-21 富士通株式会社 演算処理装置
CN112214223B (zh) * 2020-10-29 2024-02-09 Oppo广东移动通信有限公司 应用启动方法、装置、终端设备及计算机可读存储介质
CN113703845B (zh) * 2021-08-17 2023-08-22 山东大学 一种基于risc-v的可重构嵌入式处理器微架构及其工作方法
CN114020332B (zh) * 2022-01-05 2022-09-23 北京微核芯科技有限公司 指令处理方法及其装置
CN116187458B (zh) * 2023-02-20 2023-11-03 北京百度网讯科技有限公司 量子电路处理方法、装置及电子设备

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4080599A (en) * 1976-07-28 1978-03-21 Westinghouse Electric Corporation Memory addressing apparatus and method
US4370709A (en) * 1980-08-01 1983-01-25 Tracor, Inc. Computer emulator with three segment microcode memory and two separate microcontrollers for operand derivation and execution phases
US4494187A (en) * 1982-02-22 1985-01-15 Texas Instruments Incorporated Microcomputer with high speed program memory
JPS623338A (ja) * 1985-06-28 1987-01-09 Yokogawa Hewlett Packard Ltd 直接値処理方式
US4811211A (en) 1986-09-26 1989-03-07 Performance Semiconductor Corporation On-line overflow response system and ALU branching structure
DE69231451T2 (de) * 1991-03-11 2001-05-10 Mips Tech Inc Rückwärts kompatible Rechnerarchitektur mit erweiterten Wortbreiten und Adressraum
US5440702A (en) * 1992-10-16 1995-08-08 Delco Electronics Corporation Data processing system with condition code architecture for executing single instruction range checking and limiting operations
US5721857A (en) * 1993-12-30 1998-02-24 Intel Corporation Method and apparatus for saving the effective address of floating point memory operations in an out-of-order microprocessor
AU6677896A (en) * 1995-08-31 1997-03-19 Intel Corporation A set of instructions for operating on packed data
US8121828B2 (en) * 1999-01-28 2012-02-21 Ati Technologies Ulc Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions
US7275246B1 (en) * 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US6151616A (en) * 1999-04-08 2000-11-21 Advanced Micro Devices, Inc. Method and circuit for detecting overflow in operand multiplication
US6560754B1 (en) * 1999-05-13 2003-05-06 Arc International Plc Method and apparatus for jump control in a pipelined processor
US6625634B1 (en) * 1999-10-01 2003-09-23 Sun Microsystems, Inc. Efficient implementation of multiprecision arithmetic
JP2001142695A (ja) 1999-10-01 2001-05-25 Hitachi Ltd 記憶場所への定数のロード方法、宛先記憶場所への定数のロード方法、レジスタへの定数のロード方法、符号ビット数の決定方法、2進数の正規化方法、及びコンピュータシステム内の命令
US7475398B2 (en) * 2000-08-01 2009-01-06 Wind River Systems, Inc. System and method for implementing a smart system call
US7181600B1 (en) * 2001-08-02 2007-02-20 Mips Technologies, Inc. Read-only access to CPO registers
US7139900B2 (en) * 2003-06-23 2006-11-21 Intel Corporation Data packet arithmetic logic devices and methods
US7428567B2 (en) * 2003-07-23 2008-09-23 Sandbridge Technologies, Inc. Arithmetic unit for addition or subtraction with preliminary saturation detection
GB2409068A (en) * 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
US7725522B2 (en) * 2005-04-14 2010-05-25 Texas Instruments Incorporated High-speed integer multiplier unit handling signed and unsigned operands and occupying a small area
US7421566B2 (en) * 2005-08-12 2008-09-02 International Business Machines Corporation Implementing instruction set architectures with non-contiguous register file specifiers
US7739469B2 (en) * 2005-11-08 2010-06-15 Freescale Semiconductor, Inc. Patching ROM code
EP2106584A1 (de) * 2006-12-11 2009-10-07 Nxp B.V. Pipeline-prozessor und compiler/planer für branch-delay-slots mit veränderlicher anzahl
US20100312991A1 (en) * 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
US8918623B2 (en) * 2009-08-04 2014-12-23 International Business Machines Corporation Implementing instruction set architectures with non-contiguous register file specifiers
CN102200905A (zh) * 2010-03-26 2011-09-28 Mips技术公司 具有紧凑指令集架构的微处理器
US10540179B2 (en) * 2013-03-07 2020-01-21 MIPS Tech, LLC Apparatus and method for bonding branch instruction with architectural delay slot
US9483266B2 (en) * 2013-03-15 2016-11-01 Intel Corporation Fusible instructions and logic to provide OR-test and AND-test functionality using multiple test sources
GB2522990B (en) * 2013-12-20 2016-08-03 Imagination Tech Ltd Processor with virtualized instruction set architecture and methods

Also Published As

Publication number Publication date
GB2529777B (en) 2016-08-03
GB2529777A (en) 2016-03-02
GB2557700A (en) 2018-06-27
CN104834503A (zh) 2015-08-12
GB201713727D0 (en) 2017-10-11
US10768930B2 (en) 2020-09-08
GB201520682D0 (en) 2016-01-06
GB201520676D0 (en) 2016-01-06
GB2529778A (en) 2016-03-02
GB2557700B (en) 2018-11-07
GB2529778B (en) 2017-10-11
US20150227365A1 (en) 2015-08-13
US20150227366A1 (en) 2015-08-13

Similar Documents

Publication Publication Date Title
DE102015101541A1 (de) Prozessor mit granulärer addier-direktwert-fähigkeit &amp; verfahren
US10671391B2 (en) Modeless instruction execution with 64/32-bit addressing
DE102014119281A1 (de) Prozessor mit virtualisierter befehlssatzstruktur &amp; verfahren
DE102018005105A1 (de) Befehle für entfernte atomare operationen
TWI752951B (zh) 用於對能力元資料執行操作的設備及方法
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
KR102478874B1 (ko) 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치
DE102014004563A1 (de) Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches
DE102012216592A1 (de) Präfix-Computeranweisung zur Erweiterung der Anweisungsfunktionalität
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112017001716T5 (de) Speicherkopierbefehle, prozessoren, verfahren und systeme
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
JP6745021B2 (ja) 競合検出を実行するための方法および装置
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
EP3649550B1 (de) Vorrichtung und verfahren zur steuerung der ausführung von anweisungen
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
KR101952209B1 (ko) 벡터 레지스터 파일의 동적 재명명 기반의 레지스터 재구성
DE112017003345T5 (de) Bit-prüfprozessoren, verfahren, systeme und anweisungen zum prüfen eines bits mit einem angegebenen prüfbitwert
US7814299B2 (en) Designating operands with fewer bits in instruction code by indexing into destination register history table for each thread

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0009420000

Ipc: G06F0009312000

R081 Change of applicant/patentee

Owner name: MIPS TECH, LLC (N.D.GES.D.STAATES DELAWARE), S, US

Free format text: FORMER OWNER: IMAGINATION TECHNOLOGIES LIMITED, KINGS LANGLEY, HERTFORDSHIRE, GB

R082 Change of representative

Representative=s name: CMS CAMERON MCKENNA NABARRO OLSWANG LLP, GB

Representative=s name: OLSWANG GERMANY LLP, DE

R082 Change of representative

Representative=s name: CMS CAMERON MCKENNA NABARRO OLSWANG LLP, GB

R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee