DE112018003586T5 - Instruktion "inhaltsverzeichnis- (toc) register einrichten" - Google Patents

Instruktion "inhaltsverzeichnis- (toc) register einrichten" Download PDF

Info

Publication number
DE112018003586T5
DE112018003586T5 DE112018003586.7T DE112018003586T DE112018003586T5 DE 112018003586 T5 DE112018003586 T5 DE 112018003586T5 DE 112018003586 T DE112018003586 T DE 112018003586T DE 112018003586 T5 DE112018003586 T5 DE 112018003586T5
Authority
DE
Germany
Prior art keywords
toc
value
instruction
data structure
pointer
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.)
Pending
Application number
DE112018003586.7T
Other languages
English (en)
Inventor
Michael Karl Gschwind
Valentina Salapura
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112018003586T5 publication Critical patent/DE112018003586T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0826Limited pointers directories; State-only directories without pointers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6024History based prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Eine Instruktion „Inhaltsverzeichnis- (TOC) Register einrichten“. Eine Instruktion zum Bereitstellen eines Zeigers auf eine Referenzdatenstruktur, wie beispielsweise ein TOC, wird durch einen Prozessor erhalten und ausgeführt. Das Ausführen enthält ein Bestimmen eines Werts für den Zeiger auf die Referenzdatenstruktur und ein Speichern des Werts in einem Speicherort (z.B. einem Register), der durch die Instruktion angegeben wird.

Description

  • HINTERGRUND
  • Ein oder mehrere Aspekte betreffen allgemein eine Verarbeitung innerhalb einer Datenverarbeitungsumgebung und insbesondere ein Vereinfachen einer derartigen Verarbeitung.
  • Viele Datenverarbeitungssysteme verwenden eine globale Offsettabelle (GOT, Global Offset Table) oder ein Inhaltsverzeichnis (TOC, Table of Contents) um Variablen in Quellcode aufzufüllen. Zum Beispiel generiert ein Compiler Objektcode aus Quellcode, ohne die endgültige Adresse oder Verschiebung des Codes/der Daten zu kennen. Insbesondere generiert der Compiler Objektcode, der auf eine Referenzdatenstruktur mit variabler Adresse (z.B. eine globale Offsettabelle oder ein Inhaltsverzeichnis) für Variablenwerte zugreift, ohne die endgültige Größe der Datenstruktur oder von Offsets/Adressen von verschiedenen Datenabschnitten zu kennen. In dem Objektcode werden Platzhalter für diese Informationen gelassen und durch einen Linker (Programmverbinder) aktualisiert.
  • Für den Zugriff auf die GOT oder das TOC wird ein Zeiger verwendet. Der Zeiger wird typischerweise durch eine Abfolge von Instruktionen berechnet. Diese Instruktionen hängen oft von berechneten Registern ab, die in einem Prozessor nicht immer ohne Weiteres verfügbar sind. Infolgedessen können sich Zugriffe auf Variablen verzögern, die von dem TOC abhängen (z.B. andere Variablen als lokale Variablen).
  • KURZDARSTELLUNG DER ERFINDUNG
  • Unzulänglichkeiten nach dem Stand der Technik werden beseitigt und zusätzliche Vorteile werden durch die Bereitstellung eines Computerprogrammprodukts zum Vereinfachen einer Verarbeitung in einer Datenverarbeitungsumgebung bereitgestellt. Das Computerprogrammprodukt enthält ein durch einen Computer lesbares Speichermedium, das durch eine Verarbeitungsschaltung gelesen werden kann, und das Instruktionen zum Ausführen eines Verfahrens speichert. Das Verfahren enthält zum Beispiel ein Erhalten einer Instruktion durch einen Prozessor, um einen Zeiger auf eine Referenzdatenstruktur bereitzustellen. Die Instruktion wird ausgeführt, und das Ausführen enthält ein Bestimmen eines Werts für den Zeiger auf die Referenzdatenstruktur und ein Speichern des Werts in einem Speicherort, der durch die Instruktion angegeben wird. Die Verwendung einer Instruktion zum Bereitstellen des Zeigerwerts vereinfacht ein Verarbeiten und verbessert die Leistung durch ein Begrenzen von Verzögerungen, die beim Warten auf berechnete Registerwerte auftreten können.
  • In einer Ausführungsform enthält das Bestimmen des Werts ein Ausführen eines Look-Up einer Datenstruktur, um den Wert zu bestimmen. Die Datenstruktur enthält zum Beispiel einen Zeiger-Cachespeicher der Referenzdatenstruktur oder eine Tabelle, die mit Zeigerwerten der Referenzdatenstruktur aufgefüllt ist. Ferner enthält der Speicherort in einem Beispiel ein Register, das durch die Instruktion angegeben wird.
  • In einer weiteren Ausführungsform enthält das Bestimmen des Werts ein Prüfen des Zeiger-Cachespeichers der Referenzdatenstruktur auf einen Eintrag, der den Wert enthält, und ein Ausführen des Speicherns auf Grundlage eines Auffindens des Eintrags. Ferner wird auf Grundlage dessen, dass sich der Wert nicht in dem Cachespeicher der Referenzdatenstruktur befindet, durch den Prozessor eine Trap für einen Handler erstellt. Der Handler erhält den Wert aus einer Datenstruktur, die mit Zeigerwerten der Referenzdatenstruktur aufgefüllt ist, und führt das Speichern aus. In einer Ausführungsform wird der Wert auch in dem Zeiger-Cachespeicher der Referenzdatenstruktur gespeichert.
  • In einer weiteren Ausführungsform wird auf Grundlage dessen, dass sich der Wert nicht in dem Zeiger-Cachespeicher der Referenzdatenstruktur befindet, eine Cachespeicher-Fehltrefferverarbeitung ausgeführt, um den Wert zu bestimmen und den Wert zu speichern.
  • In noch einer weiteren Ausführungsform wird auf Grundlage eines Erhaltens der Instruktion durch den Prozessor eine Trap für einen Handler erstellt, und das Bestimmen und das Speichern werden durch den Handler ausgeführt.
  • Durch einen Computer umgesetzte Verfahren und Systeme, die einen oder mehrere Aspekte betreffen, werden hierin ebenfalls beschrieben und beansprucht. Ferner werden auch Dienste, die einen oder mehrere Aspekte betreffen, hierin ebenfalls beschrieben und können beansprucht werden.
  • Weitere Merkmale und Vorteile werden durch die hierin beschriebenen Techniken verwirklicht. Weitere Ausführungsformen und Aspekte werden hierin ausführlich beschrieben und werden als Bestandteil der beanspruchten Aspekte betrachtet.
  • Figurenliste
  • Ein oder mehrere Aspekte werden besonders hervorgehoben und eindeutig als Beispiele in den Ansprüchen am Ende der Patentschrift beansprucht. Das Vorgenannte und Objekte, Merkmale und Vorteile von einem oder mehreren Aspekten werden aus der folgenden ausführlichen Beschreibung in Verbindung mit den begleitenden Zeichnungen offenkundig, wobei:
    • 1A ein Beispiel für eine Datenverarbeitungsumgebung zum Integrieren und Verwenden von einem oder mehreren Aspekten der vorliegenden Erfindung darstellt;
    • 1B weitere Details eines Prozessors von 1A gemäß einem oder mehreren Aspekten der vorliegenden Erfindung darstellt;
    • 1C weitere Details eines Beispiels einer Instruktionsausführungs-Pipeline darstellt, die gemäß einem oder mehreren Aspekten der vorliegenden Erfindung verwendet wird;
    • 1D weitere Details eines Beispiels eines Prozessors von 1A gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 2 ein Beispiel einer Instruktion „TOC-Register einrichten“ (STR, Set TOC Register) gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 3 ein Beispiel einer Verarbeitung darstellt, die einer Instruktion „TOC-Register einrichten“ gemäß einem Aspekt der vorliegenden Erfindung zugehörig ist;
    • 4 ein weiteres Beispiel einer Verarbeitung darstellt, die einer Instruktion „TOC-Register einrichten“ gemäß einem Aspekt der vorliegenden Erfindung zugehörig ist;
    • 5 noch ein weiteres Beispiel einer Verarbeitung darstellt, die einer Instruktion „TOC-Register einrichten“ gemäß einem Aspekt der vorliegenden Erfindung zugehörig ist;
    • 6A bis 6B Ausführungsformen zum Überprüfen der Einrichtung eines TOC-Registers (auf das hierin auch als ein TOC-Zeigerregister verwiesen wird) gemäß einem Aspekt der vorliegenden Erfindung darstellen;
    • 7A bis 7B weitere Ausführungsformen zum Überprüfen der Einrichtung des TOC-Registers gemäß Aspekten der vorliegenden Erfindung darstellen;
    • 8 eine Ausführungsform zum Bestimmen eines TOC-Zeigerwerts (auf den hierin auch als TOC-Wert verwiesen wird) gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 9 ein Beispiel eines Verarbeitens darstellt, das einem Vorhersagen eines TOC-Werts in Reaktion auf eine Subroutinen-Verzweigung gemäß einem Aspekt der vorliegenden Erfindung zugehörig ist;
    • 10 ein Beispiel einer TOC-Wertprüfungs-Einfügungslogik gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 11 ein weiteres Beispiel eines Verarbeitens darstellt, das einem Vorhersagen eines TOC-Werts in Reaktion auf eine Subroutinen-Verzweigung gemäß einem Aspekt der vorliegenden Erfindung zugehörig ist;
    • 12 ein weiteres Beispiel einer TOC-Wertprüfungs-Einfügungslogik gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 13 ein weiteres Beispiel einer TOC-Wertprüfungs-Einfügungslogik gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 14A ein Beispiel eines TOC-Zeiger-Cachespeichers (auf den hierin auch als TOC-Cachespeicher verwiesen wird) gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 14B ein Beispiel einer Einfügungsverarbeitung des TOC-Cachespeichers gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 15 ein Beispiel von TOC-Werten darstellt, die dynamisch gemeinsam genutzten Objekten gemäß einem Aspekt der vorliegenden Erfindung zugewiesen werden;
    • 16 ein weiteres Beispiel eines TOC-Cachespeichers gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 17 ein weiteres Beispiel einer Einfügungsverarbeitung des TOC-Cachespeichers gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 18 ein Beispiel eines Speicherns von TOC-Werten in einer TOC-Verfolgungsstruktur gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 19 ein Beispiel eines TOC, auf das durch ein schreibgeschütztes TOC-Register verwiesen wird, gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 20A bis 20C Beispiele für Instruktionen „Load TOC-Relative Long“ (TOC laden - Relativ lang) gemäß Aspekten der vorliegenden Erfindung darstellen;
    • 21 ein Beispiel für eine Instruktion „Load Address TOC-Relative Long“ (Adress-TOC laden - Relativ lang) gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 22 ein Beispiel für eine TOC-Instruktion „add immediate shift“ (unmittelbare Verschiebung hinzufügen) gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 23 ein Beispiel für eine Hinzufüge-TOC-Instruktion „immediate shifted“ (unmittelbare Verschobene hinzufügen) gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 24 eine Ausführungsform eines Verarbeitens einer Instruktion, die TOC-Operanden enthalten kann, gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 25 bis 27 Ausführungsformen eines Erhaltens von TOC-Operanden für eine Instruktion gemäß Aspekten der vorliegenden Erfindung darstellen;
    • 28 ein Beispiel für einen Kompilierungsablauf, der einem Verwenden einer Instruktion „TOC-Register einrichten“ zugehörig ist, gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 29 ein Beispiel für einen statischen Linker-Ablauf, der einem Verwenden einer Instruktion „TOC-Register einrichten“ zugehörig ist, gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 30 ein Beispiel für einen Kompilierungsablauf, der einem Verwenden von schreibgeschützten TOC-Registern zugehörig ist, gemäß einem Aspekt der vorliegenden Erfindung darstellt;
    • 31A bis 31B eine Ausführungsform zum Vereinfachen einer Verarbeitung in einer Datenverarbeitungsumgebung gemäß einem Aspekt der vorliegenden Erfindung darstellen;
    • 32A ein weiteres Beispiel einer Datenverarbeitungsumgebung zum Integrieren und Verwenden von einem oder mehreren Aspekten der vorliegenden Erfindung darstellt;
    • 32B weitere Details des Arbeitsspeichers von 32A darstellt;
    • 33 eine Ausführungsform einer Cloud-Computing-Umgebung darstellt; und
    • 34 ein Beispiel für Abstraktionsmodellschichten darstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Gemäß einem Aspekt der vorliegenden Erfindung wird das Bereitstellen eines Zeigers auf eine Referenzdatenstruktur vereinfacht, wie zum Beispiel ein Inhaltsverzeichnis (TOC) oder eine globale Offsettabelle (GOT). In einem Beispiel wird eine Instruktion „TOC-Register einrichten“ (STR) bereitgestellt, die ein Register (oder einen anderen definierten Speicherort) mit einem Wert lädt, der zum Zugreifen auf das TOC verwendet wird (z.B. ein Zeigerwert). Obwohl hierin auf ein TOC als ein Beispiel verwiesen wird, sind die hierin beschriebenen Aspekte, Merkmale und Techniken gleichermaßen auf eine GOT oder andere Strukturen eines ähnlichen Typs anwendbar.
  • TOC-Zeigerwert, TOC-Zeiger, TOC-Wert und Zeiger auf das TOC werden zum Beispiel hierin austauschbar verwendet. Das TOC-Register enthält einen TOC-Zeiger und daher kann hierin darauf als ein TOC-Zeigerregister oder ein TOC-Register verwiesen werden.
  • Ferner wird auf TOC-Zeiger-Cachespeicher, TOC-Zeigerverfolgungsstruktur, TOC-Zeigertabelle usw. auch jeweils als TOC-Cachespeicher, TOC-Verfolgungsstruktur, TOC-Tabelle usw. verwiesen. Desgleichen werden Zeiger-Cachespeicher der Referenzdatenstruktur und Referenzdatenstruktur-Cachespeicher hierin austauschbar verwendet. Weitere Beispiele können ebenfalls vorhanden sein.
  • In einem weiteren Aspekt werden Abfolgen von Instruktionen, die typischerweise zum Einrichten eines TOC-Registers verwendet werden, durch eine Instruktion „TOC-Register einrichten“ ersetzt. Zum Beispiel enthält eine Abfolge von Instruktionen eine oder mehrere Instruktionen. Ferner kann eine Überprüfungsoperation verwendet werden, um den TOC-Registerwert zu überprüfen. Ein TOC-Register kann zum Beispiel ein Hardware-Register oder ein architekturgebundenes Register sein, wie zum Beispiel ein Mehrzweckregister (z.B. r2, r12), das durch eine Architektur definiert wird oder durch eine Anwendungsbinärschnittstelle (ABI, Application Binary Interface) angegeben wird. Weitere Beispiele sind möglich.
  • In noch einem weiteren Aspekt wird der TOC-Zeigerwert in Reaktion auf eine Verzweigung auf eine Subroutine vorhergesagt.
  • In noch einem weiteren Aspekt werden Ausführungsformen eines TOC-Cachespeichers bereitgestellt, um eine Verarbeitung zu vereinfachen. Ein TOC-Cachespeicher (oder ein anderer Referenzdatenstruktur-Cachespeicher) ist zum Beispiel ein prozessorinterner Hochgeschwindigkeits-Cachespeicher, der verschiedene TOC-Zeigerwerte enthält, die für verschiedene, kürzlich verwendete Speicherorte/Module in dem Programm vorhergesagt werden müssen.
  • Des Weiteren wird ein Aspekt zum Vorbereiten und Initialisieren einer TOC-Verfolgungsstruktur zur TOC-Zeigerwertvorhersage bereitgestellt. Eine TOC-Verfolgungsstruktur kann zum Beispiel ein TOC-Cachespeicher oder eine arbeitsspeicherinterne Tabelle sein, die mit TOC-Zeigerwerten aufgefüllt wird, die für verschiedene Speicherorte/Module in dem Programm vorhergesagt werden sollen.
  • In einem weiteren Aspekt wird ein Pseudoregister verwendet (auf das hierin auch als schreibgeschütztes TOC-Register verwiesen wird), um den Zeigerwert zusammen mit TOC-Registeradressiermodi bereitzustellen. Das Pseudoregister ist kein Hardware- oder architekturgebundenes Register, ihm ist auch kein Speicher zugehörig; stattdessen handelt es sich um einen TOC-Zeigerwert, der z.B. aus einem TOC-Cachespeicher erhalten wird (z.B. der Wert, der durch STR erzeugt worden wäre).
  • Außerdem wird in einem weiteren Aspekt ein Code generiert und/oder mit einer Instruktion „TOC-Register einrichten“ kompiliert und/oder um schreibgeschützte TOC-Register zu verwenden.
  • Verschiedene Aspekte werden hierin beschrieben. Ferner sind viele Variationen möglich, ohne von einem Erfindungsgedanken von Aspekten der vorliegenden Erfindung abzuweichen. Es ist anzumerken, sofern es anderweitig nicht widersprüchlich ist, dass jeder Aspekt bzw. jedes Merkmal, die hierin beschrieben werden, sowie Varianten davon mit jedem anderen Aspekt bzw. Merkmal kombinierbar sind.
  • Eine Ausführungsform einer Datenverarbeitungsumgebung zum Integrieren und Verwenden von einem oder mehreren Aspekten der vorliegenden Erfindung wird unter Bezugnahme auf 1A beschrieben. In einem Beispiel kann die Datenverarbeitungsumgebung auf der von International Business Machines Corporation, Armonk, New York, angebotenen z/Architecture beruhen. Eine Ausführungsform der z/Architecture wird in „z/Architecture Principles of Operation“ beschrieben, IBM-Veröffentlichung SA22-7832-10, März 2015, die hierin durch Verweis in ihrer Gesamtheit aufgenommen wird. Z/ARCHITECTURE ist eine eingetragene Marke der International Business Machines Corporation, Armonk, New York, USA.
  • In einem weiteren Beispiel beruht die Datenverarbeitungsumgebung auf der von International Business Machines Corporation, Armonk, New York, angebotenen Power Architecture. Eine Ausführungsform der Power Architecture wird in „Power ISA™ Version 2.07B“, International Business Machines Corporation, 9. April 2015 beschrieben, die hierin durch Verweis in ihrer Gesamtheit aufgenommen wird. POWER ARCHITECTURE ist eine eingetragene Marke der International Business Machines Corporation, Armonk, New York, USA.
  • Die Datenverarbeitungsumgebung kann auch auf anderen Architekturen beruhen, einschließlich Intel x86-Architekturen, sie ist aber nicht darauf beschränkt. Es sind auch weitere Beispiele vorhanden.
  • Wie in 1A gezeigt, enthält eine Datenverarbeitungsumgebung 100 zum Beispiel ein Computersystem 102, das z.B. in der Form einer Mehrzweck-Datenverarbeitungseinheit gezeigt wird. Das Computersystem 102 kann einen oder mehrere Prozessoren oder Verarbeitungseinheiten 104 (z.B. Zentraleinheiten (CPUs, Central Processing Units)), einen Arbeitsspeicher 106 (auf den zum Beispiel als Hauptarbeitsspeicher oder Speicher verwiesen wird), und eine oder mehrere Eingabe/Ausgabe- (E/A) Schnittstellen 108 enthalten, die über einen oder mehrere Busse und/oder andere Verbindungen 110 miteinander verbunden sind, es ist aber nicht darauf beschränkt.
  • Der Bus 110 stellt einen oder mehrere von mehreren beliebigen Typen von Busstrukturen dar, einschließlich eines Arbeitsspeicherbusses oder Arbeitsspeichercontrollers, eines Peripheriebusses, eines Accelerated Graphics Port (beschleunigter Grafikanschluss) und eines Prozessors oder lokalen Busses unter Verwendung von einer aus einer Vielfalt von Busarchitekturen. Als Beispiel und nicht einschränkend enthalten derartige Architekturen den Industry Standard Architecture- (ISA), den Micro Channel Architecture- (MCA), den Enhanced ISA- (EISA), den lokalen Video Electronics Standards Association- (VESA) Bus und den Peripheral Component Interconnect- (PCI) Bus.
  • Der Arbeitsspeicher 106 kann zum Beispiel einen Cachespeicher 120 enthalten, wie beispielsweise einen gemeinsam genutzten Cachespeicher, der mit lokalen Cachespeichern 122 der Prozessoren 104 verbunden sein kann. Ferner kann der Arbeitsspeicher 106 ein oder mehrere Programme oder eine oder mehrere Anwendungen 130, ein Betriebssystem 132 und eine oder mehrere durch einen Computer lesbare Programminstruktionen 134 enthalten. Die durch einen Computer lesbaren Programminstruktionen 134 können so konfiguriert werden, dass sie Funktionen von Ausführungsformen von Aspekten der Erfindung ausführen.
  • Das Computersystem 102 kann z.B. auch über E/A-Schnittstellen 108 mit einer oder mehreren externen Einheiten 140, einer oder mehreren Netzwerkschnittstellen 142 und/oder einer oder mehreren Datenspeichereinheiten 144 Daten austauschen. Zu beispielhaften externen Einheiten zählen ein Benutzerendgerät, ein Bandlaufwerk, eine Zeigeeinheit, eine Anzeige usw. Die Netzwerkschnittstelle 142 ermöglicht es dem Computersystem 102, mit einem oder mehreren Netzwerken Daten auszutauschen, wie beispielsweise einem lokalen Netzwerk (LAN, Local Area Network), einem allgemeinem Weitverkehrsnetzwerk (WAN, Wide Area Network) und/oder einem öffentlichen Netzwerk (z.B. das Internet), wodurch ein Datenaustausch mit anderen Datenverarbeitungseinheiten oder -systemen bereitgestellt wird.
  • Die Datenspeichereinheit 144 kann ein oder mehrere Programme 146, ein oder mehrere durch einen Computer lesbare Programminstruktionen 148 und/oder Daten usw. speichern. Die durch einen Computer lesbaren Programminstruktionen können konfiguriert werden, um Funktionen von Ausführungsformen von Aspekten der Erfindung auszuführen.
  • Das Computersystem 102 kann weitere austauschbare/nicht austauschbare, flüchtige/nicht flüchtige Computersystem-Speichermedien enthalten und oder mit diesen verbunden sein. Zum Beispiel kann es ein nicht entfernbares, nicht flüchtiges magnetisches Medium (das typischerweise als „Festplattenlaufwerk“ bezeichnet wird), ein Magnetplattenlaufwerk zum Auslesen aus und Beschreiben von einer austauschbaren, nicht flüchtigen Magnetplatte (z.B. eine „Floppy Disk“) und/oder ein optisches Plattenlaufwerk zum Auslesen aus oder Beschreiben von einer austauschbaren, nicht flüchtigen optischen Platte, wie beispielsweise ein CD-ROM, DVD-ROM oder ein anderer optischer Datenträger, enthalten oder mit diesen verbunden werden. Es sollte klar sein, dass andere Hardware- und/oder Software-Komponenten in Verbindung mit dem Computersystem 102 verwendet werden könnten. Zu Beispielen gehören Mikrocode, Einheitentreiber, redundante Verarbeitungseinheiten, externe Plattenlaufwerk-Arrays, RAID- (Redundant Array of Independent Disks) Systeme, Bandlaufwerke und Speichersysteme zur Datenarchivierung usw., sie sind aber nicht darauf beschränkt.
  • Das Computersystem 102 kann mit zahlreichen weiteren Umgebungen oder Konfigurationen für Universal- oder Sonder-Datenverarbeitungssysteme betriebsfähig sein. Zu Beispielen für bekannte Datenverarbeitungssysteme, Umgebungen und/oder Konfigurationen, die für eine Verwendung mit dem Computersystem 102 geeignet sein können, zählen PC-Systeme, Servercomputersysteme, Thin Clients, Thick Clients, Handheld- oder Laptop-Einheiten, Multiprozessorsysteme, Systeme auf der Grundlage von Mikroprozessoren, Set-Top-Boxen, programmierbare Unterhaltungselektronik, Netzwerk-PCs, Minicomputersysteme, Mainframe-Computersysteme und verteilte Cloud-Computing-Umgebungen, die beliebige der oben genannten Systeme oder Einheiten und dergleichen aufweisen, sie sind aber nicht darauf beschränkt.
  • Weitere Details in Bezug auf ein Beispiel des Prozessors 104 werden unter Bezugnahme auf 1B beschrieben. Der Prozessor 104 enthält eine Vielzahl von Funktionskomponenten, die zum Ausführen von Instruktionen verwendet werden. Diese Funktionskomponenten enthalten zum Beispiel eine Instruktionsabrufkomponente 150 zum Abrufen von Instruktionen, die ausgeführt werden sollen; eine Instruktionsdecodiereinheit 152 zum Decodieren der abgerufenen Instruktionen und zum Erhalten von Operanden der decodierten Instruktionen; Instruktionsausführungskomponenten 154 zum Ausführen der decodierten Instruktionen; eine Arbeitsspeicherzugriffskomponente 156 für den Zugriff auf den Arbeitsspeicher zum Ausführen der Instruktion, falls nötig; und eine Zurückschreibkomponente 160 zum Bereitstellen der Ergebnisse der ausgeführten Instruktionen. Eine oder mehrere dieser Komponenten können gemäß einem Aspekt der vorliegenden Erfindung verwendet werden, um eine oder mehrere Instruktionen und/oder Operationen auszuführen, die einer Inhaltsverzeichnis- (TOC) Zeigerverarbeitung zugehörig sind.
  • Der Prozessor 104 enthält in einer Ausführungsform auch ein oder mehrere Register 168, die von einer oder mehreren der Funktionskomponenten verwendet werden sollen. Der Prozessor 104 kann zusätzliche, weniger und/oder andere Komponenten als die hierin bereitgestellten Beispiele enthalten.
  • Weitere Details in Bezug auf eine Ausführungspipeline des Prozessors 104 werden unter Bezugnahme auf 1C beschrieben. Obwohl verschiedene Verarbeitungsstufen der Pipeline hierin dargestellt und beschrieben werden, sollte klar sein, dass zusätzliche, weniger und/oder andere Stufen verwendet werden können, ohne von dem Erfindungsgedanken von Aspekten der Erfindung abzuweichen.
  • Unter Bezugnahme auf 1C wird in einer Ausführungsform eine Instruktion aus einer Instruktionswarteschlange abgerufen, 170, und eine Verzweigungsvorhersage 172 und/oder eine Decodierung 174 der Instruktion kann ausgeführt werden. Die decodierte Instruktion kann zu einer Gruppe von Instruktionen 176 hinzugefügt werden, um sie zusammen zu verarbeiten. Die gruppierten Instruktionen werden für einen Mapper 178 bereitgestellt, der alle Abhängigkeiten bestimmt, Ressourcen zuweist und die Gruppe von Instruktionen/Operationen zu den entsprechenden Ausgabewarteschlangen sendet. Für die verschiedenen Typen von Ausführungseinheiten gibt es eine oder mehrere Ausgabewarteschlangen, einschließlich zum Beispiel Verzweigung, Laden/Speichern, Gleitkomma, Festkomma, Vektor usw. Während einer Ausgabestufe 180 wird eine Instruktion/Operation an die entsprechende Ausführungseinheit ausgegeben. Alle Register werden gelesen, 182, um ihre Quellen abzurufen, und die Instruktion/Operation wird während einer Ausführungsstufe 184 ausgeführt. Wie angegeben, kann die Ausführung zum Beispiel für eine Verzweigung, ein Laden (LD) oder ein Speichern (ST), eine Festkomma-Operation (FX), eine Gleitkomma-Operation (FP) oder eine Vektoroperation (VX) erfolgen. Alle Ergebnisse werden während einer Zurückschreibstufe 186 in das bzw. die entsprechenden Register geschrieben. Anschließend wird die Instruktion abgeschlossen 188. Wenn eine Unterbrechung oder ein Flush (Entfernen) 190 vorliegt, kann die Verarbeitung zum Instruktionsabruf 170 zurückkehren.
  • In einem Beispiel ist ferner mit der Decodiereinheit eine Registerumbenennungseinheit 192 verbunden, die beim Speichern/Wiederherstellen von Registern verwendet werden kann.
  • Weitere Details in Bezug auf einen Prozessor werden unter Bezugnahme auf 1D beschrieben. In einem Beispiel ist ein Prozessor, wie beispielsweise der Prozessor 104, ein Pipeline-Prozessor, der zum Beispiel Vorhersage-Hardware, Register, Cachespeicher, Decodierer, eine Instruktionsabfolgesteuerungseinheit und Instruktionsausführungseinheiten enthalten kann. Die Vorhersage-Hardware enthält zum Beispiel eine lokale Verzweigungsverlaufstabelle (BHT, Branch History Table) 105a, eine globale Verzweigungsverlaufstabelle (BHT) 105b und einen globalen Selektor 105c. Auf die Vorhersage-Hardware wird durch ein Instruktionsabruf-Adressregister (IFAR, Instruction Fetch Address Register) 107 zugegriffen, das die Adresse für den nächsten Instruktionsabruf hat.
  • Dieselbe Adresse wird auch für einen Instruktions-Cachespeicher 109 bereitgestellt, der eine Mehrzahl von Instruktionen abrufen kann, auf die als eine „Abrufgruppe“ verwiesen wird. Zum Instruktions-Cachespeicher 109 gehört ein Verzeichnis 111.
  • Auf den Cachespeicher und die Vorhersage-Hardware wird ungefähr zum selben Zeitpunkt mit derselben Adresse zugegriffen. Wenn die Vorhersage-Hardware über Vorhersage-Informationen für eine Instruktion in der Abrufgruppe verfügt, wird diese Vorhersage an eine Instruktionsabfolgesteuerungseinheit (ISU, Instruction Sequencing Unit) 113 weitergeleitet, die wiederum Instruktionen zur Ausführung an Ausführungseinheiten ausgibt. Die Vorhersage kann verwendet werden, um das IFAR 107 in Verbindung mit einer Verzweigungszielberechnung 115 und einer Verzweigungsziel-Vorhersage-Hardware (wie beispielsweise einem Verbindungsregister-Vorhersagestack 117a und einem Zählregisterstack 117b) zu aktualisieren. Wenn keine Vorhersage-Informationen vorhanden sind, aber ein oder mehrere Instruktionsdecodierer 119 eine Verzweigungsinstruktion in der Abrufgruppe finden, wird für diese Abrufgruppe eine Vorhersage erstellt. Vorhergesagte Verzweigungen werden in der Vorhersage-Hardware, wie beispielsweise in einer Verzweigungsinformations-Warteschlange (BIQ, Branch Information Queue) 125 gespeichert und an die ISU 113 weitergeleitet.
  • Eine Verzweigungsausführungseinheit (BRU, Branch Execution Unit) 121 arbeitet in Reaktion auf Instruktionen, die von der ISU 113 an sie ausgegeben werden. Die BRU 121 hat Lesezugriff auf eine Datei 123 eines Bedingungsregisters (CR, Condition Register). Die Verzweigungsausführungseinheit 121 hat des Weiteren Zugriff auf Informationen, die von der Verzweigungsabtastlogik in der Verzweigungsinformations-Warteschlange 125 gespeichert werden, um den Erfolg einer Verzweigungsvorhersage festzustellen, und sie ist mit dem bzw. den Instruktionsabruf-Adressregistern (IFAR) 107, die dem einen oder den mehreren durch den Mikroprozessor unterstützten Threads entsprechen, betriebsfähig verbunden. Gemäß mindestens einer Ausführungsform gehören BIQ-Einträge zu einer Kennung und werden durch eine Kennung identifiziert, z.B. ein Verzweigungs-Tag, BTAG (Branch Tag). Wenn eine einem BIQ-Eintrag zugehörige Verzweigung abgeschlossen ist, wird sie als solche gekennzeichnet. BIQ-Einträge werden in einer Warteschlange verwaltet, und die ältesten Warteschlangeneinträge werden sequenziell freigegeben, wenn sie als Warteschlangeneinträge gekennzeichnet sind, die Informationen enthalten, die einer abgeschlossenen Verzweigung zugehörig sind. Die BRU 121 ist ferner betriebsfähig verbunden, um eine Prädiktor-Aktualisierung zu veranlassen, wenn die BRU 121 eine Verzweigungs-Falschvorhersage erkennt.
  • Wenn die Instruktion ausgeführt wird, erkennt die BRU 121, ob die Vorhersage falsch ist. Ist dies der Fall, muss die Vorhersage aktualisiert werden. Zu diesem Zweck enthält der Prozessor auch eine Prädiktoraktualisierungslogik 127. Die Prädiktoraktualisierungslogik 127 reagiert auf eine Aktualisierungsanzeige von der Verzweigungsausführungseinheit 121 und ist so konfiguriert, dass sie Array-Einträge in einer oder mehreren der lokalen BHT 105a, der globalen BHT 105b und dem globalen Selektor 105c aktualisiert. Die Vorhersage-Hardware 105a, 105b und 105c kann über Schreibanschlüsse verfügen, die sich von den Leseanschlüssen unterscheiden, die von der Instruktionsabruf- und Vorhersageoperation verwendet werden, oder ein einzelner Schreib-/Leseanschluss kann gemeinsam genutzt werden. Die Prädiktoraktualisierungslogik 127 kann ferner mit einem Verbindungsstack 117a und einem Zählregisterstack 117b betriebsfähig verbunden sein.
  • Unter folgender Bezugnahme auf die Bedingungsregister-Datei (CRF, Condition Register File) 123 wird auf die CRF 123 von der BRU 121 zugegriffen und von dieser gelesen, und in sie kann durch die Ausführungseinheiten geschrieben werden, die eine Festkommaeinheit (FXU, Fixed Point Unit) 141, eine Gleitkommaeinheit (FPU, Floating Point Unit) 143 und eine Vektor-Multimediaerweiterungseinheit (VMXU, Vector Multimedia Extension Unit) 145 enthalten, sie sind jedoch nicht darauf beschränkt. Eine Bedingungsregisterlogik-Ausführungseinheit (CRL, condition register logic) 147 (wobei darauf auch als die CRU verweisen wird) und eine Spezialregister- (SPR, special purpose register) Handhabungslogik 149 haben Lese- und Schreibzugriff auf die Bedingungsregister-Datei (CRF) 123. Die CRU 147 führt logische Operationen an den in der CRF-Datei 123 gespeicherten Bedingungsregistern durch. Die FXU 141 kann Schreibaktualisierungen für die CRF 123 ausführen.
  • Der Prozessor 104 enthält ferner eine Lade-/Speichereinheit 151 und verschiedene Multiplexer 153 und Pufferspeicher 155 sowie Adressumsetzungstabellen 157 und andere Schaltlogik.
  • Der Prozessor 104 führt Programme aus (auf die auch als Anwendungen verwiesen wird), die Variablen enthalten. Eine Variable hat eine Kennung (z.B. Name) und verweist auf einen Speicherort, der einen Wert enthält (z.B. Informationen, Daten). Während der Laufzeit bestimmt ein Programm Adressen der Variablen, die zum Kompilierzeitpunkt nicht bekannt waren, unter Verwendung des TOC.
  • Wenn eine Subroutine aufgerufen wird, erstellt die Subroutine ihr eigenes TOC, da sie, wenn sie sich in einem anderen Modul als die Funktion befindet, die sie aufgerufen hat, ihr eigenes Datenwörterbuch (d.h. TOC) haben wird, und ein Zeiger auf dieses Wörterbuch muss erstellt werden. Das Erstellen eines derartigen Zeigers ist kostspielig.
  • Ein Beispiel für einen Code, der zum Erstellen eines TOC-Zeigers verwendet wird, wird im Folgenden gezeigt, z.B. unter Bezugnahme auf eine beispielhafte ABI wie die Open POWER ELFv2 ABI.
  • Gemäß einer derartigen beispielhaften Ausführungsform initialisiert der Aufrufer ein oder mehrere Register mit der Adresse der aufgerufenen Funktion, z.B. gemäß einer ABI.
  • In dem folgenden Beispiel werden zwei Register, r12 und ctr, mit der Adresse der aufgerufenen Funktion initialisiert:
    Figure DE112018003586T5_0001
  • Die aufgerufene Funktion initialisiert einen TOC-Zeiger gemäß einer erstellten ABI. Es gibt eine Vielfalt von Umsetzungen. In einer Ausführungsform wird die Einsprungadresse von dem einen oder den mehreren durch den Aufrufer initialisierten Registern verwendet, wenn die Adressfunktion über einen registerindirekten Aufruf aufgerufen wird. Zum Beispiel kann gemäß einer beispielhaften ABI, wie beispielsweise der Open POWER ELFv2 ABI, das TOC-Zeigerregister r2 wie folgt unter Verwendung der Funktionseinsprungadresse der aufgerufenen Funktion initialisiert werden, die durch den Aufrufer durch die mit „foo“ bezeichnete Funktion in r12 geladen wird.
    Figure DE112018003586T5_0002
  • Gemäß einem Aspekt der vorliegenden Erfindung wird statt eines Bestimmens des TOC-Zeigers unter Verwendung von beispielsweise dem obigen Code, der in vielen Mikroprozessorumsetzungen kostspielig ist, eine Instruktion „TOC-Register einrichten“ (STR) verwendet. Die Instruktion „TOC-Register einrichten“ lädt ein Register (oder einen anderen definierten Speicherort) mit einem Wert eines Zeigers auf das TOC, z.B. durch Ausführen eines Look-Up in dem Prozessor. Da das TOC von allen (oder einer Gruppe) von Funktionen eines Moduls gemeinsam genutzt wird, muss nur eine kleine Anzahl von TOC-Registerwerten gespeichert und einem Bereich von Adressen zugeordnet werden. Zum Beispiel kann die Instruktion „TOC-Register einrichten“ als eine architekturgebundene Hardware-Instruktion oder eine interne Operation umgesetzt werden.
  • Ein Beispiel für eine Instruktion „TOC-Register einrichten“ (STR) wird unter Bezugnahme auf 2 beschrieben. In einem Beispiel enthält eine Instruktion „TOC-Register einrichten“ 200 ein Operationscode- (Opcode) Feld 202, das einen Operationscode enthält, der eine TOC-Registeroperation angibt, und ein Zielregister- (RT, Target Register) Feld 204, das einen Speicherort angibt, wie beispielsweise ein Register, um den Wert des TOC-Zeigers aufzunehmen.
  • Obwohl ein einzelnes Opcode-Feld in diesem Beispiel gezeigt wird, kann in anderen Ausführungsformen eine Mehrzahl von Opcode-Feldern vorhanden sein. Weitere Variationen sind ebenfalls möglich.
  • Wie angegeben, identifiziert das Zielregisterfeld 204 ein Register, das mit einem TOC-Zeigerwert geladen werden soll. Die STR-Instruktion lädt das durch das Feld 204 angegebene Register mit dem Wert des TOC-Zeigers für eine vorliegende Codeabfolge, in dem die Codeabfolge Code entspricht, der auf die Adresse der STR-Instruktion folgt.
  • Es gibt eine Vielfalt von möglichen Umsetzungen von Verarbeitungen, die der STR-Instruktion zugehörig sind, einschließlich zum Beispiel eine Software-Umsetzung, eine durch Hardware unterstützte Umsetzung und eine Hardware-Umsetzung. In der Software-Umsetzung wird auf Grundlage eines Ausführens der STR-Instruktion eine Ausnahme ausgelöst, und die Einrichtung des TOC-Registers wird durch Supervisor-Code (z.B. das Betriebssystem oder Hypervisor) oder durch einen Benutzermodus-Interrupt-Handler (z.B. unter Verwendung einer Verzweigungsfunktion auf Grundlage eines Ereignisses gemäß einer Definition der Power Architecture emuliert). In der durch Hardware unterstützten Umsetzung stellt die Hardware einen Cachespeicher (z.B. eine kleine Tabelle oder eine andere Datenstruktur, um die am häufigsten verwendeten Werte zu speichern) oder einen Prädiktor für häufige Werte und Traps für die Software bereit. Der Supervisor-Code oder Benutzermodus-Interrupt-Handler verarbeitet die Instruktion anschließend wie oben beschrieben. In der Hardware-Umsetzung stellt die Hardware einen Cachespeicher oder Prädiktor für häufige Werte bereit, und durchsucht auf Grundlage eines Fehltreffers in dem Cachespeicher eine Tabelle (oder eine andere Datenstruktur, die in Software mit den TOC-Zeigerwerten aufgefüllt worden ist). Weitere Details in Bezug auf Umsetzungswahlmöglichkeiten werden unter Bezugnahme auf 3 bis 5 beschrieben.
  • Eine Umsetzung, die Software verwendet, z.B. Supervisor-Code oder Benutzermodus-Interrupt-Handler werden unter Bezugnahme auf 3 beschrieben. Unter Bezugnahme auf 3 wird in einem Beispiel die STR-Instruktion durch einen Prozessor empfangen, SCHRITT 300, und eine Trap wird für eine Handler-Routine ausgelöst, wie zum Beispiel ein Supervisor (z.B. das Betriebssystem (BS) oder ein Hypervisor (HV) oder Benutzermodus-Interrupt-Code, SCHRITT 310. Die Handler-Routine wird eingegeben, SCHRITT 320, und der Handler durchsucht z.B. in einem Cachespeicher oder einer Tabelle den TOC-Zeigerwert für die Funktion, die der Adresse der STR-Instruktion entspricht, SCHRITT 330. Der erhaltene TOC-Wert wird in das Zielregister der STR-Instruktion geladen, SCHRITT 340. Danach kehrt die Verarbeitung zu dem Code nach der STR-Instruktion zurück, um die Ausführung mit dem erhaltenen TOC-Wert fortzusetzen, SCHRITT 350.
  • Eine weitere Umsetzung wird unter Bezugnahme auf 4 beschrieben, in der eine durch Hardware unterstützte Umsetzung beschrieben wird. Unter Bezugnahme auf 4 wird eine STR-Instruktion von einem Prozessor empfangen, SCHRITT 400, und ein Look-Up eines TOC-Cachespeichers wird ausgeführt, um den TOC-Wert für die Funktion zu finden, die die STR-Instruktion enthält, SCHRITT 402. Eine Bestimmung wird vorgenommen, ob ein TOC-Cachespeichereintrag für die Funktion gefunden wurde, ABFRAGE 404. Wenn der TOC-Cachespeichereintrag gefunden wurde, wird das STR-Zielregister mit dem Ergebnis des Look-Up des TOC-Cachespeichers geladen, SCHRITT 406. Andernfalls wird eine Trap für die Handler-Routine wie oben beschrieben erstellt, SCHRITT 408. Zum Beispiel wird die Handler-Routine eingegeben, SCHRITT 410, und ein Look-Up wird z.B. in einer Tabelle für den TOC-Zeigerwert für die Funktion ausgeführt, die der Adresse der STR-Instruktion entspricht, SCHRITT 412. Der TOC-Cachespeicher wird mit dem TOC-Wert geladen, SCHRITT 414, und das Zielregister der STR-Instruktion wird mit dem erhaltenen TOC-Wert geladen, SCHRITT 416. Danach kehrt die Verarbeitung zu der Instruktion nach der STR-Instruktion zurück, um die Ausführung mit dem erhaltenen TOC-Wert fortzusetzen, SCHRITT 418.
  • Eine weitere Umsetzung wird unter Bezugnahme auf 5 beschrieben, in der Hardware die Verarbeitung ausführt. Unter Bezugnahme auf 5 wird eine STR-Instruktion empfangen, SCHRITT 500, und ein Look-Up eines TOC-Cachespeichers wird ausgeführt, um den TOC-Wert für die Funktion zu finden, die die STR-Instruktion enthält, SCHRITT 502. Eine Bestimmung wird vorgenommen, ob ein TOC-Cachespeichereintrag für die Funktion gefunden wurde, ABFRAGE 504. Wenn der TOC-Cachespeichereintrag gefunden wurde, wird das STR-Zielregister mit dem Ergebnis des Look-Up des TOC-Cachespeichers geladen, SCHRITT 506. Wenn der TOC-Cachespeichereintrag jedoch nicht gefunden wurde, wird die Behandlungslogik für TOC-Cachespeicher-Fehltreffer ausgeführt, SCHRITT 510. Dazu gehört zum Beispiel ein Bestimmen eines Look-Up-Tabellenstarts, SCHRITT 512, und in einer oder mehreren Tabellen oder anderen Datenstrukturen ein Durchsuchen nach dem TOC-Wert für die Funktion, die der Adresse der STR entspricht, SCHRITT 514. Der TOC-Cachespeicher wird mit dem gefundenen TOC-Wert (z.B. Adresse) geladen, SCHRITT 516, und das Zielregister der STR wird mit dem erhaltenen TOC-Wert geladen, SCHRITT 518.
  • In einem oder mehreren der vorgenannten Beispiele kann der TOC-Cachespeicher auf vielerlei Weise umgesetzt werden. Zum Beispiel kann er ein Paar (STR-Adresse, zurückgegebener Wert) enthalten, das einen Wert zuordnet, der für die Adresse jeder STR-Instruktion zurückgegeben werden soll, oder er kann einen Reihe von Adressen von STR-Instruktionen enthalten, für die ein bestimmter Wert zurückzugeben ist, da benachbarte Funktionen typischerweise ein TOC gemeinsam nutzen, z.B. Speichern eines Triple (from_range, to_range, zurückgegebener Wert) in einer Tabelle. Weitere Details in Bezug auf TOC-Cachespeicher werden im Folgenden beschrieben.
  • Obwohl in den oben beschriebenen Ausführungsformen die STR verwendet wird, um einen TOC-Wert zu laden, kann die STR auch zum Laden anderer Werte, wie zum Beispiel eine magische Zahl (z.B. Kennung in beispielsweise dem ausführbaren und verknüpfbaren Format (ELF, Executable and Linkable Format)) oder andere Werten verwendet werden, z.B. diejenigen, die einem Codebereich, bestimmten Modulen oder bestimmten Instruktionsadressen einer STR-Instruktion zugehörig sein können. Es gibt viele Möglichkeiten.
  • In einem weiteren Aspekt wird Code für die Suche nach Instruktionsabfolgen, die den Wert eines TOC-Registers einrichten, und diejenigen Instruktionsabfolgen gescannt, die durch eine Instruktion „TOC-Register einrichten“ ersetzt werden. In noch einem weiteren Aspekt wird eine Überprüfungsinstruktion bereitgestellt, um eine Vorhersage des Werts des TOC-Registers zu überprüfen. Zum Beispiel enthält eine Instruktionsabfolge eine oder mehrere Instruktionen.
  • Gemäß herkömmlichen Techniken zur Code-Generierung werden TOC-Werte oft unter Verwendung einer Abfolge von Instruktionen berechnet oder aus dem Stack geladen.
  • Zum Beispiel kann ein TOC-Wert unter Verwendung einer Abfolge berechnet werden wie zum Beispiel:
    Figure DE112018003586T5_0003
    Figure DE112018003586T5_0004
  • In einem weiteren Beispiel wird ein TOC-Wert aus dem Arbeitsspeicher (z.B. einem Stack) geladen (Id):
       Id    r2, sp, <stackoffset for TOC> // sp ist ein Stack-Zeiger
  • Diese Abfolgen umfassen im Allgemeinen Interlocks (müssen z.B. warten, bis eine vorherige Speicherinstruktion, die sich auf ein Speichern des TOC-Werts bezieht, abgeschlossen ist), bevor sie beendet werden können. Dieser Typ von Interlock führt im Allgemeinen zu einer Leistungsverschlechterung. Somit erkennt gemäß einem Aspekt der vorliegenden Erfindung eine Prozessor-Instruktionsdecodiereinheit TOC-Einrichtungsinstruktionen und/oder TOC-Einrichtungsinstruktionsabfolgen und ersetzt sie durch eine STR-Instruktion. Optional wird auch eine Überprüfungsinstruktion bereitgestellt. Wie hierin verwendet, enthält eine TOC-Einrichtungsinstruktion und/oder eine TOC-Einrichtungsinstruktionsabfolge eine oder mehrere Instruktionen, die zum Einrichten eines TOC-Registers oder zum Berechnen eines TOC-Zeigerwerts verwendet werden.
  • Zum Beispiel wird in einer Ausführungsform die folgende Instruktionsabfolge durch den Prozessor erkannt (z.B. die Instruktionsdecodiereinheit des Prozessors):
  •        addis       r2, r12, offset@h
           addi              r2, r2, offset@l
    und die Abfolge wird durch die folgenden Operationen ersetzt, um einen (vorhergesagten) TOC-Wert zu laden und die Vorhersage zu überprüfen, indem sie mit der Summe des Registers r12 und des Offset verglichen wird, die in dem ursprünglichen Code zum Berechnen von r2 verwendet wurden:
           STR r2
           verify r2, r12, offset
  • In einem weiteren Beispiel:
  •        Id       r2, sp, <stackoffset for TOC>
           wird ersetzt durch:
           STR r2
           load-verify r2, sp, <stackoffset>
  • Beispiele für die STR-Instruktion werden oben beschrieben, und weitere Details zur Verwendung der Überprüfungsoperationen werden im Folgenden beschrieben. Zum Beispiel werden weitere Details, die einer Verwendung einer internen STR-Überprüfungsoperation (iop, internal operation) zugehörig sind, z.B. rx, ry, Offset überprüfen, unter Bezugnahme auf 6A beschrieben.
  • Unter Bezugnahme auf 6A wird eine Überprüfungstechnik beschrieben, die z.B. von einem Prozessor ausgeführt wird. Zunächst wird eine interne Überprüfungsoperation empfangen (z.B. eine interne Operation zum Überprüfen von rx, ry, Offset mit zwei beispielhaften Registeroperanden und ein unmittelbarer Zahlenoperand - wie beispielsweise die beispielhafte Überprüfung von r2, r12, Offset in dem vorgenannten Beispielcode), wird empfangen, SCHRITT 600. Eine Variable wird durch Addieren des Offset der Überprüfungsoperation zu einem Wert eines Basisregisters ry der internen Überprüfungsoperation berechnet (z.B. r12), SCHRITT 602. Eine Bestimmung wird vorgenommen, ob ein Wert in dem Zielregister rx, der internen Überprüfungsoperation (z.B. r2), gleich dem berechneten Wert, a, ist, ABFRAGE 604. Wenn der Wert von rx gleich dem berechneten Wert, a, ist, ist die Überprüfung abgeschlossen, SCHRITT 606, und erfolgreich.
  • Wenn der Wert von rx jedoch ungleich a ist, wird a dem Zielregister rx zugewiesen, SCHRITT 608, und eine Wiederherstellung wird initiiert, SCHRITT 610. Die Wiederherstellung enthält zum Beispiel ein Entfernen von fehlerhaften Verwendungen von rx aus der Instruktions-Pipeline nach der aktuellen Instruktion oder ein Entfernen aller Instruktionen in der Pipeline nach der aktuellen Instruktion. Weitere Variationen sind ebenfalls möglich.
  • In einer weiteren Ausführungsform, wie in 6B gezeigt, wird der berechnete Wert (z.B. der TOC-Zeiger, auch als TOC-Zeigeradresse oder Adresse bezeichnet) in den TOC-Cachespeicher geladen, SCHRITT 620.
  • Weitere Beispiele für Überprüfungstechniken, die z.B. von einem Prozessor ausgeführt werden, werden unter Bezugnahme auf 7A bis 7B beschrieben. Unter Bezugnahme auf 7A wird in einem Beispiel eine interne Lade-Überprüfungsoperation empfangen, SCHRITT 700. Für eine Variable wird ein Wert berechnet. Zum Beispiel wird ein Wert auf der Arbeitsspeicheradresse ry (d.h. auf dem Stack-Zeiger) plus ein Offset einer Variablen, a, zugewiesen, SCHRITT 702. Eine Bestimmung wird vorgenommen, ob der Wert eines Basisregisters rx (z.B. r2) gleich a ist, ABFRAGE 704. Wenn der Wert in rx gleich dem berechneten Wert, a, ist, ist die Überprüfung abgeschlossen und erfolgreich, SCHRITT 706. Wenn der berechnete Wert a nicht gleich dem Wert in rx ist, wird a zu rx zugewiesen, SCHRITT 708. Des Weiteren wird eine Wiederherstellung initiiert, SCHRITT 710. Die Wiederherstellung enthält zum Beispiel ein Entfernen der fehlerhaften Verwendungen von rx oder ein Entfernen aller Instruktionen in der Pipeline nach der aktuellen Instruktion. Weitere Variationen sind möglich.
  • In einer weiteren Ausführungsform, unter Bezugnahme auf 7B, wird der berechnete Wert (z.B. der TOC-Zeiger oder die Adresse) in den TOC-Cachespeicher geladen, SCHRITT 720.
  • In einer weiteren Ausführungsform können verschiedene Ausführungspfade abhängig davon verwendet werden, ob der TOC-Wert sich in dem TOC-Cachespeicher befindet. Ein Beispiel für diese Verarbeitung wird z.B. durch einen Prozessor ausgeführt und wird unter Bezugnahme auf 8 beschrieben. Zunächst wird eine Bestimmung vorgenommen, ob eine Möglichkeit vorhanden ist, Instruktionsabfolgen zu ersetzen, die zum Bestimmen des TOC-Werts verwendet werden (z.B. eine Möglichkeit, mehrere Instruktionen zu einer iop-Abfolge zu verschmelzen), ABFRAGE 800. Das heißt, gibt es eine Möglichkeit, Abfolgen von Instruktionen durch eine STR und optional eine Überprüfung zu ersetzen, oder irgendeine andere Ersetzung von Instruktionen auszuführen? Falls nicht, wird eine herkömmliche Verarbeitung ausgeführt, um den TOC-Wert zu bestimmen (z.B. unter Verwendung der Abfolge von Instruktionen addis/addi oder einer Ladeinstruktion), SCHRITT 802. Wenn jedoch eine Möglichkeit zum Ersetzen eines TOC-Werts besteht, wird in dem TOC-Cachespeicher ein Look-Up ausgeführt, um zu bestimmen, ob ein Wert für die Routine mit der STR vorhanden ist, SCHRITT 804. Ist ein TOC-Cachespeichertreffer vorhanden, wird das Zielregister der STR mit dem TOC-Wert aktualisiert, SCHRITT 808. Des Weiteren wird eine Überprüfung in einem Beispiel ausgeführt, SCHRITT 810. Wenn jedoch, unter erneuter Bezugnahme auf ABFRAGE 806, kein TOC-Cachespeichertreffer vorliegt, wird der TOC-Wert beispielsweise entweder durch eine Abfolge von Berechnungsinstruktionen (z.B. addis, addi) oder eine Ladeinstruktion generiert, SCHRITT 812. Der berechnete Wert wird in den TOC-Cachespeicher geladen, SCHRITT 814, und das Zielregister wird aktualisiert, SCHRITT 816.
  • Weitere Umsetzungen und Variationen sind ebenfalls möglich.
  • In einem weiteren Aspekt wird der TOC-Wert auf Grundlage eines Einsprungs einer Subroutine vorhergesagt. Wenn zum Beispiel ein Subroutinen-Aufruf ausgeführt wird, wird der TOC-Wert vorhergesagt, statt darauf zu warten, eine Abfolge von Instruktionen zu finden, von denen angenommen wird, dass sie den TOC-Wert berechnen. Stattdessen wird der TOC-Wert bei Einsprung der Subroutine vorhergesagt und anschließend, wenn die Abfolge von Instruktionen in der aufgerufenen Routine, die den TOC-Wert berechnet, angetroffen wird, wird sie durch eine TOC-Prüfinstruktion ersetzt (d.h. eine Instruktion, die den vorhergesagten TOC-Wert prüft oder überprüft). Wenn die TOC-Prüfinstruktion nicht erfolgreich ist oder auf einen TOC-Wert ohne vorherige Prüfung der Vorhersage zugegriffen wird, kann eine Wiederherstellung ausgeführt werden.
  • Zum Beispiel sagt der Prozessor den Wert des TOC-Registers (z.B. r2) für eine Subroutine auf Grundlage von vorher beobachteten Adressen vorher. Der vorhergesagte TOC-Wert wird zum Beispiel in ein Zieladressregister-Array in Verbindung mit einer vorhergesagten Zieladresse oder in ein separates TOC-Vorhersage-Array eingegeben.
  • In bestimmten Ausführungsformen kann der TOC-Wert zum Beispiel unter Verwendung der durch Hardware unterstützten Technik, die unter Bezugnahme auf 4 beschrieben wurde, und/oder der Hardware-Technik vorhergesagt werden, die unter Bezugnahme auf 5 beschrieben wurde. In einer weiteren Ausführungsform wird der TOC-Wert unter Verwendung der Abfolge von Instruktionen in Legacy Code erhalten, um den TOC-Wert zu berechnen und den TOC-Cachespeicher zu initialisieren. Es sind auch andere Möglichkeiten vorhanden.
  • Eine Ausführungsform zum Vorhersagen des TOC-Werts auf Grundlage einer Subroutinen-Verzweigung wird unter Bezugnahme auf 9 beschrieben. Diese Verarbeitung wird z.B. durch einen Prozessor ausgeführt. Unter Bezugnahme auf 9 wird zunächst eine Bestimmung vorgenommen, ob der Subroutinen-Aufruf ein Kandidat für ein Vorhersagen des TOC-Werts ist, ABFRAGE 900. Zum Beispiel, ist der Subroutinen-Aufruf eine registerindirekte Verzweigung (in der ein Speicherort der Adresse der nächsten auszuführenden Instruktion in einer Verzweigungsinstruktion statt in der Adresse selbst angegeben ist)? In anderen Ausführungsformen werden andere Verzweigungen als lokale Modulfunktionen als Kandidaten betrachtet, oder Filter oder andere Mechanismen können bereitgestellt werden, um eine Kandidatur zu bestimmen. Falls nicht, wird eine herkömmliche Verarbeitung ausgeführt, SCHRITT 902. Wenn der Subroutinen-Aufruf jedoch ein Kandidat für ein Vorhersagen des TOC-Werts ist, wird der Subroutinen-Aufruf ausgeführt, SCHRITT 904. Dieser Aufruf kann zusätzlich zu dem TOC-Wert mit einer Vorhersage von anderen Typen von Werten gekoppelt werden. Außerdem wird der alte TOC-Wert zum Beispiel in einem Wiederherstellungs-Speicherort gespeichert, wie beispielsweise einem Register TOCRECOVER, SCHRITT 906. Ferner wird der TOC-Wert vorhergesagt, SCHRITT 908. Verschiedene Techniken können verwendet werden, um den TOC-Wert wie hierin beschrieben vorherzusagen. Der vorhergesagte TOC-Wert wird anschließend in ein TOC-Zeigerregister geladen (z.B. r2), SCHRITT 910. Die Identifizierung des TOC-Registers kann beispielsweise hartcodiert sein oder kann konfiguriert werden. Ferner wird in einem Beispiel ein Flag (Kennzeichen) oder ein anderer Indikator, der in einem ausgewählten Speicherort verwaltet wird, eingestellt (z.B. auf 1), um anzugeben, dass eine TOC-Prüfung (z.B. eine Prüfung des TOC-Werts) vor einem Verwenden des TOC-Werts ausgeführt werden muss, SCHRITT 912.
  • Weitere Details in Bezug auf eine TOC-Prüfung und insbesondere eine Einfügungslogik für die TOC-Prüfung werden unter Bezugnahme auf 10 beschrieben. In einem Beispiel ist diese Logik in der Decodiereinheit integriert. Zunächst wird eine Instruktion erhalten und decodiert, SCHRITT 1000. Eine Bestimmung wird vorgenommen, ob das TOC-Prüf-Flag gesetzt wurde, ABFRAGE 1002. Falls es nicht gesetzt wurde, ist diese Verarbeitung abgeschlossen. Wenn das TOC-Prüf-Flag jedoch gesetzt ist (z.B. auf 1 gesetzt ist), wird eine weitere Bestimmung vorgenommen, ob die aktuelle Instruktion einer TOC-Einrichtungsinstruktion entspricht (z.B. einer Abfolge von einer oder mehreren Instruktionen zum Einrichten (z.B. Laden, Speichern, Bereitstellen, Einfügen, Platzieren) des TOC-Werts in beispielsweise einem TOC-Register; z.B. einer Ladeinstruktion oder einer Abfolge von Instruktionen zum Berechnen des TOC-Werts), ABFRAGE 1004. Wenn die aktuelle Instruktion einer TOC-Einrichtungsinstruktion entspricht, wird die TOC-Prüfung in den Code eingefügt, SCHRITT 1006. Zum Beispiel ersetzt eine STR-Überprüfungs- oder eine STR-Lade-Überprüfungs-Instruktion die eine oder die mehreren Instruktionen in dem Code, der zum Berechnen des TOC-Werts verwendet wird. Die Parameter einer Überprüfungsinstruktion werden z.B. von den Berechnungsabfolgen abgeleitet, die z.B. auf Grundlage der hierin im Vorgenannten gezeigten Beispiele ersetzt werden. Somit kann eine Instruktionsabfolge auf Grundlage von Berechnungsinstruktionen durch eine Überprüfungsinstruktion ersetzt werden, die die Adresse ähnlich wie die Berechnungsinstruktion(en) berechnet, z.B. durch ein Ersetzen von einer oder mehreren Addierinstruktionen durch eine Überprüfungs-Berechnungsinstruktion unter Verwendung entsprechender Additionen, und Ladeinstruktionen können durch Lade-Überprüfungsinstruktionen ersetzt werden, die den dagegen zu vergleichenden Wert aus demselben Speicherort bzw. denselben Speicherorten erhalten, von dem bzw. denen eine ersetzte Ladeinstruktion in ein TOC-Register geladen worden wäre. Außerdem wird das TOC-Prüf-Flag ausgeschaltet (z.B. auf 0 gesetzt), SCHRITT 1008.
  • Wenn unter erneuter Bezugnahme auf ABFRAGE 1004 die aktuelle Instruktion nicht der TOC-Einrichtungsinstruktion entspricht, wird eine weitere Bestimmung vorgenommen, ob die aktuelle Instruktion einer TOC-Verwendungsinstruktion entspricht (d.h. einer oder mehreren Instruktionen, den TOC-Wert oder das TOC-Register zu verwenden), ABFRAGE 1010. Falls nicht, ist die Verarbeitung abgeschlossen. Andernfalls kann eine Wiederherstellung ausgeführt werden, SCHRITT 1012. In einer Ausführungsform kann dies durch ein Zurückkopieren des Werts in TOCREVOVER in das TOC-Register (z.B. r2) erreicht werden. In einer anderen Ausführungsform kann eine Registerumbenennung verwendet werden. In dieser Ausführungsform wird der vorhergesagte TOC-Wert in einem neuen Umbenennungsregister gespeichert, und während der Wiederherstellung wird das neue Umbenennungsregister ungültig gemacht oder der alte TOC-Wert wird aus einem anderen Umbenennungsregister in das neue Umbenennungsregister kopiert. Weitere Umsetzungen und/oder Ausführungsformen sind ebenfalls möglich.
  • Eine weitere Ausführungsform zum Vorhersagen eines TOC-Werts auf Grundlage einer Subroutinen-Verzweigung wird unter Bezugnahme auf 11 beschrieben. Diese Verarbeitung wird z.B. durch einen Prozessor ausgeführt. Unter Bezugnahme auf 11 wird zunächst eine Bestimmung vorgenommen, ob der Subroutinen-Aufruf ein Kandidat für ein Vorhersagen des TOC-Werts ist, ABFRAGE 1100. In einer Ausführungsform werden registerindirekte Verzweigungen vorhergesagt. In anderen Ausführungsformen werden modullokale Funktionen ausgeschlossen und/oder Filter können einen Kandidatenstatus des Weiteren unterdrücken, entweder auf Grundlage einer aufgerufenen Adresse oder einem Paar aus Aufruferadresse und aufgerufener Adressenfunktion. Es sind auch andere Möglichkeiten vorhanden. Falls der Subroutinen-Aufruf kein Kandidat ist, wird eine herkömmliche Verarbeitung ausgeführt, SCHRITT 1102.
  • Wenn, unter erneuter Bezugnahme auf ABFRAGE 1100, der Subroutinen-Aufruf ein Kandidat für ein Vorhersagen des TOC-Werts ist, wird der Subroutinen-Aufruf ausgeführt, SCHRITT 1104. Optional können zusätzlich zu dem TOC-Wert andere zugehörige Werte vorhergesagt werden. Außerdem wird der alte TOC-Wert zum Beispiel in einem Wiederherstellungsregister, TOCRECOVER, gespeichert, SCHRITT 1106. Anschließend wird versucht, den TOC-Wert unter Verwendung des TOC-Cachespeichers vorherzusagen, SCHRITT 1108. Eine Bestimmung wird vorgenommen, ob es einen TOC-Cachespeichertreffer gegeben hat, ABFRAGE 1110. Wenn es einen TOC-Cachespeichertreffer gegeben hat, wird der erhaltene TOC-Wert in das TOC-Zeigerregister (z.B. r2) geladen, SCHRITT 1112. Ferner wird ein TOC-Prüf-Flag gesetzt (z.B. auf 1), das angibt, dass eine Prüfung des TOC-Werts vor einem Verwenden des vorhergesagten TOC-Werts ausgeführt werden muss, und in einer Ausführungsform wird ein TOC-Erfassungs-Flag, das sich in einem ausgewählten Speicherort befindet, ausgeschaltet (z.B. auf 0 gesetzt), SCHRITT 1114. Wenn, unter erneuter Bezugnahme auf ABFRAGE 1110, ein TOC-Cachespeicher-Fehltreffer vorliegt, wird das TOC-Erfassungs-Flag gesetzt, um anzugeben, dass eine TOC-Erfassung (z.B. auf 1 gesetzt) ausgeführt werden muss, um den TOC-Wert zu erhalten, und das TOC-Prüf-Flag wird ausgeschaltet (z.B. auf 0 gesetzt), SCHRITT 1116. Weitere Variationen sind ebenfalls möglich.
  • Details in Bezug auf eine Prüf-Einfügungslogik für die Ausführungsform von 11 werden unter Bezugnahme auf 12 beschrieben. In einer Ausführungsform ist diese Logik in der Decodiereinheit integriert. Zunächst wird eine Instruktion erhalten und decodiert, SCHRITT 1200. Eine Bestimmung wird vorgenommen, ob die aktuelle Instruktion einer TOC-Einrichtungsinstruktion entspricht, ABFRAGE 1202. Wenn sie keiner TOC-Einrichtungsinstruktion entspricht, wird eine Bestimmung vorgenommen, ob die aktuelle Instruktion einer TOC-Verwendungsinstruktion entspricht, ABFRAGE 1204. Falls nicht, ist die Verarbeitung abgeschlossen. Andernfalls wird eine weitere Bestimmung vorgenommen, ob das TOC-Prüf-Flag eingerichtet wurde, ABFRAGE 1206. Falls nicht, ist die Verarbeitung abgeschlossen. Andernfalls kann eine Wiederherstellung ausgeführt werden, SCHRITT 1208. In einer Ausführungsform enthält die Wiederherstellung ein Zurückkopieren des Werts in dem TOCRECOVER-Register in das TOC-Register (z.B. r2) oder ein Verwenden von Umbenennungsregistern, wie oben beschrieben. Weitere Variationen sind möglich.
  • Wenn, unter erneuter Bezugnahme auf ABFRAGE 1202, die aktuelle Instruktion einer TOC-Einrichtungsinstruktion entspricht, wird die Prüfung in den Code eingefügt, SCHRITT 1210. Zum Beispiel wird eine STR-Überprüfung oder eine STR-Lade-Überprüfung eingefügt. Das TOC-Prüf-Flag wird anschließend ausgeschaltet (z.B. auf 0 gesetzt), SCHRITT 1212.
  • Eine weitere Ausführungsform einer TOC-Prüf-Einfügungslogik wird unter Bezugnahme auf 13 beschrieben. In einem Beispiel ist diese Logik in der Decodiereinheit integriert. Unter Bezugnahme auf 13 wird eine Instruktion erhalten und decodiert, SCHRITT 1300. Eine Bestimmung wird vorgenommen, ob die aktuelle Instruktion einer TOC-Einrichtungsinstruktion entspricht, ABFRAGE 1302. Wenn die aktuelle Instruktion keiner TOC-Einrichtungsinstruktion entspricht, wird eine weitere Bestimmung vorgenommen, ob die aktuelle Instruktion einer TOC-Verwendungsinstruktion entspricht, ABFRAGE 1304. Falls nicht, endet die Verarbeitung. Andernfalls wird eine Bestimmung vorgenommen, ob das TOC-Erfassungs-Flag gesetzt wurde, ABFRAGE 1306. Falls nicht, ist die Verarbeitung abgeschlossen. Andernfalls wird das TOC-Erfassungs-Flag ausgeschaltet (z.B. auf 0 gesetzt), SCHRITT 1308. In einer Ausführungsform kann aufgezeichnet werden, dass diese Funktion keinen neuen TOC-Wert in den TOC-Cachespeicher lädt, oder es wird ein Filter angegeben (z.B. Bloom-Filter), um eine TOC-Vorhersage mit dem TOC-Cachespeicher zu unterdrücken. Weitere Variationen sind ebenfalls möglich.
  • Wenn, unter erneuter Bezugnahme auf ABFRAGE 1302, die aktuelle Instruktion keiner TOC-Einrichtungsinstruktion entspricht, wird die Prüfung eingefügt, die in einem Beispiel eine Überprüfungsinstruktion enthält, die Wiederherstellungsaktionen auslöst, SCHRITT 1310, und das TOC-Erfassungs-Flag wird zurückgesetzt (z.B. auf 0 gesetzt), SCHRITT 1312.
  • In einer Ausführungsform kann die dem TOC-Prüf-Flag und dem TOC-Erfassungs-Flag zugehörige Verarbeitung ausgeführt werden, und in einem Beispiel können sie parallel ausgeführt werden.
  • Weitere Details in Bezug auf einen TOC-Cachespeicher werden im Folgenden unter Bezugnahme auf 14A beschrieben. In einem Beispiel enthält ein TOC-Cachespeicher 1400 eine Mehrzahl von Spalten, einschließlich z.B. eine TOC-Setteradressspalte 1402, eine TOC-Wertspalte 1404, die den TOC-Wert für das Modul dieses Eintrags enthält, eine optionale Funktion initialisiert eine TOC-Spalte 1406 und eine optionale Verwendungsverfolgungsspalte 1408. Die TOC-Setteradressspalte 1402 enthält eine TOC-Setteradresse, wie beispielsweise die Adresse der STR, des Funktionsbeginns oder eine Anzahl anderer Werte auf Grundlage bestimmter Anwendungsfälle. In einer oder mehreren Ausführungsformen werden satzassoziative Tabellen bereitgestellt, auf die durch TOC-Setteradressen zugegriffen werden kann. Die Spalte FUNC inits TOC (Funktion initialisiert TOC) 1406 kann verwendet werden, um Funktionen zu erfassen, die kein TOC-Register initialisieren. In einer weiteren Ausführungsform ist ein Verwenden eines Tabelleneintrags zu kostspielig, und ein Filterungsmechanismus, z.B. ein Bloom-Filter oder andere Filtermechanismen können zum Identifizieren von Funktionen verwendet werden, für die kein TOC-Wert vorhergesagt werden soll. Eine Verwendungsverfolgung bietet eine Möglichkeit zum Auswählen eines Eintrags, der entfernt werden soll, wenn die Tabelle voll ist und ein anderer Eintrag verwendet werden soll. Eine Vielfalt von Verfolgungsschemas kann verwendet werden, einschließlich zum Beispiel am wenigsten kürzlich verwendete, am wenigsten häufig verwendete, FIFO (first in, first out), Anzahl der Verwendungen pro Zeitraum usw. In mindestens einer Ausführungsform ist die Spalte 1408 angepasst, um angemessene Verwendungsinformationen zu speichern, um die entsprechenden Informationen für eine umgesetzte Ersetzungsrichtlinie zu speichern.
  • Eine Ausführungsform zum Einfügen eines Eintrags in den TOC-Cachespeicher wird unter Bezugnahme auf 14B beschrieben. Zunächst wird ein Wertepaar empfangen (z.B. Aufgerufene Funktion, TOC-Wert), das in den TOC-Cachespeicher eingegeben werden muss, SCHRITT 1450. Ein Eintrag in den Cachespeicher wird zum Speichern des Wertepaars ausgewählt, SCHRITT 1452. Zum Beispiel können Index-Bits verwendet werden, um den Eintrag auszuwählen oder die Verwendungsverfolgungs-Informationen können verwendet werden. Wenn ein Eintrag entfernt werden muss, wird optional der entfernte Eintrag gespeichert, z.B. in einem TOC-Cachespeicher zweiter Ebene, SCHRITT 1454. Das erhaltene Wertepaar wird in dem ausgewählten Eintrag gespeichert, SCHRITT 1456. Weitere Variationen sind möglich.
  • In einer Ausführungsform entspricht ein einzelner TOC-Zeigerwert einem gesamten Modul, d.h. alle Funktionen in einem Modul haben denselben TOC-Zeigerwert. Daher speichert der Prozessor gemäß einem Aspekt der vorliegenden Erfindung einen TOC-Wert in einem TOC-Cachespeicher für einen Bereich von Adressen. Zum Beispiel wird der Bereich von Adressen, die demselben TOC-Zeigerwert entsprechen, dynamisch bestimmt, z.B. durch ein Vereinen von neu entdeckten Werten des TOC mit vorher vorhandenen Bereichen. In einer weiteren Ausführungsform wird der Umfang der Bereiche durch das dynamische Ladeprogramm bereitgestellt, und ein vorhergesagter TOC-Wert ist dem Wert des Bereichs zugehörig. Weitere Beispiele sind ebenfalls möglich.
  • Als weiteres Beispiel kann das TOC einen Abschnitt eines Moduls abdecken, und anschließend wäre der Adressenbereich der Bereich dieses Abschnitts. Es sind auch andere Variationen vorhanden.
  • Der TOC-Cachespeicher kann, wie oben beschrieben, verwendet werden, aber in diesem Aspekt hat der TOC-Cachespeicher ein anderes Format als in 14A und daher eine verschiedene Verwaltung. Dies ermöglicht eine kompaktere und effizientere Darstellung eines TOC-Cachespeichers, der die Vorteile der TOC-Werteigenschaften nutzt.
  • Wie in 15 gezeigt, kann eine Anwendung 1500 in einem Beispiel eine Mehrzahl von Modulen enthalten, darunter ein Hauptprogramm 1502 und ein oder mehrere dynamisch gemeinsam genutzte Objekte (DOSs, Dynamically Shared Objects) 1504, wie beispielsweise gemeinsam genutzte Bibliotheken. Jedem Modul ist ein TOC-Wert zugehörig, 1506, der Code in dem Adressbereich entspricht, auf den das Modul geladen worden ist, z.B. durch das dynamische Ladeprogramm. Da jedes Modul seinen eigenen, ihm zugehörigen TOC-Wert haben kann, kann der TOC-Cachespeicher mit dieser Angabe umgesetzt werden. Wie in 16 gezeigt, enthält ein TOC-Cachespeicher 1600 zum Beispiel eine Spalte address_from des TOC-Bereichs 1602 und eine Spalte address_to des TOC-Bereichs 1604. Die Spalte address_from des TOC-Bereichs 1602 zeigt den Start eines bestimmten Moduls für einen TOC-Wert, und die Spalte address_to des TOC-Bereichs 1604 zeigt das Ende dieses bestimmten Moduls für den TOC-Wert. Für dieses Modul ist ein TOC-Wert in einer TOC-Wert-Spalte 1606 enthalten. Ferner kann der TOC-Cachespeicher eine Spalte für Verwendungsverfolgung 1608 enthalten. Weitere und/oder verschiedene Spalten sind ebenfalls möglich.
  • Eine Ausführungsform zum Einfügen eines Eintrags in einen derartigen TOC-Cachespeicher wird unter Bezugnahme auf 17 beschrieben. Diese Logik wird zum Beispiel durch den Prozessor ausgeführt. Ein Wertepaar wird empfangen (z.B. Aufgerufene Funktion, TOC-Wert), das in den TOC-Cachespeicher eingefügt werden muss, SCHRITT 1700. Ein Versuch wird unternommen, einen Eintrag zum Speichern des TOC-Werts auf Grundlage des angegebenen TOC-Werts auszuwählen, SCHRITT 1702. Eine Bestimmung wird vorgenommen, ob in dem TOC-Cachespeicher ein Eintrag für den TOC-Wert gefunden wurde, ABFRAGE 1704. Wenn kein Eintrag gefunden wurde, wird ein Eintrag in dem TOC-Cachespeicher zum Speichern des TOC-Werts ausgewählt, SCHRITT 1706. Dieser Eintrag kann ein leerer Eintrag sein, oder es kann sich um einen Eintrag handeln, der andere Informationen hat. Wenn in dem Eintrag bereits ein zu verwendender Wert vorhanden ist, können diese Informationen zum Beispiel in einem TOC-Cachespeicher zweiter Ebene gespeichert werden, SCHRITT 1708. Der empfangene Wert wird anschließend in dem ausgewählten Eintrag gespeichert, SCHRITT 1710. Außerdem sind die Spalten address_from und address_to auf die Adresse der aufgerufenen Funktion gesetzt.
  • Wenn, unter erneuter Bezugnahme auf ABFRAGE 1704, ein Eintrag gefunden wird, wird eine Bestimmung vorgenommen, ob die Adresse der aufgerufenen Funktion kleiner als die Adresse der Spalte address_from ist, ABFRAGE 1720. Wenn die Adresse der aufgerufenen Funktion kleiner als die Spalte address_from ist, wird die Spalte address_from des ausgewählten Eintrags auf die Adresse der aufgerufenen Funktion aktualisiert, SCHRITT 1722. Andernfalls wird die Spalte address_to des ausgewählten Eintrags auf die Adresse der aufgerufenen Funktion aktualisiert, SCHRITT 1724.
  • Der vorgenannte Ablauf geht von einem Eintrag pro TOC-Wert aus, sodass nicht mehrere Einträge gefunden werden. Wenn jedoch mehrere Einträge für ein bestimmtes Modul gefunden werden konnten, würde für diese eine Prüfung vorgenommen.
  • In einer weiteren Ausführungsform kann eine Kandidatenauswahl für eine TOC-Vorhersage die TOC-Tabelle mit Bereichen zum Bestimmen verwenden, ob ein Aufruf an dasselbe Modul, eine TOC-Vorhersage zu unterdrücken, ausgeführt wird. Weitere Variationen sind möglich.
  • In einem weiteren Aspekt wird eine TOC-Verfolgungsstruktur vorbereitet und für eine TOC-Vorhersage initialisiert. Zum Beispiel verknüpft ein Linker ein Programm, und der Linker bestimmt einen TOC-Wert, entweder einen absoluten Wert für ein Modul oder ein relatives Offset, z.B. relativ zu einer Modul-Ladeadresse. Das dynamische Ladeprogramm lädt das Modul und berechnet den endgültigen TOC-Wert. Das dynamische Ladeprogramm lädt anschließend den TOC-Wert in eine TOC-Verfolgungsstruktur, die zum Beispiel in Verbindung mit der Instruktion „TOC-Register einrichten“ oder einer anderen prädiktiven Instruktion verwendet werden soll.
  • Zum Beispiel kann die TOC-Verfolgungsstruktur der TOC-Cachespeicher selbst sein, oder sie kann eine arbeitsspeicherinterne Tabellendarstellung sein. Weitere Beispiele sind ebenfalls möglich. Ferner werden Details, die einem Speichern von TOC-Werten in der Verfolgungsstruktur zugehörig sind, unter Bezugnahme auf 18 beschrieben. Diese Verarbeitung wird zum Beispiel durch ein Ladeprogramm ausgeführt.
  • Unter Bezugnahme auf 18 empfängt das Ladeprogramm eine Anforderung, ein Modul zu laden, SCHRITT 1800, und berechnet mindestens einen TOC-Zeiger für das geladene Modul, SCHRITT 1802. Dieser TOC-Wert wird in einer TOC-Verfolgungsstruktur gespeichert, z.B. in Verbindung mit dem Adressbereich, in den das Modul geladen worden ist, SCHRITT 1804. Der gespeicherte Wert kann anschließend für eine bestimmte Funktion zurückgegeben oder in einem TOC-Cachespeicher für einen späteren Abruf gespeichert werden.
  • Wenn in einer Ausführungsform die Verfolgungsstruktur z.B. eine arbeitsspeicherinterne Struktur ist und in dem TOC-Cachespeicher kein TOC-Wert gefunden wird, wird die Steuerung z.B. unter Verwendung eines Interrupt oder einer Verzweigung auf Grundlage eines Benutzermodus-Ereignisses auf die Software übertragen. Der Software-Handler lädt den Wert dann erneut, z.B. durch Zugreifen auf die arbeitsspeicherinterne Struktur, die den Adressbereich und den TOC-Wert speichert, die jedem Modul entsprechen. In einer weiteren Ausführungsform ist die arbeitsspeicherinterne TOC-Struktur architekturgebunden definiert, und ein Hardware-Handler lädt den TOC-Cachespeicher erneut direkt aus der arbeitsspeicherinternen Struktur. In einer Ausführungsform lädt der Software-Handler sowohl den TOC-Cachespeicher als auch die arbeitsspeicherinterne Struktur erneut, wenn ein Modul geladen wird. Weitere Variationen sind möglich.
  • Gemäß einem weiteren Aspekt der vorliegenden Erfindung sind in ISA-Instruktionen (Instruction-Set-Architecture) ein schreibgeschütztes TOC-Register und TOC-Adressiermodi enthalten. Das schreibgeschützte TOC-Register ist zum Beispiel ein Pseudo- oder virtuelles Register, das einen TOC-Wert für ein bestimmtes Modul bereitstellt (z.B. durch Zugreifen auf einen TOC-Zwischenspeicher oder eine arbeitsspeicherinterne Tabelle). Das heißt, es handelt sich nicht um eine Hardware oder ein architekturgebundenes Register, und es gibt keinen unterstützenden Speicher dafür, sondern stattdessen wird ein TOC-Wert bereitgestellt, der verwendet werden soll, wenn z.B. auf eine ausgewählte Registernummer verwiesen wird. Der TOC-Wert wird zum Beispiel von einem Wert aus initialisiert, der in einer TOC-Basistabelle gespeichert ist, die in Verbindung mit einer Modulinitialisierung geladen werden kann. Eine TOC-Basistabelle kann einem oder mehreren TOC-Cachespeichern von 14 und 16 oder einer arbeitsspeicherinternen Struktur entsprechen. Allerdings können auch andere Formate zum Speichern und Bereitstellen eines TOC-Basiswerts auf einer bestimmten Instruktionsadresse in Verbindung mit einem oder mehreren Aspekten der vorliegenden Erfindung verwendet werden.
  • Ein Beispiel für ein Verwenden eines schreibgeschützten TOC-Registers wird unter Bezugnahme auf 19 beschrieben. Wie gezeigt, ist ein schreibgeschütztes TOC-Register 1900, auf das hierin als TOCbase verwiesen wird, ein Zeiger auf einen Speicherort in einem TOC 1902. Das TOC 1902 enthält eine oder mehrere Variablenadressen 1904, die den Speicherort einer entsprechenden Variablen angeben, die Variablenwerte 1906 enthält. Auf das schreibgeschützte TOC-Register, TOCbase, wird durch einen Adressiermodus verwiesen, oder es ist implizit in einer Instruktion oder als ein Präfix. Der Prozessor führt ein Look-Up eines TOC-Werts in Reaktion darauf aus, dass das TOCbase als der Adressiermodus oder als ein Register eines Adressiermodus angegeben wird, und der erhaltene TOC-Wert wird anstelle eines Werts verwendet, der durch ein Mehrzweckregister bereitgestellt wird, das als ein Basisregister angegeben ist.
  • In einer Ausführungsform, wenn n Bits zum Encodieren von 2" Registern in einem Satz von Instruktionen bereitgestellt werden, ist eine von den 2" Registernummern so definiert, dass sie auf den Wert des TOC-Zeigers verweist, und wenn dieses Register angegeben wird, wird der Wert des TOC-Zeigers als ein Wert für das Register verwendet.
  • In weiteren Aspekten werden verschiedene Instruktionen bereitgestellt, die ein schreibgeschütztes Register verwenden können. Zum Beispiel werden verschiedene Instruktionen „Load TOC-Relative Long“ bereitgestellt, wie unter Bezugnahme auf 20A bis 20C beschrieben, und eine oder mehrere Instruktionen „Load Address TOC-Relative Long“ können bereitgestellt werden, wofür ein Beispiel unter Bezugnahme auf 21 beschrieben wird. Weitere Beispiele sind ebenfalls möglich.
  • Wie in 20A gezeigt, enthält eine Instruktion „Load TOC-Relative Long“ 2000eine Mehrzahl von Operationscode- (Opcode) Feldern 2002a, 2002b, die einen Opcode enthalten, der eine Operation „Load TOC-Relative Long“ (LTL) angibt; ein erstes Operandenfeld (R1 ) 2004, um einen Speicherort (z.B. ein Register) eines ersten Operanden anzugeben; und ein zweites Operandenfeld (RI2) 2008, das ein Direktfeld ist, dessen Inhalte als eine binäre Ganzzahl mit Vorzeichen verwendet werden, die eines von Bytes, Halbwörtern, Wörtern, Doppelwörtern usw. bezeichnen, die zu dem Wert des TOC-Zeigers an der aktuellen Instruktionsadresse hinzugefügt werden, um die Adresse des zweiten Operanden im Speicher zu bilden (das TOC wird durch externe Mittel definiert - z.B. unter Verwendung eines Ladeprogramms, einer STR-Instruktion, einer TOC-Tabelle, einem TOC-Cachespeicher usw.).
  • Weitere Ausführungsformen von Instruktionen „Load TOC-Relative Long“ werden ebenfalls bereitgestellt, wie in 20B bis 20C dargestellt. Jede Instruktion „Load TOC-Relative Long“ (LGTL) 2010 (20B) und LGFTL 2020 (20C) enthält Opcode-Felder 2012a, 2012b; 2022a, 2022b; ein erstes Operandenfeld (R1 ) 2014, 2024, um einen Speicherort (z.B. Register) eines ersten Operanden anzugeben; und ein zweites Operandenfeld (R2 ) 2018, 2028, das ein Direktfeld ist, dessen Inhalte als eine binäre Ganzzahl mit Vorzeichen verwendet werden, die eines von Bytes, Halbwörtern, Wörtern, Doppelwörtern usw. bezeichnen, die zu dem Wert des TOC-Zeigers an der aktuellen Instruktionsadresse hinzugefügt werden, um die Adresse des zweiten Operanden im Speicher zu bilden (das TOC wird durch externe Mittel definiert - z.B. unter Verwendung eines Ladeprogramms, einer STR-Instruktion, einer TOC-Tabelle, einem TOC-Cachespeicher usw.).
  • Der zweite Operand wird unverändert auf den Speicherplatz des ersten Operanden gestellt, mit Ausnahme dessen, dass er für „Load TOC Relative Long“ (LGFTL) um Vorzeichen erweitert ist.
  • Für „Load TOC-Relative Long“ (LTL) sind die Operanden z.B. 32 Bit, und für „Load TOC-Relative Long“ (LGTL) sind die Operanden 64 Bit. Für „Load TOC-Relative Long“ (LGFTL) wird der zweite Operand wie eine binäre 32-Bit-Ganzzahl mit Vorzeichen behandelt, und der erste Operand wird wie eine binäre 64-Bit-Ganzzahl mit Vorzeichen behandelt.
  • Wenn DAT eingeschaltet ist, wird auf den zweiten Operanden unter Verwendung desselben Adressierungsraum-Modus zugegriffen, der für den Zugriff auf die Instruktion verwendet wird. Wenn DAT ausgeschaltet ist, wird auf den zweiten Operanden unter Verwendung einer realen Adresse zugegriffen.
  • Für „Load TOC-Relative Long“ (LTL, LGFTL) muss der zweite Operand an einer Wortgrenze ausgerichtet werden, und für „Load TOC-Relative Long“ (LGTL) wird der zweite Operand an einer Doppelwortgrenze ausgerichtet; andernfalls kann eine Spezifikationsausnahme erkannt werden.
  • Ein Beispiel für eine Instruktion „Load Address TOC-Relative Long“ wird unter Bezugnahme auf 21 beschrieben. Wie dargestellt, enthält eine Instruktion „Load Address TOC-Relative Long“ 2100eine Mehrzahl von Operationscode-Feldern 2102a, 2102b, die einen Opcode enthalten, der eine Operation „Load Address TOC-Relative Long“ angibt; ein erstes Operandenfeld (R1 ) 2104, um einen Speicherort (z.B. Register) eines ersten Operanden anzugeben; und ein zweites Operandenfeld (R2 ) 2108, das ein Direktfeld ist, dessen Inhalte eine binäre Ganzzahl mit Vorzeichen sind, die die Anzahl von einem von Bytes, Halbwörtern, Wörtern, Doppelwörtern usw. angibt, die zu dem Wert des TOC-Zeigers an der aktuellen Adresse hinzugefügt wird, um eine berechnete Adresse zu generieren.
  • Die unter Verwendung des RI2-Felds angegebene Adresse wird in das allgemeine Register R1 gestellt. Die Adresse wird erhalten, indem das RI2-Feld zu dem Wert des TOC an der aktuellen Adresse hinzugefügt wird.
  • In dem 24-Bit-Adressiermodus wird die Adresse auf die Bit-Positionen 40 bis 63, gestellt, die Bits 32 bis 39 werden auf Nullen gesetzt, und die Bits 0 bis 31 bleiben unverändert. In dem 31-Bit-Adressiermodus wird die Adresse auf die Bit-Positionen 33 bis 63, gestellt, Bit 32 wird auf Null gesetzt, und die Bits 0 bis 31 bleiben unverändert. In dem 64-Bit-Adressiermodus wird die Adresse auf die Bit-Positionen 0 bis 63 gestellt.
  • Für Operanden werden keine Speicherverweise vorgenommen, und die Adresse wird nicht auf Zugriffsausnahmen geprüft.
  • In einem weiteren Aspekt wird eine Instruktion „TOC add immediate shifted“ (tocaddis) bereitgestellt (z.B. für eine Architektur im RISC-Stil). Wie in 22 dargestellt, enthält eine Instruktion „TOC add immediate shifted“ 2200ein Operationscode-Feld 2202 mit einem Opcode, der eine Operation „TOC add immediate shifted“ angibt; ein Zielrückgabe- (RT) Feld 2204, das einen Zielrückgabewert angibt; und ein Feld „shift immediate“ (SI) 2206, das einen Verschiebungsbetrag angibt, der auf den TOC-Wert angewendet werden soll.
  • Zum Beispiel wird tocaddis durch Folgendes definiert:
    • tocaddis RT,SI
    • RT <= (TOC) + EXTS (Sl | | 160)
    Die Summe TOC + (SI | | 0×0000) wird in das Register RT gestellt. EXTS bezieht sich auf ein erweitertes Vorzeichen und | | bezieht sich auf eine Verkettung.
  • In einem weiteren Aspekt können TOC angebende Präfixinstruktionen bereitgestellt werden. Zum Beispiel wird eine Instruktion „add TOC immediate shifted“, addtocis+, bereitgestellt, die eine Präfixinstruktion ist, die Informationen für eine nächste Instruktion bereitstellt. Unter Bezugnahme auf 23 enthält in einem Beispiel eine Instruktion „add TOC immediate shifted“ 2300zum Beispiel ein Operationscode-Feld 2302 mit einem Opcode, der eine Operation „add TOC immediate shifted“ angibt; ein Zielregister- (RT) Feld 2304 zum Aufnehmen eines Ergebnisses; ein Operandenfeld (RA) 2306; und ein Feld „shift immediate“ (SI) 2308.
  • Zum Beispiel,
    • addtocis+ RT,RA,SI
    • if RA = 0 then RT <- (TOC) + EXTS (Sl | | 160) else RT <- (RA) + EXTS (Sl | | 160)
  • Die Summe (RA | TOC) + (SI | | 0×0000) wird nur als eine Quelle für Verweise auf das Register RT für die nächstfolgende Instruktion bereitgestellt. addtocis+ ist ein Instruktionspräfix und modifiziert die folgende Instruktion, um den Wert zu verwenden, der für RT als Einsprung berechnet wird, wenn RT angegeben ist. Die Instruktion gibt an, dass RT nicht verwendet wird, nachdem die nächstfolgende Instruktion ausgeführt worden ist, und sein Wert undefiniert bleibt. Wenn die Ausführung nach der Instruktion addtocis+ und vor der nächstfolgenden Instruktion unterbrochen wird, wird der Zustand auf eine Weise aktualisiert, die eine Wiederaufnahme der Ausführung mit der nächsten Instruktion erlaubt und ein korrektes Ergebnis erzeugt (d.h. RT wird geschrieben oder ein anderes umsetzungsdefiniertes Verfahren zum Beibehalten der Wirkung eines Modifizierens der RT-Quelle der nächstfolgenden Instruktion wird verwendet). Es wird angemerkt, das addTOCis+ den Wert von TOCbase verwendet, nicht die Inhalte von GPR0, wenn RA=0.
  • Die Präfixinstruktion kann weitere Optionen aufweisen, wie beispielsweise ein Verschiebungsbezeichnerfeld, das angibt, ob zusätzliche direkte Bits verwendet werden müssen. Außerdem kann sie ein oder mehrere zusätzliche direkte Felder mit Werten enthalten, die zusammen mit Operanden der Nachfolger-Instruktion verwendet werden sollen (z.B. addiert zu, durch OR verknüpft mit usw.).
  • Andere Präfixoptionen können verwendet werden, die ein TOC-Präfix und/oder ein TOC-Präfix mit einer Option zum Überschreiben eines auswählbaren der Operanden enthalten. Zum Beispiel kann eine Präfixinstruktion bereitgestellt werden, die angibt, dass ein TOC-Wert anstelle eines der Operanden einer Nachfolger-Instruktion verwendet werden soll. In einem Beispiel ist der Operand auswählbar.
  • Außerdem können Aspekte einer Präfixinstruktion (z.B. addtocis) und eine anschließende Instruktion zum Vereinfachen der Verarbeitung verschmelzen. Wenn zum Beispiel eine Präfixinstruktion mit einer Verschiebung angegeben wird, und die anschließende Instruktion ebenfalls eine Verschiebung enthält, kann die Verschiebung einer direkt verschobenen und einer direkten Verschiebung entsprechen. Es gibt weitere Möglichkeiten.
  • Ein spezielles Optimierungsbeispiel wird unter Verwendung von addtocis im Folgenden gezeigt. In diesem Beispiel enthält eine Instruktionskandidatenabfolge von n (z.B. 3) zum Beispiel: addtocis+ r4, toc, upper; addi r4, r4, lower; und lvx* vr2, r0, r4. Diese Abfolge kann in der folgenden Vorlage dargestellt werden:
  •        i1 = addtocis+ <r1>, <r2>, <upper>
           i2 = addi <r1>, <r1>, <lower>
           i3 = lvx* <vrt>, r0, <r1>
           => und auf die folgende interne Operation optimiert werden:
           Ivd <vrt>, toc_or_gpr(<r2>), kombiniert (<upper>, <lower>)
  • Die Instruktion addtocis ähnelt addis, führt aber den Wert des TOC statt der Konstante 0 ein, wenn das RA-Feld einen Wert von 0 hat. In einem Beispiel ist lvx* eine Instruktionsform, die das Basisregister (z.B. 4 in diesem Beispiel) als mit einem nicht spezifizierten Wert nach der Ausführung der Instruktion definiert. In einem Beispiel ist lvx* eine Form der Instruktion Ivx (lastvektorindexiert), die eine letzte Verwendung von mindestens einem Register angibt (z.B. hierin als das Register definiert, das in der Vorlage als <r1> angegeben wird). Lvd ist eine Lastvektor-Operation mit einer umgesetzten definierten Verschiebung. Die Funktion toc_or_gpr bearbeitet ein Erweitern des TOC-Sonderfalls, da die Ivd andernfalls den RA-Operanden ähnlich wie alle anderen RA-Operanden als einen 0-Wert bearbeiten würde, der 0 darstellt, und wobei die anderen Registerwerte das logische Register darstellen.
  • Es können weitere Möglichkeiten zum Verringern einer komplexen Abfolge von Instruktionen, zu denen eine TOC-Instruktion oder eine TOC-verwendende Instruktion gehören, auf eine einfachere Abfolge von Instruktionen vorhanden sein.
  • Eine Ausführungsform eines Ausführungsablaufs, der zum Verwalten von TOC-Operanden verwendet wird, wird unter Bezugnahme auf 24 beschrieben. In einem Beispiel führt ein Prozessor diese Logik aus.
  • Unter Bezugnahme auf 24 wird in einem Beispiel eine Instruktion empfangen, SCHRITT 2400. Alle Nicht-TOC-Operanden der Instruktion werden gemäß einer Nicht-TOC-Operandendefinition erhalten, SCHRITT 2402. Wenn zum Beispiel ein Instruktionsoperand ein Mehrzweckregister angibt, werden die Daten von diesem Register erhalten, usw.
  • Eine Bestimmung wird vorgenommen, ob ein TOC-Operand in der Instruktion vorhanden ist, ABFRAGE 2404. Das heißt, gibt es einen Operanden in der Instruktion, der explizit oder implizit einen TOC-Zeiger verwendet? Wenn ein TOC-Operand vorhanden ist, wird der TOC-Operand erhalten, wie im Folgenden beschrieben, SCHRITT 2406. Danach, oder wenn kein TOC-Operand vorhanden ist, werden alle erhaltenen Operandenwerte gemäß der Instruktionsdefinition verwendet, SCHRITT 2408. Optional werden ein oder mehrere Ausgabeoperanden geschrieben, SCHRITT 2410.
  • In einem Beispiel wird ein TOC-Operand von einer arbeitsspeicherinternen TOC-Struktur erhalten, wie unter Bezugnahme auf 25 beschrieben wird. Eine Adresse einer arbeitsspeicherinternen TOC-Verfolgungsstruktur wird erhalten, SCHRITT 2500, und ein TOC-Wert wird von der arbeitsspeicherinternen TOC-Struktur für das Modul erhalten, das die Instruktion enthält, SCHRITT 2502. Dieser TOC-Wert wird anschließend zur Verwendung durch die Instruktion bereitgestellt, SCHRITT 2504.
  • In einem weiteren Beispiel wird der TOC-Operand von einem TOC-Cachespeicher erhalten, der durch eine arbeitsspeicherinterne Struktur unterstützt wird, wie unter Bezugnahme auf 26 beschrieben wird. In diesem Beispiel wird auf den TOC-Cachespeicher zugegriffen, SCHRITT 2600, und eine Bestimmung wird vorgenommen, ob ein TOC-Cachespeichertreffer vorliegt, ABFRAGE 2602. Das heißt, liegt ein Eintrag in dem Cachespeicher für das Modul vor, das die Instruktion enthält? Wenn kein TOC-Cachespeichertreffer vorliegt, wird der TOC-Cachespeicher aus der arbeitsspeicherinternen TOC-Cachespeicherstruktur erneut geladen, SCHRITT 2604. Danach, oder wenn ein TOC-Cachespeichertreffer vorliegt, wird der TOC-Wert für das Modul, das die Instruktion enthält, aus dem TOC-Cachespeicher erhalten und zur Verwendung durch die Instruktion bereitgestellt, SCHRITT 2606.
  • Ein weiteres Beispiel zum Erhalten des TOC-Operanden von einem TOC-Cachespeicher, der durch eine arbeitsspeicherinterne Struktur unterstützt wird, wird unter Bezugnahme auf 27 beschrieben. In diesem Beispiel wird auf den TOC-Cachespeicher zugegriffen, SCHRITT 2700, und eine Bestimmung wird vorgenommen, ob ein TOC-Cachespeichertreffer vorliegt, ABFRAGE 2702. Wenn ein TOC-Cachespeichertreffer vorliegt, wird der TOC-Wert aus dem Eintrag in dem TOC-Cachespeicher abgerufen, der dem Modul entspricht, das die Instruktion enthält, und das zur Verwendung durch die Instruktion bereitgestellt wird, SCHRITT 2704. Wenn jedoch kein TOC-Cachespeichertreffer vorliegt, wird die Steuerung auf einen Software-Handler übertragen, SCHRITT 2706. Der Software-Handler bestimmt einen TOC-Wert unter Verwendung von Software (z.B. erhält ihn aus einer arbeitsspeicherinternen Verfolgungsstruktur), SCHRITT 2710, und lädt den bestimmten TOC-Wert in den TOC-Cachespeicher, SCHRITT 2712. Der Software-Handler endet, und die Instruktion wird erneut gestartet, SCHRITT 2714.
  • Zum Laden des TOC-Cachespeichers aus Software kann eine Instruktion „Load TOC Cache“ (LTC) verwendet werden. Zum Beispiel können LTC Rfrom, Rto, RTOC verwendet werden, um einen Eintrag für <MODULE.Rfrom, MODULE.Rto, MODULE.TOC> zu laden. Zum Beispiel ist ein Eintrag in dem Cachespeicher enthalten, und die Spalte address_from wird unter Verwendung von RFrom aufgefüllt; die Spalte address_to wird unter Verwendung von Rto aufgefüllt; und der TOC-Wert wird unter Verwendung von RTOC aufgefüllt. In einer Ausführungsform wird ein Eintrag gemäß einer Ersetzungsrichtlinie einer bestimmten Umsetzung ausgewählt.
  • In einer weiteren Ausführungsform wird ein Tabelleneintrag durch ein Laden einer Mehrzahl von Steuerregistern geladen.
  • Ein Beispiel für einen Anwendungsfall wird im Folgenden beschrieben:
  •        char bar[MAX];
           char foo(int idx)
           {
           return bar[idx];
           }
  • Gemäß der Definition der C-Programmiersprache gibt die Funktion foo ein Zeichen von einer Array-Leiste zurück, in der die Zeichenposition durch das Argument idx zur Funktion foo angegeben wird.
  • Gemäß einem Aspekt der vorliegenden Erfindung übersetzt ein Compiler dieses Programm in die folgende Maschineninstruktionsabfolge:
  •        foo:
           LDX R4, TOCbase, bar@toc // Startadresse aus Leiste laden aus
                             // TOC unter Verwendung des TOC-Zeigers, angegeben
                             // durch „TOCbase“-Register
           LBZX R3, R4, R3     // Byte aus Leiste laden + idx
           BLR               // zurück von Funktion foo
  • Gemäß einem oder mehreren Aspekten der vorliegenden Erfindung initialisiert die Instruktion „TOC-Register einrichten“ effizient ein Register, das mit dem TOC-Wert geladen werden soll. Da ferner gemäß einem Aspekt der vorliegenden Erfindung eine Instruktion „TOC-Register einrichten“ wirksam ist, wird ein TOC-Registerwert nicht gespeichert und in kompiliertem Code wiederhergestellt. Stattdessen wird beim Aufrufen einer Subroutine der TOC-Registerwert aufgegeben. Wenn eine aufgerufene Funktion zurückkehrt, wird der TOC-Wert nicht geladen. Stattdessen wird eine neue Instruktion „TOC-Register einrichten“ generiert, um das TOC-Register zu laden.
  • Ein Beispiel für durch einen Compiler generierten Code zum Erhalten des korrekten Werts des TOC-Zeigers auf Grundlage einer STR- (Set TOC-Register, Toc-Register einrichten) Instruktion, die der C-Progammsprachenfunktion foo entspricht, ist wie folgt:
  •        foo:
           STR R4 
           LDX R4, TOC, bar@toc         // Startadresse aus Leiste laden aus
                                   // TOC unter Verwendung des TOC-Zeigers in R4
           LBZX R3, R4, R3           // Byte aus Leiste laden + idx
           BLR                     // zurück von Funktion foo
  • Eine Ausführungsform zum Initialisieren eines Registers mit dem TOC-Zeiger, wie durch den Compiler ausgeführt, wird unter Bezugnahme auf 28 beschrieben. Zunächst wird eine Bestimmung vorgenommen, ob die Funktion auf das TOC zugreift, ABFRAGE 2800. Falls nicht, ist die Verarbeitung abgeschlossen. Wenn die Funktion jedoch auf das TOC zugreift, wird ein Register mit dem TOC-Zeiger initialisiert, indem zum Beispiel eine STR-Instruktion vor der ersten Verwendung verwendet wird, SCHRITT 2802. Zum Beispiel wird die STR-Instruktion zu dem Code hinzugefügt, der kompiliert und zum Initialisieren des TOC-Registers verwendet wird. Weitere Variationen sind möglich.
  • In einem weiteren Beispiel kann ein statischer Linker das TOC initialisieren, wie unter Bezugnahme auf 29 beschrieben. In diesem Beispiel wird eine Bestimmung vorgenommen, ob die Subroutine in eine Funktion aufgelöst wird, die ein Register mit dem TOC-Wert ändern kann, ABFRAGE 2900. Falls nicht, ist die Verarbeitung abgeschlossen. Andernfalls wird ein Register, das den TOC-Zeiger enthält, z.B. mit einer STR-Instruktion erneut initialisiert, SCHRITT 2902. Zum Beispiel wird die STR-Instruktion zu dem Code hinzugefügt, der kompiliert und zum Initialisieren des TOC-Registers verwendet wird. Weitere Variationen sind möglich.
  • Ein beispielhafter Anwendungsfall ist wie folgt. Dieser effizientere Code wird gemäß einem Aspekt der vorliegenden Erfindung generiert:
    Figure DE112018003586T5_0005
  • Zusätzlich zum Generieren von Code mit einer TOC-Einrichtungsinstruktion kann Code unter Verwendung von schreibgeschützten TOC-Registern generiert werden. Dies umgeht eine Notwendigkeit, ein GPR mit dem TOC zu laden, und verringert damit Registerdruck und Aufwand zum Laden des Registers und zum erneuten Laden nach einem Funktionsaufruf.
  • Ein Beispiel für durch einen Compiler generierten Code zum Verwenden eines schreibgeschützten TOC-Registers ist wie folgt:
  •     char bar[MAX];
        char foo(int idx)
        {
        return bar[idx];
        }
  • Gemäß der Definition der C-Programmiersprache gibt die Funktion foo ein Zeichen von einer Array-Leiste zurück, in der die Zeichenposition durch das Argument idx zur Funktion foo angegeben wird.
  • Gemäß einem Aspekt der vorliegenden Erfindung übersetzt ein Compiler dieses Programm in die folgende Maschineninstruktionsabfolge:
    Figure DE112018003586T5_0006
    angegeben
    Figure DE112018003586T5_0007
  • Ein Beispiel für einen Kompilierungsablauf zum Verwenden eines schreibgeschützten TOC-Registers zum Verweisen auf das TOC wird unter Bezugnahme auf 30 beschrieben. In diesem Beispiel wird eine Bestimmung vorgenommen, ob ein Verweis auf das TOC angefordert wird, ABFRAGE 3000. Falls nicht, ist die Verarbeitung abgeschlossen. Andernfalls wird das schreibgeschützte TOC-Register zum Verweisen auf das TOC verwendet, SCHRITT 3002. Zum Beispiel ist eine Operation (z.B. eine interne Operation, eine Instruktion usw.) in dem Code enthalten, der kompiliert und verwendet wird, um einen Zeiger auf das TOC zu bestimmen. Weitere Variationen sind möglich.
  • Ein beispielhafter Anwendungsfall ist wie folgt. Dieser effizientere Code wird gemäß einem Aspekt der vorliegenden Erfindung generiert:
    Figure DE112018003586T5_0008
  • Einer oder mehrere Aspekte der vorliegenden Erfindung sind untrennbar mit Computertechnologie verbunden und vereinfachen eine Verarbeitung in einem Computer, wodurch dessen Leistung verbessert wird. Weitere Details einer Ausführungsform zum Vereinfachen einer Verarbeitung in einer Datenverarbeitungsumgebung, soweit sie sich auf einen oder mehrere Aspekte der vorliegenden Erfindung beziehen, werden unter Bezugnahme auf 31A bis 31B beschrieben.
  • Unter Bezugnahme auf 31A wird in einer Ausführungsform eine Anweisung zum Bereitstellen eines Zeigers auf eine Referenzdatenstruktur von einem Prozessor erhalten (3100). Die Instruktion wird ausgeführt (3102), und das Ausführen enthält zum Beispiel ein Bestimmen eines Werts für den Zeiger auf die Referenzdatenstruktur (3104) und ein Speichern des Werts in einem Speicherort (z.B. einem Register), der durch die Instruktion angegeben wird (3106).
  • In einem Beispiel enthält das Bestimmen des Werts ein Ausführen eines Look-Up einer Datenstruktur (z.B. ein Zeiger-Cachespeicher einer Referenzdatenstruktur oder eine Tabelle, die mit Referenzdatenstruktur-Zeigerwerten aufgefüllt ist), um den Wert zu bestimmen (3108).
  • Als ein spezielles Beispiel enthält das Bestimmen des Werts zum Beispiel ein Prüfen des Zeiger-Cachespeichers der Referenzdatenstruktur auf einen Eintrag, der den Wert enthält (3110), und ein Ausführen des Speicherns auf Grundlage eines Auffindens des Eintrags (3112). Ferner enthält unter Bezugnahme auf 31B ein Bestimmen in einem Beispiel ein Erstellen, durch den Prozessor, einer Trap für einen Handler auf Grundlage des Werts, der sich nicht in dem Zeiger-Cachespeicher der Referenzdatenstruktur befindet (3120), ein Erhalten, durch den Handler, des Werts aus einer Datenstruktur, die mit Referenzdatenstruktur-Zeigerwerten aufgefüllt ist (3122), und ein Ausführen des Speicherns durch den Handler (3124). Außerdem wird der Wert in dem Zeiger-Cachespeicher der Referenzdatenstruktur gespeichert (3126).
  • In einem weiteren Beispiel enthält das Bestimmen ferner ein Ausführen, auf Grundlage dessen, dass sich der Wert nicht in dem Zeiger-Cachespeicher der Referenzdatenstruktur befindet, eine Cachespeicher-Fehltrefferverarbeitung, um den Wert zu bestimmen und den Wert zu speichern (3130).
  • In einer Ausführungsform wird auf Grundlage eines Erhaltens der Instruktion durch den Prozessor eine Trap für einen Handler erstellt (332), und das Bestimmen und das Speichern werden durch den Handler ausgeführt (3134).
  • Weitere Variationen und Ausführungsformen sind möglich.
  • Weitere Typen von Datenverarbeitungsumgebungen können ebenfalls einen oder mehrere Aspekte der vorliegenden Erfindung integrieren und verwenden, einschließlich Emulationsumgebungen, für die ein Beispiel unter Bezugnahme auf 32A beschrieben wird, sie sind aber nicht darauf beschränkt. In diesem Beispiel enthält eine Datenverarbeitungsumgebung 20 zum Beispiel eine native Zentraleinheit (CPU) 22, einen Arbeitsspeicher 24 und eine oder mehrere Eingabe/Ausgabe-Einheiten und/oder Schnittstellen 26, die zum Beispiel über einen oder mehrere Busse 28 und/oder andere Verbindungen miteinander verbunden sind. Zum Beispiel kann die Datenverarbeitungsumgebung 20 einen PowerPC-Prozessor oder einen pSeries-Server enthalten, die von International Business Machines Corporation in Armonk, New York angeboten werden; und/oder weitere Maschinen auf Grundlage von Architekturen, die von International Business Machines Corporation, Intel oder anderen Unternehmen angeboten werden.
  • Die native Zentraleinheit 22 enthält ein oder mehrere native Register 30 wie zum Beispiel ein oder mehrere Mehrzweckregister und/oder ein oder mehrere Sonderzweckregister, die bei der Verarbeitung innerhalb der Umgebung verwendet werden. Diese Register enthalten Informationen, die den Zustand der Umgebung zu jedem bestimmten Zeitpunkt darstellen.
  • Des Weiteren führt die native Zentraleinheit 22 Instruktionen und Code aus, die im Arbeitsspeicher 24 gespeichert sind. In einem bestimmten Beispiel führt die Zentraleinheit einen Emulatorcode 32 aus, der im Arbeitsspeicher 24 gespeichert ist. Dieser Code vereinfacht der in einer Architektur konfigurierten Datenverarbeitungsumgebung die Emulation von einer anderen Architektur. Zum Beispiel gestattet der Emulatorcode 32 Maschinen auf der Grundlage anderer Architekturen als der z/Architecture, wie zum Beispiel PowerPC-Prozessoren, pSeries-Servern, xSeries-Servern oder anderen Servern oder Prozessoren, die z/Architecture zu emulieren und Software und Instruktionen auszuführen, die auf der Grundlage der z/Architecture entwickelt wurden.
  • Weitere Details zum Emulatorcode 32 werden unter Bezugnahme auf 32B beschrieben. Im Arbeitsspeicher 24 gespeicherte Gastinstruktionen 40 weisen Software-Instruktionen auf, (z.B. korrelierend zu Maschineninstruktionen), die entwickelt wurden, um in einer anderen Architektur als derjenigen der nativen CPU 22 ausgeführt zu werden. Zum Beispiel können die Gastinstruktionen 40 dafür ausgelegt worden sein, auf einem z/Architecture-Prozessor ausgeführt zu werden, werden aber stattdessen auf der nativen CPU 22 emuliert, die zum Beispiel ein Intel-Prozessor sein kann. In einem Beispiel enthält der Emulatorcode 32 eine Instruktionsabrufroutine 42, um eine oder mehrere Gastinstruktionen 40 vom Arbeitsspeicher 24 zu erhalten und optional eine lokale Pufferspeicherung für die erhaltenen Instruktionen bereitzustellen. Außerdem enthält er eine Instruktionsübersetzungsroutine 44, um den Typ der Gastinstruktion zu ermitteln, die erhalten wurde, und um die Gastinstruktion in eine oder mehrere native Instruktionen 46 zu übersetzen. Diese Übersetzung enthält zum Beispiel ein Identifizieren der Funktion, die durch die Gastinstruktion ausgeführt werden soll, und ein Auswählen der nativen Instruktion(en), die diese Funktion ausführen soll(en).
  • Ferner enthält der Emulatorcode 32 eine Emulationssteuerroutine 48, die veranlasst, dass die nativen Instruktionen ausgeführt werden. Die Emulationssteuerroutine 48 kann die native CPU 22 veranlassen, eine Routine von nativen Instruktionen auszuführen, die eine oder mehrere vorher erhaltene Gastinstruktionen emulieren und die nach Abschluss einer derartigen Ausführung die Steuerung wieder an die Instruktionsabrufroutine zurückgeben, um das Erhalten der nächsten Gastinstruktion oder einer Gruppe von Gastinstruktionen zu emulieren. Die Ausführung von nativen Instruktionen 46 kann ein Laden von Daten aus dem Arbeitsspeicher 24 in ein Register enthalten; ein Zurückspeichern der Daten aus einem Register in den Arbeitsspeicher; oder ein Ausführen eines Typs einer arithmetischen oder logischen Operation, wie durch die Übersetzungsroutine festgelegt.
  • Jede Routine wird zum Beispiel in Software umgesetzt, die im Arbeitsspeicher gespeichert ist und durch die native Zentraleinheit 22 ausgeführt wird. In weiteren Beispielen werden eine oder mehrere der Routinen oder Operationen in Firmware, Hardware, Software oder einer Kombination davon umgesetzt. Die Register des emulierten Prozessors können unter Verwendung der Register 30 der nativen CPU oder unter Verwendung von Speicherpositionen im Arbeitsspeicher 24 emuliert werden. In Ausführungsformen können sich die Gastinstruktionen 40, die nativen Instruktionen 46 und der Emulatorcode 32 in demselben Arbeitsspeicher befinden oder auf verschiedenen Arbeitsspeichereinheiten zur Verfügung gestellt werden.
  • Wie hierin verwendet, enthält Firmware z.B. den Mikrocode oder Millicode des Prozessors. Sie enthält zum Beispiel die Instruktionen auf Hardware-Ebene und/oder Datenstrukturen, die in einer Umsetzung von übergeordnetem Maschinencode verwendet werden. In einer Ausführungsform enthält sie zum Beispiel proprietären Code, der normalerweise als Mikrocode bereitgestellt wird, der vertrauenswürdige Software enthält oder einen Mikrocode, der für die zugrunde liegende Hardware spezifisch ist und den Betriebssystemzugriff auf die System-Hardware steuert.
  • Eine Gastinstruktion 40, die erhalten, übersetzt und ausgeführt wird, kann zum Beispiel eine der hierin beschriebenen Instruktionen sein. Die Instruktion, die von einer Architektur stammt (z.B. der z/Architecture), wird aus dem Arbeitsspeicher abgerufen, übersetzt und als eine Folge von nativen Instruktionen 46 einer anderen Architektur dargestellt (z.B. PowerPC, pSeries, Intel usw.). Diese nativen Instruktionen werden anschließend ausgeführt.
  • Ein oder mehrere Aspekte können sich auf Cloud-Computing beziehen.
  • Es sollte von vornherein klar sein, obwohl diese Offenbarung eine ausführliche Beschreibung von Cloud Computing enthält, dass eine Umsetzung der hierin angeführten Lehren nicht auf eine Cloud-Computing-Umgebung beschränkt ist. Stattdessen können Ausführungsformen der vorliegenden Erfindung gemeinsam mit jedem beliebigen Typ von jetzt bekannter oder später entwickelter Datenverarbeitungsumgebung umgesetzt werden.
  • Cloud Computing ist ein Servicebereitstellungsmodell zum Ermöglichen eines problemlosen bedarfsgesteuerten Netzwerkzugriffs auf einen gemeinsam genutzten Pool von konfigurierbaren Datenverarbeitungsressourcen (z.B. Netzwerke, Netzwerkbandbreite, Server, Verarbeitung, Arbeitsspeicher, Speicher, Anwendungen, virtuelle Maschinen und Dienste), die mit minimalem Verwaltungsaufwand bzw. minimaler Interaktion mit einem Anbieter des Service schnell bereitgestellt und freigegeben werden können. Dieses Cloud-Modell kann mindestens fünf Eigenschaften, mindestens drei Dienstmodelle und mindestens vier Implementierungsmodelle enthalten.
  • Die Eigenschaften sind wie folgt:
    • On-Demand Self-Service: Ein Cloud-Nutzer kann einseitig automatisch nach Bedarf für Datenverarbeitungsfunktionen wie Serverzeit und Netzwerkspeicher sorgen, ohne dass eine menschliche Interaktion mit dem Anbieter der Dienste erforderlich ist.
  • Broad Network Access: Es sind Funktionen über ein Netzwerk verfügbar, auf die durch Standardmechanismen zugegriffen wird, welche die Verwendung durch heterogene Thin- oder Thick-Client-Plattformen (z.B. Mobiltelefone, Laptops und PDAs) unterstützen.
  • Resource-Pooling: Die Datenverarbeitungsressourcen des Anbieters werden zusammengeschlossen, um mehreren Nutzern unter Verwendung eines Multi-Tenant-Modells zu dienen, wobei verschiedene physische und virtuelle Ressourcen dynamisch nach Bedarf zugewiesen und neu zugewiesen werden. Es gibt eine gefühlte Standortunabhängigkeit, da der Nutzer allgemein keine Kontrolle bzw. Kenntnis über den genauen Standort der bereitgestellten Ressourcen hat, aber in der Lage sein kann, einen Standort auf einer höheren Abstraktionsebene festzulegen (z.B. Land, Staat oder Rechenzentrum).
  • Rapid Elasticity: Funktionen können für eine schnelle horizontale Skalierung (scale out) schnell und elastisch bereitgestellt werden, in einigen Fällen auch automatisch, und für ein schnelles Scale-in schnell freigegeben werden. Für den Nutzer erscheinen die für das Bereitstellen verfügbaren Funktionen häufig unbegrenzt, und sie können jederzeit in jeder beliebigen Menge gekauft werden.
  • Measured Service: Cloud-Systeme steuern und optimieren die Verwendung von Ressourcen automatisch, indem sie eine Messfunktion auf einer gewissen Abstraktionsebene nutzen, die für die Art von Dienst geeignet ist (z.B. Speicher, Verarbeitung, Bandbreite sowie aktive Benutzerkonten). Der Ressourcen-Verbrauch kann überwacht, gesteuert und gemeldet werden, wodurch sowohl für den Anbieter als auch für den Nutzer des verwendeten Dienstes Transparenz geschaffen wird.
  • Es gibt folgende Dienstmodelle:
    • Software as a Service (SaaS): Die dem Nutzer bereitgestellte Funktion besteht darin, die in einer Cloud-Infrastruktur laufenden Anwendungen des Anbieters zu verwenden. Die Anwendungen sind über eine Thin-Client-Schnittstelle wie ein Web-Browser (z.B. eine auf dem Web beruhende eMail) von verschiedenen Client-Einheiten her zugänglich. Der Nutzer verwaltet bzw. steuert die zugrunde liegende Cloud-Infrastruktur nicht, darunter das Netzwerk, Server, Betriebssysteme, Speicher bzw. sogar einzelne Anwendungsfunktionen, mit der möglichen Ausnahme von eingeschränkten benutzerspezifischen Anwendungskonfigurationseinstellungen.
  • Platform as a Service (PaaS): Die dem Nutzer bereitgestellte Funktion besteht darin, durch einen Nutzer erstellte bzw. erhaltene Anwendungen, die unter Verwendung von durch den Anbieter unterstützten Programmiersprachen und Tools erstellt wurden, in der Cloud-Infrastruktur einzusetzen. Der Nutzer verwaltet bzw. steuert die zugrunde liegende Cloud-Infrastruktur nicht, darunter Netzwerke, Server, Betriebssysteme bzw. Speicher, hat aber die Kontrolle über die eingesetzten Anwendungen und möglicherweise über Konfigurationen des Application Hosting Environment.
  • Infrastructure as a Service (laaS): Die dem Nutzer bereitgestellte Funktion besteht darin, Verarbeitung, Speicher, Netzwerke und andere grundlegende Datenverarbeitungsressourcen bereitzustellen, wobei der Nutzer in der Lage ist, beliebige Software einzusetzen und auszuführen, zu der Betriebssysteme und Anwendungen gehören können. Der Nutzer verwaltet bzw. steuert die zugrunde liegende Cloud-Infrastruktur nicht, hat aber die Kontrolle über Betriebssysteme, Speicher, eingesetzte Anwendungen und möglicherweise eine eingeschränkte Kontrolle über ausgewählte Netzwerkkomponenten (z.B. Host-Firewalls).
  • Es gibt folgende Nutzungsmodelle:
    • Private Cloud: Die Cloud-Infrastruktur wird ausschließlich für eine Organisation betrieben. Sie kann von der Organisation oder einer Drittpartei verwaltet werden und kann innerhalb oder außerhalb von Geschäftsräume vorhanden sein.
  • Community Cloud: Die Cloud-Infrastruktur wird von mehreren Organisationen gemeinsam genutzt und unterstützt eine bestimmte Community, die gemeinsame Problemstellungen hat (z.B. Berücksichtigung von Zielsetzung, Sicherheitsanforderungen, Richtlinien und Konformität). Sie kann von den Organisationen oder einer Drittpartei verwaltet werden und kann innerhalb oder außerhalb der Geschäftsräume vorhanden sein.
  • Public Cloud: Die Cloud-Infrastruktur wird der allgemeinen Öffentlichkeit oder einer großen Industriegruppe zur Verfügung gestellt und gehört einer Organisation, die Cloud-Dienste verkauft.
  • Hybrid Cloud: Die Cloud-Infrastruktur ist eine Zusammensetzung aus zwei oder mehreren Clouds (privat, Benutzergemeinschaft oder öffentlich), die zwar einzelne Einheiten bleiben, aber durch eine standardisierte oder proprietäre Technologie miteinander verbunden sind, die eine Daten- und Anwendungsportierbarkeit ermöglicht (z.B. Cloud-Zielgruppenverteilung für den Lastausgleich zwischen Clouds).
  • Eine Cloud-Computing-Umgebung ist dienstorientiert, wobei der Schwerpunkt auf Statusunabhängigkeit, geringer Kopplung, Modularität und semantischer Interoperabilität liegt. Im Mittelpunkt von Cloud Computing steht eine Infrastruktur, die ein Netzwerk von miteinander verbundenen Knoten aufweist.
  • Unter folgender Bezugnahme auf 33 wird eine veranschaulichende Cloud-Computing-Umgebung 50 dargestellt. Wie gezeigt, weist die Cloud-Computing-Umgebung 50 einen oder mehrere Cloud-Computing-Knoten 10 auf, mit denen lokale Datenverarbeitungseinheiten, die von Nutzern der Cloud verwendet werden, wie beispielsweise Personal Digital Assistant (PDA) oder Mobiltelefon 54A, Desktop-Computer 54B, Laptop-Computer 54C und/oder Fahrzeug-Computersystem 54N, Daten austauschen können. Die Knoten 10 können untereinander Daten austauschen. Sie können physisch oder virtuell in einem oder mehreren Netzwerken gruppiert werden (nicht gezeigt), wie beispielsweise Private, Community, Public oder Hybrid Cloud, wie hierin oben beschrieben, oder in einer Kombination davon. Damit hat die Cloud-Computing-Umgebung 50 die Möglichkeit, eine Infrastruktur, Plattformen und/oder Software als Dienste anzubieten, für die ein Cloud-Nutzer keinerlei Ressourcen auf einer lokalen Datenverarbeitungseinheit vorhalten muss. Es sollte klar sein, dass die in 33 gezeigten Typen von Datenverarbeitungseinheiten 54A bis N nur zur Veranschaulichung dienen sollen, und dass die Cloud-Computing-Knoten 10 und die Cloud-Computing-Umgebung 50 mit jedem Typ einer computerisierten Einheit über jeden Typ von Netzwerk und/oder eine über ein Netzwerk adressierbare Verbindung (z.B. unter Verwendung eines Web-Browsers) Daten austauschen können.
  • Unter folgender Bezugnahme auf 34 wird ein Satz von funktionalen Abstraktionsschichten gezeigt, die von der Cloud Computing-Umgebung 50 (33) bereitgestellt werden. Dabei sollte von Anfang an klar sein, dass die in 34 gezeigten Komponenten, Schichten und Funktionen lediglich zur Veranschaulichung dienen sollen und Ausführungsformen der Erfindung nicht darauf beschränkt sind. Wie dargestellt, werden die folgenden Schichten und entsprechenden Funktionen bereitgestellt:
    • Eine Hardware- und Software-Schicht 60 enthält Hardware- und Software-Komponenten. Zu Beispielen für Hardware-Komponenten zählen: Mainframes 61; Server auf Grundlage einer RISC- (Reduced Instruction Set Computer) Architektur 62; Server 63; Blade-Server 64;
    • Speichereinheiten 65; und Netzwerke und vernetzte Komponenten 66. In einigen Ausführungsformen enthalten Software-Komponenten Software für Netzwerkanwendungsserver 67 und Datenbank-Software 68.
  • Eine Virtualisierungsschicht 70 stellt eine Abstraktionsschicht bereit, von der aus die folgenden beispielhaften virtuellen Entitäten bereitgestellt werden können: virtuelle Server 71; virtueller Speicher 72; virtuelle Netzwerke 73, einschließlich virtuelle private Netzwerke; virtuelle Anwendungen und Betriebssysteme 74; und virtuelle Clients 75.
  • In einem Beispiel kann die Verwaltungsschicht 80 die im Folgenden beschriebenen Funktionen bereitstellen. Die Ressourcenbereitstellung 81 sorgt für eine dynamische Beschaffung von Datenverarbeitungsressourcen und weiteren Ressourcen, die zum Ausführen von Aufgaben innerhalb der Cloud-Computing-Umgebung eingesetzt werden. Messung und Preisbestimmung 82 ermöglichen beim Einsatz von Ressourcen innerhalb der Cloud-Computing-Umgebung eine Kostenverfolgung und eine Abrechnung oder Rechnungsstellung für die Inanspruchnahme dieser Ressourcen. In einem Beispiel können diese Ressourcen Lizenzen für Anwendungssoftware aufweisen. Eine Sicherheitsfunktion stellt eine Identitätsprüfung für Cloud-Nutzer und -Aufgaben sowie einen Schutz für Daten und andere Ressourcen bereit. Ein Benutzerportal 83 stellt den Zugang zur Cloud-Computing-Umgebung für Nutzer und Systemadministratoren bereit. Die Service-Level-(Dienstgüte) Verwaltung 84 sorgt für die Zuordnung und Verwaltung von Cloud-Computing-Ressourcen, so dass erforderliche Service-Levels eingehalten werden. Planung und Vertragserfüllung des Service Level Agreement (SLA) (Dienstgütevereinbarung) 85 stellen eine Vorab-Vereinbarung für und Beschaffung von Cloud-Computing-Ressourcen bereit, für die gemäß eines SLA eine zukünftige Anforderung erwartet wird.
  • Eine Arbeitslastschicht 90 stellt Beispiele für eine Funktionalität bereit, für welche die Cloud-Computing-Umgebung genutzt werden kann. Zu Beispielen von Arbeitslasten und Funktionen, die von dieser Schicht aus bereitgestellt werden können, zählen: Zuordnung und Navigation 91; Software-Entwicklung und Lifecycle-Management 92; Bereitstellung von virtuellen Schulungen 93; Datenanalyseverarbeitung 94; Transaktionsverarbeitung 95; und Inhaltstabellen-Zeigerverarbeitung 96.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt auf jeder möglichen technischen Detailintegrationsebene handeln. Das Computerprogrammprodukt kann ein durch einen Computer lesbares Speichermedium (oder -medien) enthalten, auf dem durch einen Computer lesbare Programminstruktionen gespeichert sind, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Instruktionen zur Verwendung durch eine Einheit zur Ausführung von Instruktionen beibehalten und speichern kann. Das durch einen Computer lesbare Speichermedium kann zum Beispiel eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiter-Speichereinheit oder jede geeignete Kombination aus dem Vorgenannten sein, es ist aber nicht darauf beschränkt. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die Folgenden: eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein tragbarer CD-ROM, eine DVD, ein Speicher-Stick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder erhabene Strukturen in einer Rille, auf denen Instruktionen gespeichert sind, und jede geeignete Kombination des Vorgenannten. Ein durch einen Computer lesbares Speichermedium soll, wie hierin verwendet, nicht als flüchtige Signale an sich aufgefasst werden, wie zum Beispiel Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder andere Übertragungsmedien ausbreiten (z.B. durch ein Glasfaserkabel geleitete Lichtimpulse) oder durch einen Draht übertragene elektrische Signale.
  • Hierin beschriebene durch einen Computer lesbare Programminstruktionen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs-/Verarbeitungseinheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Leitwegrechner, Firewalls, Vermittlungseinheiten, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programminstruktionen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programminstruktionen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
  • Bei durch einen Computer lesbaren Programminstruktionen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembler-Instruktionen, ISA-Instruktionen (Instruction-Set-Architecture), Maschineninstruktionen, maschinenabhängige Instruktionen, Mikrocode, Firmware-Instruktionen, zustandssetzende Daten, Konfigurationsdaten für integrierte Schaltungen oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben sind, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die durch einen Computer lesbaren Programminstruktionen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. In dem letzteren Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch jeden Typ von Netzwerk verbunden werden, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, feldprogrammierbare Gatter-Anordnungen (FPGA, field programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die computerlesbaren Programminstruktionen ausführen, indem sie Zustandsinformationen der computerlesbaren Programminstruktionen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der vorliegenden Erfindung durchzuführen.
  • Aspekte der vorliegenden Erfindung werden hierin unter Bezugnahme auf Veranschaulichungen von Ablaufplänen und/oder Blockschaubildern von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es sollte klar sein, dass jeder Block der Ablaufplanveranschaulichungen und/oder der Blockschaubilder und Kombinationen von Blöcken in den Ablaufplanveranschaulichungen und/oder den Blockschaubildern mittels durch einen Computer lesbare Programminstruktionen umgesetzt werden können.
  • Diese durch einen Computer lesbaren Programminstruktionen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, sodass die über den Prozessor des Computers bzw. eine andere programmierbare Datenverarbeitungsvorrichtung ausgeführten Instruktionen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaubilder angegebenen Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programminstruktionen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, sodass das durch einen Computer lesbare Speichermedium, auf dem Instruktionen gespeichert sind, ein Herstellungsprodukt aufweist, darunter Instruktionen, die Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaubilder angegebenen Funktion/Schritts umsetzen.
  • Die durch einen Computer lesbaren Programminstruktionen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Arbeitsschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen durch einen Computer umgesetzten Prozess zu erzeugen, sodass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Instruktionen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaubilder angegebenen Funktionen/Schritte umsetzen.
  • Die Ablaufpläne und Blockschaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder den Blockschaubildern ein Modul, ein Segment oder einen Teil von Instruktionen darstellen, die eine oder mehrere ausführbare Instruktionen zum Umsetzen der bestimmten logischen Funktion(en) aufweisen. In einigen alternativen Umsetzungen können die in dem Block angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt auftreten. Zum Beispiel können zwei nacheinander gezeigte Blöcke tatsächlich im Wesentlichen parallel ausgeführt werden, oder die Blöcke können manchmal in der umgekehrten Reihenfolge ausgeführt werden, was von der beteiligten Funktionalität abhängt. Es ist ferner anzumerken, dass jeder Block der Blockschaubilder und/oder der Ablaufplandarstellungen sowie Kombinationen von Blöcken in den Blockschaubildern und/oder der Ablaufplandarstellung durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die angegebenen Funktionen oder Handlungen durchführen oder Kombinationen aus Spezial-Hardware und Computerinstruktionen ausführen.
  • Zusätzlich zu Vorgenanntem können ein oder mehrere Aspekte durch einen Dienstanbieter bereitgestellt, angeboten, eingesetzt, verwaltet, gewartet werden usw., der eine Verwaltung von Umgebungen von Kunden anbietet. Zum Beispiel kann der Dienstanbieter Computercode und/oder eine Computer-Infrastruktur erstellen, pflegen, unterstützen usw., die einen oder mehrere Aspekte für einen oder mehrere Kunden ausführen. Im Gegenzug kann der Dienstanbieter zum Beispiel eine Bezahlung von dem Kunden unter einem Abonnement und/oder einer Gebührenvereinbarung erhalten. Zusätzlich oder alternativ kann der Dienstanbieter eine Bezahlung aus dem Verkauf von Werbeinhalten an einen oder mehrere Fremdanbieter erhalten.
  • In einem Aspekt kann eine Anwendung zum Ausführen von einer oder mehreren Ausführungsformen verwendet werden. Zum Beispiel weist die Verwendung einer Anwendung ein Bereitstellen einer Computer-Infrastruktur auf, die fähig ist, eine oder mehrere Ausführungsformen auszuführen.
  • Als weiterer Aspekt kann eine Datenverarbeitungs-Infrastruktur verwendet werden, die ein Integrieren von computerlesbarem Code in ein Datenverarbeitungssystem aufweist, in dem der Code in Kombination mit dem Datenverarbeitungssystem fähig ist, eine oder mehrere Ausführungsformen auszuführen.
  • Als noch ein weiterer Aspekt kann ein Prozess zum Integrieren einer Datenverarbeitungs-Infrastruktur bereitgestellt werden, die ein Integrieren von computerlesbarem Code in ein Computersystem aufweist. Das Computersystem weist ein computerlesbares Medium auf, wobei das Computer-Medium eine oder mehrere Ausführungsformen aufweist. Der Code in Kombination mit dem Computersystem ist fähig, eine oder mehrere Ausführungsformen auszuführen.
  • Obwohl verschiedene Ausführungsformen oben beschrieben werden, sind dies nur Beispiele. Zum Beispiel können Datenverarbeitungsumgebungen von anderen Architekturen verwendet werden, um eine oder mehrere Ausführungsformen zu integrieren und zu verwenden. Ferner können verschiedene Instruktionen oder Operationen verwendet werden. Außerdem können verschiedene Register verwendet werden und/oder andere Typen von Angaben (andere als Registernummern) können angegeben werden. Viele Variationen sind möglich.
  • Ferner können weitere Typen von Datenverarbeitungsumgebungen daraus Nutzen ziehen und verwendet werden. Zum Beispiel ist ein Datenverarbeitungssystem verwendbar, das zum Speichern und/oder Ausführen von Programmcode geeignet ist, das mindestens zwei Prozessoren enthält, die direkt oder indirekt über einen Systembus mit Arbeitsspeicherelementen verbunden sind. Die Arbeitsspeicherelemente enthalten zum Beispiel einen lokalen Arbeitsspeicher, der während der tatsächlichen Ausführung des Programmcodes verwendet wird, einen Massenspeicher und einen Cache-Arbeitsspeicher, die eine vorübergehende Speicherung von mindestens einigem Programmcode bereitstellen, um die Anzahl zu verringern, wie oft Code während der Ausführung aus dem Massenspeicher abgerufen werden muss.
  • Eingabe-/Ausgabe- oder E/A-Einheiten (einschließlich Tastaturen, Anzeigen, Zeigeeinheiten, DASD, Band, CDs, DVDs, Thumb-Drives und andere Speichermedien usw., die jedoch nicht darauf beschränkt sind) können entweder direkt oder über zwischengeschaltete E/A-Controller mit dem System verbunden werden. Netzwerkadapter können ebenfalls mit dem System verbunden werden, um zu ermöglichen, dass das Datenverarbeitungssystem mit anderen Datenverarbeitungssystemen oder entfernt angeordneten Druckern oder Speichereinheiten über dazwischenliegende private oder öffentliche Netzwerke verbunden werden kann. Modems, Kabelmodems oder Ethernet-Karten sind nur einige der verfügbaren Typen von Netzwerkadaptern.
  • Die hierin verwendete Terminologie dient nur zum Zweck der Beschreibung von bestimmten Ausführungsformen und soll keinesfalls einschränkend sein. Die hierin verwendeten Singularformen „ein“, „eine“ und „der/die/das“ sollen auch die Pluralformen mit einschließen, es sei denn, der Kontext gibt eindeutig anderes vor. Es versteht sich des Weiteren, dass die Begriffe „weist auf“ und/oder „aufweisend“ bei Verwendung in dieser Patentschrift das Vorhandensein ausgewiesener Merkmale, Ganzzahlen, Schritte, Vorgänge, Elemente und/oder Komponenten angeben, das Vorhandensein oder die Hinzufügung von einem oder mehreren anderen Merkmalen, Ganzzahlen, Schritten, Vorgängen, Elementen, Komponenten und/oder Gruppen davon aber nicht ausschließen.
  • Die entsprechenden Strukturen, Materialien, Handlungen und Entsprechungen aller Mittel oder Schritt-plus-Funktion-Elemente in den nachstehenden Ansprüchen sollen, sofern vorhanden, alle Strukturen, Materialien oder Handlungen zum Ausführen der Funktion in Kombination mit anderen beanspruchten Elementen enthalten, wie speziell beansprucht. Die Beschreibung von einer oder mehreren Ausführungsformen wurde zum Zweck der Veranschaulichung und Beschreibung erstellt, sie soll aber keineswegs erschöpfend oder auf die offenbarte Form eingeschränkt sein. Für Fachleute sind viele Modifizierungen und Variationen offenkundig. Die Ausführungsform wurde ausgewählt und beschrieben, um verschiedene Aspekte und die praktische Anwendung am besten zu erklären und es anderen Fachleuten zu erleichtern, die verschiedenen Ausführungsformen mit verschiedenen Modifizierungen zu verstehen, die für die vorgesehene bestimmte Verwendung geeignet sind.
  • Claims (20)

    1. Computerprogrammprodukt zum Vereinfachen einer Verarbeitung in einer Datenverarbeitungsumgebung, wobei das Computerprogrammprodukt aufweist: ein durch einen Computer lesbares Speichermedium, das durch eine Verarbeitungsschaltung lesbar ist, und Instruktionen zum Ausführen eines Verfahrens speichert, das aufweist: ein Erhalten, durch einen Prozessor, einer auszuführenden Instruktion, wobei die Instruktion einen Zeiger auf eine Referenzdatenstruktur bereitstellt; und ein Ausführen der Instruktion, wobei das Ausführen aufweist: ein Bestimmen eines Werts für den Zeiger auf die Referenzdatenstruktur; und ein Speichern des Werts in einem Speicherort, der durch die Instruktion angegeben wird.
    2. Computerprogrammprodukt nach Anspruch 1, wobei das Bestimmen des Werts ein Ausführen eines Look-Up einer Datenstruktur aufweist, um den Wert zu bestimmen.
    3. Computerprogrammprodukt nach Anspruch 2, wobei die Datenstruktur einen Zeiger-Cachespeicher der Referenzdatenstruktur aufweist.
    4. Computerprogrammprodukt nach Anspruch 2, wobei die Datenstruktur eine Tabelle aufweist, die mit Referenzdatenstruktur-Zeigerwerten aufgefüllt ist.
    5. Computerprogrammprodukt nach Anspruch 1, wobei der Speicherort ein Register aufweist, das durch die Instruktion angegeben wird.
    6. Computerprogrammprodukt nach Anspruch 1, wobei das Bestimmen des Werts aufweist: ein Prüfen eines Zeiger-Cachespeichers der Referenzdatenstruktur für einen Eintrag, der den Wert enthält; und ein Ausführen des Speicherns auf Grundlage eines Auffindens des Eintrags.
    7. Computerprogrammprodukt nach Anspruch 6, wobei das Bestimmen des Werts ferner aufweist: ein Erstellen, durch den Prozessor, einer Trap für einen Handler auf Grundlage des Werts, der sich nicht in dem Zeiger-Cachespeicher der Referenzdatenstruktur befindet; ein Erhalten, durch den Handler, des Werts aus einer Datenstruktur, die mit Referenzdatenstruktur-Zeigerwerten aufgefüllt ist; und ein Ausführen des Speicherns durch den Handler.
    8. Computerprogrammprodukt nach Anspruch 7, wobei das Verfahren ferner ein Speichern des Werts in dem Zeiger-Cachespeicher der Referenzdatenstruktur aufweist.
    9. Computerprogrammprodukt nach Anspruch 6, wobei das Bestimmen des Werts ferner ein Ausführen, auf Grundlage des Werts, der sich nicht in dem Zeiger-Cachespeicher der Referenzdatenstruktur befindet, einer Cachespeicher-Fehltrefferverarbeitung, um den Wert zu bestimmen und den Wert zu speichern.
    10. Computerprogrammprodukt nach Anspruch 1, wobei das Verfahren ferner aufweist: ein Erstellen, durch den Prozessor, einer Trap für einen Handler auf Grundlage eines Erhaltens der Instruktion; und ein Ausführen des Bestimmens und des Speicherns durch den Handler.
    11. Computersystem zum Vereinfachen einer Verarbeitung in einer Datenverarbeitungsumgebung, wobei das Computersystem aufweist: einen Arbeitsspeicher; und einen Prozessor, der mit dem Arbeitsspeicher in Datenaustausch steht, wobei das Computersystem konfiguriert ist, um ein Verfahren auszuführen, wobei das Verfahren aufweist: ein Erhalten, durch den Prozessor, einer Instruktion zum Ausführen der Instruktion, einen Zeiger auf eine Referenzdatenstruktur bereitzustellen; und ein Ausführen der Instruktion, wobei das Ausführen aufweist: ein Bestimmen eines Werts für den Zeiger auf die Referenzdatenstruktur; und ein Speichern des Werts in einem Speicherort, der durch die Instruktion angegeben wird.
    12. Computersystem nach Anspruch 11, wobei der Speicherort ein Register aufweist, das durch die Instruktion angegeben wird.
    13. Computersystem nach Anspruch 11, wobei das Bestimmen des Werts aufweist: ein Prüfen eines Zeiger-Cachespeichers der Referenzdatenstruktur für einen Eintrag, der den Wert enthält; und ein Ausführen des Speicherns auf Grundlage eines Auffindens des Eintrags.
    14. Computersystem nach Anspruch 13, wobei das Bestimmen des Werts ferner aufweist: ein Erstellen, durch den Prozessor, einer Trap für einen Handler auf Grundlage des Werts, der sich nicht in dem Zeiger-Cachespeicher der Referenzdatenstruktur befindet; ein Erhalten, durch den Handler, des Werts aus einer Datenstruktur, die mit Referenzdatenstruktur-Zeigerwerten aufgefüllt ist; und ein Ausführen des Speicherns durch den Handler.
    15. Computersystem nach Anspruch 11, wobei das Verfahren ferner aufweist: ein Erstellen, durch den Prozessor, einer Trap für einen Handler auf Grundlage eines Erhaltens der Instruktion; und ein Ausführen des Bestimmens und des Speicherns durch den Handler.
    16. Durch einen Computer umgesetztes Verfahren zum Vereinfachen einer Verarbeitung in einer Datenverarbeitungsumgebung, wobei das Computersystem aufweist: ein Erhalten, durch einen Prozessor, einer Instruktion zum Ausführen der Instruktion, einen Zeiger auf eine Referenzdatenstruktur bereitzustellen; und ein Ausführen der Instruktion, wobei das Ausführen aufweist: ein Bestimmen eines Werts für den Zeiger auf die Referenzdatenstruktur; und ein Speichern des Werts in einem Speicherort, der durch die Instruktion angegeben wird.
    17. Durch einen Computer umgesetztes Verfahren nach Anspruch 16, wobei der Speicherort ein Register aufweist, das durch die Instruktion angegeben wird.
    18. Durch einen Computer umgesetztes Verfahren nach Anspruch 16, wobei das Bestimmen des Werts aufweist: ein Prüfen eines Zeiger-Cachespeichers der Referenzdatenstruktur für einen Eintrag, der den Wert enthält; und ein Ausführen des Speicherns auf Grundlage eines Auffindens des Eintrags.
    19. Durch einen Computer umgesetztes Verfahren nach Anspruch 18, wobei das Bestimmen des Werts ferner aufweist: ein Erstellen, durch den Prozessor, einer Trap für einen Handler auf Grundlage des Werts, der sich nicht in dem Zeiger-Cachespeicher der Referenzdatenstruktur befindet; ein Erhalten, durch den Handler, des Werts aus einer Datenstruktur, die mit Referenzdatenstruktur-Zeigerwerten aufgefüllt ist; und ein Ausführen des Speicherns durch den Handler.
    20. Durch einen Computer umgesetztes Verfahren nach Anspruch 16, ferner aufweisend: ein Erstellen, durch den Prozessor, einer Trap für einen Handler auf Grundlage eines Erhaltens der Instruktion; und ein Ausführen des Bestimmens und des Speicherns durch den Handler.
    DE112018003586.7T 2017-09-19 2018-09-18 Instruktion "inhaltsverzeichnis- (toc) register einrichten" Pending DE112018003586T5 (de)

    Applications Claiming Priority (5)

    Application Number Priority Date Filing Date Title
    US15/708,207 US10884929B2 (en) 2017-09-19 2017-09-19 Set table of contents (TOC) register instruction
    US15/708,207 2017-09-19
    US15/822,801 2017-11-27
    US15/822,801 US10884930B2 (en) 2017-09-19 2017-11-27 Set table of contents (TOC) register instruction
    PCT/IB2018/057132 WO2019058250A1 (en) 2017-09-19 2018-09-18 CONFIGURED CONTENT TABLE (TOC) REGISTER INSTRUCTION

    Publications (1)

    Publication Number Publication Date
    DE112018003586T5 true DE112018003586T5 (de) 2020-03-26

    Family

    ID=65720248

    Family Applications (1)

    Application Number Title Priority Date Filing Date
    DE112018003586.7T Pending DE112018003586T5 (de) 2017-09-19 2018-09-18 Instruktion "inhaltsverzeichnis- (toc) register einrichten"

    Country Status (6)

    Country Link
    US (3) US10884929B2 (de)
    JP (1) JP7059361B2 (de)
    CN (1) CN111066006B (de)
    DE (1) DE112018003586T5 (de)
    GB (1) GB2581639B (de)
    WO (1) WO2019058250A1 (de)

    Families Citing this family (7)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
    US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
    US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
    US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
    US11061575B2 (en) * 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
    US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
    US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction

    Family Cites Families (165)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    JPH0337723A (ja) 1989-07-05 1991-02-19 Hitachi Ltd 情報処理装置
    IL98248A0 (en) 1991-05-23 1992-06-21 Ibm Israel Instruction scheduler for a computer
    ATE187268T1 (de) 1992-07-06 1999-12-15 Microsoft Corp Verfahren zur namensgebung und zur bindung von objekten
    US5313634A (en) 1992-07-28 1994-05-17 International Business Machines Corporation Computer system branch prediction of subroutine returns
    JP2883784B2 (ja) 1993-04-27 1999-04-19 株式会社東芝 マイクロコンピュータ
    US5604877A (en) 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for resolving return from subroutine instructions in a computer processor
    US5590329A (en) 1994-02-04 1996-12-31 Lucent Technologies Inc. Method and apparatus for detecting memory access errors
    US5835743A (en) * 1994-06-30 1998-11-10 Sun Microsystems, Inc. Application binary interface and method of interfacing binary application program to digital computer
    US6006324A (en) 1995-01-25 1999-12-21 Advanced Micro Devices, Inc. High performance superscalar alignment unit
    JP3494736B2 (ja) 1995-02-27 2004-02-09 株式会社ルネサステクノロジ 分岐先バッファを用いた分岐予測システム
    US5896528A (en) 1995-03-03 1999-04-20 Fujitsu Limited Superscalar processor with multiple register windows and speculative return address generation
    US6314561B1 (en) 1995-04-12 2001-11-06 International Business Machines Corporation Intelligent cache management mechanism
    US5968169A (en) 1995-06-07 1999-10-19 Advanced Micro Devices, Inc. Superscalar microprocessor stack structure for judging validity of predicted subroutine return addresses
    US5923882A (en) * 1995-08-29 1999-07-13 Silicon Graphics, Inc. Cross-module optimization for dynamically-shared programs and libraries
    US5898864A (en) 1995-09-25 1999-04-27 International Business Machines Corporation Method and system for executing a context-altering instruction without performing a context-synchronization operation within high-performance processors
    US5892936A (en) 1995-10-30 1999-04-06 Advanced Micro Devices, Inc. Speculative register file for storing speculative register states and removing dependencies between instructions utilizing the register
    US5797014A (en) 1995-12-14 1998-08-18 International Business Machines Corporation Method for reducing processor cycles used for global offset table address computation in a position independent shared library
    US5774722A (en) 1995-12-14 1998-06-30 International Business Machines Corporation Method for efficient external reference resolution in dynamically linked shared code libraries in single address space operating systems
    US5815700A (en) 1995-12-22 1998-09-29 Intel Corporation Branch prediction table having pointers identifying other branches within common instruction cache lines
    US6535903B2 (en) 1996-01-29 2003-03-18 Compaq Information Technologies Group, L.P. Method and apparatus for maintaining translated routine stack in a binary translation environment
    US5815719A (en) 1996-05-07 1998-09-29 Sun Microsystems, Inc. Method and apparatus for easy insertion of assembler code for optimization
    US5850543A (en) 1996-10-30 1998-12-15 Texas Instruments Incorporated Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return
    US5996092A (en) 1996-12-05 1999-11-30 International Business Machines Corporation System and method for tracing program execution within a processor before and after a triggering event
    US5898885A (en) 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native stack-based instruction within a computer system
    US5953736A (en) * 1997-04-23 1999-09-14 Sun Microsystems, Inc. Write barrier system and method including pointer-specific instruction variant replacement mechanism
    US6157999A (en) 1997-06-03 2000-12-05 Motorola Inc. Data processing system having a synchronizing link stack and method thereof
    US6195734B1 (en) 1997-07-02 2001-02-27 Micron Technology, Inc. System for implementing a graphic address remapping table as a virtual register file in system memory
    US5961636A (en) 1997-09-22 1999-10-05 International Business Machines Corporation Checkpoint table for selective instruction flushing in a speculative execution unit
    US6370090B1 (en) 1998-06-10 2002-04-09 U.S. Philips Corporation Method, device, and information structure for storing audio-centered information with a multi-level table-of-contents (toc) mechanism and doubling of area-tocs, a device for use with such mechanism and a unitary storage medium having such mechanism
    CN1306697A (zh) 1998-06-25 2001-08-01 赤道技术公司 可变长度编码与解码的处理电路和处理方法
    US6591359B1 (en) 1998-12-31 2003-07-08 Intel Corporation Speculative renaming of data-processor registers
    US6308322B1 (en) 1999-04-06 2001-10-23 Hewlett-Packard Company Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints
    US6446197B1 (en) 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
    US6442707B1 (en) 1999-10-29 2002-08-27 Advanced Micro Devices, Inc. Alternate fault handler
    US6715064B1 (en) 2000-01-21 2004-03-30 Intel Corporation Method and apparatus for performing sequential executions of elements in cooperation with a transform
    US6401181B1 (en) 2000-02-29 2002-06-04 International Business Machines Corporation Dynamic allocation of physical memory space
    US6766442B1 (en) 2000-03-30 2004-07-20 International Business Machines Corporation Processor and method that predict condition register-dependent conditional branch instructions utilizing a potentially stale condition register value
    US6625660B1 (en) 2000-06-06 2003-09-23 International Business Machines Corporation Multiprocessor speculation mechanism for efficiently managing multiple barrier operations
    US6691220B1 (en) 2000-06-06 2004-02-10 International Business Machines Corporation Multiprocessor speculation mechanism via a barrier speculation flag
    JP2002014868A (ja) 2000-06-28 2002-01-18 Hitachi Ltd メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法
    GB2367654B (en) 2000-10-05 2004-10-27 Advanced Risc Mach Ltd Storing stack operands in registers
    US6880073B2 (en) 2000-12-28 2005-04-12 International Business Machines Corporation Speculative execution of instructions and processes before completion of preceding barrier operations
    US6886093B2 (en) 2001-05-04 2005-04-26 Ip-First, Llc Speculative hybrid branch direction predictor
    JP2003044273A (ja) 2001-08-01 2003-02-14 Nec Corp データ処理装置及びデータ処理方法
    CA2355989A1 (en) 2001-08-27 2003-02-27 Ibm Canada Limited-Ibm Canada Limitee Compiling source code files having multiple
    EP1423340A1 (de) 2001-09-03 2004-06-02 Kongsted Maskinfabrik 2003 APS Verfahren zur biologischen reinigung von abwasser und anlage, vorzugsweise minireinigungsanlage für das verfahren
    US7024538B2 (en) * 2001-12-21 2006-04-04 Hewlett-Packard Development Company, L.P. Processor multiple function units executing cycle specifying variable length instruction block and using common target block address updated pointers
    US6973563B1 (en) 2002-01-04 2005-12-06 Advanced Micro Devices, Inc. Microprocessor including return prediction unit configured to determine whether a stored return address corresponds to more than one call instruction
    US6883086B2 (en) 2002-03-06 2005-04-19 Intel Corporation Repair of mis-predicted load values
    US6845442B1 (en) 2002-04-30 2005-01-18 Advanced Micro Devices, Inc. System and method of using speculative operand sources in order to speculatively bypass load-store operations
    US7028166B2 (en) 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
    EP1387247A3 (de) 2002-07-31 2007-12-12 Texas Instruments Inc. System und Verfahren zum automatischen Stapeln und Entstapeln von Java lokalen Variablen
    US7089400B1 (en) 2002-08-29 2006-08-08 Advanced Micro Devices, Inc. Data speculation based on stack-relative addressing patterns
    US7310799B2 (en) 2002-12-31 2007-12-18 International Business Machines Corporation Reducing load instructions via global data reordering
    US7464254B2 (en) 2003-01-09 2008-12-09 Cisco Technology, Inc. Programmable processor apparatus integrating dedicated search registers and dedicated state machine registers with associated execution hardware to support rapid application of rulesets to data
    US7024537B2 (en) 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
    US7684307B2 (en) 2003-02-13 2010-03-23 Doug Carson & Associates, Inc. Identifier tag to track layers in a multi-layer optical disc
    US6965983B2 (en) 2003-02-16 2005-11-15 Faraday Technology Corp. Simultaneously setting prefetch address and fetch address pipelined stages upon branch
    US7017028B2 (en) 2003-03-14 2006-03-21 International Business Machines Corporation Apparatus and method for updating pointers for indirect and parallel register access
    US7133977B2 (en) 2003-06-13 2006-11-07 Microsoft Corporation Scalable rundown protection for object lifetime management
    US7802080B2 (en) * 2004-03-24 2010-09-21 Arm Limited Null exception handling
    US7263600B2 (en) 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
    US7296136B1 (en) 2004-06-04 2007-11-13 Hewlett-Packard Development Company, L.P. Methods and systems for loading data from memory
    US7412710B2 (en) 2004-11-12 2008-08-12 Red Hat, Inc. System, method, and medium for efficiently obtaining the addresses of thread-local variables
    US8706475B2 (en) 2005-01-10 2014-04-22 Xerox Corporation Method and apparatus for detecting a table of contents and reference determination
    US8223600B2 (en) 2005-04-06 2012-07-17 Quantum Corporation Network-attachable, file-accessible storage drive
    US7366887B2 (en) 2005-07-11 2008-04-29 Lenovo (Singapore) Pte. Ltd. System and method for loading programs from HDD independent of operating system
    US8601001B2 (en) 2005-07-28 2013-12-03 The Boeing Company Selectively structuring a table of contents for accessing a database
    US20070088937A1 (en) 2005-10-13 2007-04-19 International Business Machines Corporation Computer-implemented method and processing unit for predicting branch target addresses
    US7688686B2 (en) 2005-10-27 2010-03-30 Microsoft Corporation Enhanced table of contents (TOC) identifiers
    US7890941B1 (en) 2005-11-10 2011-02-15 Oracle America, Inc. Binary profile instrumentation framework
    JP4978025B2 (ja) 2006-02-24 2012-07-18 株式会社日立製作所 ポインタの圧縮・伸張方法、これを実行するプログラム、及び、これを用いた計算機システム
    US7590826B2 (en) 2006-11-06 2009-09-15 Arm Limited Speculative data value usage
    US7444501B2 (en) 2006-11-28 2008-10-28 Qualcomm Incorporated Methods and apparatus for recognizing a subroutine call
    US7953996B2 (en) 2006-12-18 2011-05-31 Hewlett-Packard Development Company, L.P. ACPI to firmware interface
    US8370606B2 (en) 2007-03-16 2013-02-05 Atmel Corporation Switching data pointers based on context
    US8701187B2 (en) * 2007-03-29 2014-04-15 Intel Corporation Runtime integrity chain verification
    JP5085180B2 (ja) 2007-04-24 2012-11-28 株式会社東芝 情報処理装置およびアクセス制御方法
    US8166279B2 (en) 2007-05-03 2012-04-24 International Business Machines Corporation Method for predictive decoding of a load tagged pointer instruction
    JP2008299795A (ja) 2007-06-04 2008-12-11 Nec Electronics Corp 分岐予測制御装置及びその方法
    US7809933B2 (en) 2007-06-07 2010-10-05 International Business Machines Corporation System and method for optimizing branch logic for handling hard to predict indirect branches
    US8364973B2 (en) 2007-12-31 2013-01-29 Intel Corporation Dynamic generation of integrity manifest for run-time verification of software program
    US8397014B2 (en) 2008-02-04 2013-03-12 Apple Inc. Memory mapping restore and garbage collection operations
    US7882338B2 (en) 2008-02-20 2011-02-01 International Business Machines Corporation Method, system and computer program product for an implicit predicted return from a predicted subroutine
    WO2009146039A1 (en) 2008-03-31 2009-12-03 Thomson Reuters Global Resources Systems and methods for tables of contents
    US8078850B2 (en) 2008-04-24 2011-12-13 International Business Machines Corporation Branch prediction technique using instruction for resetting result table pointer
    US8639913B2 (en) 2008-05-21 2014-01-28 Qualcomm Incorporated Multi-mode register file for use in branch prediction
    CN101763248A (zh) 2008-12-25 2010-06-30 世意法(北京)半导体研发有限责任公司 用于多模式分支预测器的系统和方法
    US8150859B2 (en) 2010-02-05 2012-04-03 Microsoft Corporation Semantic table of contents for search results
    CA2702354A1 (en) 2010-05-19 2010-10-07 Ibm Canada Limited - Ibm Canada Limitee Improved setjmp/longjmp for speculative execution frameworks
    US8713529B2 (en) 2010-07-30 2014-04-29 Red Hat, Inc. Replacing memory pointers with implicit pointers to be used in compiler-generated debug output
    DE102010045800A1 (de) 2010-09-20 2012-03-22 Texas Instruments Deutschland Gmbh Elektronische Vorrichtung und Verfahren zur Datenverarbeitung unter Verwendung einer Betriebsart mit virtuellem Register
    US8769539B2 (en) 2010-11-16 2014-07-01 Advanced Micro Devices, Inc. Scheduling scheme for load/store operations
    US9552206B2 (en) 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
    US8725989B2 (en) 2010-12-09 2014-05-13 Intel Corporation Performing function calls using single instruction multiple data (SIMD) registers
    US8997066B2 (en) 2010-12-27 2015-03-31 Microsoft Technology Licensing, Llc Emulating pointers
    US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
    US8930657B2 (en) 2011-07-18 2015-01-06 Infineon Technologies Ag Method and apparatus for realtime detection of heap memory corruption by buffer overruns
    US9329869B2 (en) 2011-10-03 2016-05-03 International Business Machines Corporation Prefix computer instruction for compatibily extending instruction functionality
    US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
    CN104025039B (zh) 2011-12-22 2018-05-08 英特尔公司 打包数据操作掩码串接处理器、方法、系统及指令
    US8996788B2 (en) 2012-02-09 2015-03-31 Densbits Technologies Ltd. Configurable flash interface
    US9063759B2 (en) 2012-03-28 2015-06-23 International Business Machines Corporation Optimizing subroutine calls based on architecture level of called subroutine
    JP5598493B2 (ja) 2012-03-30 2014-10-01 富士通株式会社 情報処理装置、演算装置および情報転送方法
    US9058192B2 (en) 2012-08-09 2015-06-16 Advanced Micro Devices, Inc. Handling pointers in program code in a system that supports multiple address spaces
    US9471514B1 (en) * 2012-08-23 2016-10-18 Palo Alto Networks, Inc. Mitigation of cyber attacks by pointer obfuscation
    WO2014068779A1 (ja) 2012-11-05 2014-05-08 株式会社モルフォ 画像処理装置、画像処理方法、画像処理プログラム及び記録媒体
    GB201300608D0 (en) 2013-01-14 2013-02-27 Imagination Tech Ltd Indirect branch prediction
    EP3025228A2 (de) 2013-07-24 2016-06-01 Marvell World Trade Ltd. Verfahren und system zur compileroptimierung
    US9858081B2 (en) 2013-08-12 2018-01-02 International Business Machines Corporation Global branch prediction using branch and fetch group history
    CN104423929B (zh) 2013-08-21 2017-07-14 华为技术有限公司 一种分支预测方法及相关装置
    JP2015049832A (ja) 2013-09-04 2015-03-16 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 定数ロードのオーバーヘッドを削減する方法、装置及びプログラム
    EP3058457A4 (de) 2013-10-15 2017-07-12 Mill Computing, Inc. Computerprozessor mit verzögertem betrieb
    GB201319525D0 (en) 2013-11-05 2013-12-18 Optibiotix Health Ltd Composition
    GB2518912B (en) 2014-01-17 2015-08-26 Imagination Tech Ltd Stack pointer value prediction
    GB2518022B (en) 2014-01-17 2015-09-23 Imagination Tech Ltd Stack saved variable value prediction
    US9110675B1 (en) 2014-03-12 2015-08-18 International Business Machines Corporation Usage of TOC register as application register
    US9021511B1 (en) 2014-03-14 2015-04-28 International Business Machines Corporation Runtime management of TOC pointer save and restore commands
    US9256546B2 (en) 2014-03-31 2016-02-09 International Business Machines Corporation Transparent code patching including updating of address translation structures
    US9471292B2 (en) 2014-04-18 2016-10-18 Intel Corporation Binary translation reuse in a system with address space layout randomization
    US9922002B2 (en) 2014-04-28 2018-03-20 Palo Alto Research Center Incorporated Efficient representations of graphs with multiple edge types
    US9329875B2 (en) 2014-04-28 2016-05-03 International Business Machines Corporation Global entry point and local entry point for callee function
    US9329850B2 (en) 2014-06-24 2016-05-03 International Business Machines Corporation Relocation of instructions that use relative addressing
    EP2997478B1 (de) 2014-07-21 2019-03-13 VIA Alliance Semiconductor Co., Ltd. Effiziente adressübersetzungscachespeicherung in einem prozessor mit unterstützung einer grossen anzahl von verschiedenen adressenräumen
    US20160055003A1 (en) 2014-08-19 2016-02-25 Qualcomm Incorporated Branch prediction using least-recently-used (lru)-class linked list branch predictors, and related circuits, methods, and computer-readable media
    US20160062655A1 (en) 2014-08-28 2016-03-03 Endgame, Inc. System and Method for Improved Memory Allocation in a Computer System
    US9274769B1 (en) 2014-09-05 2016-03-01 International Business Machines Corporation Table of contents pointer value save and restore placeholder positioning
    US9146715B1 (en) 2014-09-05 2015-09-29 International Business Machines Corporation Suppression of table of contents save actions
    US9250881B1 (en) 2014-09-30 2016-02-02 International Business Machines Corporation Selection of an entry point of a function having multiple entry points
    EP3012762A1 (de) 2014-10-24 2016-04-27 Thomson Licensing Steuerflussdiagrammglättungsvorrichtung und -verfahren
    US9354947B2 (en) 2014-10-28 2016-05-31 International Business Machines Corporation Linking a function with dual entry points
    US9395964B2 (en) 2014-10-30 2016-07-19 International Business Machines Corporation Rewriting symbol address initialization sequences
    US9858411B2 (en) 2014-12-19 2018-01-02 Intel Corporation Execution profiling mechanism
    US9244663B1 (en) 2014-12-22 2016-01-26 International Business Machines Corporation Managing table of contents pointer value saves
    US9569613B2 (en) 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
    US9513832B2 (en) 2015-03-25 2016-12-06 International Business Machines Corporation Accessing global data from accelerator devices
    US9880833B2 (en) 2015-06-30 2018-01-30 International Business Machines Corporation Initialization status of a register employed as a pointer
    GB2540206B (en) * 2015-07-10 2018-02-07 Advanced Risc Mach Ltd Apparatus and method for executing instruction using range information associated with a pointer
    US9817729B2 (en) 2015-07-30 2017-11-14 Zerto Ltd. Method for restoring files from a continuous recovery system
    GB2540948B (en) 2015-07-31 2021-09-15 Advanced Risc Mach Ltd Apparatus with reduced hardware register set
    GB2541714B (en) 2015-08-27 2018-02-14 Advanced Risc Mach Ltd An apparatus and method for controlling instruction execution behaviour
    US20170147161A1 (en) 2015-11-24 2017-05-25 Nomad Technologies, Inc. Dynamic Table of Contents of Media
    EP3188039A1 (de) 2015-12-31 2017-07-05 Dassault Systèmes Empfehlungen auf basis von vorhersagemodellen
    WO2017127054A1 (en) 2016-01-19 2017-07-27 Hewlett Packard Enterprise Development Lp Accessing objects via object references
    US9996294B2 (en) 2016-02-02 2018-06-12 International Business Machines Corporation Dynamically managing a table of contents
    US10223295B2 (en) 2016-03-10 2019-03-05 Microsoft Technology Licensing, Llc Protected pointers
    US10169016B2 (en) 2016-10-24 2019-01-01 International Business Machines Corporation Executing optimized local entry points
    US10534593B2 (en) 2016-10-24 2020-01-14 International Business Machines Corporation Optimized entry points and local function call tailoring for function pointers
    US10360005B2 (en) 2016-10-24 2019-07-23 International Business Machines Corporation Local function call tailoring for function pointer calls
    US9952844B1 (en) 2016-10-24 2018-04-24 International Business Machines Corporation Executing optimized local entry points and function call sites
    US20180113689A1 (en) 2016-10-24 2018-04-26 International Business Machines Corporation Local Function Call Site Optimization
    US10108404B2 (en) 2016-10-24 2018-10-23 International Business Machines Corporation Compiling optimized entry points for local-use-only function pointers
    US10169011B2 (en) 2016-10-24 2019-01-01 International Business Machines Corporation Comparisons in function pointer localization
    US10108406B2 (en) 2016-10-24 2018-10-23 International Business Machines Corporation Linking optimized entry points for local-use-only function pointers
    US10108407B2 (en) 2016-10-24 2018-10-23 International Business Machines Corporation Loading optimized local entry points for local-use-only function pointers
    US10268465B2 (en) 2016-10-24 2019-04-23 International Business Machines Corporation Executing local function call site optimization
    US10778795B2 (en) 2017-01-30 2020-09-15 Microsoft Technology Licensing, Llc Synchronization of property values between a client and a server
    US10572404B2 (en) 2017-06-30 2020-02-25 Intel Corporation Cyclic buffer pointer fixing
    US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
    US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
    US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
    US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
    US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
    US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
    US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction

    Also Published As

    Publication number Publication date
    US10884929B2 (en) 2021-01-05
    JP2020534596A (ja) 2020-11-26
    CN111066006A (zh) 2020-04-24
    US20190087336A1 (en) 2019-03-21
    JP7059361B2 (ja) 2022-04-25
    US20190377680A1 (en) 2019-12-12
    GB202005423D0 (en) 2020-05-27
    US10884930B2 (en) 2021-01-05
    GB2581639A (en) 2020-08-26
    US11138113B2 (en) 2021-10-05
    GB2581639B (en) 2022-01-05
    US20190087334A1 (en) 2019-03-21
    CN111066006B (zh) 2023-08-15
    WO2019058250A1 (en) 2019-03-28

    Similar Documents

    Publication Publication Date Title
    DE112018003584B4 (de) Vorhersagen eines inhaltsverzeichnis-zeigerwerts in reaktion auf ein verzweigen auf eine subroutine
    DE112018003586T5 (de) Instruktion &#34;inhaltsverzeichnis- (toc) register einrichten&#34;
    DE112012003716B4 (de) Erzeugen von kompiliertem Code, der Registeraktivität angibt
    DE112018004384B4 (de) Schützen von arbeitsspeicherinternen konfigurationsstatusregistern
    DE112018000848T5 (de) Registerkontextwiederherstellung auf der Grundlage der Wiedergewinnung von Umbenennungsregistern
    DE112015001548T5 (de) Partitionsmobilität für Partitionen mit erweitertem Code
    DE112018001124T5 (de) Verarbeitung von compare string durch decodiergestützte inline-erweiterung von mikrooperationen
    DE112018004364B4 (de) Vereinfachung einer verarbeitung in einer datenverarbeitungsumgebung durch gruppierung eines konfigurationsstatusregisters auf grundlage von funktionaler affinität
    DE112018004388T5 (de) Globale speicher- und ladeoperationen von konfigurationsstatusregistern
    DE112016005571T5 (de) Aufrufergeschützte stapelrücksprungadresse in einer hardware-verwalteten stapelarchitektur
    US10896030B2 (en) Code generation relating to providing table of contents pointer values
    DE102014109083A1 (de) Bilden von Anweisungsgruppen basierend auf der Optimierung von Anweisungen bei der Dekodierung
    DE112015000203T5 (de) &#34;Compare and Delay&#34;-Befehle
    US20190087337A1 (en) Table of contents cache entry having a pointer for a range of addresses
    DE112018003578T5 (de) Gleichzeitige vorhersage von verzweigungsadressen und aktualisierung des registerinhalts
    DE112018004379B4 (de) Kontextumschaltung durch ändern von arbeitsspeicherzeigern
    DE112018005758T5 (de) Konfigurationsstatusregister auf arbeitsspeichergrundlage
    DE112017005015T5 (de) Verarbeiten von gleichgeordneten Aufrufen (SIBLING CALLS)
    DE102012217315A1 (de) Verwenden von nativen Routinen an Stelle von emulierten Routinen in einer emulierten Anwendung
    US20200142696A1 (en) Sort and merge instruction for a general-purpose processor
    DE112020000805T5 (de) Kontrolle für „ziffernvalidierungsüberprüfung“ in anweisungsausführung
    CN112930532A (zh) 控制合并操作的存储访问
    CN112970001A (zh) 保存和恢复指令的多次执行之间的机器状态
    DE112018003233T5 (de) Vorhersage von codespezifischen zugehörigen registern
    DE112018003167T5 (de) Dynamische Fusion von einer Erstellung abgeleiteter Werte und einer Vorhersage von abgeleiteten Werten in einer Unterroutinen-Verzweigungsabfolge

    Legal Events

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

    Free format text: PREVIOUS MAIN CLASS: G06F0009440000

    Ipc: G06F0009448000