-
PRIORITÄTSANSPRUCH
-
Diese Anmeldung beansprucht den Vorteil der Priorität der nicht vorläufigen
US-Patentanmeldung Nr. 14/870,417 mit dem Titel „Control Transfer Instructions Indicating Intent to Call or Return“ und eingereicht am 30. September 2015.
-
HINTERGRUND
-
Gebiet
-
Die vorliegende Offenbarung betrifft das Gebiet von Informationsverarbeitung und insbesondere das Gebiet von Ausführungssteuerungsübergaben in Informationsverarbeitungssystemen.
-
Beschreibung des Standes der Technik
-
Informationsverarbeitungssysteme können unter Verwendung eines Befehls (im Allgemeinen ein Sprungbefehl bzw. CTI (control transfer instruction)) für ein Übergeben einer Ausführungssteuerung sorgen. Zum Beispiel kann ein Sprungbefehl (JMP) verwendet werden, um eine Steuerung an einen anderen als den nächsten sequenziellen Befehl zu übergeben. In ähnlicher Weise kann ein Aufrufbefehl (CALL) verwendet werden, um eine Steuerung an einen Eintrittspunkt einer Prozedur oder Codesequenz zu übergeben, wobei die Prozedur oder Codesequenz einen Rücksprungbefehl (RET) enthält, um eine Steuerung zurück zu der aufrufenden Codesequenz (oder anderen Prozedur oder Codesequenz) zu übergeben. In Verbindung mit der Ausführung eines CALL kann die Rücksprungadresse (z.B. die Adresse des Befehls, der auf den CALL in der aufrufenden Prozedur folgt) in einer Datenstruktur (z.B. einem Prozedurstapel) gespeichert werden. In Verbindung mit der Ausführung eines RET kann die Rücksprungadresse aus der Datenstruktur abgerufen werden.
-
Prozessoren, die CTIs in in ihrer Befehlssatzarchitektur (instruction set architecture, ISA) aufweisen, können Hardware zur Leistungsverbesserung durch Vorhersagen des Ziels eines CTI enthalten. Zum Beispiel kann Prozessorhardware das Ziel eines RET auf Grundlage von Informationen vorhersagen, die von dem entsprechenden CALL auf dem Stapel gespeichert wurden, mit einem potenziellen Vorteil im Hinblick auf Leistung und Energieeinsparungen, der üblicherweise größer ist als der, der mit einer Vorhersage des Ziels eines JMP verbunden ist.
-
Figurenliste
-
Die vorliegende Erfindung ist in den begleitenden Figuren beispielhaft und nicht einschränkend veranschaulicht.
- 1 veranschaulicht ein System, das Unterstützung für Aufruf- oder Rücksprungabsicht anzeigende Sprungbefehle gemäß einer Ausführungsform der vorliegenden Erfindung aufweist.
- 2 veranschaulicht einen Prozessor, der Unterstützung für Aufruf- oder Rücksprungabsicht anzeigende Sprungbefehle gemäß einer Ausführungsform der vorliegenden Erfindung aufweist.
- 3 veranschaulicht ein Verfahren zum Verwenden von Aufruf- oder Rücksprungabsicht anzeigenden Sprungbefehlen gemäß einer Ausführungsform der vorliegenden Erfindung.
- 4 veranschaulicht eine Darstellung von Binärübersetzung unter Verwendung von Aufruf- oder Rücksprungabsicht anzeigenden Sprungbefehlen gemäß einer Ausführungsform der vorliegenden Erfindung.
-
Ausführliche Beschreibung
-
Es werden Ausführungsformen einer Erfindung für Aufruf- oder Rücksprungabsicht anzeigende Sprungbefehle gemäß einer Ausführungsform der vorliegenden Erfindung beschrieben. In dieser Beschreibung werden, um ein umfassenderes Verständnis der vorliegenden Erfindung zu vermitteln, zahlreiche spezifische Details wie beispielsweise Komponenten- und Systemkonfigurationen dargelegt. Fachleute werden jedoch erkennen, dass die Erfindung ohne derartige spezifische Details praktisch angewendet werden kann. Des Weiteren wurden einige gut bekannte Strukturen, Schaltungen sowie andere Merkmale nicht im Detail gezeigt, um die vorliegende Erfindung nicht unnötigerweise schwerer verständlich zu machen.
-
Verweise in der folgenden Beschreibung auf „eine einzige Ausführungsform“, „eine Ausführungsform“, „eine beispielhafte Ausführungsform“, „verschiedene Ausführungsformen usw. weisen darauf hin, dass die derart beschriebene(n) Ausführungsform(en) der Erfindung bestimmte Merkmale, Strukturen oder Eigenschaften aufweisen können, dass aber mehr als eine einzige Ausführungsform diese bestimmten Merkmale, Strukturen oder Eigenschaften aufweisen kann und nicht notwendigerweise jede Ausführungsform dieses tut. Ferner können einige Ausführungsformen manche, alle oder keine der für andere Ausführungsformen beschriebenen Merkmale aufweisen.
-
In dieser Beschreibung und den Ansprüchen weist, sofern nicht anders angegeben, die Verwendung der Ordinaladjektive „erstes“, „zweites“, „drittes“ usw. zum Beschreiben eines Elements lediglich darauf hin, dass auf ein bestimmtes Exemplar eines Elements oder verschiedene Exemplare gleicher Elemente Bezug genommen wird, und es soll nicht angedeutet werden, dass die derart beschriebenen Elemente in einer bestimmten Reihenfolge sein müssen, weder zeitlich, räumlich, als eine Rangfolge oder in irgendeiner anderen Weise.
-
Außerdem kann ein Zeichen „/“, wie es in Beschreibungen von Ausführungsformen der vorliegenden Erfindung zwischen Begriffen verwendet wird, bedeuten, dass eine Ausführungsform unter Verwendung von, mit, und/oder gemäß dem ersten Begriff und/oder dem zweiten Begriff (und/oder anderen zusätzlichen Begriffen) realisiert werden bzw. diese aufweisen kann.
-
Wie in dem Hintergrundabschnitt beschrieben, können Prozessoren, die über CTIs in ihrer ISA verfügen, Hardware zur Leistungsverbesserung durch Vorhersagen des Ziels von RETs auf Grundlage von auf dem Stapel mithilfe entsprechender CALLs gespeicherter Informationen aufweisen. Allerdings kann die Verwendung dieser Hardware wirkungslos sein, wenn Binärübersetzung zum Umwandeln von Code unter Verwendung von CALLs und RETs genutzt wird, da die dem CALL in dem nicht übersetzten Code zugeordnete Rücksprungadresse nicht der richtigen in dem übersetzten Code zu verwendenden Rücksprungadresse entsprechen würde. Daher beinhaltet ein Übersetzen eines CALL üblicherweise ein Einspeichern (unter Verwendung eines PUSH-Befehls (Einspeicherbefehl) wie nachfolgend beschrieben) der dem CALL zugeordneten Rücksprungadresse in den Stapel und Verwenden eines JMP, um die Steuerungsübergabe des CALL zu emulieren, sodass die Rücksprungadresse des ursprünglichen CALL in den Stapel des Programms eingespeichert wird (der Stapel sollte die dem nicht übersetzten Code zugeordnete Adresse halten, da sie durch das Programm lesbar ist), während eine Steuerungsübergabe an den Ort in dem übersetzten Code bewirkt wird. In ähnlicher Weise beinhaltet ein Übersetzen eines RET üblicherweise eine Entnahme (unter Verwendung eines POP-Befehls (Entnahmebefehl) wie nachfolgend beschrieben) der dem CALL in dem nicht übersetzten Code zugeordneten Rücksprungadresse aus dem Stapel, wobei sie verwendet wird, um eine neue Rücksprungadresse zu bestimmen, die dem übersetzten Code entspricht, und anschließend ein Verwenden eines JMP mit der neuen Rücksprungadresse, um die Steuerungsübergabe des RET zu emulieren. Entsprechend diesem Ansatz werden JMPs, CALLs und RETs alle in JMPs übersetzt, ohne den potenziellen Vorteil einer stapelbasierten Hardware-RET-Zielvorhersage. Möglicherweise wird daher gewünscht, dass die Verwendung von Ausführungsformen der vorliegenden Erfindung die potenziellen Vorteile (z.B. höhere Leistung und niedrigerer Energieverbrauch) einer stapelbasierten RET-Zielvorhersage in Code bietet, der durch Binärübersetzung erzeugt wurde.
-
1 veranschaulicht ein System 100, ein Informationsverarbeitungssystem, das Unterstützung für Aufruf- oder Rücksprungabsicht anzeigende Sprungbefehle gemäß einer Ausführungsform der vorliegenden Erfindung aufweist. Das System 100 kann einen beliebigen Typ von Informationsverarbeitungssystem darstellen, wie beispielsweise einen Server, einen Desktop-Computer, einen tragbaren Computer, eine Set-Top-Box, eine handgeführte Einrichtung wie beispielsweise ein Tablet oder ein Smartphone, oder ein eingebettetes Steuersystem. Zu dem System 100 zählen ein Prozessor 110, ein Systemspeicher 120, ein Grafikprozessor 130, ein Peripheriesteueragent 140 sowie eine Informationsspeichereinrichtung 150. Systeme, die die vorliegende Erfindung verkörpern, können eine beliebige Anzahl jeder dieser Komponenten sowie beliebige andere Komponenten oder andere Elemente aufweisen wie beispielsweise Peripheriegeräte und Eingabe/Ausgabe-Einrichtungen. Einige oder alle der Komponenten oder anderen Elemente in dieser oder irgendeiner Systemausführungsform können verbunden sein, gekoppelt sein, oder auf andere Weise durch eine beliebige Anzahl von Bussen, Punkt-zu-Punkt- oder anderen kabelgebundenen oder drahtlosen Schnittstellen oder Verbindungen in Verbindung miteinander stehen, sofern nicht anders angegeben. Jegliche Komponenten oder andere Abschnitte des Systems 100, ob sie in 1 gezeigt werden oder nicht in 1 gezeigt werden, können auf einem oder in einen einzigen Chip (ein System-on-a-Chip oder SOC), auf einem oder in einen einzigen Die, auf einem oder in ein einziges Substrat oder auf einem oder in einen einzigen Baustein integriert oder auf andere Weise einbezogen sein.
-
Der Systemspeicher 120 kann dynamischer Direktzugriffsspeicher oder ein anderer Typ eines durch den Prozessor 110 lesbaren Mediums sein. Der Systemspeicher 120 kann zum Speichern eines Prozedurstapels 122 verwendet werden. Der Grafikprozessor 130 kann einen beliebigen Prozessor oder eine andere Komponente zum Verarbeiten von Grafikdaten für die Anzeige 132 umfassen. Der Peripheriesteueragent 140 kann eine beliebige Komponente darstellen, wie beispielsweise eine Chipsatzkomponente, mit der oder durch die Peripherie-, Eingabe/Ausgabe- (E/A-) oder andere Komponenten oder Einrichtungen wie beispielsweise eine Einrichtung 142 (z.B. ein Touchscreen, eine Tastatur, ein Mikrofon, ein Lautsprecher, eine andere Audioeinrichtung, eine Kamera, eine Video- oder andere Medieneinrichtung, ein Netzwerkadapter, ein Bewegungs- oder anderer Sensor, ein Empfänger für globale Positionsbestimmungs- oder andere Informationen usw.) und/oder die Informationsspeichereinrichtung 150 mit dem Prozessor 110 verbunden oder gekoppelt sein können. Die Informationsspeichereinrichtung 150 kann jede Art von permanentem oder nichtflüchtigem Speicher („memory“ bzw. „storage“) umfassen, wie beispielsweise einen Flashspeicher und/oder ein Solid-State-, magnetisches oder optisches Plattenlaufwerk.
-
Der Prozessor 110 kann in einer beliebigen Kombination einen oder mehrere Prozessoren oder Prozessorkerne darstellen, die auf einem einzigen Substrat integriert oder in einem einzigen Baustein untergebracht sind, von denen jeder mehrere Threads und/oder mehrere Ausführungskerne aufweisen kann. Jeder Prozessor, der als der Prozessor 110 oder in diesem dargestellt ist, kann ein beliebiger Prozessortyp sein, darunter ein Universal-Mikroprozessor, wie beispielsweise ein Prozessor aus der Intel® Core®-Prozessorgruppe oder einer anderen Prozessorgruppe der Intel® Corporation oder eines anderen Unternehmens, ein Spezial-Prozessor oder -Mikrocontroller oder jede andere Einrichtung oder Komponente in einem Informationsverarbeitungssystem, in dem eine Ausführungsform der vorliegenden Erfindung realisiert sein kann.
-
Unterstützung für Aufruf- oder Rücksprungabsicht anzeigende Sprungbefehle gemäß einer Ausführungsform der vorliegenden Erfindung kann in einem Prozessor wie beispielsweise dem Prozessor 110 realisiert sein, unter Verwendung einer beliebigen Kombination von in Hardware eingebetteten Schaltungen und/oder Logik, Mikrocode, Firmware und/oder anderen Strukturen, die angeordnet sind wie nachfolgend beschrieben oder gemäß einem beliebigen anderen Ansatz, und wird in 1 als JMP_INTENT-Einheit 112 dargestellt, die JCI-Hardware/Logik 114 zum Unterstützen eines JMP_CALL_INTENT-Befehls und JRI-Hardware/Logik 116 zum Unterstützen eines JMP_RETURN_INTENT-Befehls aufweisen kann, jeweils gemäß Ausführungsformen der vorliegenden Erfindung wie nachfolgend beschrieben.
-
1 zeigt auch einen Binärübersetzer (BT) 160, der eine beliebige Hardware (z.B. in dem Prozessor 110), Mikrocode (z.B. in dem Prozessor 110), Firmware oder Software (z.B. in dem Systemspeicher 120 und/oder Speicher in dem Prozessor 110) zum Übersetzen von Binärcode einer ISA in Binärcode einer anderen ISA darstellen kann, zum Beispiel zum Übersetzen von Binärcode einer anderen ISA als der des Prozessors 110 in die ISA des Prozessors 110.
-
2 veranschaulicht einen Prozessor 200, der eine Ausführungsform des Prozessors 110 in 1 oder einen Ausführungskern einer Mehrkernprozessor-Ausführungsform des Prozessors 110 in 1 darstellen kann. Der Prozessor 200 kann eine Speichereinheit 210, eine Befehlseinheit 220, eine Ausführungseinheit 230 und eine Steuereinheit 240 aufweisen. Jede derartige Einheit wird der Einfachheit halber als eine einzige Einheit gezeigt; jedoch können die Schaltungen jeder derartigen Einheit gemäß einem beliebigen Ansatz in dem Prozessor 200 kombiniert und/oder in diesem verteilt sein. Zum Beispiel können verschiedene Abschnitte von Hardware/Logik, die der JMP/INTENT-Einheit 112 des Prozessors 110 entsprechen, physisch in die Speichereinheit 210, die Befehlseinheit 220, die Ausführungseinheit 230 und/oder die Steuereinheit 240 integriert sein, wie zum Beispiel nachfolgend beschrieben sein kann. Der Prozessor 200 kann außerdem beliebige andere nicht in 1 gezeigte Schaltungen, Strukturen oder Logik aufweisen.
-
Die Speichereinheit 210 kann eine beliebige Kombination jedes Typs von Speicher aufweisen, der zu irgendeinem Zweck in dem Prozessor 200 verwendbar ist; zum Beispiel kann sie eine beliebige Anzahl von lesbaren, beschreibbaren und/oder lesbaren-beschreibbaren Registern, Puffern und/oder Zwischenspeichern, realisiert unter Verwendung einer beliebigen Speichertechnologie (memory or storage technology), in denen Fähigkeitsinformationen, Konfigurationsinformationen, Steuerinformationen, Statusinformationen, Leistungsinformationen, Befehle, Daten sowie beliebige andere Informationen zu speichern sind, die beim Betrieb des Prozessors 200 verwendbar sind, wie auch Schaltungen aufweisen, die verwendbar zum Zugreifen auf derartigen Speicher und/oder zum Veranlassen oder Unterstützen verschiedener Operationen und/oder Konfigurationen sind, die mit einem Zugriff auf derartigen Speicher in Zusammenhang stehen.
-
Bei einer Ausführungsform kann die Speichereinheit 210 ein Befehlszeigerregister (IP-Register) 212, ein Befehlsregister (IR) 214 und ein Stapelzeigerregister (SP-Register) 216 aufweisen. Jedes IP-Register 212, IR- 214 und SP-Register 216 kann ein oder mehrere Register oder Abschnitte eines oder mehrerer Register oder andere Speicherorte darstellen, aber der Einfachheit halber einfach als ein Register bezeichnet werden.
-
Das IP-Register 212 kann zum Halten einer IP- oder anderen Information zum direkten oder indirekten Anzeigen der Adresse oder eines anderen Orts eines Befehls verwendet werden, der aktuell eingeplant, decodiert, ausgeführt oder auf andere Weise gehandhabt wird; der unmittelbar nach dem Befehl, der aktuell eingeplant, decodiert, ausgeführt oder auf andere Weise gehandhabt wird (dem „aktuellen Befehl“) eingeplant, decodiert, ausgeführt oder auf andere Weise gehandhabt werden soll, oder der an einem angegebenen Punkt (z.B. einer angegebenen Anzahl von Befehlen nach dem aktuellen Befehl) in einem Befehlsstrom eingeplant, decodiert, ausgeführt oder auf andere Weise gehandhabt werden soll. Das IP-Register 212 kann gemäß jedem bekannten Befehlssequenzierungsverfahren geladen werden, beispielsweise durch das Vorwärtsbewegen eines IP oder durch das Verwenden eines CTI.
-
Das IR 214 kann zum Halten des aktuellen Befehls und/oder eines beliebigen anderen Befehls (beliebiger anderer Befehle) an einem angegebenen Punkt in einem Befehlsstrom relativ zu dem aktuellen Befehl verwendet werden. Das IR 214 kann gemäß jedem bekannten Befehlsabrufverfahren geladen werden, beispielsweise durch einen Befehlsabruf von dem Ort in dem Systemspeicher 120, der durch einen IP angegeben wird.
-
Das SP-Register 216 kann zum Speichern eines Zeigers oder eines anderen Verweises auf einen Prozedurstapel verwendet werden, auf dem Rücksprungadressen für Steuerungsübergaben gespeichert sein können. Bei einer Ausführungsform kann der Stapel, einem „Last in - First out“-Zugriffsparadigma (LIFO-Zugriffsparadigma) folgend als eine lineare Anordnung realisiert sein. Der Stapel, dargestellt durch den Prozedurstapel 122 aus 1, kann sich in einem Systemspeicher wie beispielsweise dem Systemspeicher 120 befinden. Bei anderen Ausführungsformen kann ein Prozessor ohne einen Stapelzeiger realisiert sein, zum Beispiel bei einer Ausführungsform, bei der ein Prozedurstapel in internem Speicher des Prozessors gespeichert ist.
-
Zu der Befehlseinheit 220 können beliebige Schaltungen, Logik, Strukturen und/oder andere Hardware, wie beispielsweise ein Befehls-Decodierer, zum Abrufen, Empfangen, Decodieren, Interpretieren, Einplanen und/oder Handhaben von Befehlen zählen, die von dem Prozessor 200 ausgeführt werden sollen. Jedes Befehlsformat kann in dem Schutzbereich der vorliegenden Erfindung verwendet werden; zum Beispiel kann ein Befehl einen Op-Code und einen oder mehrere Operanden enthalten, wobei der Op-Code in einen oder mehrere Mikrobefehle oder Mikrooperationen zum Ausführen durch die Ausführungseinheit 230 decodiert werden kann. Operanden oder andere Parameter können einem Befehl implizit, direkt, indirekt oder gemäß einem beliebigen anderen Ansatz zugeordnet sein.
-
Bei einer Ausführungsform kann die Befehlseinheit 220 einen Befehlsabrufer (IF) 220A und einen Befehls-Decodierer (ID) 220B aufweisen. Der IF 220A kann Schaltungen und/oder andere Hardware zum Durchführen und/oder Steuern des Abrufens von Befehlen von durch IPs angegebenen Orten und des Ladens von Befehlen in das IR 214 darstellen. Der ID 220B kann Schaltungen und/oder andere Hardware zum Decodieren von Befehlen in dem IR 214 darstellen. Der IF 220A und der ID 220B können derart gestaltet sein, dass sie Befehlsabruf und Befehlsdecodieren als Front-End-Stufen in einer Befehlsausführungspipeline durchführen. Das Front-End der Pipeline kann außerdem einen JMP-Zielvorhersager 220C, der Hardware zum Vorhersagen des Ziels eines JMP-Befehls (nicht auf Grundlage von auf dem Stapel gespeicherten Informationen) darstellen kann, und einen RET-Zielvorhersager 220D aufweisen, die Hardware zum Vorhersagen des Ziels eines RET-Befehls auf Grundlage von auf dem Stapel gespeicherten Informationen darstellen können.
-
Die Befehlseinheit 220 kann derart gestaltet sein, dass sie Befehle zum Unterstützen von Steuerablaufübergaben empfängt. Zum Beispiel kann die Befehlseinheit 220 JMP-Hardware/Logik 222, CALL-Hardware/Logik 224 und RET-Hardware/Logik 226 aufweisen, um jeweils Sprung-, Aufruf- und Rücksprungbefehle zu empfangen, wie vorstehend in dem Hintergrundabschnitt beschrieben und/oder wie Fachleuten bekannt ist.
-
Die Befehlseinheit 220 kann außerdem JCI-Hardware/Logik 224A, die der JCI-Hardware/Logik 114 des Prozessors 110 entsprechen kann, und JRI-Hardware/Logik 226A aufweisen, die der JRI-Hardware/Logik 116 des Prozessors 110 entsprechen kann, um jeweils einen JMP_CALL_INTENT- und JMP_RET_INTENT-Befehl zu empfangen, gemäß Ausführungsformen der vorliegenden Erfindung wie nachfolgend beschrieben. Bei verschiedenen Ausführungsformen können JMP_CALL_INTENTs (anstelle von JMPs) von Binärübersetzern in Verbindung mit einem Umwandeln von CALLs verwendet werden, und JUMP_RET_INTENTs können (anstelle von JMPs) von Binärübersetzern in Verbindung mit einem Umwandeln von RETs verwendet werden, wie nachfolgend näher beschrieben. Bei verschiedenen Ausführungsformen können JMP_CALL_INTENT- und JMP_RET_INTENT-Befehle distinkte Op-Codes aufweisen oder Knoten (leaves) des Op-Codes für einen anderen Befehl sein, wie beispielsweise JMP, wobei die Knotenbefehle (leaf instructions) durch ein Präfix oder eine andere Annotation oder einen Operanden angegeben sein können, die/der dem Op-Code des anderen Befehls zugeordnet ist.
-
Die Befehlseinheit 220 kann außerdem derart gestaltet sein, dass sie Befehle empfängt, auf den Stapel zuzugreifen. Bei einer Ausführungsform wächst der Stapel zu niedrigeren Speicheradressen hin. Datenelemente können auf dem Stapel unter Verwendung eines PUSH-Befehls platziert und unter Verwendung eines POP-Befehls von dem Stapel abgerufen werden. Um ein Datenelement auf dem Stapel zu platzieren, kann der Prozessor 200 den Wert eines Stapelzeigers abwandeln (z.B. dekrementieren) und anschließend das Datenelement an den Speicherort kopieren, auf den der Stapelzeiger verweist. Somit verweist der Stapelzeiger immer auf das oberste Element des Stapels. Um ein Datenelement von dem Stapel abzurufen, kann der Prozessor 200 das Datenelement lesen, auf das der Stapelzeiger verweist, und anschließend den Wert des Stapelzeigers derart abwandeln (z.B. inkrementieren), dass er auf das Element verweist, das unmittelbar vor dem Element, welches gerade abgerufen wird, auf dem Stapel platziert wurde.
-
Wie vorstehend eingeführt, kann ein Ausführen eines CALL ein Einspeichern der Rücksprungadresse in den Stapel beinhalten. Dementsprechend kann der Prozessor 200 vor einem Verzweigen zu dem Eintrittspunkt in der aufgerufenen Prozedur die in einem IP-Register gespeicherte Adresse in den Stapel einspeichern. Diese Adresse, auch als der Befehlszeiger für den Rücksprungbefehl bezeichnet, zeigt auf den Befehl, wo ein Ausführen der aufrufenden Prozedur nach einem Zurückspringen von der aufgerufenen Prozedur wiederaufgenommen werden sollte. Wenn er einen Rücksprungbefehl in der aufgerufenen Prozedur ausführt, kann der Prozessor 200 den Befehlszeiger für den Rücksprungbefehl von dem Stapel zurück in das Befehlszeigerregister abrufen und auf diese Weise ein Ausführen der aufrufenden Prozedur wiederaufnehmen.
-
Jedoch ist es für den Prozessor 200 möglicherweise nicht erforderlich, dass der Befehlszeiger für den Rücksprungbefehl zurück auf die aufrufende Prozedur zeigt. Vor einem Ausführen des Rücksprungbefehls kann der in dem Stapel gespeicherte Befehlszeiger für den Rücksprungbefehl mithilfe von Software beeinflusst werden (z.B. durch Ausführen eines PUSH-Befehls), um auf eine andere Adresse als die Adresse des Befehls zu zeigen, der auf den Aufrufbefehl in der aufrufenden Prozedur folgt. Ein Beeinflussen des Befehlszeigers für den Rücksprungbefehl kann von dem Prozessor 200 zugelassen werden, um ein flexibles Programmierungsmodell zu unterstützen.
-
Zu der Ausführungseinheit 230 können beliebige Schaltungen, Logik, Strukturen und/oder andere Hardware, wie beispielsweise Arithmetikeinheiten, Logikeinheiten, Gleitkommaeinheiten, Verschieber (shifter) usw. zum Verarbeiten von Daten und Ausführen von Befehlen, Mikrobefehlen und/oder Mikrooperationen zählen. Die Ausführungseinheit 230 kann eine oder mehrere physisch oder logisch distinkte Ausführungseinheiten darstellen.
-
Ein Ausführen eines JMP_CALL_INTENT-Befehls kann ein Speichern einer Rücksprungadresse in einem Rücksprungadressenpuffer, Schattenstapel oder einer anderen Datenstruktur beinhalten, die sich in einem Hardware-RET-Zielvorhersager befindet oder von diesem verwendet wird (z.B. dem RET-Zielvorhersager 220D). Bei einer Ausführungsform kann die zu speichernde Rücksprungadresse die des unmittelbar auf den JMP_CALL_INTENT folgenden Befehls sein. Bei einer Ausführungsform kann ein Operand des JMP_CALL_INTENT-Befehls die zu speichernde Rücksprungadresse angeben, wodurch mehr Flexibilität für Binärübersetzer zum Platzieren übersetzter RET-Ziele geboten wird.
-
Es sollte beachtet werden, dass ein Unterschied zwischen einem JMP_CALL_INTENT und einem JMP darin besteht, dass ein JMP nicht das Speichern einer Rücksprungadresse für einen RET-Zielvorhersager beinhaltet. Daher kann das Verwenden eines JMP_CALL_INTENT (anstelle eines JMP) durch einen Binärübersetzer die Vorteile einer RET-Zielvorhersage bieten. Ein weiterer Unterschied zwischen einem JMP_CALL_INTENT und einem JMP ist, dass ein JMP_CALL_INTENT optional möglicherweise nicht versucht, einen Hardware-JMP-Zielvorhersager (z.B. den JMP-Zielvorhersager 220C) zu verwenden (und diesen daher nicht kontaminiert), der zum Verbessern der Leistung von JMP-Befehlen bereitgestellt sein kann. Es sollte auch beachtet werden, dass ein Unterschied zwischen einem JMP_CALL_INTENT und einem CALL darin besteht, dass ein CALL seine Rücksprungadresse auf dem Stapel speichert, während ein JMP_CALL_INTENT dies nicht tut.
-
Ein Ausführen eines JMP_RET_INTENT-Befehls kann ein Abrufen einer Rücksprungadresse aus einem Rücksprungadressenpuffer, Schattenstapel oder einer anderen Datenstruktur beinhalten, die sich in einem Hardware-RET-Zielvorhersager befindet oder von diesem verwendet wird (z.B. dem RET-Ziel-Vorhersager 220D). Es sollte beachtet werden, dass ein Unterschied zwischen einem JMP_RET_INTENT und einem JMP darin besteht, dass ein JMP nicht das Abrufen einer Rücksprungadresse aus einem RET-Zielvorhersager beinhaltet. Daher kann das Verwenden eines JMP_RET_INTENT (anstelle eines JMP) durch einen Binärübersetzer die Vorteile einer RET-Zielvorhersage bieten. Ein weiterer Unterschied zwischen einem JMP_RET_INTENT und einem JMP ist, dass ein JMP_RET_INTENT nicht versucht, einen Hardware-JMP-Zielvorhersager (z.B. den JMP-Zielvorhersager 220C) zu verwenden (und diesen daher nicht „kontaminiert“), der zum Verbessern der Leistung von JMP-Befehlen bereitgestellt sein kann.
-
Die Steuereinheit 240 kann beliebige(n) Mikrocode, Firmware, Schaltungen, Logik, Strukturen und/oder Hardware zum Steuern des Betriebs der Einheiten sowie anderer Elemente des Prozessors 200 und der Übertragung von Daten in dem, in den, und aus dem Prozessor 200 aufweisen. Die Steuereinheit 240 kann den Prozessor 200 veranlassen, die Durchführung von Verfahrensausführungsformen der vorliegenden Erfindung durchzuführen oder dabei mitzuwirken, wie beispielsweise der nachfolgend beschriebenen Verfahrensausführungsform(en), zum Beispiel durch Bewirken, dass der Prozessor 200, unter Verwendung der Ausführungseinheit 230 und/oder beliebiger anderer Ressourcen, durch die Befehlseinheit 220 empfangene Befehle sowie Mikrobefehle oder Mikrooperationen ausführt, die von mithilfe der Befehlseinheit 220 empfangenen Befehlen abgeleitet werden. Das Ausführen von Befehlen durch die Ausführung 230 kann auf Grundlage von Steuer- und/oder Konfigurationsinformationen in der Speichereinheit 210 variieren.
-
3 veranschaulicht ein Verfahren 300 zum Verwenden von Aufruf- oder Rücksprungabsicht anzeigenden Sprungbefehlen gemäß einer Ausführungsform der vorliegenden Erfindung. Obwohl Verfahrensausführungsformen der Erfindung in dieser Hinsicht nicht eingeschränkt sind, kann auf Elemente aus 1 und 2 Bezug genommen werden, um die Verfahrensausführungsform aus 3 besser zu beschreiben. Verschiedene Abschnitte des Verfahrens 300 können durch Hardware, Firmware, Software und/oder einen Benutzer eines Systems oder einer Einrichtung durchgeführt werden.
-
Im Kasten 310 des Verfahrens 300 kann ein Binärübersetzer (z.B. der BT 160) mit einem Übersetzen einer Binärcodesequenz beginnen, die einen CALL und einen RET enthält. Die Übersetzung einer derartigen Sequenz wird in 4 als Pseudocode veranschaulicht. Im Kasten 312 kann der CALL in einen PUSH und einen JMP_CALL_INTENT umgewandelt werden, wobei der PUSH zum Speichern der zugedachten Rücksprungadresse des CALL auf einem Stapel (z.B. dem Stapel 122) verwendet werden kann, und wobei der Binärübersetzer die Zieladresse des CALL in eine übersetzte Zieladresse für den JMP_CALL_INTENT (die übersetzte CALL-Zieladresse) umwandelt. Im Kasten 314 kann der RET in einen POP und einen JMP_RET_INTENT umgewandelt werden, wobei der POP zum Abrufen der zugedachten Rücksprungadresse des CALL aus dem Stapel verwendet werden kann.
-
Im Kasten 320 kann das Ausführen des übersetzten Codes durch einen Prozessor (z.B. den Prozessor 110) beginnen. Im Kasten 322 kann durch ein Ausführen des PUSH die zugedachte Rücksprungadresse des CALL auf dem Stapel gespeichert werden.
-
Im Kasten 324 kann ein Ausführen des JMP_CALL_INTENT ein Speichern der übersetzten Rücksprungadresse in einem Hardware-RET-Zielvorhersager (z.B. dem RET-Zielvorhersager 220D) beinhalten. Bei einer Ausführungsform kann die unmittelbar auf den JMP_CALL_INTENT folgende Adresse als die übersetzte Rücksprungadresse verwendet werden. Bei einer anderen Ausführungsform kann die übersetzte Rücksprungadresse von einem Operanden des JMP_CALL_INTENT geliefert oder abgeleitet werden, wobei der Operand von dem Binärübersetzer auf Grundlage von dessen Umwandlung der ursprünglichen Binärcodesequenz geliefert worden sein kann. Im Kasten 326 kann ein Ausführen des JMP_CALL_INTENT ein Übergeben einer Steuerung an die übersetzte CALL-Zieladresse beinhalten.
-
Im Kasten 330 kann ein Ausführen an der übersetzten CALL-Zieladresse fortgeführt werden. Im Kasten 332 kann durch ein Ausführen des POP die zugedachte Rücksprungadresse des CALL aus dem Stapel abgerufen werden.
-
Im Kasten 334 kann ein Ausführen des JMP_RET_INTENT ein Abrufen der übersetzten Rücksprungadresse aus einem Hardware-RET-Zielvorhersager (z.B. dem RET-Ziel-Vorhersager 220D) beinhalten. Im Kasten 336 kann ein Ausführen des JMP_RET_INTENT ein Übergeben einer Steuerung an die übersetzte Rücksprungadresse beinhalten.
-
Im Kasten 340 kann die zugedachte Rücksprungadresse des CALL, abgerufen im Kasten 332, mit der übersetzten Rücksprungadresse verglichen werden. Wenn eine Übereinstimmung vorliegt, fährt anschließend im Kasten 342 der Prozessor mit einem Ausführen des Codes fort, beginnend mit der übersetzten Rücksprungadresse (dem Rücksprungzielcode). Wenn nicht, wird das Verfahren 300 im Kasten 344 fortgeführt.
-
Im Kasten 344 kann der Programmablauf gemäß einem von verschiedenen Ansätzen korrigiert werden. Bei einer Ausführungsform kann eine Steuerung an Fixup- oder anderen Code übergeben werden, um einen Eintrittspunkt in den richtigen Zielcode zu finden, zum Beispiel durch Durchsuchen einer Tabelle oder anderen Datenstruktur, die von dem Übersetzer unterhalten wird, die ursprüngliche Codeadressen und ihre entsprechenden übersetzten Codeadressen enthält. Die Steuerungsübergabe an den Fixup- oder anderen derartigen Code kann mithilfe eines CTI, einer Ausnahme usw. vollzogen werden. Durch ein Vollziehen dieser Steuerungsübergabe kann außerdem das Ausführen des falschen Rücksprungzielcodes beendet werden, bevor irgendwelche Ergebnisse festgeschrieben (committed) wurden, z.B. durch Entleeren der Befehlsausführungspipeline des Prozessors.
-
Bei verschiedenen Ausführungsformen der vorliegenden Erfindung kann das in 3 veranschaulichte Verfahren in einer anderen Reihenfolge durchgeführt werden, wobei veranschaulichte Kästen kombiniert oder weggelassen werden können, zusätzliche Kästen hinzugefügt werden können, oder mit einer Kombination von umgeordneten, kombinierten, weggelassenen oder zusätzlichen Kästen.
-
Darüber hinaus sind Verfahrensausführungsformen der vorliegenden Erfindung nicht auf das Verfahren 300 oder dessen Varianten beschränkt. Zahlreiche andere, Verfahrensausführungsformen (wie auch Vorrichtungs-, System- und andere Ausführungsformen), die hierin nicht beschrieben werden, sind innerhalb des Schutzbereichs der vorliegenden Erfindung möglich.
-
Ausführungsformen oder Abschnitte von Ausführungsformen der vorliegenden Erfindung, wie vorstehend beschrieben, können auf jeder Form eines nichtphysischen oder physischen maschinenlesbaren Mediums gespeichert werden. Zum Beispiel kann das gesamte Verfahren 300 oder ein Teil davon in Software- oder Firmware-Befehlen verkörpert sein, die auf einem durch den Prozessor 110 lesbaren physischen Medium gespeichert sind, die, wenn sie von dem Prozessor 110 ausgeführt werden, den Prozessor 110 veranlassen, eine Ausführungsform der vorliegenden Erfindung auszuführen. Außerdem können Aspekte der vorliegenden Erfindung in auf einem physischen oder nichtphysischen maschinenlesbaren Medium gespeicherten Daten verkörpert sein, wobei die Daten einen Entwurf oder andere Informationen darstellen, die zum Herstellen des gesamten Prozessors 110 oder eines Teils davon verwendbar sind.
-
Somit wurden Ausführungsformen einer Erfindung für Aufruf- oder Rücksprungabsicht anzeigende Sprungbefehle beschrieben. Obwohl bestimmte Ausführungsformen beschrieben und in den begleitenden Zeichnungen gezeigt wurden, versteht es sich, dass derartige Ausführungsformen in Bezug auf die weitgefasste Erfindung lediglich veranschaulichend und nicht einschränkend sind, und dass diese Erfindung nicht auf die gezeigten und beschriebenen spezifischen Konstruktionen und Anordnungen beschränkt sein soll, da bei genauer Betrachtung dieser Offenbarung Fachleuten verschiedene andere Abwandlungen einfallen könnten. In einem Technologiebereich wie diesem, wo Wachstum schnell vonstatten geht und weitere Fortschritte nicht leicht vorherzusehen sind, können die offenbarten Ausführungsformen auf einfache Weise im Hinblick auf Anordnung und Details abwandelbar sein, was durch Ermöglichen technologischer Weiterentwicklungen ohne Abweichen von den Grundgedanken der vorliegenden Offenbarung oder dem Schutzbereich der begleitenden Ansprüche gefördert wird.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-