DE112017003345T5 - Bit-prüfprozessoren, verfahren, systeme und anweisungen zum prüfen eines bits mit einem angegebenen prüfbitwert - Google Patents

Bit-prüfprozessoren, verfahren, systeme und anweisungen zum prüfen eines bits mit einem angegebenen prüfbitwert Download PDF

Info

Publication number
DE112017003345T5
DE112017003345T5 DE112017003345.4T DE112017003345T DE112017003345T5 DE 112017003345 T5 DE112017003345 T5 DE 112017003345T5 DE 112017003345 T DE112017003345 T DE 112017003345T DE 112017003345 T5 DE112017003345 T5 DE 112017003345T5
Authority
DE
Germany
Prior art keywords
bit
instruction
check
processor
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE112017003345.4T
Other languages
English (en)
Inventor
Hugh Wilkinson
William R. Wheeler
Debra Bernstein
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE112017003345T5 publication Critical patent/DE112017003345T5/de
Withdrawn 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1072Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers for memories with random access ports synchronised on clock signal pulse trains, e.g. synchronous memories, self timed memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/70Details relating to dynamic memory management
    • G06F2212/702Conservative garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Ein Prozessor eines Aspekts enthält ein Register zum Speichern eines Zustandscode-Bits, und eine Decodiereinheit zum Decodieren einer Bitprüfungsanweisung. Die Bitprüfungsanweisung soll einen ersten Quellenoperanden angeben, der ein erstes Bit enthalten soll, und soll einen Prüfbitwert für das erste Bit angeben. Der Prozessor enthält auch eine Ausführungseinheit, die mit der Decodiereinheit gekoppelt ist. Die Ausführungseinheit soll, in Antwort auf die Bitprüfungsanweisung, das erste Bit mit dem Prüfbitwert vergleichen und ein Zustandscode-Bit aktualisieren um anzugeben, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist. Andere Prozessoren, Verfahren Systeme und Anweisungen sind offenbart.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Hier beschriebene Ausführungsformen beziehen sich im Allgemeinen auf Prozessoren. Insbesondere beziehen sich hier beschriebene Ausführungsformen im Allgemeinen auf eine Prüfung von Bits mit Prozessoren.
  • Hintergrundinformationen
  • Automatische Speicherbereinigung (Garbage Collection, GC) ist eine Art von automatischem Speichermanagement, das üblicherweise in Computersystemen verwendet wird, das eine Alternative zu einem manuellen Speichermanagement bietet. Beispielsweise kann eine automatische Speicherbereinigung in Java, C#, Go, Microsoft .NET Framework und verschiedenen anderen Umgebungen verwendet werden. Eine automatische Speicherbereinigung stellt im Allgemeinen einen Prozess oder Algorithmus dar, der zur Überprüfung von Objekten (z.B. Teilen von Software und/oder Daten) verwendet wird, zum Beispiel jenen, die auf einem Haldenspeicher gespeichert sind, um festzustellen, welche von ihnen noch verwendet werden und welche von ihnen nicht mehr verwendet werden. Die Objekte, die noch verwendet werden, stellen im Allgemeinen referenzierte Objekte dar, die noch durch ein aktives Programm referenziert werden (auf die z.B. ein Pointer zeigt). Solche noch immer verwendeten Objekte werden in der Technik manchmal als lebende Objekte bezeichnet. Im Gegensatz dazu können die Objekte, die nicht mehr verwendet werden, unreferenzierte Objekte darstellen, die nicht mehr durch ein aktives Programm referenziert werden (auf die z.B. keine Pointer zeigen). Die unbenutzten Objekte werden in der Technik manchmal als tote Objekte oder Müll bezeichnet. Üblicherweise können in einer automatischen Speicherbereinigung solche unbenutzten Objekte gelöscht werden und der Speicher, der für sie verwendet wurde, kann geräumt oder wiedergewonnen werden.
  • Figurenliste
  • Die Erfindung wird am besten unter Bezugnahme auf die folgende Beschreibung und beiliegenden Zeichnungen verständlich, die zur Veranschaulichung von Ausführungsformen verwendet werden. In den Zeichnungen:
    • ist 1 ein Blockdiagramm einer Ausführungsform eines Computersystems, in dem Ausführungsformen der Erfindung implementiert werden können.
    • ist 2 ein Blockdiagramm einer Ausführungsform eines Prozessors, der betriebsbereit ist, eine Ausführungsform einer Bitprüfungsanweisung auszuführen.
    • ist 3 ein Blockablaufdiagramm einer Ausführungsform eines Verfahrens zum Durchführen einer Ausführungsform einer Bitprüfungsanweisung.
    • ist 4 ein Blockdiagramm einer beispielhaften Ausführungsform eines virtuellen 64-Bit-Speicheradressenoperanden, der für einen Quellenoperanden einer Bitprüfungsanweisung geeignet ist.
    • ist 5 ein Blockdiagramm einer beispielhaften Ausführungsform eines geeigneten Quellenoperanden für eine Bitprüfungsanweisung.
    • ist 6 ein Blockablaufdiagramm einer detaillierten beispielhaften Ausführungsform eines Verfahrens zum Durchführen einer Bitprüfungsanweisung.
    • ist 7 ein Blockdiagramm, das eine beispielhafte Ausführungsform einer Bitprüfungslogik zeigt, die betriebsbereit ist, eine Bitprüfungsanweisung durchzuführen.
    • ist 8 ein Blockdiagramm einer anderen beispielhaften Ausführungsform eines geeigneten Quellenoperanden für eine Bitprüfungsanweisung, der verwendet werden kann, um zumindest zwei Prüfbitwerte für zumindest zwei verschiedene Bits zu befördern, die durch die Bitprüfungsanweisung zu prüfen sind.
    • ist 9 ein Blockablaufdiagramm einer beispielhaften Ausführungsform eines automatischen Speicherbereinigungsverfahrens, das eine Ausführungsform einer Bitprüfungsanweisung verwenden kann.
    • ist 10A ein Blockdiagramm, das eine Ausführungsform einer In-Order-Pipeline und eine Ausführungsform eines Registerumbenennungs-, Out-of-Order-Ausgabe-/Ausführungs-Pipeline zeigt.
    • ist 10B ein Blockdiagramm einer Ausführungsform eines Prozessorkerns, der eine Frontend-Einheit enthält, die an eine Ausführungsengineeinheit gekoppelt ist, und die beide an eine Speichereinheit gekoppelt sind.
    • ist 11A ein Blockdiagramm einer Ausführungsform eines einzelnen Prozessorkerns, gemeinsam mit seiner Verbindung zum On-Die-Verbindungsnetzwerk, und mit seinem örtlichen Teilsatz des Level 2 (L2) Cache.
    • ist 11B ein Blockdiagramm einer Ausführungsform einer erweiterten Ansicht eines Teils des Prozessorkerns von 11A.
    • ist 12 ein Blockdiagramm einer Ausführungsform eines Prozessors, der mehr als einen Kern haben kann, eine integrierte Speichersteuerung haben kann und eine integrierte Grafik haben kann.
    • ist 13 ein Blockdiagramm einer ersten Ausführungsform einer Computerarchitektur.
    • ist 14 ein Blockdiagramm einer zweiten Ausführungsform einer Computerarchitektur.
    • ist 15 ein Blockdiagramm einer dritten Ausführungsform einer Computerarchitektur.
    • ist 16 ein Blockdiagramm einer vierten Ausführungsform einer Computerarchitektur.
    • ist 17 ein Blockdiagramm einer Verwendung eines Software-Anweisungsumwandlers gemäß Ausführungsformen der Erfindung, um binäre Anweisungen in einem Quellenanweisungssatz in binäre Anweisungen in einem Zielanweisungssatz umzuwandeln.
  • AUSFÜHRLICHE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Es sind hier Ausführungsformen von Bitprüfungsanweisungen, Ausführungsformen von Prozessoren zum Durchführen der Anweisungen, Ausführungsformen von Verfahren, die durch die Prozessoren beim Durchführen der Anweisungen durchgeführt werden, Ausführungsformen von Systemen, die einen oder mehrere Prozessoren zum Durchführen der Anweisungen beinhalten, und Ausführungsformen von Programmen oder maschinenlesbaren Medien, die die Anweisungen bereitstellen, offenbart. In einigen Ausführungsformen können die Prozessoren eine Decodiereinheit oder andere Logik haben, um die Bitprüfungsanweisung zu empfangen und/oder zu decodieren, sowie eine Ausführungseinheit oder andere Logik, um die Bitprüfungsanweisung durchzuführen. In der folgenden Beschreibung sind zahlreiche spezielle Einzelheiten angegeben (z.B. spezielle Anweisungsoperationen, Datenformate, Prozessorkonfigurationen, mikroarchitektonische Einzelheiten, Abfolgen von Operationen usw.). Ausführungsformen können jedoch ohne diese speziellen Einzelheiten in die Praxis umgesetzt werden. In anderen Fällen sind allgemein bekannte Schaltungen, Strukturen und Techniken nicht im Detail dargestellt, um ein Verständnis der Beschreibung nicht zu erschweren.
  • 1 ist ein Blockdiagramm einer Ausführungsform eines Computersystems 100, in dem Ausführungsformen der Erfindung implementiert werden können. In verschiedenen Ausführungsformen kann das Computersystem einen Desktop-Computer, einen Laptop-Computer, einen Notebook-Computer, einen Tablet-Computer, ein Netbook, ein Smartphone, ein Mobiltelefon, einen Server, eine Netzwerkvorrichtung (z.B. einen Router, Schalter usw.), einen Media Player, ein smartes Fernsehgerät, ein Nettop, eine Set-Top Box, eine Videospielsteuerung oder eine andere Art von elektronischer Vorrichtung darstellen. Das Computersystem enthält einen Prozessor 102 und einen Speicher 110. Der Prozessor und der Speicher sind durch einen herkömmlichen Kopplungsmechanismus 124 (z.B. durch einen oder mehrere Busse, Hubs, Speichersteuerungen, Chipset-Komponenten oder dergleichen) aneinandergekoppelt oder stehen auf andere Art miteinander in Kommunikation.
  • Der Prozessor hat einen Anweisungssatz 104. Die Anweisungen des Anweisungssatzes stellen Makroanweisungen, Maschinensprachenanweisungen, Anweisungen, die dem Prozessor zur Ausführung bereitgestellt werden, oder Anweisungen, die ein Decodierer des Prozessors decodieren kann, dar, im Gegensatz zu Mikroanweisungen, Mikro-Ops oder anderen decodierten Anweisungen, die sich daraus ergeben, dass der Decodierer die Anweisungen des Anweisungssatzes decodiert. In einigen Ausführungsformen kann der Anweisungssatz zumindest eine Bitprüfungsanweisung 106 enthalten. Der Prozessor kann auch eine Logik 108 enthalten, die betriebsbereit ist, die Bitprüfungsanweisung durchzuführen, um ein oder mehrere Bits in einem Operanden zu prüfen. Diese Logik kann Hardware, Firmware, Software oder eine Kombination davon enthalten. In einigen Ausführungsformen kann die Logik zumindest eine gewisse On-Die-Logik enthalten die sich auf einem Halbleiter-Die befindet. In einigen Ausführungsformen kann die Logik zumindest einige On-Die-Transistoren, Schaltkreis oder andere Hardware enthalten.
  • Zahlreiche verschiedene Ausführungsformen der zumindest einen Bitprüfungsanweisung 106 sind hier offenbart. Einige Ausführungsformen der Bitprüfungsanweisung können in Verbindung mit automatischer Speicherbereinigung verwendet werden, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Andere Ausführungsformen der Bitprüfungsanweisung können für andere Zwecke und/oder für andere Algorithmen verwendet werden, falls erwünscht ist, ein oder mehrere Bits zu prüfen. Zur Darstellung gewisser Konzepte beschreibt die folgende Beschreibung häufig die Verwendung der Bitprüfungsanweisung in Verbindung mit einer automatischen Speicherbereinigung, obwohl der Umfang der Erfindung nicht darauf beschränkt ist.
  • Unter erneuter Bezugnahme auf 1 enthält der Speicher ein automatisches Speicherbereinigungsmodul 112. Das automatische Speicherbereinigungsmodul kann betriebsbereit sein, um einen automatischen Speicherbereinigungsalgorithmus durchzuführen. Es sind zahlreiche verschiedene Arten von automatischen Speicherbereinigungsalgorithmen geeignet. Beispiele für geeignete automatische Speicherbereinigungsalgorithmen enthalten, ohne aber darauf beschränkt zu sein, Algorithmen zum Verfolgen einer automatischen Speicherbereinigung, automatische Speicherbereinigungsalgorithmen mit simultaner Laufzeit, automatische Speicherbereinigungsalgorithmen, die imstande sind, Objekte, die noch in Verwendung sind, von einer aktuellen Seite zu einer anderen Seite neu zu positionieren, bevor die aktuelle Seite gelöscht wird, automatische Speicherbereinigungsalgorithmen, die imstande sind, nicht angrenzende oder verteilte Objekte, die noch verwendet werden, die auf einer Seite nach dem Löschen unbenutzter Objekte verbleiben, zu verdichten, generierende automatische Speicherbereinigungsalgorithmen und verschiedene andere Formen automatischer Speicherbereinigungsalgorithmen, enthaltend neue Formen automatischer Speicherbereinigungsalgorithmen, die noch nicht entwickelt sind, die aber auch von den hier beschriebenen Ausführungsformen profitieren können.
  • In einigen Ausführungsformen kann ein gegebenes Bit in Verbindung mit dem automatischen Speicherbereinigungsalgorithmus benutzt werden (z.B. als Teil des automatischen Speicherbereinigungsalgorithmus oder als ein zusammenhängender Algorithmus, der gemeinsam mit dem automatischen Speicherbereinigungsalgorithmus) verwendet wird. Dieses Bit wird manchmal in der Technik als ein Durchmarkierungs-Bit (MTB) oder als ein nicht durchmarkiertes Bit (NMTB) bezeichnet. Wie hier verwendet, kann dieses Bit einfach als ein Markierungs-Bit bezeichnet werden und kann weitgehend als ein Bit angesehen werden, das einen Bit-Wert hat der zum Befördern von Informationen verwendet wird, die in der automatischen Speicherbereinigung nützlich sind. Beispielsweise können Nicht-Haldenspeicher und Thread Stacks 114 Speicherpointer 116 haben, die auf Objekte 122 auf einem Haldenspeicher 120 zeigen oder diese referenzieren. Zum Beispiel können ein erster Pointer 116-1 bis N-ter Pointer 116-N (z.B. üblicherweise eine angemessen große Zahl) vorhanden sein, die verschiedene eines ersten Objekts 122-1 bis M-ten Objekts 122-M referenzieren (z.B. üblicherweise eine angemessen große Zahl). Jeder der Pointer hat ein Markierungs-Bit 118. Zum Beispiel hat der erste Pointer ein erstes Markierungs-Bit 118-1 und der N-te Pointer hat ein N-tes Markierungs-Bit 118-N. Die Objekte im Haldenspeicher können auch Pointer (nicht dargestellt) haben, die Markierungs-Bits (nicht dargestellt) haben können. Für Nicht-Haldenspeicher und Thread Stacks sind die lebenden Objekte im Allgemeinen bekannt. Für den Haldenspeicher 120 wird eine automatische Speicherbereinigung im Allgemeinen zum Identifizieren der lebenden Objekte verwendet (z.B. um sie zu sammeln und einen Speicher zu defragmentieren).
  • Anfänglich, zu Beginn einer Phase einer automatischen Speicherbereinigung können alle Pointer 116 durchquert werden und alle ihre Markierungs-Bits 118 können (als ein Beispiel) auf eine binäre Null zurückgesetzt werden. Wenn daher die neue Phase beginnt, können alle der Markierungs-Bits denselben Zustand oder Binärwert haben. Als eine mögliche Konvention kann dieser Zustand verwendet werden um anzugeben, dass die Pointer noch nicht für eine automatische Speicherbereinigung verwendet wurden. In einer automatischen Speicherbereinigung kann jeder Pointer, der den Haldenspeicher referenziert, verarbeitet werden, um die Objekte im Haldenspeicher zu finden, die noch in Verwendung sind, und solche Objekte zu sammeln oder zu kopieren. Zusätzlich können Objekte im Haldenspeicher auch Pointer haben, die auf andere Objekte zeigen. Somit können alle diese Pointer, die anfänglich im Nicht-Haldenspeicher und in Thread Stacks und dann im Haldenspeicher sind, durchquert werden. Für einen Pointer mit einem Markierungs-Bit wird dieses Markierungs-Bit zum Signalisieren unverarbeiteter Pointer für neue Phasen einer automatischen Speicherbereinigung verwendet. Software (z.B. Threads), die den Pointer liest, kann das Markierungs-Bit prüfen um zu bestimmen, ob eine Ausnahmeverarbeitung durchgeführt werden soll oder nicht. Eine solche Prüfung kann nach jedem Lesen eines Haldenspeicher-Pointers für eine Implementierung einer simultanen automatischen Speicherbereinigung durchgeführt werden, die Markierungs-Bits verwendet. Die Prüfung und die Ausnahmeverarbeitung können eine „Lastbarriere“ im Java Laufzeitsystem implementieren. Es kann eine große Anzahl solcher Pointer mit solchen Markierungs-Bits geben, die im Lauf einer automatischen Speicherbereinigung zu prüfen sind. Als ein Ergebnis kann eine solche Prüfung des Markierungs-Bits dazu neigen, signifikant zum Mehraufwand beizutragen, der mit einer Durchführung einer automatischen Speicherbereinigung verbunden ist, und falls sie nicht effizient durchgeführt wird, kann sie dazu neigen, die Leistung anderer Anwendungen zu verringern. Daher können die hier offenbarten Methoden, die zu einer Beschleunigung oder Verbesserung einer solchen Prüfung beitragen können, tendenziell Vorteile bieten.
  • Eine mögliche Methode zur Prüfung der Markierungs-Bits ist die Verwendung einer Abfolge von Anweisungen. Zum Beispiel kann die folgende Fünfzeilenabfolge der x86 Codeabfolge möglicherweise zum Prüfen des Markierungs-Bits verwendet werden:
    • MOV R1,(R0) ; Bewegen eines Pointers von Register R0 zu Register R1
    • MOV R2,#1<<shift ; Bewegen einer Maske mit nur einem Bit, das in Markierungs-Bitposition gesetzt ist, zum Register R2
    • AND R2,R1 ; Isolieren des Markierungs-Bits in R2 durch logisches UND von Pointer in R1 und Maske in R2
    • XODER R2,R3 ; logischer XODER NEPN-Wert in R3 mit Markierungs-Bit in R2, und Aktualisieren des Null-Flags
    • JNE except_proc ; Springen, falls Null-Flag null ist (Markierungs-Bit ≠ NEPN-Wert) zur Ausnahmeverarbeitung
  • In diesem Code steht NEPN für „keine Ausnahmeverarbeitung erforderlich“ und bezieht sich auf den Wert des Markierungs-Bits, das keinen Sprung zur Ausnahmeverarbeitung machen muss, der stattdessen für den entgegengesetzten Wert des Markierungs-Bits verwendet wird.
  • Eine alternative Methode ist die Verwendung einer Ausführungsform der Bitprüfungsanweisung 106 und der Logik 108. In verschiedenen Ausführungsformen kann die Bitprüfungsanweisung effektiv Operationen, ähnlich jenen von zwei oder mehr der Anweisungen der obenstehenden Codeabfolge (z.B. die zweite bis vierte Anweisung, die erste bis vierte Anweisung, alle fünf Anweisungen usw.) zu einer einzelnen Anweisung konsolidieren. Vorteilhafterweise kann diese Anweisung dazu beitragen, die Prüfung des Markierungs-Bit zu beschleunigen oder deren Effizienz zu verbessern, obwohl der Umfang der Erfindung nicht darauf beschränkt ist.
  • Wie zuvor gesagt, können anfänglich, zu Beginn einer Phase einer automatischen Speicherbereinigung, alle der Markierungs-Bits 118 denselben Zustand oder Binärwert haben. Dieser Wert kann dem Keine-Ausnahmeverarbeitung-erforderlich-Wert entgegengesetzt sein. Falls nach der Prüfung des Markierungs-Bits für einen bestimmten Pointer die Prüfung des Markierungs-Bits ergibt, dass das Markierungs-Bit noch den Anfangszustand hat (z.B. auf eine binäre Null in diesem Beispiel zurückgesetzt ist um anzugeben, dass keine Ausnahmeverarbeitung erforderlich ist), kann bestimmt werden, dass eine Ausnahmeverarbeitung durchgeführt werden sollte. Dies kann beispielsweise ein Überführen zu einem anderen Code (z.B. ein Ausnahmeverarbeitungssubmodul (z.B. except_proc im obenstehenden Code) des automatischen Speicherbereinigungsmoduls 112) beinhalten. Bei Durchführung der Verarbeitung kann der Zustand oder Bit-Wert des Markierungs-Bits atomisch umgedreht oder umgeschaltet werden (z.B. kann in diesem Beispiel der Bit-Wert des zurückgesetzten Bits auf eine binäre Eins gesetzt werden). Im Gegensatz dazu, falls das Markierungs-Bit den entgegengesetzten Zustand (z.B. den Keine-Ausnahmeverarbeitung-erforderlich-Wert, der in diesem Beispiel eine binäre Eins ist), im Gegensatz zum Anfangszustand, hat, kann keine Ausnahmeverarbeitung erforderlich sein. In einem solchen Fall kann keine Notwendigkeit bestehen, zum Ausnahmeverarbeitungssubmodul des automatischen Speicherbereinigungsmoduls überzugehen. Für jeden Pointer kann es im Allgemeinen nur eine einzige Prüfung seines entsprechenden Markierungs-Bits pro automatischer Speicherbereinigungsphase geben. Bevor die Phase zu Ende ist, sollte der Zustand aller Markierungs-Bits in dem ausführbaren Bild in den neuen Zustand umgedreht sein (z.B. in diesem Beispiel auf eine binäre Eins gesetzt sein).
  • Während der nächsten Phase, kann, anstatt alle Pointer 116 erneut zu durchqueren, die alle aktuell die Markierungs-Bits 118 im aktualisierten Zustand haben sollten (z.B. in diesem Beispiel auf eine binäre Eins gesetzt), und erneut alle Markierungs-Bits zurückzusetzen, stattdessen die Bedeutung des Markierungs-Bits umgeschaltet oder umgedreht werden. Zum Beispiel kann in dieser nächsten Phase, anstelle einer Verwendung einer binären Null zur Angabe, dass die Pointer noch nicht verarbeitet wurden, stattdessen eine binäre Eins zur Angabe verwendet werden, dass Pointer noch nicht verarbeitet wurden. Dieses Umschalten der Bedeutung kann dazu beitragen, eine zusätzliche unnötige Operation, alle Pointer erneut zu durchqueren und alle Markierungs-Bits erneut zurückzusetzen, zu verhindern, die einen signifikanten Verarbeitungsaufwand ausmachen kann. Dies kann jedoch auch die Operation einer Prüfung des Markierungs-Bits umschalten oder ändern. Anstatt zum Beispiel zu prüfen, ob die Markierungs-Bits einen Wert einer binären Eins haben, wie in der ersten Phase, kann stattdessen in der zweiten Phase die Prüfung bestimmen, ob die Markierungs-Bits einen Wert einer binären Null haben (für dieses besondere Beispiel).
  • In einigen Ausführungsformen kann die Bitprüfungsanweisung 106 ein solches Umschalten oder Umdrehen der Bitprüfoperation unterstützen (z.B. durch Spezifizieren oder auf andere Weise Angeben eines Prüfbitwerts, wie in der Folge ausführlicher beschrieben wird). Vorteilhafterweise kann die Bitprüfungsanweisung 106, und die Logik 108, die zu deren Durchführung verwendet wird, dazu beitragen, die Durchführung der Prüfung des Markierungs-Bits zu beschleunigen oder deren Effizienz zu verbessern. Ein solches Prüfen des Markierungs-Bits ist tendenziell eine ubiquitäre Prüfung, die in der automatischen Speicherbereinigung verwendet wird (z.B. automatische, simultane Laufzeit-Speicherbereinigungseinrichtung). Infolgedessen kann die Bitprüfungsanweisung dazu beitragen, die Leistung einer automatischen Speicherbereinigung zu verbessern, und/oder dazu beitragen, ihre Leistungsauswirkung auf andere Anwendungen zu reduzieren. Zusätzlich wird erwartet, dass es andere Algorithmen neben nur jenen gibt oder zumindest geben könnte, die mit einer automatischen Speicherbereinigung zusammenhängen, und/oder in anderen Fällen, wo es nützlich oder günstig sein könnte, ein Bit zu prüfen um festzustellen, ob es entweder einen ersten Wert (z.B. gesetzt ist) oder einen zweiten Wert (z.B. zurückgesetzt ist) hat. Die Bitprüfungsanweisung 106 kann auch für solche Algorithmen oder solche Fälle verwendet werden.
  • 2 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 202, der betriebsbereit ist, eine Ausführungsform einer Bitprüfungsanweisung 206 durchzuführen. In einigen Ausführungsformen kann der Prozessor ein Allzweck-Prozessor sein (z.B. ein Allzweck-Mikroprozessor oder eine zentrale Verarbeitungseinheit (CPU) jener Art, die in Desktop-, Laptop- oder anderen Computern verwendet wird). Alternativ kann der Prozessor ein Spezialzweck-Prozessor sein. Beispiele für geeignete Spezialzweck-Prozessoren enthalten, ohne aber darauf beschränkt zu sein, Netzwerkprozessoren, Kommunikationsprozessoren, kryptographische Prozessoren, Grafikprozessoren, Co-Prozessoren, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs) und Steuerungen (z.B. Mikrosteuerungen). Der Prozessor kann verschiedene komplexe Anweisungssatz berechnende (CISC) Architekturen, reduzierte Anweisungssatz berechnende (RISC) Architekturen, Architekturen mit sehr langem Befehlswort (VLIW), hybride Architekturen, andere Arten von Architekturen aufweisen oder eine Kombination verschiedener Architekturen aufweisen (z.B. können verschiedene Kerne verschiedene Architekturen haben). In einigen Ausführungsformen kann der Prozessor auf zumindest einer integrierten Schaltung oder einem Halbleiter-Die angeordnet sein. In einigen Ausführungsformen kann der Prozessor zumindest eine Hardware (z.B. Transistoren, Kondensatoren, Dioden, Schaltkreis, nicht flüchtigen Speicher, der einen Mikrocode speichert, oder dergleichen) enthalten.
  • Während des Betriebs kann der Prozessor 202 die Bitprüfungsanweisung 206 empfangen. Zum Beispiel kann die Anweisung vom Speicher über einen Bus oder eine andere Zwischenverbindung empfangen werden. Die Anweisung kann eine Makroanweisung, Maschinencodeanweisung oder eine andere Anweisung oder ein Steuersignal eines Anweisungssatzes des Prozessors darstellen. In einigen Ausführungsformen kann die Bitprüfungsanweisung explizit einen ersten Quellenoperanden 216 spezifizieren (z.B. durch ein oder mehrere Felder oder einen Satz von Bits, die ein Register mit diesem anzeigen) oder auf andere Weise angeben (z.B. implizit ein Register mit diesem angeben), der ein erstes Bit 218 enthält. In einigen Ausführungsformen kann der erste Quellenoperand optional ein Speicherpointer sein (z.B. ein 32-Bit- oder 64-Bit-Versatz in einen Haldenspeicher, verwendet als ein Pointer) und das erste Bit kann optional ein Markierungs-Bit sein, das in Verbindung mit einer automatischen Speicherbereinigung zu verwenden ist, obwohl der Umfang der Erfindung nicht darauf beschränkt ist.
  • In einigen Ausführungsformen kann die Bitprüfungsanweisung optional einen Wert zum Identifizieren einer Bitposition für das erste Bit als eine aus einer Vielzahl von verschiedenen möglichen Bitpositionen spezifizieren oder auf andere Weise angeben. Dies kann optional ermöglichen, dass die Anweisung zum Prüfen verschiedener Bits in verschiedenen Bitpositionen verwendet wird. Alternativ kann die Bitprüfungsanweisung in anderen Ausführungsformen eine implizite festgesetzte Bitposition für das erste Bit haben, die nicht explizit spezifiziert ist. Zum Beispiel kann die Bitprüfungsanweisung (z.B. ein Opcode derselben) eine implizite festgesetzte Stelle für das erste Bit haben (die z.B. dem Markierungs-Bit entsprechen kann, das in Verbindung mit einer automatischen Speicherbereinigung verwendet wird, oder eine andere festgesetzte Bitposition für einen anderen Algorithmus).
  • In einigen Ausführungsformen kann die Bitprüfungsanweisung einen Prüfbitwert 238 für das erste Bit 218 explizit (z.B. durch ein oder mehrere Felder oder einen Satz von Bits, die ein Register mit diesem spezifizieren) spezifizieren oder auf andere Weise angeben (z.B. implizit ein Register mit diesem angeben). Der Prüfbitwert kann einen Wert darstellen, der zu prüfen oder mit dem ersten Bit zu vergleichen ist. In einigen Ausführungsformen kann der Prüfbitwert entweder eine binäre Eins oder binäre Null sein. Als ein Beispiel kann ein Fall der Bitprüfungsanweisung den Prüfbitwert als binäre Eins angeben und ein anderer Fall derselben Bitprüfungsanweisung (z.B. derselbe Opcode) kann den Prüfbitwert als binäre Null angeben. Alternativ, falls gewünscht, können verschiedene Opcodes optional für verschiedene Werte des Prüfbitwerts bereitgestellt sein.
  • In einigen Fällen kann die Bitprüfungsanweisung ein oder mehrere Quellenoperand-Spezifikationsfelder zum Spezifizieren von Registern, Speicherstellen oder anderen Datenspeicherstellen haben, die zum Speichern oder Identifizieren der Operanden verwendet werden. Wie in dem dargestellten Beispiel gezeigt, kann der erste Quellenoperand 216 optional in einem ersten Register 236-1 eines Satzes von Registern 236 (z.B. Allzweck-Registern) gespeichert werden und der Prüfbitwert 238 kann optional in einem zweiten Register 236-1 des Satzes von Registern gespeichert werden. Als ein spezielles Beispiel kann die Bitprüfungsanweisung ein erstes Feld zum Spezifizieren des ersten Registers mit dem ersten Quellenoperanden (z.B. einem Speicherpointer) und ein zweites Feld zum Spezifizieren des zweiten Registers mit dem Prüfbitwert haben. Alternativ können einer oder mehrere dieser Registeroperanden optional für die Anweisung implizit sein (z.B. kann ein Register für einen Opcode der Anweisung implizit sein). Als ein spezielles Beispiel kann die Bitprüfungsanweisung das erste Register mit dem ersten Quellenoperanden implizit angeben (z.B. ohne explizites Spezifizieren) und das zweite Register mit dem Prüfbitwert implizit angeben (z.B. ohne explizites Spezifizieren). Alternativ kann dasselbe Register optional sowohl für den ersten Quellenoperanden wie auch den Prüfbitwert verwendet werden. Außerdem können Speicherstellen oder andere Datenspeicherstellen optional für eines oder mehrere von ihnen verwendet werden. Ebenso kann der Prüfbitwert optional direkt innerhalb der Codierung der Anweisung bereitgestellt werden (z.B. als ein Bit in einem Feld, ein Zwischenprodukt, ein Teil des Opcodes usw.). Verschiedene Kombinationen solcher Methoden sind auch für die Bitprüfungsanweisung geeignet, um den ersten Quellenoperand und den Prüfbitwert anzugeben oder auf andere Weise bereitzustellen.
  • Jedes der Register 236 kann eine On-Die- (oder auf einer integrierten Schaltung) Datenspeicherstelle darstellen, die zum Speichern von Daten betriebsbereit ist. Die Register können architektonisch sichtbare Register oder Architekturregister darstellen, die für Software und/oder einen Programmierer sichtbar sind und/oder die die Register sind, die durch Anweisungen des Anweisungssatzes des Prozessors angegeben sind, um Operanden zu identifizieren. Diese Architekturregister stehen im Gegensatz zu anderen Nicht-Architekturregistern in einer gegebenen Mikroarchitektur (z.B. temporäre Register, Neuordnungspuffer, Retirement-Register usw.). Die Register können auf verschiedene Weisen in verschiedenen Mikroarchitekturen implementiert werden und sind nicht auf eine bestimmte Art von Design beschränkt. Beispiele für geeignete Arten von Register enthalten, ohne aber darauf beschränkt zu sein, dedizierte physische Register, dynamisch zugeordnete physische Register unter Verwendung einer Registerumbenennung und Kombinationen davon.
  • Unter erneuter Bezugnahme auf 2 enthält der Prozessor eine Decodiereinheit oder einen Decodierer 230. Die Decodiereinheit kann die Bitprüfungsanweisung 206 empfangen und decodieren. Die Anweisung kann einen Opcode zum Identifizieren der durchzuführenden Operation (z.B. eine Bitprüfoperation) haben. Die Decodiereinheit kann eine oder mehrere relativ Niederpegel-Anweisungen oder Steuersignale ausgeben (z.B. eine oder mehrere Mikroanweisungen, Mikro-Operationen, Mikro-Codeeingabepunkte, decodierte Anweisungen oder Steuersignale usw.), die die Bitprüfungsanweisung höherer Ebene reflektieren, darstellen und/oder von dieser abgeleitet sind. In einigen Ausführungsformen kann die Decodiereinheit eine oder mehrere Eingabestrukturen (z.B. Anschluss (Anschlüsse), Zwischenverbindung(en), eine Schnittstelle), um die Bitprüfungsanweisung zu empfangen, eine Anweisungserkennungs- und -decodierlogik, die daran gekoppelt ist, um die Bitprüfungsanweisung zu erkennen und zu decodieren, und eine oder mehrere Ausgabestrukturen (z.B. Anschluss (Anschlüsse), Zwischenverbindung(en), eine Schnittstelle), die daran gekoppelt sind, um die Niederpegel-Anweisung(en) oder Steuersignal(e) auszugeben, enthalten. Die Decodiereinheit kann unter Verwendung zahlreicher verschiedener Mechanismen implementiert werden, enthaltend, ohne aber darauf beschränkt zu sein, Mikrocode-Nur-Lese-Speicher (ROMs), Verweistabellen, Hardware-Implementierungen, programmierbare logische Arrays (PLAs) und andere Mechanismen, die zum Implementieren von Decodiereinheiten geeignet sind. In einigen Ausführungsformen kann die Decodiereinheit auf einem Die (z.B. auf einem Die mit der Ausführungseinheit 232) enthalten sein. In einigen Ausführungsformen kann die Decodiereinheit zumindest einige Hardware (z.B. Transistoren, integrierten Schaltkreis, oder On-Die-Firmware usw.) enthalten.
  • In einigen Ausführungsformen kann, anstatt die Bitprüfungsanweisung direkt der Decodiereinheit bereitzustellen, ein Anweisungsemulator-, Übersetzer-, Morpher-, Interpretations- oder ein anderes Anweisungsumwandlungsmodul optional verwendet werden. Verschiedene Arten von Anweisungsumwandlungsmodulen können in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. In einigen Ausführungsformen kann das Anweisungsumwandlungsmodul außerhalb des Prozessors gelegen sei, wie zum Beispiel auf einem separate Die und/oder in einem Speicher (z.B. als ein statisches, dynamisches oder Laufzeitemulationsmodul). Beispielsweise kann das Anweisungsumwandlungsmodul die Bitprüfungsanweisung empfangen, die ein erster Anweisungssatz sein kann, und kann die Bitprüfungsanweisung in eine oder mehrere entsprechende Zwischenanweisungen oder Steuersignale emulieren, übersetzen, morphen, interpretieren oder auf andere Weise umwandeln, die ein zweiter, anderer Anweisungssatz sein können. Die eine oder mehreren Zwischenanweisungen oder Steuersignale des zweiten Anweisungssatzes können einer Decodiereinheit (z.B. Decodiereinheit 230) bereitgestellt werden, die sie in eine oder mehrere Niederpegel-Anweisungen oder Steuersignale decodieren kann, die durch native Hardware des Prozessors (z.B. eine oder mehrere Ausführungseinheiten) ausführbar ist.
  • Unter erneuter Bezugnahme auf 2 ist die Ausführungseinheit 232 mit der Decodiereinheit 230 gekoppelt. In einigen Ausführungsformen kann die Ausführungseinheit auf einem Die oder einer integrierten Schaltung (z.B. auf einem Die oder einer integrierten Schaltung mit der Decodiereinheit) sein. Die Ausführungseinheit kann die eine oder mehreren decodierten oder auf andere Weise umgewandelten Anweisungen oder Steuersignale empfangen die die Bitprüfungsanweisung darstellen und/oder von dieser abgeleitet sind. Die Ausführungseinheit kann auch gekoppelt oder auf andere Weise betriebsbereit sein, den ersten Quellenoperanden 216 und den Prüfbitwert 238 zu empfangen (kann z.B. mit den Registern 236 gekoppelt sein, wenn der erste Quellenoperand und das Prüfbitwert darin gespeichert sind). Die Ausführungseinheit kann betriebsbereit sein, in Antwort auf die und/oder als Ergebnis der Bitprüfungsanweisung (z.B. in Antwort auf eine oder mehrere Anweisungen oder daraus decodierten Steuersignale und/oder in Antwort auf die Anweisung, die einem Decodierer bereitgestellt wird), das erste Bit mit dem Prüfbitwert zu vergleichen und ein Zustandscode-Bit 240 zu aktualisieren um anzugeben. ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist. Beispielsweise kann der Vergleich optional durch eine exklusive-ODER- (XODER-) Operation durchgeführt werden. Die XODER-Operation an den zwei Bits kann ein Bit generieren oder erzeugen, das auf eine binäre Eins gesetzt ist, falls die Bits verschieden sind (falls z.B. eines der Bits eins ist und das andere null ist) oder das auf eine binäre Null zurückgesetzt ist, falls die Bits dieselben sind (z.B. sind entweder beide der Bits eins oder beide der Bits null). Alternativ können andere logische Operationen oder Kombinationen logischer Operationen optional verwendet werden, um den Vergleich durchzuführen. Wie dargestellt, kann in einigen Ausführungsformen das Zustandscode-Bit optional in einem Zustandscoderegister 242 gemeinsam mit möglicherweise einem oder mehreren anderen Zustandscode-Bits gespeichert werden.
  • Beispiele für geeignete Zustandscode-Bits für das Zustandscode-Bit 240 enthalten, ohne aber darauf beschränkt zu sein, Flags, Status-Flags, Status-Bits, Zustandscodes, Bits in einem Zustandsregister, Bits in einem Flag-Register, Bits in einem Statusregister und dergleichen. In einer Ausführungsform kann das Zustandscode-Bit ein Null-Flag oder ein anderes Null-Zustandscode-Bit sein, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Als ein spezielles Beispiel kann das Null-Zustandscode-Bit gesetzt werden, falls das erste Bit gleich dem Prüfbitwert ist, und zurückgesetzt werden, falls das erste Bit nicht gleich dem Prüfbitwert ist. Ohne Einschränkung können eine oder mehrere andere Anweisungen das Zustandscode-Bit prüfen und gemäß dem Wert des Zustandscode-Bits fortfahren. Wenn zum Beispiel ein Markierungs-Bit in Verbindung mit einer automatischen Speicherbereinigung verwendet wird, kann eine konditionelle Steuerungsflussüberführungsanweisung (z.B. die in der obenstehenden Codeabfolge dargestellte JNE-Anweisung) das Zustandscode-Bit prüfen, das anzeigt, ob das Markierungs-Bit einem Keine-Ausnahmeverarbeitung-erforderlich- (NEPN) Wert gleich ist, und kann eine Steuerung auf einen Ausnahmeverarbeitungscode überführen, falls das Zustandscode-Bit einen Wert hat, der angibt, dass das Markierungs-Bit nicht gleich dem NEPN-Wert ist, oder die Steuerung nicht auf das Ausnahmeverarbeitungsmodul überführen, falls das Zustandscode-Bit einen Wert hat, der angibt, dass das Markierungs-Bit gleich dem NEPN-Wert ist.
  • Die Ausführungseinheit und/oder der Prozessor können eine spezifische oder besondere Logik (z.B. Transistoren, integrierten Schaltkreis oder andere Hardware, möglicherweise kombiniert mit Firmware (z.B. Anweisungen, die in einem nicht flüchtigen Speicher gespeichert sind) und/oder Software) enthalten, die betriebsbereit ist, die Bitprüfungsanweisung durchzuführen und/oder das Ergebnis in Antwort auf die und/oder als ein Ergebnis der Bitprüfungsanweisung zu speichern (z.B. in Antwort auf eine oder mehrere Anweisungen oder Steuersignale, die aus der Bitprüfungsanweisung decodiert werden). Beispielsweise kann die Ausführungseinheit eine arithmetische Einheit, eine arithmetische Logikeinheit oder eine digitale Schaltung enthalten, um arithmetische und logische Operationen oder dergleichen durchzuführen. In einigen Ausführungsformen kann die Ausführungseinheit eine oder mehrere Eingabestrukturen (z.B. Anschluss (Anschlüsse), Zwischenverbindung(en), eine Schnittstelle), um Quellenoperanden, Schaltkreis oder Logik zu empfangen, die damit gekoppelt sind, um die Quellenoperanden zu empfangen und zu verarbeiten, und eine oder mehrere Ausgabestrukturen (z.B. Anschluss (Anschlüsse), Zwischenverbindung(en), eine Schnittstelle), die damit gekoppelt sind, um einen Wert oder ein anderes Signal bereitzustellen, um den Wert des Zustandscode-Bits zu aktualisieren, enthalten. In einigen Ausführungsformen kann die Ausführungseinheit den Schaltkreis oder die Logik enthalten, die in der Folge für 7 dargestellt und näher beschrieben sind, obwohl der Umfang der Erfindung nicht darauf beschränkt ist.
  • Es wurde ein relativ einfacher Prozessor 202 dargestellt und beschrieben, um die Beschreibung nicht unklar zu machen. Der Prozessor kann jedoch optional andere Prozessorkomponenten enthalten. Zum Beispiel können zahlreiche verschiedene Ausführungsformen zahlreiche verschiedene Kombinationen und Konfigurationen der für eine von 10-12 dargestellten und beschriebenen Komponenten enthalten. Alle der Komponenten des Prozessors können aneinandergekoppelt sein, sodass sie wie beabsichtigt arbeiten können. Bei Betrachtung von 10B kann beispielsweise der Anweisungs-Cache 1034 die Anweisungen zwischenspeichern, die Anweisungsabrufeinheit 1038 kann die Anweisung abrufen, die Decodiereinheit 1040 kann die Anweisung decodieren, die Planereinheit 1056 kann die zugehörigen Operationen planen, die Ausführungseinheit 1062 kann die Anweisung durchführen, die Retirement-Einheit 1054 kann die Anweisung zurückziehen, usw.
  • 3 ist ein Blockablaufdiagramm einer Ausführungsform eines Verfahrens 350 zum Durchführen einer Ausführungsform einer Bitprüfungsanweisung. In verschiedenen Ausführungsformen kann das Verfahren durch einen Prozessor, eine Anweisungsverarbeitungsvorrichtung, digitale Logikvorrichtung oder integrierte Schaltung durchgeführt werden. In einigen Ausführungsformen kann das Verfahren 350 durch und/oder mit dem Prozessor 202 von 2 und/oder unter Verwendung der Bitprüfungsanweisung 206 von 2 durchgeführt werden. Die Komponenten, Merkmale und spezifischen optionalen Einzelheiten, wie hier für den Prozessor 202 und/oder die Anweisung 206 beschrieben, können optional auch für das Verfahren 350 gelten. Alternativ kann das Verfahren 350 durch und/oder innerhalb eines ähnlichen oder anderen Prozessors oder einer ähnlichen oder anderen Vorrichtung und/oder unter Verwendung einer ähnlichen oder anderen Anweisung durchgeführt werden. Außerdem kann der Prozessor 202 Verfahren durchführen, die dasselbe, das gleiche wie oder ein anderes als das Verfahren 350 sind.
  • Das Verfahren enthält ein Empfangen der Bitprüfungsanweisung in Block 351. In verschiedenen Aspekten kann die Anweisung bei einem Prozessor oder einem Teil davon (z.B. einer Anweisungsabrufeinheit, einer Decodiereinheit, einer Busschnittstelleneinheit usw.) empfangen werden. In verschiedenen Aspekten kann die Anweisung von einem Off-Prozessor und/oder einer Off-Die-Quelle (z.B. vom Speicher, einer Zwischenverbindung usw.) oder von einem On-Prozessor und/oder einer On-Die-Quelle (z.B. von einem Anweisungs-Cache, einer Anweisungswarteschlange usw.) empfangen werden.
  • Die Bitprüfungsanweisung kann einen ersten Quellenoperanden spezifizieren oder auf andere Weise angeben, der ein erstes Bit enthält, und kann einen Prüfbitwert für das erste Bit spezifizieren oder auf andere Weise angeben. In einigen Ausführungsformen kann der erste Quellenoperand optional ein Speicherpointer sein (z.B. ein 32-Bit- oder 64-Bit-Versatz in einen Haldenspeicher, der als Pointer verwendet wird) und das erste Bit kann optional ein Markierungs-Bit sein, das in Verbindung mit einer automatischen Speicherbereinigung verwendet wird, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. In einigen Ausführungsformen kann dem Prüfbitwert (z.B. durch die Anweisung) erlaubt sein, entweder eine binäre Eins oder binäre Null zu sein. Alternativ können verschiedene Anweisungen optional für eine binäre Eins und binäre Null verwendet werden. Der erste Quellenoperand und der Prüfbitwert können wie oben beschrieben auf verschiedene Weisen angegeben werden.
  • In Block 352 kann das erste Bit in Antwort auf die Bitprüfungsanweisung mit dem Prüfbitwert verglichen werden. In einigen Ausführungsformen können die Bits auf Gleichheit verglichen werden. Als ein spezielles Beispiel kann eine XODER-Operation zum Vergleichen der Bits durchgeführt werden. Alternativ können andere logische Operationen oder Kombinationen logischer Operationen optional zum Vergleichen der Bits verwendet werden.
  • In Block 353 kann ein Zustandscode-Bit in Antwort auf die Bitprüfungsanweisung aktualisiert werden um anzugeben, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist. In einer Ausführungsform kann das Zustandscode-Bit ein Null-Flag oder anderes Null-Zustandscode-Bit sein, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Als ein spezielles Beispiel kann das Null-Zustandscode-Bit gesetzt werden, falls das erste Bit gleich dem Prüfbitwert ist, und zurückgesetzt werden, falls das erste Bit nicht gleich dem Prüfbitwert ist.
  • Das dargestellte Verfahren beinhaltet architektonische Operationen (z.B. jene, die aus einer Software-Perspektive sichtbar sind). In anderen Ausführungsformen kann das Verfahren optional eine oder mehrere mikroarchitektonische Operationen enthalten. Beispielsweise kann die Anweisung abgerufen, decodiert, außerhalb der Reihenfolge geplant werden, auf Quellenoperanden kann zugegriffen werden, eine Ausführungseinheit kann mikroarchitektonische Operationen durchführen, um die Anweisung zu implementieren usw. In einigen Ausführungsformen können die mikroarchitektonischen Operationen zum Implementieren der Anweisung optional eine jener enthalten, die in Verbindung mit 6 und/oder 7 dargestellt sind.
  • 4 ist ein Blockdiagramm einer beispielhaften Ausführungsform eines virtuellen 64-Bit-Speicheradressenoperanden 416, der für einen Quellenoperanden einer Bitprüfungsanweisung geeignet ist. Zum Beispiel kann der Operand 416 als der erste Quellenoperand 216 verwendet werden, der oben für 2 besprochen wurde. Der virtuelle 64-Bit-Speicheradressenoperand enthält einen Satz niedrigstwertiger Bits 458, die zum Bestimmen einer physischen Speicheradresse verwendet werden können. Zum Beispiel können diese Bits 458 eine virtuelle Speicheradresse darstellen, die (z.B. während eines Adressenübersetzungsprozesses) in eine entsprechende physische Speicheradresse umgewandelt werden kann, die zum Zugreifen auf eine Stelle im physischen Speicher verwendet werden kann.
  • Der virtuelle 64-Bit-Speicheradressenoperand enthält auch einen Satz höchstwertiger Metadaten-Bits 460, die nicht zum Identifizieren der physischen Speicheradresse verwendet werden (z.B. während des Adressenübersetzungsprozesses nicht verwendet werden). 64-Bits sind fähig, einen riesigen Adressenraum zu adressieren. In vielen Fällen ist ein solcher riesiger Adressenraum nicht erforderlich. In solchen Fällen kann nur ein Teilsatz der 64-Bits, der üblicherweise ein niedrigstwertiger Teilsatz von Bits ist, zum Adressieren eines kleineren Adressenraums verwendet werden. Ein verbleibender Teilsatz der 64-Bits, der üblicherweise ein höchstwertiger Teilsatz ist, kann geborgt oder für andere Zweck verwendet werden. In dem dargestellten Beispiel werden vier höchstwertige Bits [63:60] für solche Metadaten-Bits 460 verwendet, obwohl in anderen Ausführungsformenandere Zahlen optional verwendet werden können.
  • Die Metadaten-Bits 460 können üblicherweise zum Bereitstellen zusätzlicher Daten oder Informationen verwendet werden, die in irgendeiner Weise mit dem virtuellen 64-Bit-Speicheradressenoperanden verknüpft sind. Als ein spezielles Beispiel kann eines der Bits optional als ein Markierungs-Bit verwendet werden, das in Verbindung mit einer automatischen Speicherbereinigung verwendet werden soll und das zum Befördern von Informationen verwendet werden soll, die angeben, ob der virtuelle 64-Bit-Speicheradressenoperand bereits für eine automatische Speicherbereinigung verarbeitet wurde oder nicht (oder allgemeinere Informationen, die für eine automatische Speicherbereinigung relevant sind, und/oder Informationen zur Unterstützung einer automatischen Speicherbereinigung), obwohl der Umfang der Erfindung nicht darauf beschränkt ist. In anderen Ausführungsformen können eines oder mehrere der Bits optional zum Bereitstellen von Informationen oder Daten, die mit dem Pointer verknüpft sind, für einen anderen Prozess oder Algorithmus verwendet werden (z.B. einen mit einer Seitentabelle zusammenhängenden Algorithmus, einen mit einer Adressenübersetzung zusammenhängenden Algorithmus, wie eine virtuelle Speicheradresse in einer Anwendung verwendet wird und dergleichen).
  • In anderen Fällen können niedrigstwertige Bits als Metadaten-Bits verwendet werden. Zum Beispiel wird ein Haldenspeicherobjekt auf mehreren Bytes (z.B. 2, 4 oder 8) ausgerichtet, Bits niedrigerer Priorität können für Metadaten-Bits verfügbar sein, falls eine Adressierlogik einen Wert einer binären Null für diese Bits verwendet. Falls zum Beispiel das Haldenspeicherobjekt an einer 8-Byte ausgerichteten Grenze beginnt, könnten drei niedrigstwertige Bits möglicherweise als Metadaten-Bits verwendet werden. Die oben beschriebene Methode kann auch bei solchen Metadaten-Bits niedriger Priorität angewendet werden.
  • 5 ist ein Blockdiagramm einer beispielhaften Ausführungsform eines geeigneten Quellenoperanden 562 für eine Bitprüfungsanweisung. Zum Beispiel kann der Operand 562 zum Befördern des Prüfbitwerts 238 verwendet werden, wie oben für 2 besprochen. In der dargestellten beispielhaften Ausführungsform ist der Quellenoperand 562 ein 8-Bit Operand, obwohl in anderen Ausführungsformen optional weniger oder mehr Bits verwendet werden können. In einigen Ausführungsformen kann der Quellenoperand optional in einem Register (z.B. einem Allzweck-Register) oder einer anderen Datenspeicherstelle gespeichert sein, das bzw. die durch die Bitprüfungsanweisung angegeben ist. In anderen Ausführungsformen kann der Quellenoperand optional ein Zwischenprodukt der Bitprüfungsanweisung sein.
  • In der dargestellten beispielhaften Ausführungsform enthält der Quellenoperand einen Prüfbitwert 538 für das erste Bit. Der Prüfbitwert kann einen Einzel-Bit Binärwert darstellen, gegen den ein entsprechendes Bit während der Durchführung der Bitprüfungsanweisung zu prüfen oder zu vergleichen ist. Wie dargestellt, kann der Prüfbitwert in einer einzelnen Bitposition des Quellenoperanden gespeichert werden. In dem dargestellten Beispiel ist diese Bitposition die niedrigstwertige Bitposition oder Bit-0, obwohl verschiedene andere Bitpositionen in anderen Ausführungsformen verwendet werden können. Dem Prüfbitwert kann erlaubt sein, verschiedene Einzel-Bit Binärwerte zu haben (z.B. entweder eine binäre Null oder binäre Eins). Da beide Binärwerte erlaubt sind, kann die Software wählen, welcher Wert zu verwenden ist, wodurch die Bitprüfung einen Vergleich auf Gleichheit mit einem bestimmten Bit vornehmen kann, das entweder einen Wert einer binären Eins oder einen Wert einer binären Null hat. Diese Flexibilität kann beispielsweise in gewissen Algorithmen nützlich und günstig sein, wie zum Beispiel in einer automatischen Speicherbereinigung, wo eine Bedeutung eines Bits zu verschiedenen Zeitpunkten umschalten oder sich ändern kann. In einigen Ausführungsformen kann der Prüfbitwert verwendet werden, um den aktiven oder Keine-Verarbeitung-erforderlich-Zustand des Markierungs-Bits in der automatischen Speicherbereinigung darzustellen, obwohl der Umfang der Erfindung nicht darauf beschränkt ist.
  • Unter erneuter Bezugnahme auf 5 enthält in der dargestellten beispielhaften Ausführungsform der Quellenoperand auch optional einen Wert 564 zum Identifizieren einer Bitposition für das erste Bit. Beispielsweise kann der Wert zum Identifizieren einer Bitposition eines der Metadaten-Bits 460 von 4 verwendet werden, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Wie im dargestellten Beispiel gezeigt, kann der Wert optional in sechs Bits gespeichert werden, obwohl alternativ weniger oder mehr Bits optional verwendet werden können. In dem speziellen dargestellten Beispiel werden Bits [6:1] verwendet, obwohl verschiedenen andere Bitpositionen optional in anderen Ausführungsformen verwendet werden können. Häufig ist es praktisch, aber nicht notwendig, dass eine angrenzende Gruppe von Bits verwendet wird. Ein Aufnehmen eines solchen Werts kann derselben Bitprüfungsanweisung erlauben, zur Prüfung verschiedener Bits in verschiedenen Bitpositionen verwendet zu werden, indem der Wert geändert wird, der zum Identifizieren dieser anderen Bitposition verwendet wird. Ein Aufnehmen dieses Werts ist jedoch optional, nicht notwendig. Zum Beispiel kann in anderen Ausführungsformen eine Bitposition, die durch die Bitprüfungsanweisung verwendet wird, optional für die Bitprüfungsanweisung (z.B. für ihren Opcode) festgesetzt oder implizit sein.
  • Unter erneuter Bezugnahme auf 5 enthält in der dargestellten beispielhaften Ausführungsform der Quellenoperand auch optional eine Freigabesteuerung 566. In einigen Ausführungsformen kann die Freigabesteuerung, wenn sie auf eine bestimmte Weise konfiguriert (z.B. nicht freigegeben oder gesperrt) ist, betriebsbereit sein, eine Durchführung einer Bitprüfungsanweisung zu veranlassen, um ein Zustandscode-Bit in einer selben Weise (z.B. auf einen selben Wert) zu aktualisieren, unabhängig vom Wert des Bits, der durch die Bitprüfungsanweisung verglichen wird, und/oder unabhängig vom Wert des Prüfbitwerts. In einigen Ausführungsformen kann die Freigabesteuerung, wenn sie auf eine bestimmte Weise konfiguriert ist, betriebsbereit sein, die Durchführung einer Bitprüfungsanweisung zu veranlassen, um ein Zustandscode-Bit in einer selben Weise zu aktualisieren, unabhängig davon, ob das Bit, das durch die Bitprüfungsanweisung verglichen wird, gleich oder nicht gleich dem Prüfbitwert ist. Das heißt, in einem solchen Fall kann die Durchführung der Bitprüfungsanweisung ein selbes architektonisches Ereignis oder eine Maßnahme veranlassen, unabhängig vom Ergebnis des Vergleichs und/oder unabhängig von Eingaben in den Vergleich. Beispielsweise kann in einer Ausführungsform die Freigabesteuerung, wenn sie auf eine bestimmte Weise konfiguriert ist, betriebsbereit sein, die Durchführung einer Bitprüfungsanweisung zu veranlassen, um ein Null-Flag oder ein anderes Null-Zustandscode-Bit auf eine binäre Eins zu setzen, unabhängig vom Wert des Bits, der durch die Bitprüfungsanweisung verglichen wird und/oder unabhängig vom Wert des Prüfbitwerts. Im Gegensatz dazu kann in einigen Ausführungsformen die Freigabesteuerung, wenn sie auf eine andere Weise konfiguriert (z.B. auf entgegengesetzte Weise) ist, betriebsbereit sein, die Durchführung einer Bitprüfungsanweisung zu veranlassen, um ein Zustandscode-Bit in einer Weise zu aktualisieren, die von dem Wert des verglichenen Bits und des Prüfbitwerts abhängig ist oder auf diesem beruht, und/oder in einer Weise, die davon abhängig ist oder darauf beruht, ob das verglichene Bit gleich oder nicht gleich dem Prüfbitwert ist.
  • Wie in dem dargestellten Beispiel gezeigt, kann die Freigabesteuerung optional in einem einzelnen Bit gespeichert werden, obwohl alternativ weniger oder mehr Bits optional verwendet werden können. In dem speziellen dargestellten Beispiel wird Bit-7 verwendet, obwohl verschiedene andere Bitpositionen optional in anderen Ausführungsformen verwendet werden können. Als ein veranschaulichendes Beispiel einer möglichen Verwendung kann die optionale Freigabesteuerung verwendet werden, um Nicht-Anwendungs-Threads, wie automatischen Speicherbereinigungs-Threads, zu ermöglichen, Aktualisierungen an den Markierungs-Bits vorzunehmen, ohne Anwendungs-Threads zu veranlassen, auf die neuen Zustände der Markierungs-Bits zu reagieren. Eine Aufnahme dieses Werts ist jedoch optional, nicht notwendig.
  • 6 ist ein Blockablaufdiagramm einer ausführlicheren beispielhaften Ausführungsform eines Verfahrens 670 zur Durchführung einen Bitprüfungsanweisung. 7 ist ein Blockdiagramm, das eine beispielhafte Ausführungsform einer Bitprüfungslogik 778 zeigt, die betriebsbereit ist, eine Bitprüfungsanweisung durchzuführen. Zur Straffung der Beschreibung wird das Verfahren 670 unter Bezugnahme auf die Logik 778 beschrieben. Das Verfahren 670 kann jedoch auch optional mit einer ähnlichen oder anderen Logik in Bezug auf die besondere Logik 778 durchgeführt werden. Außerdem kann die Logik 778 zum Durchführen ähnlicher oder anderer Verfahren in Bezug auf das besondere Verfahren 670 verwendet werden.
  • Unter Bezugnahme auf 6 kann in Block 671 eine Bitprüfungsanweisung bei einem Prozessor empfangen werden. In einigen Ausführungsformen kann die Bitprüfungsanweisung einen ersten Quellenoperanden spezifizieren oder auf andere Weise angeben, der ein erstes/gegebenes Bit enthält, kann einen Wert zum Identifizieren einer Bitposition für das erste Bit spezifizieren oder auf andere Weise angeben, kann einen Prüfbitwert für das erste Bit spezifizieren oder auf andere Weise angeben und kann eine Freigabesteuerung spezifizieren oder auf andere Weise angeben. Diese können auf zahlreiche verschiedene Weisen bereitgestellt werden, wie hier an anderer Stelle beschrieben ist. In einer speziellen beispielhaften Ausführungsform können diese durch den Quellenoperanden 562 bereitgestellt werden, obwohl der Umfang der Erfindung nicht darauf beschränkt ist.
  • In Block 672 kann auf den ersten Quellenoperanden, der das erste Bit, den Wert zum Identifizieren der Bitposition für das erste Bit, den Prüfbitwert und die Freigabesteuerung enthält, zugegriffen werden oder dieser kann auf andere Weise empfangen werden (z.B. durch eine Ausführungseinheit, durch Bitprüfungslogik usw.). Unter Bezugnahme nun auf 7 kann die Bitprüfungslogik gekoppelt oder auf andere Weise betriebsbereit sein, als Eingänge einen ersten Quellenoperanden 716 mit einem ersten Bit, einen Wert 764 zum Identifizieren einer Bitposition des ersten Bits, einem Prüfbitwert 738 für das erste Bit und einer Freigabesteuerung 766 zu empfangen. Zum Beispiel kann die Bitprüfungslogik einen ersten Eingang 782 zum Empfangen des ersten Quellenoperanden als einen Eingang, einen zweiten Eingang 781 zum Empfangen des Werts 764 als einen Eingang, einen dritten Eingang 780 zum Empfangen des Prüfbitwerts 738 als einen Eingang und einen vierten Eingang 779 zum Empfangen der Freigabesteuerung 766 als einen Eingang enthalten. Beispiele für geeignete Eingänge enthalten, ohne aber darauf beschränkt zu sein, Drähte oder andere Zwischenverbindungen, Anschlüsse, Schnittstellen usw.
  • Unter erneuter Bezugnahme auf 6 kann in Block 673 der Eingangswert (d.h., der zum Identifizieren der Bitposition für das erste Bit verwendet wird) zum Identifizieren einer Bitposition des ersten Bits in Antwort auf die Bitprüfungsanweisung verwendet werden. Wie in 7 dargestellt, enthält die Bitprüfungslogik eine Auswahllogik 783. Die Auswahllogik ist gekoppelt oder betriebsbereit, als einen ersten Eingang den ersten Quellenoperanden 716 mit dem ersten Bit zu empfangen, und ist gekoppelt, als eine Eingangsauswahlsteuerung den Wert 764 zu empfangen. Die Auswahllogik ist betriebsbereit, das erste Bit des ersten Quellenoperanden 716 als ein einzelnes Bit basierend auf dem Eingangswert 764 auszuwählen. Ein Beispiel einer geeigneten Auswahllogik ist ein Multiplexer (MUX). Die Auswahllogik kann das ausgewählte erste Bit an die Vergleichslogik 784 ausgeben.
  • Unter erneuter Bezugnahme auf 6 kann das identifizierte erste Bit mit dem bereitgestellten Prüfbitwert für das erste Bit in Antwort auf die Bitprüfungsanweisung in Block 674 verglichen werden. In einigen Ausführungsformen kann es der Vergleich auf Gleichheit sein. In anderen Ausführungsformen kann es der Vergleich auf einen Mangel an Gleichheit sein. Wie in 7 dargestellt, enthält die Bitprüfungslogik eine Vergleichslogik 784, die betriebsbereit ist, einen Vergleich des ausgewählten ersten Bits und des Prüfbitwerts 738 durchzuführen. Die Vergleichslogik ist zum Empfangen des gewählten ersten Bits als einen ersten Eingang von der Auswahllogik 783 gekoppelt und ist zum Empfangen des Prüfbitwerts als einen zweiten Eingang gekoppelt. Ein Beispiel einer geeigneten Vergleichslogik ist ein XODER-Logik-Gate zum Durchführen einer XODER-Operation. In einigen Ausführungsformen kann die XODER-Operation eine bitweise XODER-Operation an dem eingegebenen ersten Bit und dem Prüfbitwert durchführen und als Ausgang ein Ergebnis-Bit generieren, das das Ergebnis des Vergleichs angibt. Das Ergebnis- oder Ausgangs-Bit kann auf eine binäre Eins gesetzt werden, falls sich die verglichenen Eingangs-Bits unterscheiden, oder auf eine binäre Null zurückgesetzt werden, falls die verglichenen Eingangs-Bits dieselben sind. Alternativ können andere Arten von Logik-Gates oder Kombinationen von zwei oder mehr Logik-Gates, optional zum Durchführen des Vergleichs verwendet werden. Die Vergleichslogik kann ein Ergebnis des Vergleichs (z.B. einen Bit-Wert) als einen Ausgang bereitstellen.
  • Unter erneuter Bezugnahme auf 6 kann in Antwort auf die Bitprüfungsanweisung eine Bestimmung in Block 675 erfolgen, ob die Freigabesteuerung zur Freigabe konfiguriert ist oder nicht. Falls die Freigabesteuerung nicht zur Freigabe konfiguriert ist (z.B. ist „Nein“ die Bestimmung in Block 675), kann das Verfahren mit Block 676 fortfahren. Wenn in Block 676, ein Normalbetrieb der Anweisung gesperrt ist, kann das Zustandscode-Bit in einer selben Weise unabhängig von Werten des ersten Bits und des Prüfbits in Antwort auf die Bitprüfungsanweisung aktualisiert werden.
  • Alternativ, falls die Freigabesteuerung zur Freigabe konfiguriert ist (z.B. ist „Ja“ die Bestimmung in Block 675), kann das Verfahren mit Block 677 fortfahren. Wenn in Block 677, ein Normalbetrieb der Anweisung freigegeben ist, kann das Zustandscode-Bit in Antwort auf die Bitprüfungsanweisung aktualisiert werden um anzugeben, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist. Das heißt, das Zustandscode-Bit kann unterschiedlich aktualisiert werden, abhängig von und/oder für zumindest einige(n) verschiedene(n) Werte(n) des ersten Bits und des Prüfbits.
  • Wie in 7 dargestellt, enthält die Bitprüfungslogik eine Freigabesteuerungslogik 785. Die Freigabesteuerungslogik ist zum Empfangen der Freigabesteuerung 766 als einen ersten Eingang gekoppelt und ist zum Empfangen des Ergebnisses des Vergleichs von der Vergleichslogik als einen zweite Eingang gekoppelt. Beispielsweise kann jeder dieser Eingänge einen einzelnen Bit-Wert darstellen. Ein Ausgang der Sperrsteuerungslogik ist mit einem Zustandscode-Bit 740 gekoppelt. Ein geeignetes Beispiel eines Zustandscode-Bits ist ein Null-Flag oder anderes Null-Zustandscode-Bit, obwohl der Umfang der Erfindung nicht darauf beschränkt ist.
  • Die Freigabesteuerungslogik kann betriebsbereit sein, durch die Freigabesteuerung gesteuert zu werden. In einigen Ausführungsformen kann die Freigabesteuerung, wenn sie auf eine bestimmte Weise konfiguriert ist (z.B. zum Sperren, das in dem dargestellten Beispiel ein Wert einer binären Null sein kann), betriebsbereit sein, die Freigabesteuerungslogik zu veranlassen, das Zustandscode-Bit in einer selben Weise (z.B. auf einen selben Wert) unabhängig vom Ausgang der Vergleichslogik und/oder unabhängig von Werten des ersten Bits und des Prüfbits und/oder unabhängig davon, ob das erste Bit gleich dem Prüfbitwert ist, zu aktualisieren. Im Gegensatz dazu kann die Freigabesteuerung in einigen Ausführungsformen, wenn sie auf eine andere Weise konfiguriert ist (z.B. zum Freigeben, das in dem dargestellten Beispiel ein Wert einer binären Eins sein kann), betriebsbereit sein, die Freigabesteuerungslogik zu veranlassen, das Zustandscode-Bit in einer Weise zu aktualisieren, die von dem Ausgang der Vergleichslogik abhängig ist oder auf diesem beruht und/oder die von den Werten des ersten Bits und des Prüfbits abhängig ist oder auf diesem beruht und/oder die davon abhängig ist oder darauf beruht, ob das erste Bit gleich dem Prüfbitwert ist.
  • Eine geeignete beispielhafte Ausführungsform der Freigabesteuerungslogik ist ein NICHT-UND (NUND) Logik-Gate. Ebenso ist eine geeignete beispielhafte Ausführungsform des Zustandscode-Bits ein Null-Flag oder ein anderes Null-Zustandscode-Bit. In einigen Ausführungsformen kann die Freigabesteuerung, die auf eine binäre Null zurückgesetzt ist, betriebsbereit sein, das NUND-Logik-Gate zu veranlassen, das Null-Zustandscode-Bit immer auf eine binäre Eins zu setzen, unabhängig vom Ergebnis des Vergleichs, während die Freigabesteuerung, die auf eine binäre Eins gesetzt ist, betriebsbereit sein kann, das NUND-Logik-Gate zu veranlassen, das Null-Zustandscode-Bit auf Basis des Ergebnisses des Vergleichs zu aktualisieren. Zum Beispiel kann in einigen Ausführungsformen, im letztgenannten Fall, das Null-Zustandscode-Bit aktualisiert werden, um das logische NICHT des Ergebnisses des Vergleichs zu sein. Zum Beispiel kann in einigen Ausführungsformen das Null-Zustandscode-Bit gesetzt werden, falls das erste Bit gleich dem Prüfbitwert ist.
  • 8 ist ein Blockdiagramm einer anderen beispielhaften Ausführungsform eines geeigneten Quellenoperanden 888 für eine Bitprüfungsanweisung, der zum Befördern von zumindest zwei Prüfbitwerten für zumindest zwei verschiedene Bits verwendet werden kann, die durch die Bitprüfungsanweisung zu prüfen sind. Zum Beispiel kann der Operand 888 zum Befördern des Prüfbitwerts 238, wie oben für 2 besprochen, als einen oder mehrere andere Prüfbitwerte verwendet werden, die in der Prüfung eines oder mehrerer anderer Bits verwendet werden.
  • Der Operand enthält einen ersten Satz 862-1 eines ersten Prüfbitwerts für ein erstes Bit, optional einen ersten Wert zum Identifizieren einer Bitposition des ersten Bits, und optional eine erste Freigabesteuerung für den Vergleich bezüglich des ersten Bits. In einigen Ausführungsformen kann jedes dieser dieselben Eigenschaften und Variationen haben, wie für den Operanden 562 von 5 beschrieben ist. In anderen Ausführungsformen können eines oder beide von dem ersten Wert und/oder der ersten Freigabesteuerung optional weggelassen werden.
  • Der Operand enthält auch zumindest einen zweiten Satz 862-2 eines zweiten Prüfbitwerts für ein zweites Bit, optional einen zweiten Wert zum Identifizieren einer Bitposition des zweiten Bits und optional eine zweite Freigabesteuerung für den Vergleich bezüglich des zweiten Bits. In einigen Ausführungsformen kann jeder dieser dieselben Eigenschaften und Variationen haben, wie für den Operanden 562 von 5 beschrieben ist. In anderen Ausführungsformen können eines oder beide von dem zweiten Wert und/oder der zweiten Freigabesteuerung optional weggelassen werden.
  • In einigen Ausführungsformen kann der Operand optional auch zusätzliche solcher Sätze analog zum ersten Satz 862-1 und zweiten Satz 862-2 enthalten. Beispielsweise können acht Sätze jeweils in einem anderen entsprechenden Byte eines 64-Bit Operanden enthalten sein. Als ein anderes Beispiel können vier Sätze jeweils in einem anderen entsprechenden Byte eines 32-Bit Operanden enthalten sein. Alternativ, vorausgesetzt ein Zwischenprodukt ist imstande, eine ausreichende Zahl von Bits zu haben, kann der Operand 888 optional im Zwischenprodukt enthalten sein.
  • Vorteilhafterweise kann eine Aufnahme von zwei oder mehr solcher Sätzen 862-1, 862-2 einer Bitprüfungsanweisung erlauben, zur Durchführung von Bitprüfoperationen an zwei oder mehr verschiedenen Bits parallel und/oder innerhalb der Einschränkungen der Durchführung derselben Bitprüfungsanweisung verwendet zu werden. Jeder der Prüfbitwerte im Operanden kann einem anderen Bit in einem Quellenoperanden (z.B. einem Pointer) entsprechen. In einigen Ausführungsformen kann eine Ausführungseinheit, in Antwort auf die Bitprüfungsanweisung, betriebsbereit sein, jeden der zwei oder mehr Prüfbitwerte mit einem anderen entsprechenden der zwei oder mehr zu prüfenden Bits zu vergleichen. In einem Aspekt kann nur ein Teilsatz der Bits in diesem Quellenoperand verglichen werden, aber nicht alle davon. Zum Beispiel können nur zwei oder mehr der Metadaten-Bits 460 durch die Bitprüfungsanweisung verglichen werden, aber keines der Bits 458.
  • In einigen Ausführungsformen kann die Ausführungseinheit auch ein anderes entsprechendes Zustandscode-Bit auf Basis des entsprechenden Vergleichs aktualisieren. Zum Beispiel kann der Vergleich für ein Bit ein Null-Zustandscode-Bit aktualisieren, der Vergleich für ein anderes Bit kann ein Überlauf-Flag oder ein anderes Überlauf-Zustandscode-Bit oder dergleichen aktualisieren. In anderen Ausführungsformen kann eine kombinatorische Logik an den verschiedenen Vergleichsergebnissen durchgeführt werden und ein einzelnes Bit (oder zumindest weniger Bits als getestet wurden) kann auf Basis des Ergebnisses oder des Ausgangs der kombinatorischen Logik eingestellt werden.
  • 9 ist ein Blockablaufdiagramm einer beispielhaften Ausführungsform eines automatischen Speicherbereinigungsverfahrens 990, das eine Ausführungsform einer Bitprüfungsanweisung verwenden kann. In verschiedenen Ausführungsformen kann das Verfahren durch einen Prozessor, eine Anweisungsverarbeitungsvorrichtung, digitale Logikvorrichtung oder integrierte Schaltung durchgeführt werden. In einigen Ausführungsformen kann das Verfahren 990 durch den und/oder mit dem Prozessor 202 von 2 und/oder unter Verwendung der Bitprüfungsanweisung 206 von 2 durchgeführt werden. Die Komponenten, Merkmale und speziellen optionalen Einzelheiten, die hier für den Prozessor 202 und/oder die Anweisung 206 beschrieben sind, können optional auch für das Verfahren 990 gelten. Alternativ kann das Verfahren 990 durch und/oder innerhalb eines gleichen oder anderen Prozessors oder innerhalb einer gleichen oder anderen Vorrichtung und/oder unter Verwendung einer gleichen oder anderen Anweisung durchgeführt werden. Außerdem kann der Prozessor 202 Verfahren durchführen, die dieselben oder ähnlich oder anders in Bezug auf das Verfahren 990 sind.
  • Das Verfahren enthält in Block 991 eine Durchführung einer Markierungs-Bitprüfungsanweisung zum Aktualisieren eines Zustandscode-Bits um anzugeben, ob das Markierungs-Bit einen Keine-Ausnahmeverarbeitung-erforderlich-Wert hat. In einigen Ausführungsformen kann dies eine Durchführung des Verfahrens 350 enthalten das für 3 beschrieben ist, einschließlich der dafür angeführten Variationen und Alternativen. In einigen Ausführungsformen kann dies eine Durchführung des Verfahrens 670 enthalten das für 6 beschrieben ist, einschließlich der dafür angeführten Variationen und Alternativen.
  • In Block 992 kann eine konditionelle Steuerungsflussüberführungsanweisung empfangen werden. Beispiele für geeignete konditionelle Steuerungsflussüberführungsanweisungen enthalten, ohne aber darauf beschränkt zu sein, konditionelle Sprunganweisungen, konditionelle Abzweigungsanweisungen und dergleichen. Ein spezielles geeignetes Beispiel ist eine JNE-(z.B. Sprung, falls nicht gleich) Anweisung in gewissen Intel Architecture Prozessoren, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Zahlreiche andere konditionelle Sprunganweisungen und konditionelle Abzweigungsanweisungen sind auch geeignet.
  • In Block 993 kann in Antwort auf die konditionelle Steuerungsflussüberführungsanweisung eine Bestimmung erfolgen, ob das Zustandscode-Bit, das durch die Markierungs-Bitprüfungsanweisung aktualisiert wurde, angibt, dass das Markierungs-Bit einen Keine-Ausnahmeverarbeitung-erforderlich- (NEPN) Wert hat. Die konditionelle Steuerungsflussüberführungsanweisung kann das Zustandscode-Bit spezifizieren (z.B. explizit spezifizieren) oder auf andere Weise angeben (z.B. implizit angeben). Zum Beispiel gibt die JNE-Anweisung implizit das Null-Flag an. In einigen Ausführungsformen kann die JNE-Anweisung das Null-Flag testen und konditionell springen, falls das Null-Flag auf eine binäre Null zurückgesetzt ist (z.B. Angeben, dass das Markierungs-Bit den NEPN-Wert nicht hat), oder nicht springen, falls das Null-Flag auf eine binäre Eins gesetzt ist (z.B. angeben, dass das Markierungs-Bit den NEPN-Wert hat). Dies ist nur eine mögliche Konvention. Die entgegengesetzte Konvention ist auch möglich. Daher kann das Zustandscode-Bit, das durch die Bitprüfungsanweisung verwendet wird, geprüft werden und eine Verarbeitung kann auf Basis des Status dieses Bits fortfahren.
  • Falls das Zustandscode-Bit angibt, dass das Markierungs-Bit den NEPN-Wert nicht hat (d.h. „Nein“ ist die Bestimmung in Block 993), kann das Verfahren mit Block 994 fortfahren. In Block 994 kann die Steuerungsflussüberführung durchgeführt werden und die Steuerung kann zu einem Code überführt werden. In einigen Ausführungsformen kann die Steuerungsflussüberführung zu einem Ausnahmeverarbeitungscode eines automatischen Speicherbereinigungsalgorithmus (oder allgemeiner zum automatischen Speicherbereinigungscode) erfolgen.
  • Alternativ, falls das Zustandscode-Bit angibt, dass das Markierungs-Bit den NEPN-Wert hat (d.h. „Ja“ ist die Bestimmung in Block 993) kann das Verfahren mit Block 995 fortfahren. In Block 995 kann keine Steuerungsflussüberführung zu einem anderen Code durchgeführt werden. Der Steuerungsfluss kann nicht zum Ausnahmeverarbeitungscode eines automatischen Speicherbereinigungsalgorithmus oder zu einem anderen automatischen Speicherbereinigungscode überführt werden. Vielmehr kann eine Ausführung mit der nächstfolgenden Anweisung fortsetzen.
  • In einigen Ausführungsformen kann, um zu einer Reduzierung der Auswirkung der Durchführung einer solchen Prüfung beizutragen, ein stromabwärts liegender Code optional nicht von einem der registrierten Ergebnisse abhängig sein. Ebenso kann in einigen Ausführungsformen eine Anweisung (z.B. eine Bitprüfungsanweisung) betriebsbereit sein, einen dynamischen Abzweigungsvorhersagemechanismus für eine folgende Abzweigungsanweisung zu sperren und/oder die Abzweigung zu veranlassen, statisch für diese folgende Abzweigungsanweisung in einer bestimmten Weise vorhergesagt zu werden (z.B. vorhergesagt, genommen oder nicht genommen zu werden). Dies kann selbst dann wahr sein, wenn ein bestehender Abzweigungs-Cache-Eintrag für die Abzweigungsanweisung vorliegt (z.B. nicht auf eine statische Vorhersage beschränkt ist, wenn kein Abzweigungs-Cache-Eintrag vorhanden ist). Herkömmliche dynamische Abzweigungsvorhersageeinrichtungen erlauben typischerweise nicht, dass eine Anweisung vor einer Abzweigungsanweisung oder anderen konditionellen Steuerungsflussüberführungsanweisung den dynamischen Abzweigevorhersagemechanismus sperrt, und beruhen stattdessen auf einer statischen Vorhersage, entweder genommen oder nicht genommen, für die Abzweigung. Zum Beispiel kann eine Bitprüfungsanweisung, falls sie für eine automatische Speicherbereinigung verwendet wird, veranlassen oder erzwingen, dass die Abzweigungs- oder andere konditionelle Steuerungsflussüberführungsanweisung als statisch nicht genommen als Standard statisch in einer Weise vorhergesagt wird, die eine dynamische Abzweigungsvorhersage aufhebt. Falls die Steuerungsflussüberführung genommen wird, ist es wahrscheinlich, dass ein Unterprogramm aufgerufen werden kann, um tatsächlich die automatische Speicherbereinigungsverarbeitung durchzuführen. Falls jedoch die Bitprüfungsanweisung eine solche dynamische Abzweigungsvorhersage für die folgende Abzweigungsanweisung sperrt und immer eine Verarbeitung ohne automatische Speicherbereinigung vorhersagt, kann die Leistung dieses Pfades typischerweise beständig höher sein.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf verschiedene Weisen, für verschiedene Zwecke und in verschiedenen Prozessoren implementiert werden. Beispielsweise können Implementierungen solcher Kerne enthalten: 1) einen Allzweck-, In-Order-Kern, der zur Allzweckberechnung bestimmt ist; 2) einen Hochleistungs-, Allzweck-, Out-of-Order-Kern, der zur Allzweckberechnung bestimmt ist; 3) einen Spezialzweckkern, der vorwiegend zur Grafik- und/oder wissenschaftlichen (Durchsatz-) Berechnung bestimmt ist. Implementierungen verschiedener Prozessoren können enthalten: 1) eine CPU, die einen oder mehrere Allzweck-, In-Order-Kerne enthält, die zur Allzweckberechnung bestimmt sind, und/oder einen oder mehrere Allzweck-, Out-of-Order-Kerne, die zur Allzweckberechnung bestimmt sind; und 2) einen Coprozessor, enthaltend einen oder mehrere Spezialzweckkerne, die vorwiegend für Grafik und/oder Wissenschaft (Durchsatz) bestimmt sind. Solche verschiedenen Prozessoren führen zu verschiedenen Computersystemarchitekturen, die enthalten können: 1) den Coprozessor auf einem von der CPU getrennten Chip; 2) den Coprozessor auf einem separaten Die in demselben Package wie eine CPU; 3) den Coprozessor auf demselben Die wie eine CPU (wobei in diesem Fall ein solcher Coprozessor manchmal als Spezialzwecklogik, wie integrierte Grafik- und/oder wissenschaftliche (Durchsatz-) Logik, oder als Spezialzweckkerne bezeichnet wird); und 4) ein System auf einem Chip, das auf demselben Die die beschriebene CPU (manchmal als Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und zusätzliche Funktionalität enthalten kann. Anschließend werden beispielhafte Kernarchitekturen beschrieben, gefolgt von Beschreibungen beispielhafter Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • In-Order-und Out-of-Order-Kernblockdiagramm
  • 10A ist ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline wie auch eine beispielhafte Registerumbenennungs-, Out-of-Order-Ausgabe-/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung zeigt. 10B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns wie auch einen beispielhaften Registerumbenennungs-, Out-of-Order-Ausgabe-/Ausführungsarchitekturkern zeigt, die in einem Prozessor gemäß Ausführungsformen der Erfindung enthalten sein sollen. Die Kästchen in Volllinie in 10A-B zeigen die In-Order-Pipeline und den In-Order-Kern, während das optionale Hinzufügen von Kästchen in gestrichelten Linien die Registerumbenennungs-, Out-of-Order-Ausgabe-/Ausführungs-Pipeline und diesen Kern zeigt. Angesichts dessen, dass der In-Order-Aspekt ein Teilsatz des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 10A enthält eine Prozessor-Pipeline 1000 eine Abrufstufe 1002, eine Längendecodierstufe 1004, eine Decodierstufe 1006, eine Zuordnungsstufe 1008, eine Umbenennungsstufe 1010, eine Planungs- (auch bekannt als eine Absendungs- oder Ausgabe-) Stufe 1012, eine Registerlese-/Speicherlesestufe 1014, eine Ausführungsstufe 1016, eine Rückschreib-/Rückspeicherungsstufe 1018, eine Ausnahmenhandhabungsstufe 1022 und eine Unterbreitungsstufe 1024.
  • 10B zeigt einen Prozessorkern 1090, enthaltend eine Frontend-Einheit 1030, die an eine Ausführungsengineeinheit 1050 gekoppelt ist, und beide sind an eine Speichereinheit 1070 gekoppelt. Der Kern 1090 kann einen reduzierten Anweisungssatz berechnenden (RISC) Kern, einen komplexen Anweisungssatz berechnenden (CISC) Kern, einen Kern mit sehr langem Befehlswort (VLIW) oder einen hybriden oder alternativen Kerntyp enthalten. Als eine andere Option kann der Kern 1090 ein Spezialzweckkern sein, wie zum Beispiel, ein Netzwerk- oder Kommunikationskern, eine Kompressionsengine, ein Coprozessorkern, ein Allzweck-Rechengrafikverarbeitungseinheits- (GPGPU) Kern, Grafikkern oder dergleichen.
  • Die Frontend-Einheit 1030 enthält eine Abzweigungsvorhersageeinheit 1032, die an eine Anweisungs-Cache-Einheit 1034 gekoppelt ist, die an einen Anweisungs-Translation-Lookaside-Puffer (TLB) 1036 gekoppelt ist, der an eine Anweisungsabrufeinheit 1038 gekoppelt ist, die an eine Decodiereinheit 1040 gekoppelt ist. Die Decodiereinheit 1040 (oder der Decodierer) kann Anweisungen decodieren und als Ausgang eine oder mehrere Mikrooperationen, Mikro-Codeeingabepunkte, Mikroanweisungen, andere Anweisungen oder andere Steuersignale generieren, die aus den ursprünglichen Anweisungen decodiert werden oder diese auf andere Weise wiederspiegeln oder von diesen abgeleitet sind. Die Decodiereinheit 1040 kann unter Verwendung verschiedener Mechanismen implementiert sein. Beispiele für geeignete Mechanismen enthalten, ohne aber darauf beschränkt zu sein, Verweistabellen, Hardware-Implementierungen, programmierbare logische Arrays (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs) usw. In einer Ausführungsform enthält der Kern 1090 einen Mikrocode-ROM oder ein anderes Medium, das einen Mikrocode für gewisse Makroanweisungen (z.B. in der Decodiereinheit 1040 oder sonst in der Frontend-Einheit 1030) speichert. Die Decodiereinheit 1040 ist an eine Umbenennungs-/Zuordnungseinheit 1052 in der Ausführungsengineeinheit 1050 gekoppelt.
  • Die Ausführungsengineeinheit 1050 enthält die Umbenennungs-/Zuordnungseinheit 1052, die an eine Retirement-Einheit 1054 und einen Satz aus einer oder mehreren Planungseinheit(en) 1056 gekoppelt ist. Die Planungseinheit(en) 1056 stellt (stellen) eine Anzahl verschiedener Planer dar, enthaltend Reservierungsstationen, zentrales Anweisungsfenster usw. Die Planungseinheit(en) 1056 ist (sind) an die physische(n) Registerdateieinheit(en) 1058 gekoppelt. Jede der physischen Registerdateieinheiten 1058 stellt eine oder mehr physische Registerdateien dar, von welchen verschiedene einen oder mehrere verschiedene Datentypen speichern, wie skalare ganze Zahl, skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma, Status (z.B. einen AnweisungsPointer, der die Adresse ist, wo die nächste Anweisung ausgeführt werden soll) usw.. In einer Ausführungsform umfasst die physische Registerdateieneinheit 1058 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Allzweckregister bereitstellen. Die physische(n) Registerdateieneinheit(en) 1058 ist (sind) von der Retirement-Einheit 1054 überlappt, um verschiedenen Möglichkeiten zu zeigen, in welchen eine Registerumbenennungs- und Out-of-Order-Ausführung implementiert sein kann (z.B. unter Verwendung von Neuordnungspuffer(n) und Retirement-Registerdatei(en); unter Verwendung zukünftiger Datei(en), Verlaufspuffer und Retirement-Registerdatei(en); unter Verwendung von Registerkarten und eines Pools von Registern; usw.). Die Retirement-Einheit 1054 und die physischen Registerdateieneinheit(en) 1058 sind an den (die) Ausführungscluster 1060 gekoppelt. Der (die) Ausführungscluster 1060 enthält (enthalten) einen Satz aus einer oder mehreren Ausführungseinheiten 1062 und einen Satz aus einer oder mehreren Speicherzugriffseinheiten 1064. Die Ausführungseinheiten 1062 können verschiedene Operationen (z.B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Arten von Daten (z.B. skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma) durchführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die spezifischen Funktionen oder Sätzen von Funktionen gewidmet sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten enthalten, die alle sämtliche Funktionen durchführen. Die Planungseinheit(en) 1056, physischen Registerdateieneinheit(en) 1058 und Ausführungscluster 1060 sind in einer möglichen Mehrzahl dargestellt, da gewisse Ausführungsformen separate Pipelines für gewisse Typen von Daten/Operationen schaffen (z.B. eine skalare Ganzzahl-Pipeline, eine skalare Gleitkomma-/gepackte Ganzzahl-/gepackte Gleitkomma-/Vektorganzzahl-/Vektorgleitkomma-Pipeline und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Planungseinheit, physische Registerdateieneinheit und/oder eigenen Ausführungscluster haben - und im Fall einer separaten Speicherzugriffs-Pipeline sind gewisse Ausführungsformen implementiert, in welchen nur der Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 1064 aufweist). Es sollte auch klar sein, dass, wenn separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Ausgabe-/Ausführung sein können und der Rest In-Order.
  • Der Satz von Speicherzugriffseinheiten 1064 ist an die Speichereinheit 1070 gekoppelt, die eine Daten-TLB-Einheit 1072 enthält, die an eine Daten-Cache-Einheit 1074 gekoppelt ist, die an eine Level 2 (L2) Cache-Einheit 1076 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1064 eine Lasteinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit enthalten, von welchen jede an die Daten-TLB-Einheit 1072 in der Speichereinheit 1070 gekoppelt ist. Die Anweisungs-Cache-Einheit 1034 ist ferner an eine Level 2 (L2) Cache-Einheit 1076 in der Speichereinheit 1070 gekoppelt. Die L2-Cache-Einheit 1076 ist an einen oder mehrere andere Level von Cache und schließlich an einen Hauptspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte Registerumbenennungs-, Out-of-Order-, Ausgabe-/Ausführungskernarchitektur die Pipeline 1000 wie folgt implementieren: 1) die Anweisungsabrufung 1038 führt die Abruf- und Längendecodierungsstufen 1002 und 1004 durch; 2) die Decodiereinheit 1040 führt die Decodierstufe 1006 durch; 3) die Umbenennungs-/Zuordnungseinheit 1052 führt die Zuordnungsstufe 1008 und Umbenennungsstufe 1010 durch; 4) die Planungseinheit(en) 1056 führt (führen) die Planungsstufe 1012 durch; 5) die physische(n) Registerdateieneinheit(en) 1058 und die Speichereinheit 1070 führen die Registerlese-/Speicherlesestufe 1014 durch; der Ausführungscluster 1060 führt die Ausführungsstufe 1016 durch; 6) die Speichereinheit 1070 und die physische(n) Registerdateieneinheit(en) 1058 führen die Rückschreib-/Rückspeicherstufe 1018 durch; 7) verschiedene Einheiten können an der Ausnahmehandhabungsstufe 1022 beteiligt sein; und 8) die Retirement-Einheit 1054 und die physische(n) Registerdateieneinheit(en) 1058 führen die Unterbreitungsstufe 1024 durch.
  • Der Kern 1090 kann einen oder mehrere Anweisungssätze (z.B. den x86 Anweisungssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Anweisungssatz von MIPS Technologies of Sunnyvale, CA; den ARM-Anweisungssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings of Sunnyvale, CA), enthaltend die hier beschriebene(n) Anweisung(en), unterstützen. In einer Ausführungsform enthält der Kern 1090 Logik zum Unterstützen einer Gepackte-DatenAnweisungssatzerweiterung (z.B. AVX1, AVX2), wodurch die O
  • perationen, die von vielen Multimediaanwendungen verwendet werden, unter Verwendung gepackter Daten durchgeführt werden können.
  • Es sollte klar sein, dass der Kern Multithreading (Ausführung von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann oder dies auf zahlreiche Weisen machen kann, einschließlich zeitlich zerhackten Multithreadings, simultanen Multithreadings (wo ein einzelner physischer Kern einen logischen Kern für jeden der Threads bereitstellt, den der physische Kern einem simultanen Multithreading unterzieht), oder einer Kombination davon (z.B. zeitlich zerhacktes Abrufen und Decodieren und anschließend simultanes Multithreading, wie in der Intel® Hyperthreading Technologie).
  • Während eine Registerumbenennung im Zusammenhang mit einer Out-of-Order-Ausführung beschrieben ist, sollte klar sein, dass Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Während die dargestellte Ausführungsform des Prozessors auch separate Anweisungs- und Daten-Cache-Einheiten 1034/1074 und eine gemeinsam benutzte L2-Cache-Einheit 1076 enthält, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Anweisungen wie auch Daten haben, wie zum Beispiel einen Level 1 (L1) internen Cache oder mehrere Level von internem Cache. In einigen Ausführungsformen kann das System eine Kombination von internem Cache und externem Cache, der extern zum Kern und/oder Prozessor ist, enthalten. Alternativ kann der gesamte Cache extern zum Kern und/oder Prozessor sein.
  • Spezielle beispielhafte In-Order-Kernarchitektur
  • 11A-B zeigen ein Blockdiagramm einer speziellen beispielhaften In-Order-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (enthaltend andere Kerne desselben Typs und/oder verschiedener Typen) in einem Chip wäre. Die Logikblöcke kommunizieren durch ein Verbindungsnetzwerk hoher Bandbreite (z.B. ein Ringnetzwerk) mit einigen von fixierter Funktionslogik, Speicher-I/O-Schnittstellen und anderer notwendiger I/O-Logik, abhängig von der Anwendung.
  • 11A ist ein Blockdiagramm eines einzelnen Prozessorkerns, gemeinsam mit seiner Verbindung zum On-Die-Verbindungsnetzwerk 1102 und mit seinem örtlichen Teilsatz des Level 2 (L2) Cache 1104 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Anweisungsdecodierer 1100 den x86 Anweisungssatz mit einer gepackten Datenanweisungssatzerweiterung. Ein L1-Cache 1106 erlaubt Zugriffe geringer Latenz auf Cache-Speicher in den skalaren und Vektoreinheiten. Während in einer Ausführungsform (zur Vereinfachung des Designs) eine skalare Einheit 1108 und eine Vektoreinheit 1110 separate Registersätze (skalare Register 11112 bzw. Vektorregister 1114) verwenden und Daten, die zwischen ihnen übertragen werden, in einen Speicher geschrieben und dann von einem Level 1 (L1) Cache 1106 zurückgelesen werden, können alternative Ausführungsformen der Erfindung eine andere Methode verwenden (z.B. einen einzigen Registersatz verwenden oder einen Kommunikationspfad enthalten, der erlaubt, dass Daten zwischen den zwei Registerdateien übertragen werden, ohne geschrieben und zurückgelesen zu werden).
  • Der lokale Teilsatz des L2-Cache 1104 ist Teil eines globalen L2-Cache, der in separate lokale Teilsätze, einen pro Prozessorkern, unterteilt ist. Jeder Prozessorkern hat einen direkten Zugangspfad zu seinem eigenen lokalen Teilsatz des L2-Cache 1104. Daten, die durch einen Prozessorkern gelesen werden, werden in seinem L2-Cache Teilsatz 1104 gespeichert und auf sie kann rasch, parallel mit anderen Prozessorkernen, zugegriffen werden, die auf ihre eigenen lokalen L2-Cache Teilsätze zugreifen. Daten, die durch einen Prozessorkern geschrieben werden, werden in seinem eigenen L2-Cache Teilsatz 1104 gespeichert und, falls notwendig, aus anderen Teilsätzen entfernt. Das Ringnetzwerk stellt eine Kohärenz für gemeinsame Daten sicher. Das Ringnetzwerk ist zweiseitig gerichtet, um Agenten wie Prozessorkernen, L2-Caches und anderen Logikblöcken eine Kommunikation miteinander innerhalb des Chips zu ermöglichen. Jeder Ringdatenpfad ist pro Richtung 1012-Bits breit.
  • 11B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 11A gemäß Ausführungsformen der Erfindung. 11B enthält einen L1-Datencache 1106A, Teil des L1-Cache 1104, wie auch mehr Einzelheiten bezüglich der Vektoreinheit 1110 und der Vektorregister 1114. Im Speziellen ist die Vektoreinheit 1110 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 1128), die eine oder mehrere von Ganzzahl-, Einzel-Präzisionsgleit- und Doppel-Präzisionsgleitanweisungen durchführt. Die VPU unterstützt ein Umstellen der Registereingaben mit Umstellungseinheit 1120, numerische Umwandlung mit numerischen Umwandlungseinheiten 1122A-B und Replikation mit Replikationseinheit 1124 an der Speichereingabe. Schreibmaskenregister 1126 erlauben ein Prädizieren resultierender Vektoreinträge.
  • Prozessor mit integrierter Speichersteuerung und Grafik
  • 12 ist ein Blockdiagramm eines Prozessors 1200 gemäß Ausführungsformen der Erfindung, der mehr als einen Kern haben kann, eine integrierte Speichersteuerung haben kann und integrierte Grafik haben kann. Die Kästchen in Volllinie in 12 zeigen einen Prozessor 1200 mit einem einzigen Kern 1202A, einem Systemagenten 1210, einem Satz aus einer oder mehreren Bussteuerungseinheiten 1216, während das optionale Hinzufügen der Kästchen in gestrichelten Linien einen alternativen Prozessor 1200 mit mehreren Kernen 1202A-N, einem Satz aus einer oder mehreren integrierten Speichersteuerungseinheit(en) 1214 in der Systemagenteneinheit 1210 und Spezialzwecklogik 1208 zeigt.
  • Daher können verschiedene Implementierungen des Prozessors 1200 enthalten: 1) eine CPU mit der Spezialzwecklogik 1208, die integrierte Grafik- und/oder wissenschaftliche (Durchsatz-) Logik ist (die einen oder mehrere Kerne enthalten kann), und wobei die Kerne 1202A-N ein oder mehrere Allzweckkerne (z.B. Allzweck-, In-Order-Kerne, Allzweck-, Out-of-Order-Kerne, eine Kombination der zwei) sein können; 2) einen Coprozessor mit den Kernen 1202A-N, die eine große Anzahl von Spezialzweckkernen sind, die vorwiegend für Grafik und/oder Wissenschaft (Durchsatz) bestimmt sind; und 3) einen Coprozessor mit den Kernen 1202A-N, die eine große Anzahl von Allzweck-, In-Order-Kernen sind. Somit kann der Prozessor 1200 ein Allzweckprozessor, Coprozessor oder Spezialzweckprozessor sein, wie zum Beispiel ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, GPGPU (Allzweck-Grafikverarbeitungseinheit), ein Coprozessor mit vielfach integriertem Kern (MIC) mit hohem Durchsatz (enthaltend 30 oder mehr Kerne), ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1200 kann unter Verwendung einer aus einer Anzahl von Verfahrenstechnologien wie zum Beispiel BiCMOS, CMOS oder NMOS Teil eines oder mehrerer Substrate sein und/oder darauf implementiert sein.
  • Die Speicherhierarchie enthält einen oder mehrere Level von Cache innerhalb der Kerne, einen Satz oder eine oder mehrere gemeinsam benutzte Cache-Einheiten 1206 und einen externen Speicher (nicht dargestellt), der an den Satz integrierter Speichersteuerungseinheiten 1214 gekoppelt ist. Der Satz gemeinsam benutzter Cache-Einheiten 1206 kann einen oder mehrere Caches auf mittlerem Level, wie Level 2 (L2), Level 3 (L3), Level 4 (L4) oder einen anderen Level von Cache, einen Last Level Cache (LLC) und/oder Kombinationen davon enthalten. Während in einer Ausführungsform einer ringbasierte Verbindungseinheit 1212 die integrierte Grafiklogik 1208, den Satz gemeinsam benutzter Cache-Einheiten 1206 und die Systemagenteneinheit 1210/integrierte Speichersteuerungseinheit(en) 1214 verbindet, können alternative Ausführungsformen jede Anzahl allgemein bekannter Techniken zur Verbindung solcher Einheiten verwenden. In einer Ausführungsform wird eine Kohärenz zwischen einer oder mehreren Cache-Einheiten 1206 und Kernen 1202-A-N aufrechterhalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 1202A-N zum Multithreading imstande. Der Systemagent 1210 enthält jene Komponenten, die Kerne 1202A-N koordinieren und betreiben. Die Systemagenteneinheit 1210 kann zum Beispiel eine Leistungssteuerungseinheit (PCU) und eine Anzeigeeinheit enthalten. Die PCU kann Logik und Komponenten enthalten, die zum Regulieren des Energiezustands der Kerne 1202A-N und der integrierten Grafiklogik 1208 erforderlich sind. Die Anzeigeeinheit dient zum Antreiben einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 1202A-N können im Sinne eines Architekturanweisungssatzes homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1202A-N können imstande sein, denselben Anweisungssatz auszuführen, während andere imstande sein können, nur einen Teilsatz dieses Anweisungssatzes oder eines anderen Anweisungssatzes auszuführen.
  • Beispielhafte Computerarchitekturen
  • 13-21 sind Blockdiagramme beispielhafter Computerarchitekturen. Andere Systemdesigns und Konfigurationen, die in der Technik für Laptops, Desktops, von Hand gehaltene PCs, Personal Digital Assistants, Engineering Workstations, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Schalter, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top Boxes, Mikrosteuerungen, Mobiltelefone, tragbare Media Player, von Hand gehaltene Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenso geeignet. Im Allgemeinen ist eine große Vielfalt von Systemen oder elektronischen Vorrichtungen, die imstande sind, einen Prozessor und/oder andere Ausführungslogik zu enthalten, wie hier offenbart, im Allgemeinen geeignet.
  • Unter Bezugnahme nun auf 13 ist ein Blockdiagramm eines Systems 1300 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Das System 1300 kann einen oder mehrere Prozessoren 1310, 1315 enthalten, die an einen Steuerungs-Hub 1320 gekoppelt sind. In einer Ausführungsform enthält der Steuerungs-Hub 1320 einen Grafikspeichersteuerungs-Hub (GMCH) 1390 und einen Eingabe/Ausgabe-Hub (IOH) 1350 (die sich auf separaten Chips befinden können); der GMCH 1390 enthält Speicher- und Grafiksteuerungen, an die ein Speicher 1340 und ein Coprozessor 1345 gekoppelt sind; der IOH 1350 koppelt Eingabe/Ausgabe-, (I/O-), Vorrichtungen 1360 an den GMCH 1390. Alternativ sind eine oder beide der Speicher- und Grafiksteuerungen im Prozessor (wie hier beschrieben) integriert, der Speicher 1340 und der Coprozessor 1345 sind direkt an den Prozessor 1310 und den Steuerungs-Hub 1320 in einem einzigen Chip mit dem IOH 1350 gekoppelt.
  • Die optionale Art zusätzlicher Prozessoren 1315 ist in 13 mit gestrichelten Linien dargestellt. Jeder Prozessor 1310, 1315 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne enthalten und kann eine Version des Prozessors 1200 sein.
  • Der Speicher 1340 kann zum Beispiel ein dynamischer Direktzugriffsspeicher (DRAM), Phasenänderungsspeicher (PCM) oder eine Kombination der zwei sein. Für zumindest eine Ausführungsform kommuniziert der Steuerungs-Hub 1320 mit dem (den) Prozessor(en) 1310, 1315 über einen Multi-Drop Bus, wie einen Frontside Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle wie QuickPath Interconnect (QPI) oder eine ähnliche Verbindung 1395.
  • In einer Ausführungsform ist der Coprozessor 1345 ein Spezialzweck-Prozessor, wie zum Beispiel, ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuerungs-Hub 1320 einen integrierten Grafikbeschleuniger enthalten.
  • Es kann eine Reihe von Unterschieden zwischen den physischen Ressourcen 1310, 1315 im Sinne eines Spektrums von Gütekennzahlen geben, enthaltend architektonische, mikroarchitektonische, thermische, Leistungsverbrauchseigenschaften und dergleichen.
  • In einer Ausführungsform führt der Prozessor 1310 Anweisungen aus, die Datenverarbeitungsoperationen einer allgemeinen Art steuern. Coprozessoranweisungen können in den Anweisungen eingebettet sein. Der Prozessor 1310 erkennt diese Coprozessoranweisungen als eine Art, die vom angehängten Coprozessor 1345 ausgeführt werden sollte. Daher gibt der Prozessor 1310 diese Coprozessoranweisungen (oder Steuersignale, die Coprozessoranweisungen darstellen) auf einem Coprozessorbus oder eine andere Verbindung zum Coprozessor 1345 aus. Der (die) Coprozessor(en) 1345 nehmen die Coprozessoranweisungen an und führen die empfangenen aus.
  • Unter Bezugnahme nun auf 14, ist ein Blockdiagramm eines ersten spezifischeren beispielhaften Systems 1400 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Wie in 14 dargestellt, ist ein Multiprozessorsystem 1400 ein Punkt-zu-Punkt-Verbindungssystem und enthält einen ersten Prozessor 1470 und einen zweiten Prozessor 1480, die über eine Punkt-zu-Punkt-Verbindung 1450 gekoppelt sind. Jeder der Prozessoren 1470 und 1480 kann eine gewisse Version des Prozessors 1200 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 1470 und 1480 Prozessoren 1310 bzw. 1315, während Coprozessor 1438 Coprozessor 1345 ist. In einer anderen Ausführungsform sind Prozessoren 1470 und 1480 Prozessor 1310 bzw. Coprozessor 1345.
  • Prozessoren 1470 und 1480 sind mit integrierten Speichersteuerungs-, (IMC-), Einheiten 1472 bzw. 1482 dargestellt. Prozessor 1470 enthält auch als Teil seiner Bussteuerungseinheiten Punkt-zu-Punkt- (P-P) Schnittstellen 1476 und 1478; ebenso enthält der zweite Prozessor 1480 P-P Schnittstellen 1486 und 1488. Prozessoren 1470, 1480 können Informationen über eine Punkt-zu-Punkt- (P-P) Schnittstelle 1450 unter Verwendung von P-P-Schnittstellenschaltungen 1478, 1488 austauschen. Wie in 14 dargestellt, koppeln IMCs 1472 und 1482 die Prozessoren an entsprechende Speicher, nämlich einen Speicher 1432 und einen Speicher 1434, die Abschnitte vom Hauptspeicher sein können, die lokal an den entsprechenden Prozessoren angehängt sind.
  • Prozessoren 1470, 1480 können jeweils Informationen mit einem Chipset 1490 über einzelne P-P-Schnittstellen 1452, 1454 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1476, 1494, 1486, 1498 austauschen. Der Chipset 1490 kann optional Informationen mit dem Coprozessor 1438 über eine Hochleistungsschnittstelle 1439 austauschen. In einer Ausführungsform ist der Coprozessor 1438 ein Spezialzweckprozessor, wie zum Beispiel, ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam benutzter Cache (nicht dargestellt) kann entweder im Prozessor oder außerhalb beider Prozessoren enthalten, aber dennoch mit den Prozessoren über eine P-P-Zwischenverbindung verbunden sein, sodass Informationen eines lokalen Cache einer oder beider Prozessoren im gemeinsam benutzten Cache gespeichert werden können, falls ein Prozessor in einen leistungsarmen Modus gestellt wird.
  • Der Chipset 1490 kann über eine Schnittstelle 1496 an einen ersten Bus 1416 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1416 ein Peripheral Component Interconnect (PCI) Bus oder ein Bus wie ein PCI Express Bus oder ein anderer I/O-Verbindungsbus der dritten Generation sein, obwohl der Umfang der vorliegenden Erfindung nicht derart beschränkt ist.
  • Wie in 14 dargestellt, können verschiedene I/O-Vorrichtungen 1414 an den ersten Bus 1416, gemeinsam mit einer Busbrücke 1418 gekoppelt sein, die den ersten Bus 1416 an einen zweiten Bus 1420 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 1415, wie Co-Prozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie z.B. Grafikbeschleuniger oder Digitalsignalverarbeitungs-, (DSP-), Einheiten), feldprogrammierbare Gate Arrays oder ein anderer Prozessor an den ersten Bus 1416 gekoppelt. In einer Ausführungsform kann der zweite Bus 1420 ein Bus mit geringer Pinzahl (LPC) sein. Verschiedene Vorrichtungen können an einen zweiten Bus 1420 gekoppelt sein, enthaltend zum Beispiel eine Tastatur und/oder Maus 1422, Kommunikationsvorrichtungen 1427 und eine Speichereinheit 1428 wie ein Festplattenlaufwerk oder eine andere Massenspeichervorrichtung, die in einer Ausführungsform Anweisungen/Code und Daten 1430 enthalten kann. Ferner kann ein Audio-I/O 1424 an den zweiten Bus 1420 gekoppelt sein. Es ist zu beachten, dass andere Architekturen möglich sind. Zum Beispiel kann anstelle der Punkt-zu-Punkt-Architektur von 14 ein System einen Multi-Drop Bus oder eine andere solche Architektur implementieren.
  • Unter Bezugnahme nun auf 15 ist ein Blockdiagramm eines zweiten spezifischeren beispielhaften Systems 1500 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Gleiche Elemente in 14 und 15 tragen gleiche Bezugszeichen und gewisse Aspekte von 14 wurden in 15 weggelassen, um eine Verschleierung anderer Aspekte von 15 zu vermeiden.
  • 15 zeigt, dass die Prozessoren 1470, 1480 einen integrierten Speicher und I/O-Steuerlogik („CL“) 1472 bzw. 1482 enthalten können. Somit enthalten die CL 1472, 1482 integrierte Speichersteuerungseinheiten und enthalten I/O-Steuerlogik. 15 zeigt. dass nicht nur die Speicher 1432, 1434 an die CL 1472, 1482 gekoppelt sind, sondern dass auch I/O-Vorrichtungen 1514 an die Steuerlogik 1472, 1482 gekoppelt sind. Legacy I/O-Vorrichtungen 1515 sind an den Chipset 1490 gekoppelt.
  • Unter Bezugnahme nun auf 16 ist ein Blockdiagramm eines SoC 1600 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Ähnliche Elemente in 12 tragen gleiche Bezugszeichen. Ebenso sind Kästchen mit gestrichelten Linien optionale Merkmale an höher entwickelten SoCs. In 16 ist (sind) Verbindungseinheit(en) 1602 gekoppelt an: einen Anwendungsprozessor 1610, der einen Satz aus einem oder mehreren Kernen 152A-N und gemeinsam benutzte Cache-Einheit(en) 1206; eine Systemagenteneinheit 1210; (eine) Bussteuerungseinheit(en) 1216; (eine) integrierte Speichersteuerungseinheit(en) 1214; einen Satz oder einen oder mehrere Co-Prozessoren 1620, die integrierte Grafiklogik enthalten können, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor; eine statische Direktzugriffsspeicher-, (SRAM-), Einheit 1630; eine Direktspeicherzugriffs-, (DMA-), Einheit 1632; und eine Anzeigeeinheit 1640 zum Koppeln an eine oder mehre externe Anzeigen enthält. In einer Ausführungsform enthalten der (die) Coprozessor(en) 1620 einen Spezialzweckprozessor, wie zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen.
  • Hier offenbarte Ausführungsformen der Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsmethoden implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert sein, die auf programmierbaren Systemen laufen, umfassend zumindest einen Prozessor, ein Speichersystem (enthaltend flüchtige und nicht flüchtige Speicher- und/oder Datenspeicherelemente), zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung.
  • Ein Programmcode, wie Code 1430, dargestellt in 14, kann an Eingabeanweisungen angewendet werden, um die hier beschriebenen Funktionen auszuführen und Ausgabeinformationen zu generieren. Die Ausgabeinformationen können an einer oder mehr Ausgabevorrichtungen in bekannter Weise angewendet werden. Für den Zweck dieser Anwendung enthält ein Verarbeitungssystem jedes System, das einen Prozessor, wie zum Beispiel; einen Digitalsignalprozessor (DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor hat.
  • Der Programmcode kann in einer hochwertigen prozeduralen oder objektorientierten Programmierungssprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch, falls gewünscht, in Assembly- oder Maschinensprache implementiert sein. Tatsächlich sind die hier beschriebenen Mechanismen im Umfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte zumindest einer Ausführungsform können durch repräsentative Anweisungen implementiert sein, die auf einem maschinenlesbaren Medium, das unterschiedliche Logik darstellt, im Prozessor gespeichert sind, die, wenn sie durch eine Maschine gelesen werden, die Maschine veranlassen, eine Logik zu bilden, um die hier beschriebenen Techniken durchzuführen. Solche Darstellungen, bekannt als „IP-Kerne“, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und verschiedenen Kunden oder Herstellungseinrichtungen zugeführt werden, um in die Herstellungsmaschinen geladen zu werden, die eigentlich die Logik oder den Prozessor bilden.
  • Solche maschinenlesbare Speichermedien können, ohne Einschränkung, nicht transitorische, greifbare Anordnungen von Artikeln enthalten, die durch eine Maschine oder Vorrichtung hergestellt oder gebildet werden, die Speichermedien wie Festplatten, jede andere Art von Platten, enthaltend Disketten, optische Platten, Compact Disk Nur-Lese-Speicher (CD-ROMs), Compact Disk Rewritables (CD-RWs) und magneto-optische Platten, Halbleitervorrichtungen wie Nur-Lese-Speicher (ROMs), Direktzugriffsspeicher (RAMs) wie dynamische Direktzugriffsspeicher (DRAMs), statische Direktzugriffsspeicher (SRAMs), löschbare programmierbare Nur-Lese-Speicher (EPROMs), Flash-Speicher, elektrisch löschbare programmierbare Nur-Lese-Speicher (EEPROMs), Phasenänderungsspeicher (PCM), magnetische oder optische Karten, oder jede andere Art von Medien, die zum Speichern elektronischer Anweisungen geeignet ist, enthält.
  • Daher enthalten Ausführungsformen der Erfindung auch nicht transitorische, greifbare, maschinenlesbare Medien, die Anweisungen enthalten oder Designdaten enthalten, wie Hardware Description Language (HDL), die hier beschriebene Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (enthaltend binäre Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Anweisungswandler verwendet werden, um eine Anweisung aus einem Quellenanweisungssatz zu einem Zielanweisungssatz umzuwandeln. Zum Beispiel kann der Anweisungswandler eine Anweisung (z.B. unter Verwendung einer statischen binären Übersetzung, dynamischen binären Übersetzung, enthaltend dynamische Kompilierung) übersetzen, morphen, emulieren oder auf andere Weise eine Anweisung zu einer oder mehreren anderen Anweisungen umwandeln, die durch den Kern zu verarbeiten sind. Der Anweisungswandler kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. Der Anweisungswandler kann ein On-Prozessor, Off-Prozessor oder teilweise On- und teilweise Off-Prozessor sein.
  • 17 ist ein Blockdiagramm, das die Verwendung eines Software-Anweisungswandlers zum Umwandeln binärer Anweisungen in einem Quellenanweisungssatz zu binären Anweisungen in einem Zielanweisungssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der dargestellten Ausführungsform ist der Anweisungswandler ein Software-Anweisungswandler, obwohl alternativ der Anweisungswandler in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert sein kann. 17 zeigt, dass ein Programm in einer hochwertigen Sprache 1702 unter Verwendung eines x86 Kompilierers 1704 kompiliert werden kann, um einen x86 binären Code 1706 zu generieren, der nativ durch einen Prozessor mit zumindest einem x86 Anweisungssatzkern 1716 ausgeführt werden kann. Der Prozessor mit zumindest einem x86 Anweisungssatzkern 1716 stellt jeden Prozessor dar, der im Wesentlichen dieselben Funktionen wie ein Intel Prozessor mit zumindest einem x86 Anweisungssatzkern durchführen kann, durch kompatibles Ausführen oder aber Verarbeiten (1) eines wesentlichen Teils des Anweisungssatzes des Intel x86 Anweisungssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder anderer Software, die auf einem Intel Prozessor mit zumindest einem x86 Anweisungssatzkern laufen soll, um im Wesentlichen dasselbe Ergebnis wie ein Intel Prozessor mit zumindest einem x86 Anweisungssatzkern zu erreichen. Der x86 Kompilierer 1704 stellt einen Kompilierer dar, der betreibbar ist, um einen x86 binären Code 1706 (z.B. Objektcode) zu generieren, der mit oder ohne zusätzlicher Verbindungsverarbeitung, auf dem Prozessor mit zumindest einem x86 Anweisungssatzkern 1716 ausgeführt werden kann. 17 zeigt ähnlich, dass ein Programm in der hochwertigen Sprache 1702 unter Verwendung eines alternativen Anweisungssatzkompilierers 1708 kompiliert werden kann, um einen alternativen binären Anweisungssatzcode 1710 zu generieren, der nativ durch einen Prozessor ohne zumindest einen x86 Anweisungssatzkern 1714 (z.B. einen Prozessor mit Kernen, die den MIPS-Anweisungssatz von MIPS Technologies of Sunnyvale, CA, ausführen und/oder die den ARM-Anweisungssatz von ARM Holdings of Sunnyvale, CA, ausführen) ausgeführt werden kann. Der Anweisungswandler 1712 wird zum Umwandeln des x86 binären Codes 1706 in einen Code verwendet, der nativ durch den Prozessor ohne x86 Anweisungssatzkern 1714 ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht derselbe wie der alternative binäre Anweisungssatzcode 1710, da ein Anweisungswandler, der dazu imstande ist, schwierig herzustellen ist; der umgewandelte Code erfüllt jedoch die allgemeine Operation und kann aus Anweisungen aus dem alternativen Anweisungssatz bestehen. Somit stellt der Anweisungswandler 1712 Software, Firmware, Hardware oder eine Kombination davon dar, die durch Emulation, Simulation oder einen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86 Anweisungssatzprozessor oder -kern hat, ermöglicht, den x86 binären Code 1706 auszuführen.
  • Komponenten, Merkmale und Einzelheiten, die für eine der hier offenbarten Prozessoren beschrieben sind, gelten optional für jedes der anderen hier offenbarten Verfahren, die in Ausführungsformen optional durch und/oder mit solchen Prozessoren durchgeführt werden können. Jeder der hier in Ausführungsformen beschriebenen Prozessoren kann optional in einem der hier offenbarten Systeme enthalten sein. Jede der hier in Ausführungsformen offenbarten Anweisungen kann optional durch und/oder mit einem der hier offenbarten Prozessoren durchgeführt werden, optional in einigen Ausführungsformen einer der hier gezeigten Mikroarchitekturen, und optional in einigen Ausführungsformen, die in einem der hier gezeigten Systeme enthalten sind. Daher können Merkmale und Einzelheiten, die für eine der hier offenbarten Anweisungen beschrieben sind, somit in einigen Ausführungsformen optional für einen der hier offenbarten Prozessoren und/oder eines der hier offenbarten Systeme gelten, die zum Durchführen dieser Anweisungen verwendet werden können .
  • Von hier offenbarten Prozessorkomponenten kann behauptet werden, dass sie betriebsbereit, konfiguriert, imstande oder fähig sind, eine Operation durchzuführen. Zum Beispiel kann ein Decodierer eine Anweisung decodieren, eine Ausführungseinheit kann zum Speichern eines Ergebnisses dienen usw. Der Deutlichkeit wegen ist klar, dass diese Ausdrücke nicht bedeuten, dass die Prozessorkomponenten in Betrieb oder Verwendung sind, sondern sich vielmehr darauf beziehen, was die Prozessorkomponenten imstande sind zu machen oder fähig sind zu machen, wenn sie in Betrieb sind, aber in den Vorrichtungsansprüchen sind diese Prozessorkomponenten nicht in Betrieb.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und/oder „verbunden“ gemeinsam mit ihren Ableitungen verwendet werden. Diese Begriffe sind nicht als Synonyme füreinander zu verstehen. Vielmehr kann in Ausführungsformen „verbunden“ zur Angabe verwendet werden, dass zwei oder mehr Elemente in direktem physischen und/oder elektrischen Kontakt miteinander sind. „Gekoppelt“ kann bedeuten, dass zwei oder mehr Elemente in direktem physischen und/oder elektrischen Kontakt miteinander sind. „Gekoppelt“ kann jedoch auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander sind, aber dennoch zusammenarbeiten oder miteinander interagieren. Zum Beispiel kann eine Ausführungseinheit mit einem Register und/oder einer Decodiereinheit durch eine oder mehrere dazwischenliegende Komponenten gekoppelt sein. In den Figuren werden Pfeile verwendet, um Verbindungen und Kopplungen anzuzeigen.
  • Die hier offenbarten Komponenten und die in den vorangehenden Figuren gezeigten Verfahren können mit Logik, Modulen oder Einheiten implementiert sein, die Hardware (z.B. Transistoren, Gates, Schaltkreis usw.), Firmware (z.B. einen nicht flüchtigen Speicher, der Mikrocode oder Steuersignale speichert), Software (z.B. auf einem nicht transitorischen, computerlesbaren Speichermedium gespeichert) oder eine Kombination davon implementiert sein. In einigen Ausführungsformen können die Logik, Module oder Einheiten zumindest einige oder vorwiegend eine Mischung aus Hardware und/oder Firmware, möglicherweise kombiniert mit einer optionalen Software, enthalten.
  • Der Begriff „und/oder“ kann verwendet werden. Wie hier verwendet, bezeichnet der Begriff „und/oder“ das eine oder das andere oder beide (z.B. bedeutet A und/oder B A oder B oder sowohl A wie auch B).
  • In der obenstehenden Beschreibung wurden spezifische Einzelheiten angeführt, um ein umfassendes Verständnis der Ausführungsformen zu ermöglichen. Es können jedoch andere Ausführungsformen ohne einige dieser spezifischen Einzelheiten in die Praxis umgesetzt werden. Der Umfang der Erfindung ist nicht durch die oben bereitgestellten spezifischen Beispiele, sondern nur durch die folgenden Ansprüche zu bestimmen. In anderen Fällen sind allgemein bekannte Schaltungen, Strukturen, Vorrichtungen und Operationen in Form eines Blockdiagramms und/oder ohne Einzelheiten dargestellt, um ein Verständnis der Beschreibung nicht zu erschweren. Wenn es als angemessen angesehen wird, werden Bezugszeichen oder Endungen von Bezugszeichen in den Figuren wiederholt, um entsprechende oder analoge Elemente anzugeben, die optional die gleichen oder dieselben Eigenschaften haben können, falls nicht anderes spezifiziert oder offensichtlich ist.
  • Gewisse Operationen können durch Hardware-Komponenten durchgeführt werden oder können in maschinenausführbaren oder schaltungsausführbaren Anweisungen verkörpert sein, die verwendet werden können, um zu bewirken und/oder darin zu resultieren, dass eine Maschine, Schaltung oder Hardwarekomponente (z.B. ein Prozessor, ein Teil eines Prozessors, eine Schaltung usw.), die mit den Anweisungen programmiert ist, die Operationen durchführt. Die Operationen können auch optional durch eine Kombination aus Hardware und Software durchgeführt werden. Ein Prozessor, eine Maschine, Schaltung oder Hardware kann einen spezifischen oder besonderen Schaltkreis oder eine andere Logik (z.B. Hardware, möglicherweise kombiniert mit Firmware und/oder Software) enthalten, die betriebsbereit ist, die Anweisung auszuführen und/oder zu verarbeiten und ein Ergebnis in Antwort auf die Anweisung zu speichern.
  • Einige Ausführungsformen enthalten einen Herstellungsartikel (z.B. ein Computerprogrammprodukt), der ein maschinenlesbares Medium enthält. Das Medium kann einen Mechanismus enthalten, der Informationen in einer Form bereitstellt, zum Beispiel speichert, die für die Maschine lesbar ist. Das maschinenlesbare Medium kann eine Anweisung oder Abfolge von Anweisungen bereitstellen oder gespeichert haben, die, falls und/oder wenn durch eine Maschine ausgeführt, betriebsbereit sind, die Maschine zu veranlassen, eine(s) der Operationen, Verfahren oder Techniken, wie hier offenbart, auszuführen und/oder dazu führen, dass die Maschine diese ausführt.
  • In einigen Ausführungsformen kann das maschinenlesbare Medium ein greifbares und/oder nicht transitorisches maschinenlesbares Speichermedium enthalten. Zum Beispiel kann das nicht transitorische maschinenlesbare Speichermedium eine Diskette, ein optisches Speichermedium, eine optische Plate, eine optische Datenspeichervorrichtung, eine CD-ROM, eine Magnetplatte, eine magneto-optische Platte einen Nur-Lese-Speicher (ROM), einen programmierbaren ROM (PROM), einen löschbaren und programmierbaren ROM (EPROM), einen elektrisch löschbaren und programmierbaren ROM (EEPROM), einen Direktzugriffsspeicher (RAM), einen statischen RAM (SRAM), einen dynamischen RAM (DRAM), einen Flash Speicher, einen Phasenänderungsspeicher, ein Phasenänderungsdatenspeichermaterial, einen nicht flüchtigen Speicher, eine nicht flüchtige Datenspeichervorrichtung, einen nicht transitorischen Speicher, eine nicht transitorische Datenspeichervorrichtung oder dergleichen enthalten. Das nicht transitorische maschinenlesbare Speichermedium besteht nicht aus einem transitorischen ausgestrahlten Signal. In einigen Ausführungsformen kann das Speichermedium ein greifbares Medium enthalten, das einen Festkörper oder ein festes Material, wie zum Beispiel ein Halbleitermaterial, ein Phasenänderungsmaterial, ein festes magnetisches Material, ein festes Datenspeichermaterial usw. enthält. Alternativ kann optional ein nicht greifbares, transitorisches, computerlesbares Übertragungsmedium wie zum Beispiel ein elektrisches, optisches, akustisches oder eine andere Form von ausgestrahltem Signal - wie Trägerwellen, Infrarotsignale und digitale Signale, verwendet werden.
  • Beispiele für geeignete Maschinen enthalten, ohne aber darauf beschränkt zu sein, einen Allzweck- Prozessor, einen Spezialzweck-Prozessor, eine digitale Logikschaltung, eine integrierte Schaltung oder dergleichen. Weitere Beispiele für geeignete Maschinen enthalten ein Computersystem oder eine andere elektronische Vorrichtung, die einen Prozessor, eine digitale Logikschaltung oder eine integrierte Schaltung enthält. Beispiele für solche Computersysteme oder elektronische Vorrichtungen enthalten, ohne aber darauf beschränkt zu sein, Desktop-Computer, Laptop-Computer, Notebook-Computer, Tablet-Computer, Netbooks, Smartphones, Mobiltelefone, Server, Netzwerkvorrichtungen (z.B. Router und Schalter), mobile Internet-Vorrichtungen (MIDs), Media Player, smarte Fernsehgeräte, Nettops, Set-Top Boxes und Videospielsteuerungen.
  • Eine Bezugnahme in dieser Spezifizierung auf „eine (1) Ausführungsform“, „eine Ausführungsform“, „eine oder mehrere Ausführungsformen“, „einige Ausführungsformen“ gibt zum Beispiel an, dass ein besonderes Merkmal in der Ausführung der Erfindung enthalten sein kann, aber nicht unbedingt erforderlich ist. Ebenso sind in der Beschreibung verschiedene Merkmale manchmal in einer einzigen Ausführungsform, Figur oder Beschreibung für den Zweck einer Straffung der Offenbarung und für ein besseres Verständnis verschiedener erfindungsgemäßer Aspekte zusammen gruppiert. Dieses Offenbarungsverfahren ist jedoch nicht als eine Wiederspiegelung einer Absicht zu verstehen, dass die Erfindung mehr Merkmale als die ausdrücklich in jedem Anspruch angeführten benötigt. Vielmehr, wie die folgenden Ansprüche zeigen, liegen erfindungsgemäße Aspekte in weniger als allen Merkmalen einer einzigen offenbarten Ausführungsform. Daher sind die Ansprüche, die der ausführlichen Beschreibung folgen, hiermit ausdrücklich in diese ausführliche Beschreibung aufgenommen, wobei jeder Anspruch für sich als eine separate Ausführungsform der Erfindung steht.
  • BEISPIELHAFTE AUSFÜHRUNGSFORMEN
  • Die folgenden Beispiele beziehen sich auf weitere Ausführungsformen. Einzelheiten in den Beispielen können anderswo in einer oder mehreren Ausführungsformen verwendet werden.
  • Beispiel 1 ist ein Prozessor, der ein Register zum Speichern eines Zustandscode-Bits, eine Decodiereinheit zum Decodieren einer Bitprüfungsanweisung, wobei die Bitprüfungsanweisung einen ersten Quellenoperanden angeben soll, der ein erstes Bit enthalten soll, und zum Angeben eines Prüfbitwerts für das erste Bit, und eine Ausführungseinheit, die mit der Decodiereinheit gekoppelt ist, enthält, wobei die Ausführungseinheit, in Antwort auf die Bitprüfungsanweisung, das erste Bit mit dem Prüfbitwert vergleichen soll und das Zustandscode-Bit aktualisieren soll, um anzugeben, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist.
  • Beispiel 2 enthält den Prozessor von Beispiel 1, in dem die Decodiereinheit optional die Bitprüfungsanweisung decodieren soll, die einen Wert angeben soll, um eine Bitposition für das erste Bit als eine aus einer Vielzahl von verschiedenen Bitpositionen zu identifizieren.
  • Beispiel 3 enthält den Prozessor von Beispiel 1, in dem die Decodiereinheit optional die Bitprüfungsanweisung decodieren soll, die eine implizit angegebene, aber nicht explizit spezifizierte, festgesetzte Bitposition für das erste Bit haben soll.
  • Beispiel 4 enthält den Prozessor von Beispiel 1, in dem das Zustandscode-Bit optional ein Null-Zustandscode-Bit ist und in dem optional die Ausführungseinheit, in Antwort auf die Anweisung, das Null-Zustandscode-Bit setzen soll, falls das erste Bit gleich dem Prüfbitwert ist.
  • Beispiel 5 enthält den Prozessor von Beispiel 1, in dem die Decodiereinheit optional die Bitprüfungsanweisung decodieren soll, die eine Sperrsteuerung angeben soll, und in dem optional die Ausführungseinheit, in Antwort auf die Anweisung, wenn die Sperrsteuerung aktiv ist, das Zustandscode-Bit in einer selben Weise aktivieren soll, unabhängig davon, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist.
  • Beispiel 6 enthält den Prozessor von Beispiel 5, in dem das Zustandscode-Bit optional ein Null-Zustandscode-Bit ist und in dem optional die Ausführungseinheit, in Antwort auf die Anweisung, wenn die Sperrsteuerung aktiv ist, das Null-Zustandscode-Bit setzen soll, unabhängig davon, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist.
  • Beispiel 7 enthält den Prozessor von einem der Beispiele 1 bis 6, in dem die Decodiereinheit optional die Bitprüfungsanweisung decodieren soll, die den ersten Quellenoperanden angeben soll, der ein Speicherpointer sein soll.
  • Beispiel 8 enthält den Prozessor von Beispiel 7, in dem optional das erste Bit ein Metadaten-Bit des Speicherpointers sein soll, das sich in einem oder mehreren höchstwertigen Bits des Speicherpointers befinden soll und das nicht während einer Adressenübersetzung zum Zweck einer Identifizierung einer physischen Speicherstelle verwendet werden soll.
  • Beispiel 9 enthält den Prozessor von Beispiel 8, in dem optional das erste Bit ein Markierungs-Bit für eine automatische Speicherbereinigung sein soll.
  • Beispiel 10 enthält den Prozessor von einem der Beispiele 1 bis 6, in dem die Decodiereinheit optional die Bitprüfungsanweisung decodieren soll, die fähig ist, den Prüfbitwert entweder als eine binäre Eins oder binäre Null anzugeben.
  • Beispiel 11 enthält den Prozessor von einem der Beispiele 1 bis 6, in dem die Decodiereinheit optional die Bitprüfungsanweisung decodieren soll, die einen zweiten Quellenoperanden angeben soll, der eine Vielzahl von Prüfbitwerten enthalten soll, die jeweils einem anderen einer Vielzahl von Bits entsprechen sollen, die nur einen Teilsatz aller Bits des ersten Quellenoperanden darstellen sollen.
  • Beispiel 12 enthält den Prozessor von Beispiel 11, in dem die Ausführungseinheit optional, in Antwort auf die Anweisung, jeden der Prüfbitwerte mit dem entsprechenden der Vielzahl von Bits des ersten Quellenoperanden vergleichen soll und ein anderes entsprechendes Zustandscode-Bit für jedes der Vielzahl von Bits des ersten Quellenoperanden aktualisieren soll, um anzugeben, ob jedes der Vielzahl von Bits des ersten Quellenoperanden gleich oder nicht gleich dem entsprechenden Prüfbitwert ist.
  • Beispiel 13 enthält den Prozessor von einem der Beispiele 1 bis 6, in dem die Decodiereinheit optional die Bitprüfungsanweisung decodieren soll, die einen zweiten Quellenoperanden angeben soll, der den Prüfbitwert enthalten soll.
  • Beispiel 14 enthält den Prozessor von einem der Beispiele 1 bis 6, in dem die Ausführungseinheit optional ein XODER-Gate enthält, das erste Bit mit dem Prüfbitwert vergleichen soll.
  • Beispiel 15 ist ein Verfahren, das durch einen Prozessor durchgeführt wird, enthaltend ein Empfangen einer Bitprüfungsanweisung beim Prozessor, wobei die Bitprüfungsanweisung einen ersten Quellenoperanden angibt, der ein erstes Bit enthält, und einen Prüfbitwert für das erste Bit angibt, Vergleichen des ersten Bits mit dem Prüfbitwert in Antwort auf die Bitprüfungsanweisung, und Aktualisieren eines Zustandscode-Bits, um anzugeben, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist, in Antwort auf die Bitprüfungsanweisung.
  • Beispiel 16 enthält das Verfahren von Beispiel 15, in dem optional das Empfangen ein Empfangen der Bitprüfungsanweisung enthält, die einen Wert angibt, der eine Bitposition für das erste Bit als eine aus einer Vielzahl von verschiedenen möglichen Bitpositionen identifiziert.
  • Beispiel 17 enthält das Verfahren von Beispiel 15, in dem optional das Empfangen ein Empfangen der Bitprüfungsanweisung enthält, die eine Sperrsteuerung angibt, die konfiguriert werden kann, den Zustandscode-Bit zu veranlassen, in einer selben Weise aktualisiert zu werden, unabhängig davon, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist.
  • Beispiel 18 enthält das Verfahren von Beispiel 15, in dem optional das Empfangen ein Empfangen der Bitprüfungsanweisung enthält, die den ersten Quellenoperanden angibt, der ein Speicherpointer sein soll.
  • Beispiel 19 enthält das Verfahren von Beispiel 18, in dem optional das erste Bit ein Metadaten-Bit des Speicherpointers ist, das während einer Adressenübersetzung zum Identifizieren einer physischen Speicherstelle nicht verwendet wird.
  • Beispiel 20 enthält das Verfahren von Beispiel 19, in dem optional das erste Bit ein Markierungs-Bit ist, das in einer automatischen Speicherbereinigung verwendet wird.
  • Beispiel 21 enthält das Verfahren von Beispiel 15, ferner enthaltend eine Durchführung einer Steuerungsflussüberführungsanweisung, um eine Steuerungsflussüberführung zu einem automatischen Speicherbereiniger vorzunehmen, falls das Zustandscode-Bit indiziert, dass das erste Bit nicht gleich dem Prüfbitwert ist.
  • Beispiel 22 ist ein System zum Verarbeiten von Anweisungen, enthaltend eine Zwischenverbindung, einen Prozessor, der mit der Zwischenverbindung gekoppelt ist, wobei der Prozessor eine Bitprüfungsanweisung empfängt, die einen ersten Quellenoperand anzeigen soll, der ein erstes Bit enthalten soll, und einen Prüfbitwert für das erste Bit angeben soll, wobei der Prozessor, in Antwort auf die Bitprüfungsanweisung, das erste Bit mit dem Prüfbitwert vergleichen soll und ein Zustandscode-Bit aktualisieren soll um anzugeben, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist, und einen dynamischen Direktzugriffsspeicher (DRAM), der mit der Zwischenverbindung gekoppelt ist.
  • Beispiel 23 enthält das System von Beispiel 22, in dem optional die Bitprüfungsanweisung einen Wert angeben soll, um eine Bitposition für das erste Bit als eine aus einer Vielzahl von verschiedenen Bitpositionen zu identifizieren.
  • Beispiel 24 ist ein Herstellungsartikel, enthaltend ein nicht transitorisches maschinenlesbaren Datenspeichermedium. Das nicht transitorische maschinenlesbare Datenspeichermedium speichert eine Vielzahl von Anweisungen, die eine Bitprüfungsanweisung enthalten, wobei die Bitprüfungsanweisung, falls durch eine Maschine ausgeführt, die Maschine veranlassen soll, Operationen durchzuführen, enthaltend ein Zugreifen auf einen ersten Quellenoperanden, der durch die Bitprüfungsanweisung angezeigt werden soll, wobei der erste Quellenoperand ein erstes Bit enthalten soll, Zugreifen auf ein Prüfbitwert für das erste Bit, das durch die Bitprüfungsanweisung angezeigt werden soll, Vergleichen des ersten Bits mit dem Prüfbitwert in Antwort auf die Bitprüfungsanweisung, und Aktualisieren eines Zustandscode-Bits um anzugeben, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist, in Antwort auf die Bitprüfungsanweisung.
  • Beispiel 25 enthält den Herstellungsartikel von Beispiel 24, in dem optional das erste Bit ein Markierungs-Bit ist, das in einer automatischen Speicherbereinigung verwendet wird.
  • Beispiel 26 enthält den Prozessor von einem der Beispiele 1 bis 14, ferner enthaltend eine optionale Abzweigungsvorhersageeinheit zum Vorhersagen von Abzweigungen, und eine optionale Anweisungsvorabrufeinheit, die mit der Abzweigungsvorhersageeinheit gekoppelt ist, wobei die Anweisungsvorabrufeinheit Anweisungen, die die Anweisung enthalten, vorab abrufen sollen. Der Prozessor kann auch optional einen optionalen Level 1 (L1) Anweisungs-Cache, der mit der Anweisungsvorabrufeinheit gekoppelt ist, wobei der L1 Anweisungs-Cache Anweisungen speichern soll, einen optionalen L1 Daten-Cache zum Speichern von Daten und einen optionalen Level 2 (L2) Cache zum Speichern von Daten und Anweisungen enthalten. Der Prozessor kann auch optional eine Anweisungsabrufeinheit, die mit der Decodiereinheit, dem L1 Anweisungs-Cache und dem L2 Cache gekoppelt ist, um die Anweisung, in einigen Fällen aus dem L1 Anweisungs-Cache und dem L2 Cache abzurufen und die Anweisung der Decodiereinheit bereitzustellen. Der Prozessor kann optional auch eine Registerumbenennungseinheit zum Umbenennen von Registern, einen optionalen Planer zum Planen einer oder mehrerer Operationen, die aus der Anweisung zur Ausführung decodiert wurden, und eine optionale Unterbreitungseinheit zur Unterbreitung von Ausführungsergebnissen der Anweisung enthalten.
  • Beispiel 27 enthält ein System-on-Chip, das zumindest eine Zwischenverbindung, den Prozessor von einem der Beispiele 1 bis 14, gekoppelt mit der zumindest einen Zwischenverbindung, eine optionale Grafikverarbeitungseinheit (GPU), gekoppelt mit der zumindest einen Zwischenverbindung, einen optionalen Digitalsignalprozessor (DSP), gekoppelt mit der zumindest einen Zwischenverbindung, eine optionale Anzeigesteuerung, gekoppelt mit der zumindest einen Zwischenverbindung, eine optionale Speichersteuerung, gekoppelt mit der zumindest einen Zwischenverbindung, ein optionales drahtloses Modem, gekoppelt mit der zumindest einen Zwischenverbindung, einen optionalen Bildsignalprozessor, gekoppelt mit der zumindest einen Zwischenverbindung, einen optionale Universal Serial Bus (USB) 3.0 kompatible Steuerung, gekoppelt mit der zumindest einen Zwischenverbindung, eine optionale Bluetooth 4.1 kompatible Steuerung, gekoppelt mit der zumindest einen Zwischenverbindung, und eine optionale drahtlose Sender/Empfänger-Steuerung, gekoppelt mit der zumindest einen Zwischenverbindung, enthält.
  • Beispiel 28 ist ein Prozessor oder eine andere Vorrichtung, der bzw. die betriebsbereit ist, das Verfahren von einem der Beispiele 15 bis 21 durchzuführen.
  • Beispiel 29 ist ein Prozessor oder eine andere Vorrichtung, der bzw. die Mittel zum Durchführen des Verfahrens von einem der Beispiele 15 bis 21 enthält.
  • Beispiel 30 ist ein Prozessor oder eine andere Vorrichtung, der bzw. die eine Kombination von Modulen und/oder Einheiten und/oder Logik und/oder Schaltkreis und/oder Mitteln enthält, die betriebsbereit ist, das Verfahren von einem der Beispiele 15 bis 21 durchzuführen.
  • Beispiel 31 ist ein optionales, nicht transitorisches und/oder greifbares maschinenlesbares Medium, das optional Anweisungen speichert oder auf andere Weise bereitstellt, die eine erste Anweisung enthalten, wobei die erste Anweisung, falls und/oder wenn durch einen Prozessor, ein Computersystem, eine elektronische Vorrichtung oder andere Maschine ausgeführt, betriebsbereit ist, die Maschine zu veranlassen, das Verfahren von einem der Beispiele 15 bis 21 durchzuführen.
  • Beispiel 32 ist ein Prozessor oder eine andere Vorrichtung, im Wesentlichen wie hier beschrieben.
  • Beispiel 33 ist ein Prozessor oder eine andere Vorrichtung, der bzw. die betriebsbereit ist, ein Verfahren im Wesentlichen wie hier beschrieben durchzuführen.
  • Beispiel 34 ist ein Prozessor oder eine andere Vorrichtung, der bzw. die betriebsbereit ist, eine Anweisung im Wesentlichen wie hier beschrieben durchzuführen.

Claims (26)

  1. Beansprucht wird:
  2. Prozessor, umfassend: ein Register zum Speichern eines Zustandscode-Bits; eine Decodiereinheit zum Decodieren einer Bitprüfungsanweisung, wobei die Bitprüfungsanweisung einen ersten Quellenoperanden angeben soll, der ein erstes Bit enthalten soll, und zum Angeben eines Prüfbitwerts für das erste Bit; und eine Ausführungseinheit, die mit der Decodiereinheit gekoppelt ist, wobei die Ausführungseinheit, in Antwort auf die Bitprüfungsanweisung, dient zum: Vergleichen des ersten Bits mit dem Prüfbitwert; und Aktualisieren des Zustandscode-Bits, um anzugeben, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist.
  3. Prozessor nach Anspruch 1, wobei die Decodiereinheit die Bitprüfungsanweisung decodieren soll, die einen Wert angeben soll, um eine Bitposition für das erste Bit als eine aus einer Vielzahl von verschiedenen Bitpositionen zu identifizieren.
  4. Prozessor nach Anspruch 1, wobei die Decodiereinheit die Bitprüfungsanweisung decodieren soll, die eine implizit angegebene, aber nicht explizit spezifizierte, festgesetzte Bitposition für das erste Bit haben soll.
  5. Prozessor nach Anspruch 1, wobei das Zustandscode-Bit ein Null-Zustandscode-Bit ist und wobei die Ausführungseinheit, in Antwort auf die Anweisung, das Null-Zustandscode-Bit setzen soll, falls das erste Bit gleich dem Prüfbitwert ist.
  6. Prozessor nach Anspruch 1, wobei die Decodiereinheit die Bitprüfungsanweisung decodieren soll, die eine Freigabesteuerung angeben soll, und wobei die Ausführungseinheit, in Antwort auf die Anweisung, wenn die Freigabesteuerung einen ersten Wert hat, das Zustandscode-Bit in einer selben Weise aktualisieren soll, unabhängig davon, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist.
  7. Prozessor nach Anspruch 5, wobei das Zustandscode-Bit ein Null-Zustandscode-Bit ist und wobei die Ausführungseinheit, in Antwort auf die Anweisung, wenn die Freigabesteuerung einen ersten Wert hat, das Null-Zustandscode-Bit setzen soll, unabhängig davon, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist.
  8. Prozessor nach einem der Ansprüche 1 bis 6, wobei die Decodiereinheit die Bitprüfungsanweisung decodieren soll, die den ersten Quellenoperanden angeben soll, der ein Speicherpointer sein soll.
  9. Prozessor nach Anspruch 7, wobei das erste Bit ein Metadaten-Bit des Speicherpointers sein soll, das sich in einem oder mehreren höchstwertigen Bits des Speicherpointers befinden soll und das nicht während einer Adressenübersetzung zum Zweck einer Identifizierung einer physischen Speicherstelle verwendet werden soll.
  10. Prozessor nach Anspruch 8, wobei das erste Bit ein Markierungs-Bit für eine automatische Speicherbereinigung sein soll.
  11. Prozessor nach einem der Ansprüche 1 bis 6, wobei die Decodiereinheit die Bitprüfungsanweisung decodieren soll, die fähig ist, den Prüfbitwert entweder als eine binäre Eins oder binäre Null anzugeben.
  12. Prozessor nach einem der Ansprüche 1 bis 6, wobei die Decodiereinheit die Bitprüfungsanweisung decodieren soll, die einen zweiten Quellenoperanden angeben soll, der eine Vielzahl von Prüfbitwerten enthalten soll, die jeweils einem anderen einer Vielzahl von Bits entsprechen sollen, die nur einen Teilsatz aller Bits des ersten Quellenoperanden darstellen sollen.
  13. Prozessor nach Anspruch 11, wobei die Ausführungseinheit, in Antwort auf die Anweisung, dient zum: Vergleichen jedes der Prüfbitwerte mit dem entsprechenden der Vielzahl von Bits des ersten Quellenoperanden; und Aktualisieren eines anderen entsprechenden Zustandscode-Bits für jedes der Vielzahl von Bits des ersten Quellenoperanden, um anzugeben, ob jedes der Vielzahl von Bits des ersten Quellenoperanden gleich oder nicht gleich dem entsprechenden Prüfbitwert ist.
  14. Prozessor nach einem der Ansprüche 1 bis 6, wobei die Decodiereinheit die Bitprüfungsanweisung decodieren soll, die einen zweiten Quellenoperanden angeben soll, der den Prüfbitwert enthalten soll.
  15. Prozessor nach einem der Ansprüche 1 bis 6, wobei die Ausführungseinheit ein XODER-Gate umfasst, das das erste Bit mit dem Prüfbitwert vergleichen soll.
  16. Verfahren, das durch einen Prozessor durchgeführt wird, umfassend: Empfangen einer Bitprüfungsanweisung beim Prozessor, wobei die Bitprüfungsanweisung einen ersten Quellenoperanden angibt, der ein erstes Bit enthält, und einen Prüfbitwert für das erste Bit angibt; Vergleichen des ersten Bits mit dem Prüfbitwert in Antwort auf die Bitprüfungsanweisung; und Aktualisieren eines Zustandscode-Bits, um anzugeben, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist in Antwort auf die Bitprüfungsanweisung.
  17. Verfahren nach Anspruch 15, wobei das Empfangen ein Empfangen der Bitprüfungsanweisung umfasst, die einen Wert angibt, der eine Bitposition für das erste Bit als eine aus einer Vielzahl von verschiedenen möglichen Bitpositionen identifiziert.
  18. Verfahren nach Anspruch 15, wobei das Empfangen ein Empfangen der Bitprüfungsanweisung umfasst, die eine Freigabesteuerung angibt, die konfiguriert werden kann, das Zustandscode-Bit zu veranlassen, in einer selben Weise aktualisiert zu werden, unabhängig davon, ob das erste Bit gleich oder nicht gleich dem Prüfbitwert ist.
  19. Verfahren nach Anspruch 15, wobei das Empfangen ein Empfangen der Bitprüfungsanweisung umfasst, die den ersten Quellenoperanden angibt, der ein Speicherpointer sein soll.
  20. Verfahren nach Anspruch 18, wobei das erste Bit ein Metadaten-Bit des Speicherpointers ist, das während einer Adressenübersetzung zum Identifizieren einer physischen Speicherstelle nicht verwendet wird.
  21. Verfahren nach Anspruch 19, wobei das erste Bit ein Markierungs-Bit ist, das in einer automatischen Speicherbereinigung verwendet wird.
  22. Verfahren nach Anspruch 15, ferner umfassend ein Durchführen einer Steuerungsflussüberführungsanweisung, um eine Steuerungsflussüberführung zu einem automatischen Speicherbereiniger vorzunehmen, falls das Zustandscode-Bit indiziert, dass das erste Bit nicht gleich dem Prüfbitwert ist.
  23. Computersystem umfassend: eine Zwischenverbindung; einen Prozessor nach einem der Ansprüche 1 bis 6, gekoppelt mit der Zwischenverbindung; und einen dynamischen Direktzugriffsspeicher (DRAM), gekoppelt mit der Zwischenverbindung.
  24. Vorrichtung, die betriebsbereit ist, das Verfahren nach einem der Ansprüche 15 bis 21 durchzuführen.
  25. Vorrichtung, umfassend Mittel zum Durchführen des Verfahrens nach einem der Ansprüche 15 bis 21.
  26. Nicht transitorisches maschinenlesbares Datenspeichermedium, das Anweisungen speichert, die eine erste Anweisung enthalten, wobei die erste Anweisung, falls durch eine Maschine ausgeführt, betriebsbereit ist, die Maschine zu veranlassen, das Verfahren nach einem der Ansprüche 15 bis 21 durchzuführen.
DE112017003345.4T 2016-07-01 2017-06-01 Bit-prüfprozessoren, verfahren, systeme und anweisungen zum prüfen eines bits mit einem angegebenen prüfbitwert Withdrawn DE112017003345T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/201,303 2016-07-01
US15/201,303 US10761979B2 (en) 2016-07-01 2016-07-01 Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value
PCT/US2017/035395 WO2018004969A1 (en) 2016-07-01 2017-06-01 Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value

Publications (1)

Publication Number Publication Date
DE112017003345T5 true DE112017003345T5 (de) 2019-03-14

Family

ID=60786526

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112017003345.4T Withdrawn DE112017003345T5 (de) 2016-07-01 2017-06-01 Bit-prüfprozessoren, verfahren, systeme und anweisungen zum prüfen eines bits mit einem angegebenen prüfbitwert

Country Status (5)

Country Link
US (1) US10761979B2 (de)
CN (1) CN109313607A (de)
DE (1) DE112017003345T5 (de)
TW (1) TWI752034B (de)
WO (1) WO2018004969A1 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10761979B2 (en) 2016-07-01 2020-09-01 Intel Corporation Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value
US10802965B2 (en) * 2019-02-05 2020-10-13 Microsoft Technology Licensing, Llc Reducing synchronization reliance in garbage collection marking
US11392427B2 (en) 2020-01-06 2022-07-19 Microsoft Technology Licensing, Llc Lock-free reading of unitary value sets
CN113467702A (zh) * 2020-03-31 2021-10-01 上海商汤智能科技有限公司 数据处理装置、集成电路和ai加速器

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6647489B1 (en) * 2000-06-08 2003-11-11 Ip-First, Llc Compare branch instruction pairing within a single integer pipeline
EP1387273B1 (de) 2002-07-31 2010-07-21 Texas Instruments Incorporated Überwachungsbasierte bedingte Abfallsammlung zur Verbesserung der Echtzeitleistung
US20040064684A1 (en) * 2002-09-30 2004-04-01 Kalluri Seshagiri P. System and method for selectively updating pointers used in conditionally executed load/store with update instructions
TWI224257B (en) * 2003-08-28 2004-11-21 Sunplus Technology Co Ltd Apparatus and method of using checking bits to conduct encrypting protection
EP1785873A1 (de) 2005-11-09 2007-05-16 Research In Motion Limited Verfahren und Vorrichtung für die Benutzung zum Steuern von Speicherbereinigungs-Prozessen in einer mobilen Kommunikationsvorrichtung
US7676647B2 (en) * 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
US8375373B2 (en) * 2010-04-19 2013-02-12 Microsoft Corporation Intermediate language support for change resilience
GB2480285A (en) * 2010-05-11 2011-11-16 Advanced Risc Mach Ltd Conditional compare instruction which sets a condition code when it is not executed
US20110314263A1 (en) * 2010-06-22 2011-12-22 International Business Machines Corporation Instructions for performing an operation on two operands and subsequently storing an original value of operand
US8566368B2 (en) 2010-09-29 2013-10-22 Microsoft Corporation Garbage collection extensibility via managed code
US8732430B2 (en) * 2011-03-22 2014-05-20 Oracle International Corporation Method and apparatus for using unused bits in a memory pointer
US8516019B2 (en) 2011-10-03 2013-08-20 Oracle America, Inc. Time-based object aging for generational garbage collectors
JP6044181B2 (ja) 2012-08-24 2016-12-14 富士通株式会社 ガーベジコレクションのための情報処理方法、プログラム及び装置
CN103530089B (zh) * 2012-08-31 2018-06-15 威盛电子股份有限公司 微处理器及其操作方法
US9626184B2 (en) * 2013-06-28 2017-04-18 Intel Corporation Processors, methods, systems, and instructions to transcode variable length code points of unicode characters
US9396056B2 (en) * 2014-03-15 2016-07-19 Intel Corporation Conditional memory fault assist suppression
US9513913B2 (en) * 2014-07-22 2016-12-06 Intel Corporation SM4 acceleration processors, methods, systems, and instructions
US9430153B2 (en) 2014-10-22 2016-08-30 International Business Machines Corporation Garbage collection and other management of memory heaps
US9971632B2 (en) 2014-11-13 2018-05-15 Soundspectrum, Inc. Synchronization and barrier free concurrent garbage collection system
US10761979B2 (en) 2016-07-01 2020-09-01 Intel Corporation Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value

Also Published As

Publication number Publication date
WO2018004969A1 (en) 2018-01-04
US20180004655A1 (en) 2018-01-04
US10761979B2 (en) 2020-09-01
CN109313607A (zh) 2019-02-05
TWI752034B (zh) 2022-01-11
TW201804319A (zh) 2018-02-01

Similar Documents

Publication Publication Date Title
DE102015002582A1 (de) Architekturübergreifendes Kompatibilitätsmodul, um zuzulassen, dass ein Codemodul einer Architektur ein Bibliotheksmodul einer anderen Architektur verwendet
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE112017001825T5 (de) Prozessoren, verfahren, systeme und instruktionen zum atomischen speichern von daten, die breiter als eine nativ unterstützte datenbreite sind, in einem speicher
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
DE102015006863A1 (de) Befehle und Logik zum Unterbrechen und Wiederaufnehmen von Paging in Secure Enclaves
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE112016004960T5 (de) Befehl und logik, um informationen im voraus aus einem beständigen speicher zu holen
DE102014004563A1 (de) Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
DE112013004751T5 (de) Prozessor mit mehreren Kernen, gemeinsam genutzter Kernerweiterungslogik und gemeinsam genutzten Kernerweiterungsnutzungsbefehlen
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE202016009016U1 (de) Befehle und Logik für wiederkehrende benachbarte Sammlungen
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112017001716T5 (de) Speicherkopierbefehle, prozessoren, verfahren und systeme
DE112017001700T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen zum Abruf von Daten auf der angegebenen Cache-Ebene mit garantiertem Abschluss
DE102018002294A1 (de) Effizientes bereichsbasiertes speicher-rückschreiben zum verbessern der host-zu-geräte-kommunikation für optimale energie und leistung
DE112013004800T5 (de) Anweisung zur Bitverschiebung nach links mit Ziehen von Einsen in niedrigwertigere Bit
DE112013003735B4 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE202019005686U1 (de) Skalierbare Gesamtspeicherverschlüsselungs-Engine mit mehrfachen Schlüsseln
DE112017001704T5 (de) Arbiterbasierte Serialisierung von Prozessor-System-Management-Interrupt-Ereignissen
DE102014003854A1 (de) Robuste und Hochleistungsbefehle für Systemaufruf

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee