DE10393188T5 - Verarbeitung von Wiederholungs-String-Operationen - Google Patents

Verarbeitung von Wiederholungs-String-Operationen Download PDF

Info

Publication number
DE10393188T5
DE10393188T5 DE10393188T DE10393188T DE10393188T5 DE 10393188 T5 DE10393188 T5 DE 10393188T5 DE 10393188 T DE10393188 T DE 10393188T DE 10393188 T DE10393188 T DE 10393188T DE 10393188 T5 DE10393188 T5 DE 10393188T5
Authority
DE
Germany
Prior art keywords
data location
size
iterations
predetermined
data
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.)
Ceased
Application number
DE10393188T
Other languages
English (en)
Inventor
Xiang Beaverton Zou
Rajesh Hillsboro Parthasarath
Madhavan Hillsboro Parthasarath
Scott Hillsboro Rodgers
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 DE10393188T5 publication Critical patent/DE10393188T5/de
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter

Landscapes

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

Abstract

Verfahren zur Durchführung von Wiederholungs-String-Operationen, wobei das Verfahren umfaßt:
Zugreifen auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße;
Ausrichten zumindest entweder eines Quelldatenorts oder Zieldatenorts auf einen ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich der Operandengröße ist; und
nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer größeren Größe als der Operandengröße verwenden.

Description

  • Die im nachfolgenden erläuterten Implementierungen beziehen sich im allgemeinen auf Verarbeitungsoperationen in einer Rechenumgebung während sich bestimmte Implementierungen insbesondere auf eine Verarbeitung von Wiederholungs-String-Operationen beziehen.
  • Prozessoren kann die Aufgabe übertragen werden, eine Operation, die auch als ein Befehl bezeichnet wird, mehrere Male aufeinanderfolgend auszuführen. Dies kann bei String-Operationen, wie beispielsweise einer Versetzungs-Operation der Fall sein, bei der Daten von einem Speicherort zu einem anderen Speicherort bewegt werden, oder einer Speicheroperation, bei der Daten von einem Register zu einem Speicherort bewegt werden. Eine Versetzungs-Operation kann mehrere Male wiederholt werden, um anstelle von lediglich einem einzelnen Datenelement einen gesamten Datenblock zu bewegen. Zur Initialisierung eines Datenblocks kann eine Speicherung wiederholt werden. Das REP-Präfix kann zusammen mit einem Befehl verwendet werden, um anzuzeigen, daß der Befehl mit einer bestimmten Anzahl von Wiederholungen wiederholt werden soll. Es besteht ein fortwährender Bedarf für neue und nützliche Arten, wiederholte Befehle auf effiziente Weise bezüglich des Zeitaufwands, Bedarfs an Prozessorressourcen oder jedes beliebigen anderen einer Vielzahl anderer Maßstäbe auszuführen.
  • Beschreibung der Zeichnungen
  • 1 ist ein Blockdiagramm eines Systems zur Durchführung einer offenbarten Wiederholungs-String-Operation.
  • 2 ist ein Ablaufdiagramm eines Verfahrens zur Durchführung kurzer Wiederholungs-String-Operationen.
  • 3 ist ein Ablaufdiagramm eines Verfahrens zur Durchführung von Wiederholungs-String-Operationen mit mittlerer Länge.
  • 4 ist ein Ablaufdiagramm eines Verfahrens zur Ausführung von Wiederholungen bei der Durchführung des Verfahrens aus 3.
  • 5 ist ein Ablaufdiagramm eines Verfahrens zur Durchführung langer Wiederholungs-String-Operationen.
  • 6, 7, 8A, 8B und 9 sind Ablaufdiagramme von Verfahren zur Durchführung schneller Wiederholungs-String-Operation bei der Durchführung des Prozesses aus 5.
  • 10 ist ein Ablaufdiagramm eines Verfahrens einer parallelen Durchführung eines Overheads und einer Wiederholungs-String-Operation.
  • Detaillierte Beschreibung
  • Bei verschiedenen Befehlsgruppen und Architekturen kann ein Wiederholungs-Präfix mit dem Zeichen REP bei einem bestimmten Befehl dazu verwendet werden, einen Prozessor dazu zu veranlassen, den Befehl mit einer gegebenen Anzahl von Wiederholungen (Iterationen) auszuführen. Beispiele umfassen REP MOVSB (Bewegen/Kopieren eines Strings aus Ein-Byte-Dateneinheiten), REP MOVSW (Bewegen/Kopieren eines Strings aus Zwei-Byte-Dateneinheiten), REP MOVSD (Bewegen/Kopieren eines Strings aus Vier-Byte-Dateneinheiten), REP STOSW (Speichern eines Strings aus Zwei-Byte-Dateneinheiten) und REP CMPSD (vergleichen eines Strings aus Vier-Byte-Dateneinheiten). Jede Wiederholung umfaßt typischerweise die Ausführung des Datentransfers und darauffolgend das Aktualisieren der Register, in welchen die Speicheradresse für die Daten gespeichert ist. Das REP-Präfix kann auch in Verbindung mit anderen Befehlen, wie beispielsweise LODS (Lade String) verwendet werden. Ein mit ECX bezeichnetes Register kann vorzugsweise zur Bestimmung der Zahl der Wiederholungen verwendet werden, die für eine bestimmte Wiederholungs-String-Operation ausgeführt werden müssen. Obwohl bei den beschriebenen Implementierungen das REP-Präfix verwendet wird, können andere Mechanismen zur Wiederholung eines Befehls verwendet werden und die beschriebenen Merkmale sind in gleicher Weise sind auf derartige andere Mechanismen anwendbar. In Zusammenhang mit einem Prozessor werden String-Operationen im allgemeinen unter Verwendung von Mikro-Operationen ausgeführt. Die Laufzeit einer Mikro-Operation in einem Prozessor umfaßt verschiedene Phasen. Eine Phase wird Ausgabe (issuance) genannt und eine darauffolgende Phase Ausführung (execution). Die Verzögerung und potentielle Leerlaufzeit zwischen Ausgabe und Ausführung kann zu einer herabgesetzten Leistungsfähigkeit eines Prozessors führen. Es ist einem Prozessor jedoch möglich, eine Mikro-Operation nach der Ausgabe der Mikro-Operation und vor der Ausführung zu annulieren. Dementsprechend wird die Anzahl der Wiederholungen, die von einer Wiederholungs-String-Operation angefordert werden, von einigen Prozessoren vor hergesagt und werden Wiederholungen basierend auf dieser Vorhersage ausgegeben. Diese Prozessoren können die nicht benötigen Wiederholungen zu einer späteren Zeitpunkt annullieren, bevor die nicht benötigten Wiederholungen ausgeführt werden. Jedoch kann eine fehlerhafte Vorhersage aufgrund der Notwendigkeit, die ausgegebenen Operationen zu annullieren, zusätzliche Verzögerungen mit sich bringen.
  • Zur Verbesserung der Leistungsfähigkeit wird bei den im nachfolgenden erörterten Implementierungen der Versuch unternommen, entweder genaue Vorhersagen bezüglich der Zahl der Wiederholungen, die angefordert werden wird, zu machen oder sich darauf zu konzentrieren, genau die angeforderte Anzahl der Wiederholungen auszugeben. Verschiedene Implementierungen führen auch parallel zum Datentransfer Overhead-Berechnungen aus, um die Gesamtzeit zur Durchführung der Wiederholungs-String-Operationen zu reduzieren oder versuchen, die angeforderten Wiederholungs-String-Operationen durch Übertragen von Daten in größeren Blöcken, als dies mit dem Befehl verlangt wurde, schneller durchzuführen.
  • Mit Bezugnahme auf 1 umfaßt ein System 100 zur Durchführung einer Wiederholungs-String-Operation einen Computer 110 mit einem Prozessor 120, einen Speicher 130 und einen Bus 135, mit dem der Prozessor 120 und der Speicher 130 verbunden sind. Der Prozessor 120 umfaßt elektronische Schaltkreise 140 und einen Prozessorspeicher 150, die mittels eines Buses oder über eine andere (nicht gezeigte) Verbindung angeschlossen sein können. Das System 100 umfaßt auch einen externen Speicher 160. Der Prozessor 120 kann jeden der nachfolgend offenbarten Prozesse unter Verwendung der Elektronikschaltung 140 und/oder des Prozessorspeichers 150 durchführen. Des weiteren können im Speicher 160 Befehle gespeichert werden, mit welchen der Computer zur Durchführung beliebiger der im nachfolgenden offenbarten Prozesse veranlaßt werden kann. Wahlweise ist der Rechner 110 über einen Netzanschluß 180 mit einem Netzrechner 170 gekoppelt.
  • Kurze Wiederholungs-String-Operationen
  • 2 zeigt einen Prozeß 200 zur Durchführung kurzer Wiederholungs-String-Operationen (d.h. String-Operationen, die weniger als achtmal ausgeführt werden müssen). Jedoch kann der Prozeß 200 auch String-Operationen ausführen, die nicht kurz sind. Am Anfang umfaßt der Prozeß eine Überprüfung bezüglich eines REP-Präfixes in einem Befehl (210). Falls dort kein REP-Präfix auftritt, muß dort keine Wiederholungs-String-Operation durchgeführt werden.
  • Falls dort ein REP-Präfix vorliegt, wird die Wiederholungs-String-Operation auf die Größe des Operanden (22) überprüft. Der Prozeß 200 wird nur fortgesetzt, falls die Operandengröße ein Byte beträgt, wie beispielsweise bei REP MOVSB (im Gegensatz zu MOVSW oder MOVSD). Dies liegt daran, daß der Prozeß 200 auf Byte-Operationen zugeschnitten ist. Bei anderen Implementierungen kann der Prozeß 200 für Wort-, Doppelwortoperanden oder Operanden mit anderer Länge verwendet werden.
  • Als nächstes werden drei Wiederholungen der String-Operation ausgegeben (230). Die gesammelten Daten geben an, daß zumindest 99% der REP MOVSB-Befehle bei bestimmten Implementierungen drei oder weniger Wiederholungen umfassen. Bei bestimmten Implementierungen wird der größte Teil des erforderlichen Speichertransfers unter Verwendung von Doppelworttransfers ausgeführt, woraus sich ein Rest von drei oder weniger zu übertragenden Bytes ergibt. Dieser Rest wird dann durch Byte-String-Operationen verarbeitet. Somit hat bei derartigen Implementierungen die überwiegende Mehrheit der Byte-String-Operationen eine ECX von weniger als oder von drei. Somit kann die Zahl drei als eine obere Grenze für die erwartete Zahl von Wiederholungen verwendet werden. Bei anderen Implementierungen kann beispielsweise jede beliebige Zahl von Anfangswiederholungen (z.B. acht) ausgegeben werden und die Bestimmung, wie viele Wiederholungen ausgegeben werden, kann auf einem oder mehreren beliebigen relevanten Faktoren basieren.
  • Ob die tatsächliche Zahl der angeforderten Wiederholungen innerhalb der Vorhersage von drei oder weniger liegt, wird dann durch Überprüfen des ECX-Registers bestimmt (240). Bei bestimmten Implementierungen wird das ECX-Register vor dem Ausgeben irgendeiner Wiederholung überprüft.
  • Falls die tatsächliche Zahl der Wiederholungen (ECX) niedriger oder gleich drei ist, werden die ausgegebenen Wiederholungen je nach Zweckmäßigkeit ausgeführt oder annulliert (250). Insbesondere ist die Zahl der ausgeführten Wiederholungen gleich dem Wert im ECX-Register (ECX) und die Zahl der annullierten Wiederholungen gleich dem Wert im ECX-Register minus drei (3-ECX). Der Datentransfer ist dann abgeschlossen.
  • Falls die tatsächliche Zahl von Wiederholungen (ECX) größer als drei ist, werden die drei ausgegebenen Wiederholungen annulliert (260) und es werden weitere acht Wiederholungen ausgegeben (270). Bei anderen Implementierungen kann, basierend auf beispielsweise für Vorhersagezwecke gesammelten Daten oder anderen Faktoren, jede beliebige Zahl von Wiederholungen ausgegeben werden. Bei weiteren Implementierungen werden die drei ausgegebenen Wiederholungen nicht annulliert. Statt dessen werden zusätzliche Wiederholungen, beispielsweise basierend auf dem Wert des ECX-Registers, ausgegeben.
  • Als nächstes wird der Wert des ECX-Registers überprüft, um festzustellen, ob er kleiner als acht ist (275). Falls dies der Fall ist, werden die ausgegebenen Wiederholungen je nach Zweckmäßigkeit ausgeführt oder annulliert (280). Insbesondere werden ECX Wiederholungen ausgeführt und 8-ECX Wiederholungen annulliert.
  • Falls ECX nicht kleiner als acht ist, wird ECX überprüft, um festzustellen, ob es größer als acht ist (285). Falls ECX größer als acht ist, wurden alle acht Wiederholungen, die bereits ausgegeben wurden, ausgeführt und es werden ECX-8 zusätzliche Wiederholungen ausgegeben und ausgeführt (290). Falls ECX nicht größer als acht ist, werden die acht ausgegebenen Wiederholungen ausgeführt (295).
  • Wiederholungs-String-Operationen mit mittlerer Länge
  • 3 zeigt ein Ablaufdiagramm eines primär zur Durchführung von Wiederholungs-String-Operationen mit mittlerer Länge angepaßten Prozesses 300, wobei die Wiederholungs-String-Operationen, die zwischen acht und 64 Wiederholungen anfordern, als Wiederholungs-String-Operationen mit mittlerer Länge bezeichnet werden. Die Auswahl von „acht" und „64" ist für die beschriebene Implementierung spezifisch und die Bezeichnung mittlere Länge kann bei anderen Implementierungen variieren. Bei der beschriebenen Implementierung basiert die Auswahl von „acht" auf Latenzbetrachtungen und die Auswahl von „64" auf Leistungsbetrachtungen und gibt im allgemeinen den Punkt wieder, an dem der Algorithmus für schnelle Wiederholungs-String-Operationen (die im nachfolgenden beschrieben werden) bessere Leistungen zeigt als der Prozeß 300. Der Prozeß 300 kann unabhängig von der Operandengröße verwendet werden und ist nicht auf Byte-Operanden beschränkt. Der Prozeß 300 führt Wiederholungs-String-Operationen mit mittlerer Länge durch Ausgeben exakt der Anzahl der angeforderten Iterationen durch, was bedeutet, daß keine ausgegebenen Wiederholungen annulliert werden müssen.
  • Der Prozeß 300 umfaßt eine Ausgabe von acht Anfangswiederholungen (310). Der Wert von ECX wird überprüft, um zu bestimmen, ob ECX zwischen acht und einschließlich 64 liegt (320). ECX kann vor oder nach der Ausgabe der acht Wiederholungen überprüft werden.
  • Falls ECX zwischen acht und 64 liegt, werden die zu Anfang ausgegebenen acht Wiederholungen bzw. Iterationen ausgeführt (330). Des weiteren werden ECX-8 zusätzliche Wiederholungen ausgegeben (340) und ausgeführt (350). Die im nachfolgenden erläuterte 4 zeigt ein Ablaufdiagramm eines Prozesses 400 zur Ausführung der zusätzlichen ECX-8 Zusatzwiederholungen.
  • Falls ECX nicht zwischen acht und 64 liegt, wird ein anderer Prozeß zur Fortsetzung der Durchführung der Wiederholungs-String-Operation aufgerufen (360). Beispielsweise kann für kurze Wiederholungs-String-Operationen (d.h. weniger als acht Wiederholungen) der mit der Operation 275 beginnende Prozeß 200 verwendet werden. Für lange Wiederholungs-String-Operationen (d.h. mehr als 64 Wiederholungen) kann ein im nachfolgenden erläuterter Prozeß 500 verwendet werden.
  • Die Prozesse 200 und 300 oder Abwandlungen dieser können auf viele andere Arten zur Durchführung sowohl von kurzen Wiederholungs-String-Operationen als auch von Wiederholungs-String-Operationen mit mittlerer Länge kombiniert werden. Beispielsweise kann der Prozeß 200 durch Ersetzen der Operation 290 durch die Operationen 320–350 aus dem Prozeß 300 modifiziert werden.
  • 4 zeigt ein Ablaufdiagramm des Prozesses 400 zur Ausführung der zusätzlichen ECX-8 Wiederholungen (Operation 350 des Prozesses 300). Der Prozeß 400 bezieht sich auf eine spezielle Implementierung, bei der sowohl Hardware-Register als auch ein Mikro-Code verwendet werden.
  • Der Prozeß 400 umfaßt das Laden eines Schleifenzählerregisters mit dem Wert ECX-8 (410). Der Schleifenzähler ist ein abwärtszählender Zähler, der die Zahl der verbleibenden, auszugebenden und auszuführenden Wiederholungen verfolgt und wird als der Restwiederholungs zähler bezeichnet. Das Laden des Restwiederholungszählerregisters kann unter Verwendung eines Mikrocodes ausgeführt werden und das Restwiederholungszählerregister kann sich in einem Ausgabeabschnitt einer Mikrooperation befinden.
  • Ein als Wiederholungen-Erledigt-Zähler bezeichneter aufwärts/abwärts zählender Zähler wird mit Null initialisiert (420). Die Initialisierung kann beispielsweise mittels einer Mikrooperation („uop") in Mikrocode ausgeführt werden. Der Wiederholungen-Erledigt-Zähler zählt entweder aufwärts oder abwärts, wobei der Absolutwert des Wiederholungen-Erledigt-Zählers die Zahl der abgeschlossenen Wiederholungen wiedergibt und der Wiederholungen-Erledigt-Zähler einmal pro. Wiederholung inkrementiert oder dekrementiert wird. Der Wiederholungen-Erledigt-Zähler wird inkrementiert, falls die Wiederholungs-String-Operation sich vorwärtsbewegt, d.h. auf progressiv höhere Speicheradressen als Quell- und/oder Zielorte zugreift. Der Wiederholungen-Erledigt-Zähler wird dekrementiert, falls sich die Wiederholungs-String-Operation rückwärts bewegt, d.h. auf progressiv niedrigere Speicheradressen als Quell- und/oder Zielorte zugreift.
  • Ein Speicheradress-Offset wird unter Verwendung des Wertes des Wiederholungen-Erledigt-Zählers und der Daten-/Einheitgröße des Operanden der Wiederholungs-String-Operation in Hardware berechnet (430). Beispielsweise beträgt unter der Annahme, daß der Wiederholungen-Erledigt-Zähler einen Wert von 1 aufweist und der Operand ein Doppelwort ist (vier Bytes), der berechnete Adress-Offset vier.
  • Der Wert des Adress-Offsets wird in den Mikrocode zurückgegeben (440). Der Offset wird dann vom Mikrocode zur Durchführung der nächsten Iteration der Wiederholungs-String-Operation verwendet (450). Insbesondere kann der Mikrocode den Offset zur Berechnung der Quell- und Zieladressen der nächsten Wiederholung verwenden. Bei typischen Implementierungen einer REP MOVS-Operation wird die Anfangsadresse des Quelldatenortes in einem mit ESI bezeichneten Register gespeichert und die Anfangsadresse des Datenzielortes in einem mit EDI bezeichneten Register. Der Offset wird vom Mikrocode zu ESI addiert, um den Ort zum Laden von Daten zu bestimmen und der Offset wird zu EDI addiert, um den Ort zum Speichern von Daten zu bestimmen. Bei diesem Beispiel wird angenommen, daß die Werte von ESI und EDI so angepaßt sind, daß den in der Operation 330 des Prozesses 300 am Anfang ausgeführten acht Wiederholungen Rechnung getragen wird.
  • Nach der Ausgabe jeder Wiederholung wird der Restwiederholungszähler dekrementiert (460) und der Wiederholungen-Erledigt-Zähler entweder inkrementiert oder dekrementiert (470). Der Restwiederholungszähler wird dann überprüft, um festzustellen, ob sein Wert größer als Null ist, was anzeigt, daß die Ausgabe der Wiederholungs-String-Operation nicht abgeschlossen ist (480). Falls der Restwiederholungszähler größer als Null ist, springt der Prozeß 400 zurück zur Operation 430. Ansonsten endet der Prozeß 400. Bei einer anderen Implementierung wird kein Restwiederholungszähler verwendet, sondern wird der absolute Wert des Wiederholungen-Erledigt-Zählers mit dem Wert von ECX-8 verglichen.
  • Bei einer weiteren Implementierung zur Durchführung von Wiederholungs-String-Operationen mit mittlerer Länge (und kurzen Wiederholungs-String-Operationen) wird nicht notwendigerweise exakt die angeforderte Zahl von Wiederholungen ausgegeben. Bei der Implementierung werden Wiederholungen in Gruppen von acht ausgegeben, wobei jene annulliert werden, die nicht benötigt werden. Somit werden für Anfragen von Null bis acht Wiederholungen von der Implementierung acht Wiederholungen, für Anfragen von neun bis sechzehn Wiederholungen sechzehn Wiederholungen (in zwei Gruppen von acht) usw. ausgegeben. Bei dieser Implementierung wird die durch Durchführung der Wiederholungen in Gruppen von acht erzielte Wirksamkeit vorteilhaft ausgenutzt.
  • Lange Wiederholungs-String-Operation – Allgemeines
  • In 5 ist ein Ablaufdiagramm eines Prozesses 500 zur Durchführung von langen Wiederholungs-String-Operationen gezeigt. Eine lange Wiederholungs-String-Operation umfaßt Wiederholungs-String-Operationen, die mehr als 64 Wiederholungen erfordern.
  • Die Bezeichnung mit „kurz", „mittlerer Länge" und „lang" hängt vollkommen vom Wert von ECX ab und basiert somit auf der Zahl der angeforderten Wiederholungen. Es ist verständlich, daß beispielsweise bestimmte Wiederholungs-String-Operationen mit mittlerer Länge einen größeren Datentransfer umfassen können als bestimmte lange Wiederholungs-String-Operationen. Beispielsweise werden durch REP MOVSB mit ECX = 60 (mittlere Länge) 240 Datenbytes bewegt, wobei von REP MOVSB mit ECX = 65 (lang) lediglich 65 Datenbytes bewegt werden. Bei anderen Implementierungen wird bei der Bestimmung, wie die Wiederholungs-String-Operation zu bezeichnen und auszuführen ist, ein höheres Gewicht auf die Operandengröße gelegt.
  • Der Prozeß 500 umfaßt die Bestimmung, ob ECX größer als 64 ist (510). Falls ECX nicht größer als 64 ist, handelt es sich bei der Wiederholungs-String-Operation nicht um eine lange Wiederholungs-String-Operation. Dementsprechend wird ein Prozeß zur Durchführung kürzerer Wiederholungs-String-Operationen verwendet (520). Beispiele geeigneter Prozesse umfassen die oben erläuterten Prozesse 200 und 300.
  • Falls ECX größer ist als 64, handelt es sich bei der Wiederholungs-String-Operation um eine lange Wiederholungs-String-Operation. Vom Prozeß 500 wird dann bestimmt, ob ESI und/oder EDI unter Verwendung kompatibler Operationen ausgerichtet werden können (530).
  • Kompatible Operationen betreffen Operationen, die beispielsweise String-Operationen und Wiederholungs-String-Operationen umfassen, die unter Verwendung einer Datengröße, bei der es sich um dieselbe Größe wie beim Operanden handelt, auf Daten wirken. Bei einem REP MOVSB-Befehl ist der Operand beispielsweise ein Byte und falls ECX = 32, würden die 32 Datenbytes von einer kompatiblen Operation mit einem Byte zu einem Zeitpunkt bewegt werden. In ähnlicher Weise ist der Operand bei einem REP MOVSB-Befehl ein Vier-Byte-Doppelwort und würden, falls ECX = 32, die 128 (32·4) Datenbytes mit vier Bytes zu einem Zeitpunkt bewegt werden.
  • Im Gegensatz dazu wirkt eine schnelle Operation auf die Daten unter Verwendung einer größeren Datengröße als der Größe des Operanden. Falls es sich bei der schnellen Operation um eine String-Operation handelt, kann die schnelle Operation auch als eine schnelle String-Operation bezeichnet werden. Betrachtet man wiederum einen REP MOVSD-Befehl mit ECX = 32, könnten die 128 Byte mit acht Byte zu einem Zeitpunkt, 16 Byte zu einem Zeitpunkt oder irgendeiner anderen Zahl von mehr als vier zu einem Zeitpunkt von einer schnellen Operation bewegt werden. Schnelle Operationen sind im allgemeinen schneller als kompatible Operationen, da von den schnellen Operationen bei jedem Transfer mehr Daten bewegt werden können. Häufig ist es daher wünschenswert, insbesondere bei langen Wiederholungs-String-Operationen, schnelle Operationen zu verwenden. Die endgültigen String-Datenergebnisse im Speicher sollten unabhängig davon, ob schnelle Operationen oder kompatible Operationen verwendet werden, identisch sein.
  • Für die höhere Geschwindigkeit ist jedoch aufgrund eines mit schnellen Operationen verbundenen Overheads ein Preis zu zahlen. Der Overhead-Aufwand wird durch die Entscheidung reflektiert, schnelle Operationen lediglich dann zu verwenden, wenn ECX > 64. Bei einigen Implementierungen werden schnelle Operationen aufgrund der verschiedenen Bedenken bezüglich des Overheads auch lediglich bei bestimmten Adressier-Modi verwendet, wie beispielsweise 32 Bit und nicht 16 Bit.
  • Bei schnellen Operationen ist es häufig wünschenswert entweder die Quell- und/oder Zieldatenorte nach der Größe der zu bewegenden Daten auszurichten. Ein Speicherort ist auf eine bestimmte Datengröße ausgerichtet, falls die Adresse des Ortes durch diese Größe teilbar ist. Beispielsweise ist die Adresse 128 auf Datengrößen von 128, 64, 32, 16, 8, 4, 2 und 1 Byte ausgerichtet, jedoch nicht auf Datengrößen von beispielsweise 100 Byte oder 12 Byte. Bei diesem Beispiel kann die Adresse beispielsweise als auf 16 ausgerichtet bezeichnet werden. Schnelle Operationen können im allgemeinen ohne Ausrichtung einer Adresse ausgeführt werden, jedoch ist die Leistungsfähigkeit häufig beeinträchtigt, da Cache-Linienaufspaltungen beim Zugriff auf die Daten auftreten. Dementsprechend können die Speicheroperationen ohne Ausrichtung sogar leistungsfähiger sein, wenn sie lediglich mit kompatiblen Operationen ausgeführt werden.
  • Es ist nicht immer möglich, eine Adresse unter Verwendung von kompatiblen Operationen auszurichten. Beispielsweise kann EDI mit einem REP MOVSW-Befehl und EDI=3 mit kompatiblen Operationen nicht auf 16 ausgerichtet werden, weil EDI immer einen ungeraden Wert aufweist. In derartigen Fällen wird die lange Wiederholungs-String-Operation mit kompatiblen Operationen durchgeführt (540). Im allgemeinen ist es jedoch möglich, falls ESI und/oder EDI auf die Operandengröße ausgerichtet sind, was als O-Größen-ausgerichtet bezeichnet wird, kompatible Operationen zur Ausrichtung der Adresse(n) auf 8 oder 16 zu verwenden.
  • Falls die Adresse mit einer oder mehreren kompatiblen Operationen ausgerichtet werden kann, werden zunächst eine oder mehrere kompatible Operationen zum Ausrichten entweder von EDI und/oder ESI durchgeführt (550). Die Zahl der zur Ausrichtung einer Speicheradresse erforderlichen kompatiblen Operationen hängt von der Datengröße ab, mit der die Adresse ausgerichtet werden muß. Beispielsweise erfordert eine sich vorwärts bewegende REP MOVSB Wiederholungs-String-Operation mit EDI=6 zwei kompatible Operationen zur Aus richtung von EDI auf 8 und dann zehn kompatible Operationen zur Ausrichtung von EDI auf 16.
  • Nach dem Ausrichten zumindest einer Speicheradresse (500) wird eine schnelle Operation mit dieser Adresse entweder in einer Vorwärts- oder Rückwärtsrichtung durchgeführt (560). Schnelle Operationen können so lange durchgeführt werden, bis die verbleibenden zu bearbeitenden Daten weniger sind als die Größe der schnellen Operation. Danach werden kompatible Operationen durchgeführt, bis die verbleibenden Daten verarbeitet sind (570). Unter der Annahme eines REP MOVSB-Befehls mit ECX=150 müssen beispielsweise 150 Byte bewegt werden. Wird des weiteren zunächst angenommen, daß mit der schnellen Operation 16 Byte bewegt werden können und daß die Speicheradressen beide auf 16 ausgerichtet sind, verbleiben nach neun schnellen Operationen sechs Bytes, die bewegt werden müssen. Da die verbleibenden sechs Bytes zu klein sind, um eine schnelle Operation zu verwenden, werden sechs kompatible Operationen (in diesem Beispiel Byte-Operationen) durchgeführt.
  • Lange Wiederholungs-String-Operationen – Implementierungen schneller Operationen
  • In 6, 7, 8A und 9 sind vier Ablaufdiagramme von Prozessen 600, 700, 800 und 900 zur Verwendung beim Prozeß 500 gezeigt. Die Prozesse 600, 700, 800 und 900 dienen der Durchführung von schnellen Wiederholungs-String-Operationen, wie sie im Schritt 560 des Prozesses 500 genannt sind.
  • Unter Bezugnahme auf 6 kann der Prozeß 600 zur Durchführung schneller Operationen verwendet werden, wenn sowohl ESI als auch EDI auf 16 ausgerichtet sind. Der Prozeß 600 umfaßt das Laden von 16 Bytes aus ESI (610) und das Speichern von 16 Bytes in EDI (620).
  • Unter Bezugnahme auf 7 kann der Prozeß 700 dazu verwendet werden, schnelle Operationen durchzuführen, wenn ESI auf acht ausgerichtet und EDI auf 16 ausgerichtet ist. Der Prozeß 700 umfaßt das Laden von 8 Bytes aus ESI (710), das Vorrücken von ESI um acht (720) und das Laden von weiteren 8 Bytes aus ESI (730). Das Vorrücken umfaßt sowohl das Inkrementieren als auch Dekrementieren von ESI abhängig davon, ob die schnellen Operationen sich vorwärtsbewegende bzw. rückwärtsbewegende Operationen sind. Die beiden Gruppen von 8 Bytes werden miteinander verknüpft (740) und in EDI gespeichert (750). Das Ver knüpfen umfaßt die Verkettung der beiden Gruppen von 8 Byte zur Wiederspiegelung der 16 Byte im ursprünglichen Wert von ESI.
  • Unter Bezugnahme auf 8A kann der Prozeß 800 zur Durchführung schneller Operationen verwendet werden, wenn EDI auf 16 ausgerichtet ist und ESI nicht auf 16 ausgerichtet ist. Der Prozeß kann beispielsweise auch dann verwendet werden, wenn ESI nicht auf 8 ausgerichtet ist. Im allgemeinen werden vom Prozeß 800 zwei Datengruppen mit 16 Bytes aus auf 16 ausgerichteten Orten geladen, die ESI umklammern, und die beiden Datengruppen verknüpft bzw. verbunden, um die gewünschten 16 Byte zu erhalten.
  • Insbesondere wird sowohl ein niedrig ausgerichteter Ort für ESI (810) als auch ein hoch ausgerichteter Ort für ESI (820) bestimmt. Der niedrig ausgerichtete Ort für ESI ist der nächstgelegene auf 16 ausgerichtete Ort, der sich niedriger im Speicher befindet. Der höher ausgerichtete Ort für ESI ist der nächstgelegene auf 16 ausgerichtete Ort, der sich höher im Speicher befindet.
  • Als nächstes werden 16 Bit vom niedrig ausgerichteten Ort (830) und 16 Byte vom hoch ausgerichteten Ort (840) geladen. Die beiden Datengruppen mit 16 Byte werden dann verbunden, um 16 Byte entsprechend zu ESI zu erhalten (850). Bei diesem Beispiel kann ein Verbinden ein Extrahieren der relevanten Daten in jeder der 16 Byte-Datengruppen beispielsweise durch Maskieren der beiden Datengruppen und dann Verknüpfen der maskierten Datengruppen umfassen. Die ESI entsprechenden 16 Bytes werden dann in EDI gespeichert (860).
  • Der Prozeß 800 kann auch mit Bezugnahme auf einen Speicher (870) in 8B erläutert werden. Der Speicher 870 zeigt ESI von einem hoch ausgerichteten Ort und einem niedrig ausgerichteten Ort umklammert. Falls sich die Wiederholungs-String-Operation vorwärtsbewegt, müssen die mit FWD-DATA markierten Daten in EDI gespeichert werden. Dementsprechend müssen Datengruppen B und A geladen und verbunden werden. Falls sich die Wiederholungs-String-Operation rückwärtsbewegt, müssen die als BACK-DATA markierten Daten in EDI gespeichert werden. Dementsprechend müssen die Datengruppen B und C geladen und verbunden werden.
  • Bei anderen Implementierungen müssen die Ladungen von den niedrig und hoch ausgerichteten Orten nicht 16 Byte (beziehungsweise wie groß die Ausricht-Größe auch immer ist) und sogar nicht einmal dieselbe Anzahl von Bytes umfassen. Beispielsweise können mit der niedrig ausgerichteten Ladung Daten mit einer ersten vorbestimmten Größe geladen werden, mit der hoch ausgerichteten Ladung Daten mit einer zweiten vorbestimmten Größe geladen werden und die verbundenen Daten eine dritte vorbestimmte Größe aufweisen. Bei diesem Beispiel können sich die erste, zweite und dritte vorbestimmte Größe voneinander und von der Ausricht-Größe unterscheiden.
  • Jedoch wird bei bestimmten Implementierungen die Leistungsfähigkeit durch Einstellen sowohl der ersten, zweiten als auch dritten vorbestimmten Größe auf die Ausricht-Größe erzielt. Des weiteren ist es möglich, daß der niedrig ausgerichtete und hoch ausgerichtete Ort identisch sind, wenn beispielsweise ESI auf 16 ausgerichtet ist.
  • Mit Bezugnahme auf 9 kann ein Prozeß 900 dazu verwendet werden, schnelle Operationen durchzuführen, wenn sowohl EDI als auch ESI auf acht ausgerichtet sind. Der Prozeß 900 kann beispielsweise auch verwendet werden, wenn sowohl EDI als auch ESI auf 8 ausgerichtet ist, jedoch weder EDI noch ESI auf 16 ausgerichtet ist. Der Prozeß 900 umfaßt das Laden von 8 Byte von ESI (910) und das Speichern der 8 geladenen Bytes in EDI (920).
  • Bei Implementierungen können einer oder mehrere der Prozesse 600, 700, 800 und 900 zur Durchführung schneller Operationen verwendet werden. Beispielsweise kann ein Algorithmus in Mikrocode geschrieben werden, mit dem die Möglichkeiten zur Ausrichtung ermittelt werden und einer der Prozesse 600, 700, 800 und 900 zur Ausführung gewählt wird. Fälle, die den Ausrichtungserfordernissen eines der Prozesse 600, 700, 800 und 900 nicht genügen, können im allgemeinen unter Verwendung kompatibler String-Operationen ausgeführt werden.
  • Zusätzliche Probleme bei der Implementierung können daraus resultieren, daß anstelle der durch den Befehl definierten kompatiblen Operation eine schnelle Operation verwendet wird. Es ist verständlich, daß durch die Durchführung unterschiedlicher Operationen, d.h. durch das Durchführen einer schnellen Operation anstelle einer kompatiblen Operation, der Status der Maschine bzw. des Rechners nicht zu allen Zeitpunkten während der schnellen Operation derselbe sein könnte, der er während der kompatiblen Operation wäre. Jedoch können verschiedene Techniken beim Versuch, den Zustand der Maschine bzw. des Rechners beizubehalten, der sich bei der Ausführung kompatibler Operationen ergeben hätte, verwendet wer den, wodurch die Verwendung schneller Operationen für ein Programm transparent wird. Die Bewahrung des Zustands kann beispielsweise das Beibehalten derselben Ergebnisse im Speicher wie bei kompatiblen Operationen umfassen und das Auslösen derselben Fehlerbedingungen. Diese werden nachfolgend erörtert:
    Beim ersten, oben genannten Beispiel werden dieselben Ergebnisse im Speicher gelassen. Einen Aspekt, den dies bei einer Kopieroperation mit sich bringt, besteht darin, daß ein Überschreiben der Quelldaten vor. einer Verwendung der Quelldaten vermieden wird. Da bei der angeforderten Wiederholungs-String-Operation nicht notwendigerweise die Verwendung einer schnellen Operation anstelle der spezifizierten kompatiblen Operationen in Betracht gezogen wurde, kann eine unzureichende Trennung zwischen den Quell- und Zielorten bestehen.
  • Die Vermeidung eines Überschreibens kann auf eine Vielzahl von Arten berücksichtigt werden, wie beispielsweise dadurch, daß eine minimale Trennung zwischen ESI und EDI erforderlich ist, oder daß Werte an temporären Orten gespeichert werden. Bei einer Implementierung, bei der schnelle 16 Byte-Operationen verwendet werden, ist es erforderlich, daß EDI und ESI nicht zwischen ein und 15 Byte voneinander sind.
  • In ähnlicher Weise kann im Gegensatz zu linearen Adressen ein Überschreiben auch ein Problem über Seitengrenzen darstellen. Die Seiten-Offsets für die Quell- und Zieldaten können verglichen werden, um sicherzustellen, daß kein Überschreiben erfolgt, falls sich die Quelle und die Daten auf derselben Seite oder auf aneinanderangrenzenden Seiten befinden. Bei einer Implementierung werden schnelle Transfers von 16 Byte vermieden, falls der Zielseiten-Offset vor dem Quellseiten-Offset weniger als 16 Byte beträgt. Diese Implementierung erlaubt auch die Möglichkeit, daß die Zielseite gleich der Quellseite plus 1 sein kann, während der Zielseiten-Offset nahe bei 0 ist und der Quellseiten-Offset nahe an der oberen Grenze, wie beispielsweise 4 KByte. In einem derartigen Fall wird durch die Implementierung dennoch sichergestellt, daß die Zielseite zuzüglich dem Offset zumindest 16 Bytes vor der Quellseite zuzüglich dem Offset liegt.
  • Beim zweiten oben genannten Beispiel wird der Versuch unternommen, dieselben Fehlerbedingungen, die kompatible Operationen ausgelöst hätten, bei schnellen Operationen auszulösen. Beispiele umfassen Segmentierungs- und Schutzfehler, Ausrichtungsausnahmen oder Seitenwechsel (paging)-Verletzungen. Eine Technik, um die Auslösung derselben Fehler zu unterstützen besteht darin, auf genau dieselben Speicherorte zuzugreifen, auf die mit kompatiblen Operationen zugegriffen worden wäre. Dadurch kann die Möglichkeit, eine unrichtige oder unerwartete Ausnahme (exception) zu empfangen, die anzeigt, daß auf ein Segment oder eine Seite nicht zugegriffen werden kann, beseitigt werden.
  • Um derartige Zugriffe zu vermeiden, können für ein Minimum von 16 Byte (unter der Annahme einer Implementierung, die eine auf 16 ausgerichtete Adresse erfordert und 16 Byte-Transfers verwendet) kompatible Operationen durchgeführt werden sowie beliebige zusätzliche kompatible Operationen, die erforderlich sind, um die Adresse auf 16 auszurichten. Des weiteren können kompatible Operationen am Ende der schnellen Operationen für zumindest 16 Byte durchgeführt werden. Auf diese Weise wird bei Zugriffen auf die Quelle, falls der Prozeß 800 verwendet wird, nicht auf Speicherorte außerhalb der beabsichtigten Quelldaten zugegriffen.
  • Man beachte, daß durch den Zugriff auf größere Mengen von Daten zu einem Zeitpunkt, d.h. beispielsweise auf 16 Byte anstelle von auf eines (bei Annahme eines Byte-Operanden), dieselben Austest-(Debugging-) und Befehlseinfang-(instruction trapping)-kapazitäten möglicherweise nicht verfügbar sind. Beispielsweise könnte es möglich sein, daß der Zustand nicht nach jedem Byte-Transfer überprüft werden kann.
  • Für verschiedene Implementierungen kann es notwendig sein, zusätzlich Problemstellungen anzusprechen. Ein Beispiel besteht darin, daß es für einen Prozessor notwendig sein kann, zu verhindern, daß sich die Quelldatenorte und die Zieldatenorte überkreuzen oder um das Ende des unterstützten Adressraums umbrechen (wrap).
  • Overhead-Berechnung
  • 10 zeigt ein Ablaufdiagramm eines Prozesses 1000 zur parallelen Durchführung eines Overheads und einer Wiederholungs-String-Operation. Der Durchführung einer Wiederholungs-String-Operation zugeordneter Overhead umfaßt das Aktualisieren der drei Register ECX, EDI und ESI, was das Durchführen verschiedener, zur Bestimmung der Aktualisierungswerte notwendiger Berechnungen umfaßt. Diese Berechnungen umfassen ganzzahlige Registeroperationen, die viele Prozessoren parallel zu den zur Durchführung der Wiederholungs-String-Operationen verwendeten Speicheroperationen durchführen können.
  • Der Prozeß 1000 umfaßt das Ausführen angeforderter Wiederholungs-String-Iterationen (1010). Die Werte von ECX, EDI und ESI können wahlweise gespeichert werden, um sie für einen Zugriff während der Ausführung der angeforderten Wiederholungs-String-Iterationen zu erhalten (1020). Als nächstes werden zur Aktualisierung von ECX, EDI und ESI notwendige Berechnungen parallel zur Ausführung der angeforderten Wiederholungs-String-Iterationen durchgeführt (1030). Schließlich werden ECX, EDI und ESI parallel mit der Ausfühung der angeforderten Wiederholungs-String-Iterationen wahlweise aktualisiert (1040). Der Prozeß 1000 läßt eine Verwendung von Leerlaufkapazitäten eines Prozessors zu und vermeidet zumindest einen Teil der sich ergebenden Verzögerung, falls der Overhead bis nach der Ausführung der Iterationen nicht begonnen worden wäre.
  • Zusätzliche Implementierungen
  • Wieder mit Bezugnahme auf 1 kann der Prozessor 120 unter Verwendung einer Struktur oder einer Vorrichtung implementiert sein, die zur Befehlsausführung geeignet sind. Beispiele umfassen einen Mikroprozessor, einen Kontroller oder eine Logikvorrichtung. Die verschiedenen Speicher 130, 150, 160, die auch als Speichermedien bezeichnet werden, können mit Hilfe einer Struktur oder einer Vorrichtung zur zumindest temporären Datenspeicherung implementiert sein. Beispiele umfassen ein Register, einen Direktzugriffsspeicher („RAM"), einen Nur-Lese-Speicher („ROM") und eine Floppy-Disk. Die Elektronikschaltung 140 kann mit Hilfe einer geeigneten Struktur oder Vorrichtung implementiert sein, die zur Durchführung einer Funktion konfiguriert werden kann. Beispiele umfassen eine integrierte Schaltung. Der Computer 110 kann mit Hilfe einer Struktur oder einer Vorrichtung implementiert sein, die die in 1 angegebenen Elemente umfaßt. Beispiele umfassen einen allgemein verwendbaren Computer, wie beispielsweise einen Personalcomputer, einen zweckgebundenen Computer, einen Personal Digital Assistent („PDA"), einen elektronischen Organizer, eine elektronische Spielvorrichtung, ein Mobiltelefon, eine Paging (Seitenauswahl)-Vorrichtung oder eine Fernsteuerung. Der Netzcomputer 170 kann auf die oben bezüglich des Computers 110 beschriebenen Arten implementiert sein. Die Netzverbindung 180 kann eine Vielzahl von Verbindungen, wie beispielsweise eine Kabelverbindung, eine drahtlose Verbindung, eine Lokalbereichsnetzverbindung und eine weiträumige Netzverbindung umfassen.
  • Spezielle Implementierungen können Gebrauch von Schaltungen zur Durchführung einer oder mehrerer der offenbarten Prozesse machen. Derartige Schaltungen können beispielsweise einen Speicher, einen Prozessor mit oder ohne Mikrocodeteil oder Hardwareteil, einen Mikrocodeteil eines Prozessors, einen Hardwareteil eines Prozessors, einen Kontroller, eine Logikvorrichtung, eine analoge oder digitale Schaltung oder einen Chip oder eine andere integrierte Schaltung umfassen. Beispielsweise können einer oder mehrere der offenbarten Prozesse mit Hilfe eines Prozessors, der als Mikrocode im Prozessor gespeicherte Befehle ausführt oder mit Hilfe von Hardware in einem Prozessor einschließlich beispielsweise eines Hardwaresequenzers, der eine Hardwarezustandsmaschine steuert, implementiert sein. Prozesse können auch in beispielsweise in Software oder Mikrocode ablaufenden Zustandsmaschinen implementiert sein.
  • Die offenbaren Prozesse können im allgemeinen auf Befehle angewandt werden, die verschiedene Datenspeicherorte verwenden. Beispiele von Datenspeicherorten umfassen Prozessorregister, sonstige Prozessorspeicher, sonstige Computerspeicher und externe Speicher.
  • Es wurde eine Anzahl von Implementierungen beschrieben. Beispielsweise können Implementierungen auf einen selbstständigen Rechner beschränkt sein oder einen Rechner umfassen, der mit einem anderen Rechner vernetzt ist. Dennoch ist verständlich, daß verschiedene Abwandlungen vorgenommen werden können. Dementsprechend befinden sich auch andere Implementierungen innerhalb des Umfangs der folgenden Ansprüche.
  • Zusammenfassung
  • Das Durchführen von Wiederholungs-String-Operationen kann das Ausrichten eines Quelldatenortes oder Zieldatenortes mit einem Ort umfassen, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten das Durchführen einer String-Operation umfaßt, die Daten mit einer Größe verwendet, die gleich der Operandengröße ist. Nach dem Ausrichten kann eine String-Operation durchgeführt werden, die Daten mit einer größeren Größe als der Operandengröße verwendet. Das Durchführen von Wiederholungs-String-Operationen kann das Ausgeben einer ersten vorbestimmten Zahl von Iterationen umfassen, falls eine Operandengröße eine vorbestimmte Größe ist, und das Ausgeben einer zweiten vorbestimmten Zahl von Iterationen ansonsten. Das Durchführen von Wiederholungs-String-Operationen kann ein Bestimmen, daß eine angeforderte Zahl von Iterationen in einer Wiederholungs-String-Operation innerhalb eines vorbestimmten Mehrzahlenbereichs liegt und das Ausgeben genau der angeforderten Zahl von Iterationen für jeden beliebigen Wert der angeforderten Zahl in diesem Bereich umfassen.

Claims (38)

  1. Verfahren zur Durchführung von Wiederholungs-String-Operationen, wobei das Verfahren umfaßt: Zugreifen auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten zumindest entweder eines Quelldatenorts oder Zieldatenorts auf einen ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich der Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer größeren Größe als der Operandengröße verwenden.
  2. Verfahren nach Anspruch 1, das des weiteren ein Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes auf ausgerichtete Orte umfaßt, die durch eine vorbestimmte ganze Zahl teilbar sind, wobei das Durchführen der einen oder mehreren String-Operationen zum Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes führt.
  3. Verfahren nach Anspruch 2, wobei die ausgerichteten Orte Bytes wiedergeben, die vorbestimmte ganze Zahl gleich 8 ist, und das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden von Daten mit einer Größe von 8 Byte vom Quelldatenort; und Speichern der geladenen Daten mit der Größe von 8 Byte am Zieldatenort.
  4. Verfahren nach Anspruch 2, wobei die ausgerichteten Orte Bytes wiedergeben, die vorbestimmte ganze Zahl gleich 16 ist und das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden von Daten mit einer Größe von 16 Byte vom Quelldatenort; und Speichern der geladenen Daten mit der Größe von 16 Byte am Zieldatenort.
  5. Verfahren nach Anspruch 1, wobei nur entweder der Quelldatenort oder der Zieldatenort mit einem ausgerichteten Ort ausgerichtet ist, der durch eine vorbestimmte ganze Zahl teilbar ist.
  6. Verfahren nach Anspruch 5, wobei nur der Zieldatenort mit einem ausgerichteten Ort ausgerichtet ist, der durch die vorbestimmte Zahl teilbar ist.
  7. Verfahren nach Anspruch 6, wobei der ausgerichtete Ort Bytes wiedergibt, die vorbestimmte ganze Zahl gleich 16 ist, der Quelldatenort mit einem ausgerichteten Ort ausgerichtet ist, der durch 8 teilbar ist und das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer Größe von 8 Byte vom Quelldatenort; Vorschieben des Quelldatenortes um 8 Byte; Laden einer zweiten Datengruppe mit einer Größe von 8 Byte vom Quelldatenort; Verknüpfen der ersten und zweiten Datengruppe in eine 16-Byte-Datengruppe; Speichern der 16-Byte-Datengruppe am Zieldatenort.
  8. Verfahren nach Anspruch 6, wobei der ausgerichtete Ort Bytes wiedergibt, die vorbestimmte ganze Zahl gleich 16 ist und das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer Größe von 16 Byte von einem nächstgelegenen ausgerichteten Datenort, der durch 16 teilbar ist und sich am oder unterhalb des Quelldatenortes befindet; Laden einer zweiten Gruppe von Daten mit einer Größe von 16 Byte von einem nächstgelegenen ausgerichteten Datenort, der durch 16 teilbar ist und sich am oder oberhalb des Quelldatenortes befindet; Verknüpfen der ersten und zweiten Datengruppe zu einer verknüpften 16 Byte-Datengruppe entsprechend Daten am Quelldatenort; und Speichern der verknüpften 16 Byte-Datengruppe am Zieldatenort.
  9. Verfahren nach Anspruch 1, wobei das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer ersten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder unterhalb des Quelldatenortes befindet; Laden einer zweiten Datengruppe mit einer zweiten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder oberhalb des Quelldatenortes befindet; Verknüpfen der ersten und zweiten Datengruppe in eine verknüpfte Datengruppe mit einer dritten vorbestimmten Größe und entsprechend Daten am Quelldatenort; und Speichern der verknüpften Datengruppe am Zieldatenort.
  10. Verfahren nach Anspruch 1, wobei der ausgerichtete Ort Bytes wiedergibt und die vorbestimmte ganze Zahl gleich einer Zahl von Bytes mit einer Größe ist, die größer als die Operandengröße ist.
  11. Verfahren nach Anspruch 1, wobei der ausgerichtete Ort Bytes wiedergibt und die vorbestimmte ganze Zahl aus der Gruppe bestehend aus 8 und 16 gewählt wird.
  12. Verfahren nach Anspruch 1, wobei das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten ein Vorwärtsbewegen umfaßt.
  13. Verfahren nach Anspruch 1, wobei Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten ein Rückwärtsbewegen umfaßt.
  14. Verfahren nach Anspruch 1, wobei das Verfahren mittels eines Prozessors durchgeführt wird.
  15. Artikel umfassend ein Speichermedium mit darauf gespeicherten Befehlen, die beim Ausführen durch einen Rechner zumindest zum folgenden führen: Zugriff auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten zumindest entweder eines Quelldatenorts oder eines Zieldatenorts mit einem ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich einer Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer Größe verwenden, die größer als die Operandengröße ist.
  16. Artikel nach Anspruch 15, wobei die Befehle, wenn sie von einem Rechner ausgeführt werden, zum Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes auf ausgerichtete Orte führen, die durch die vorbestimmte ganze Zahl teilbar sind, wobei das Durchführen der einen oder mehreren String-Operationen zum Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes führt.
  17. Artikel nach Anspruch 15, wobei das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer ersten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder unterhalb des Quelldatenortes befindet; Laden einer zweiten Datengruppe mit einer zweiten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder oberhalb des Quelldatenortes befindet; Verknüpfen der ersten und zweiten Datengruppe zu einer verknüpften Datengruppe mit einer dritten vorbestimmten Größe und entsprechend Daten am Quelldatenort; und Speichern der verknüpften Datengruppe am Zieldatenort.
  18. Vorrichtung zur Durchführung von Wiederholungs-String-Operationen, wobei die Vorrichtung Schaltungen zur Durchführung zumindest der folgenden Operationen umfaßt: Zugreifen auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten zumindest entweder eines Quelldatenorts oder eines Zieldatenorts mit einem ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich einer Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die größer als die Operandengröße ist.
  19. Vorrichtung nach Anspruch 18, wobei die Schaltung sowohl den Quelldatenort als auch den Zieldatenort mit ausgerichteten Orten ausrichtet, die durch die vorbestimmte ganze Zahl teilbar sind, wobei das Durchführen der einen oder mehreren String-Operationen zum Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes führt.
  20. Vorrichtung nach Anspruch 18, wobei das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer ersten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte Zahl teilbar ist und sich am oder unterhalb des Quelldatenortes befindet; Laden einer zweiten Datengruppe mit einer zweiten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder oberhalb des Quelldatenortes befindet; Verknüpfen der ersten und zweiten Datengruppe in eine verknüpfte Datengruppe mit einer dritten vorbestimmten Größe und entsprechend Daten am Quelldatenort; und Speichern der verknüpften Datengruppe am Datenzielort.
  21. Vorrichtung nach Anspruch 18, wobei die Schaltung einen Speicher mit darin gespeicherten Befehlen umfaßt, um zumindest eine der folgenden Operationen durchzuführen: Zugreifen auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten zumindest entweder eines Quelldatenorts oder eines Zieldatenorts mit einem ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operation umfaßt, die Daten mit einer Größe verwenden, die gleich einer Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer Größe verwenden, die größer als die Operandengröße ist.
  22. Vorrichtung nach Anspruch 18, wobei die Schaltung einen Prozessor zur Durchführung von zumindest einer der folgenden Operationen umfaßt. Zugriff auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten von zumindest entweder eines Quelldatenorts oder eines Zieldatenorts mit einem ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich einer Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer Größe verwenden, die größer als die Operandengröße ist.
  23. Vorrichtung nach Anspruch 18, wobei die Schaltung umfaßt: einen Speicher; einen Prozessor; und einen den Speicher und den Prozessor verbindenden Bus.
  24. Verfahren zur Durchführung von Wiederholungs-String-Operationen, wobei das Verfahren umfaßt: Bestimmen einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgeben einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgeben einer zweiten vorbestimmten Zahl von Iterationen.
  25. Verfahren nach Anspruch 24, wobei die erste vorbestimmte Zahl von Iterationen basierend auf einer Vorhersage einer angeforderten Zahl von Iterationen für Wiederholungs-Byte-String-Operationen ausgewählt ist.
  26. Verfahren nach Anspruch 24, wobei die erste vorbestimmte Zahl von Iterationen 3 ist, die zweite vorbestimmte Zahl von Iterationen 8 ist, die vorbestimmte Größe ein Byte ist und 8 Iterationen für Operandengrößen eines Ortes oder Doppelwortes ausgegeben werden.
  27. Verfahren nach Anspruch 24, das des weiteren umfaßt: Bestimmen, daß eine angeforderte Zahl von Iterationen der Wiederholungs-String-Operation größer ist als die vorbestimmte Zahl ausgegebener Iterationen, bei der es sich entweder um die erste vorbestimmte Zahl oder die zweite vorbestimmte Zahl handelt; und Ausgeben zusätzlicher Iterationen je nach Notwendigkeit, so daß genau die angeforderte Zahl von Iterationen der Wiederholungs-String-Operation ausgegeben wird.
  28. Verfahren nach Anspruch 27, wobei das Bestimmen, daß die angeforderte Zahl von Iterationen größer ist als die vorbestimmte Zahl, vor einem Ausgeben der vorbestimmten Zahl von Iterationen durchgeführt wird.
  29. Verfahren nach Anspruch 27, wobei das Bestimmen, daß die angeforderte Zahl von Iterationen größer ist als die vorbestimmte Zahl, nach einem Ausgeben der vorbestimmten Zahl von Iterationen durchgeführt wird.
  30. Verfahren zur Durchführung von Wiederholungs-String-Operationen, wobei die Vorrichtung eine Schaltung zur Durchführung von zumindest den folgenden Operationen umfaßt: Bestimmen einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgeben einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgeben einer zweiten vorbestimmten Zahl von Iterationen.
  31. Vorrichtung nach Anspruch 30, wobei die Schaltung einen Speicher mit darin gespeicherten Befehlen zur Durchführung zumindest einer der folgenden Operationen umfaßt: Bestimmung einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgabe einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgabe einer zweiten vorbestimmten Zahl von Iterationen.
  32. Vorrichtung nach Anspruch 30, wobei die Schaltung einen Prozessor zur Durchführung von zumindest einer der folgenden Operationen umfaßt: Bestimmung einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgabe einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgabe einer zweiten vorbestimmten Zahl von Iterationen.
  33. Vorrichtung nach Anspruch 30, wobei die Schaltung zur Durchführung zumindest der folgenden weiteren Operation betrieben werden kann: Bestimmung, daß eine angeforderte Zahl von Iterationen der Wiederholungs-String-Operation größer als die vorbestimmte Zahl ausgegebener Iterationen ist, bei der es sich entweder um die erste oder die zweite vorbestimmte Zahl handelt; und Ausgabe zusätzlicher Iterationen je nach Notwendigkeit, so daß genau die angeforderte Zahl von Iterationen der Wiederholungs-String-Operation ausgegeben wird.
  34. Artikel, umfassend ein Speichermedium mit darauf gespeicherten Befehlen, die bei einer Ausführung durch einen Rechner zumindest zum folgenden führen: Bestimmen einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgabe einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgabe einer zweiten vorbestimmten Zahl von Iterationen.
  35. Artikel nach Anspruch 34, wobei das Speichermedium darauf gespeicherte Befehle umfaßt, die wenn sie von einem Rechner ausgeführt werden, zumindest zu den weiteren Operationen führen: Bestimmen, daß eine vorbestimmte Zahl von Iterationen der Wiederholungs-String-Operation größer ist als die vorbestimmte Zahl ausgegebener Iterationen ist, bei der es sich entweder um die erste oder zweite vorbestimmte Zahl handelt; und Ausgabe zusätzlicher Iterationen je nach Notwendigkeit, so daß genau die angeforderte Zahl von Iterationen der Wiederholungs-String-Operation ausgegeben wird.
  36. Verfahren zur Durchführung von Wiederholungs-String-Operationen, wobei das Verfahren umfaßt: exaktes Ausgeben einer angeforderten Zahl von Iterationen für eine Wiederholungs-String-Operation; und Ausführen der angeforderten Zahl von Iterationen der String-Operation, wobei die String-Operation zur Übertragung von Daten mit einer spezifischen Byte-Länge vorgesehen ist, wobei das Ausführen umfaßt: Verwenden eines Hardwarezählers zur Speicherung eines zur Identifizierung sowohl eines Quelldatenortes als auch eines Zieldatenortes verwendeten Iterationswertes; Multiplizieren durch Hardware des in einem Hardwarezähler gespeicherten Iterationswertes mit der spezifischen Byte-Länge zur Bestimmung eines tatsächlichen Speicheradressoffsets des Quelldatenortes und des Zieldatenortes; Ändern des im Hardwarezähler gespeicherten Iterationswerts um 1 nach jeder Iteration; und Zuführen des tatsächlichen Speicheradressoffsets zu einem Mikrocode.
  37. Vorrichtung zur Durchführung von Wiederholungs-String-Operationen, wobei die Vorrichtung eine Schaltung zur Durchführung zumindest der folgenden Operationen umfaßt: exaktes Ausgeben einer angeforderten Zahl von Iterationen für eine Wiederholungs-String-Operation; und Ausführen der angeforderten Zahl der Iterationen der String-Operation, wobei die String-Operation zur Übertragung von Daten mit einer spezifischen Byte-Länge vorgesehen ist, wobei das Ausführen umfaßt: Verwenden eines Hardwarezählers zur Speicherung eines zur Identifizierung sowohl eines Quelldatenortes als auch eines Zieldatenortes verwendeten Iterationswertes; Multiplizieren durch Hardware des in einem Hardwarezähler gespeicherten Iterationswertes mit der spezifischen Byte-Länge zur Bestimmung eines tatsächlichen Speicheradressoffsets des Quelldatenortes und des Zieldatenortes; Ändern des im Hardwarezähler gespeicherten Iterationswertes um 1 nach jeder Iteration; und Zuführen des tatsächlichen Speicheradressoffsets zu einem Mikrocode.
  38. Artikel, umfassend ein Speichermedium mit darauf gespeicherten Befehlen, die, wenn sie mit Hilfe einer Maschine ausgeführt werden, zumindest zum folgenden führen: Ausgeben genau der angeforderten Zahl von Iterationen für die Wiederholungs-String-Operation für jeden Wert der angeforderten Zahl, die sich innerhalb des vorbestimmten Bereichs befindet; und Ausführen der angeforderten Zahl von Iterationen der String-Operation, wobei die String-Operation zur Übertragung von Daten mit einer spezifischen Byte-Länge vorgesehen ist, wobei das Ausführen umfaßt: Verwenden eines Hardwarezählers zum Speichern eines zur Identifizierung sowohl eines Quelldatenortes als auch eines Zieldatenortes verwendeten Iterationswertes; Multiplizieren durch Hardware des in einem Hardwarezähler gespeicherten Iterationswertes mit der spezifischen Bytelänge zur Bestimmung eines tatsächlichen Speicheradressoffsets des Quelldatenortes und des Zieldatenortes; Ändern des im Hardwarezähler gespeicherten Iterationswertes um eins nach jeder Iteration; und Zuführen des tatsächlichen Speicheroffsets zu einem Mikrocode.
DE10393188T 2002-08-28 2003-08-28 Verarbeitung von Wiederholungs-String-Operationen Ceased DE10393188T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/233,155 2002-08-28
US10/233,155 US7100029B2 (en) 2002-08-28 2002-08-28 Performing repeat string operations
PCT/US2003/027386 WO2004021171A1 (en) 2002-08-28 2003-08-28 Performing repeat string operations

Publications (1)

Publication Number Publication Date
DE10393188T5 true DE10393188T5 (de) 2005-09-01

Family

ID=31977168

Family Applications (1)

Application Number Title Priority Date Filing Date
DE10393188T Ceased DE10393188T5 (de) 2002-08-28 2003-08-28 Verarbeitung von Wiederholungs-String-Operationen

Country Status (7)

Country Link
US (1) US7100029B2 (de)
CN (1) CN100353314C (de)
AU (1) AU2003263046A1 (de)
DE (1) DE10393188T5 (de)
HK (1) HK1083139A1 (de)
TW (1) TWI257572B (de)
WO (1) WO2004021171A1 (de)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7366885B1 (en) 2004-06-02 2008-04-29 Advanced Micro Devices, Inc. Method for optimizing loop control of microcoded instructions
US8243798B2 (en) * 2006-12-20 2012-08-14 Intel Corporation Methods and apparatus for scalable video bitstreams
US9164770B2 (en) * 2009-10-23 2015-10-20 Mindspeed Technologies, Inc. Automatic control of multiple arithmetic/logic SIMD units
CN101794308B (zh) * 2010-03-04 2012-03-14 哈尔滨工程大学 一种面向有意义串挖掘的重复串提取方法及装置
RU2010145507A (ru) * 2010-11-10 2012-05-20 ЭлЭсАй Корпорейшн (US) Устройство и способ управления микрокомандами без задержки
CN106066843A (zh) * 2016-06-02 2016-11-02 北京赛思信安技术股份有限公司 一种高速Base64并行编解码装置
CN110134441B (zh) * 2019-05-23 2020-11-10 苏州浪潮智能科技有限公司 Risc-v分支预测方法、装置、电子设备及存储介质
US20230418611A1 (en) * 2022-06-23 2023-12-28 Arm Limited Prediction of number of iterations of a fetching process
US11803390B1 (en) * 2022-07-01 2023-10-31 Arm Limited Prediction class determination

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4234487A1 (de) 1992-10-14 1994-04-21 Henkel Kgaa Wäßrige Detergensgemische
JPH0721034A (ja) * 1993-06-28 1995-01-24 Fujitsu Ltd 文字列複写処理方法
US5701517A (en) * 1994-12-22 1997-12-23 Cirrus Logic, Inc. Pipelined alignment shifter and method for universal bit field boundary alignment
US5784607A (en) * 1996-03-29 1998-07-21 Integrated Device Technology, Inc. Apparatus and method for exception handling during micro code string instructions
US5835972A (en) * 1996-05-28 1998-11-10 Advanced Micro Devices, Inc. Method and apparatus for optimization of data writes
US6032252A (en) * 1997-10-28 2000-02-29 Advanced Micro Devices, Inc. Apparatus and method for efficient loop control in a superscalar microprocessor

Also Published As

Publication number Publication date
HK1083139A1 (en) 2006-06-23
TW200414031A (en) 2004-08-01
CN1695115A (zh) 2005-11-09
TWI257572B (en) 2006-07-01
WO2004021171A1 (en) 2004-03-11
US7100029B2 (en) 2006-08-29
US20040044885A1 (en) 2004-03-04
AU2003263046A1 (en) 2004-03-19
CN100353314C (zh) 2007-12-05

Similar Documents

Publication Publication Date Title
DE3151745C2 (de)
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE69133302T2 (de) Registerabbildung in einem einzigen Taktzyklus
DE102010051476B4 (de) Addierbefehle, um drei Quelloperanden zu addieren
DE102015109124B4 (de) Cache-Wegvorhersage
DE3424962C2 (de)
DE2846495C2 (de) Zentraleinheit
DE69028269T2 (de) Virtuelles Adressierungsverfahren zum Betrieb eines Speichers in einer Datenverarbeitungsanlage und Einrichtung zur Ausführung besagten Verfahrens
CH650600A5 (de) Zentralprozessoreinheit einer datenverarbeitungsanlage mit operationscode-erweiterungsregister.
DE2417795C2 (de) Datenverarbeitungsanlage
DE2230102A1 (de) Rechenwerk fuer variable wortlaengen
DE112011105121T5 (de) Systeme, Vorrichtungen und Verfahren zum Schrittmustersammeln von Datenelementen und Schrittmusterstreuen von Datenelementen
DE2630323B2 (de) Datenspeichereinrichtung mit einem Hauptspeicher, einem Hilfsspeicher und einer Vorausschaulogik
DE2611598A1 (de) Uebersetzungseinrichtung fuer speicheradressen
DE112010002773T5 (de) Entpacken von gepackten daten auf mehreren spuren
DE2903349A1 (de) Datenverarbeitungseinrichtung
DE102015007422A1 (de) Befehlssatz zum Eliminieren fehlausgerichteter Speicherzugriffe während der Verarbeitung eines Arrays mit fehlausgerichteten Datenzeilen
DE2424931A1 (de) Datenverarbeitungsanlage, insbesondere mikroprogramm-datenverarbeitungseinheit mit parallelen befehlsstroemen fuer mehrere ebenen von subbefehlsvorraeten
DE112013005343T5 (de) Befehle für Codierungsalgorithemen mit gleitendem Fenster
DE3043653C2 (de) Datenverarbeitungsanlage
DE1285219B (de) Steuerwerk zur Ausfuehrung von Unterprogrammen
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
DE69231237T2 (de) Datenverarbeitungsvorrichtung
DE10393188T5 (de) Verarbeitung von Wiederholungs-String-Operationen
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law

Ref document number: 10393188

Country of ref document: DE

Date of ref document: 20050901

Kind code of ref document: P

R011 All appeals rejected, refused or otherwise settled
R003 Refusal decision now final

Effective date: 20130930