DE60037229T2 - Verfahren zum Übersetzen eines Quellbefehls in einen Zielbefehl und Rechnerprogramm für das Verfahren - Google Patents

Verfahren zum Übersetzen eines Quellbefehls in einen Zielbefehl und Rechnerprogramm für das Verfahren Download PDF

Info

Publication number
DE60037229T2
DE60037229T2 DE60037229T DE60037229T DE60037229T2 DE 60037229 T2 DE60037229 T2 DE 60037229T2 DE 60037229 T DE60037229 T DE 60037229T DE 60037229 T DE60037229 T DE 60037229T DE 60037229 T2 DE60037229 T2 DE 60037229T2
Authority
DE
Germany
Prior art keywords
der
target
expression
die
ist
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.)
Expired - Lifetime
Application number
DE60037229T
Other languages
English (en)
Other versions
DE60037229D1 (de
Inventor
Vincent Cowley Zammit
Andrew Kay
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.)
Sharp Corp
Original Assignee
Sharp 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 Sharp Corp filed Critical Sharp Corp
Application granted granted Critical
Publication of DE60037229D1 publication Critical patent/DE60037229D1/de
Publication of DE60037229T2 publication Critical patent/DE60037229T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

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

Description

  • Die vorliegende Erfindung bezieht sich auf ein Verfahren zum Übersetzen eines Quellbefehls in einen Zielbefehl. Beispielsweise kann das Verfahren verwendet werden, um effiziente Berechnung mit ganzzahligen Werten zu ermöglichen, deren Bitbreite nicht ein Vielfaches einer ursprünglichen Ganzzahlen-Bitbreite einer Zielmaschine, wie etwa einem Computer, ist. Eine andere Anwendung von solch einem Verfahren ist in der Simulation von Hochniveau-Hardware-Beschreibungssprachen. Die Erfindung bezieht sich auch auf ein Computerprogramm zum Durchführen solch eines Verfahrens, ein Speichermedium, das solch ein Programm beinhaltet, ein Computer, der durch solch ein Programm programmiert ist, und eine Übersetzung, die durch solch ein Verfahren erstellt wurde.
  • Hardware-Beschreibungssprachen, wie etwa VHDL (IEEE Computer Society. IEEE Standard VHDL Language Reference Manual. New York, USA. Juni 1994. IEEE Std 1076 1993.) und Verilog HDL (IEEE Computer Society. IEEE Standard Hardware Description Language Based an the Verilog Hardware Description Language. New York, USA. 1996. IEEE Std 1361 1995.) können verwendet werden, um das Verhalten von Hardwareschaltungen zu beschreiben. Diese Sprachen unterstützen die Beschreibung von Schaltungen, die Ganzzahl-Arithmetik durch das Bereitstellen entsprechender numerischer Typen und Operanden involvieren. Um Hardware effizient auszugestalten, werden Gewöhnlicherweise die numerischen Typen durch die Bitbreiten der Ganzzahl-Werte des Typs parametrisiert.
  • Beispielsweise definiert die IEEE 1076.3 NUMERIC_std VHDL library (IEEE Computer Society. IEEE Standard hardware Description Language Based an the Verilog Hardware Description language, New York, USA, 1996. IEEE Std 1364 1995) die UNSIGNIERTEN und SIGNIERTEN Ganzzahl-Typen auf Grundlage des Typs von Bitvektoren STD_LOGIC VECTOR. Bitvektoren sind Listen mit feststehender Länge von Bitwerten, welche die Werte 0 und 1 ebenso wie andere Zustände wie etwa U (nicht initialisiert) und Z (hohe Impedanz) enthalten. Obwohl die Länge von Bitvektoren (und daher der numerischen Typen) bestimmt ist, kann man einige Typen von Bitvektoren (wobei jede unterschiedliche Längen auf weisen) in einer Hardwareausgestaltung verwenden. Bemerke, dass, während die einzelnen Bits eines VHDL numerischen Typs andere Wert als 0 und 1 aufweisen kann, enthält ein numerischer Typ einige Werte, welche nicht der gültigen ganzen Zahl entsprechen.
  • Hochniveau-Hardware-Beschreibungssprachen, wie etwa die Bach-Sprache (Akihisa Yamada, Koichi Nishida, Ryoji Sakurai, Andrew Kay, Toshio Nomura und Takashi Kambe. Hardwaresynthese mit dem Bach-System. Internationales Symposium auf Schaltungen und Systeme, 1999, GB 2 317 245 ), kann verwendet werden, um die Hardware auf einem Niveau der gewöhnlich in Programmierungssprachen verwendeten Abstraktion, wie etwa C (Brian W. Kernihan and Dennis M. Ritchie. The C Programming Language, Prentice-Hall, USA, zweite Auflage, 1988) zu beschreiben.
  • Da die C-Sprache und Programmierungssprachen im Allgemeinen ausgestaltet sind, um verwendet zu werden, um einige besondere Architekturen zu programmieren, hängen die Semantiken ihrer Ganzzahl-Typen und Ausdrücke im Allgemeinen von der zu programmierenden Zielarchitektur ab. Beispielsweise liefert die C-Sprache (Brian W. Kernihan and Dannis M. Ritchie. The C Programming Language, Prentice-Hall, USA, zweite Auflage, 1988) die Ganzzahl- und unsignierten Ganzzahl-Typen, welche den signierten und unsignierten ganzen Zahlen entsprechen, deren Bitbreite Gewöhnlicherweise durch die Zielmaschine unterstützt wird. Die C Ganzzahl-Typen sind zu unflexibel, um für die ausreichende Ausgestaltung von Hardware verwendet zu werden und daher erweitert die Bach-Hardware-Beschreibungssprache C durch Ganzzahl-Typen exakter Breit, wie etwa intw bzw. unsignierte intw für signierte bzw. unsignierte w-Bit-Ganzzahlen.
  • Einer der vielen Vorteile der Verwendung einer auf Programmierungssprache basierenden, Hochniveau-Hardware-Beschreibungssprache ähnlich Bach gegenüber der Verwendung eines niedrigeren Niveaus, wie etwa VHDL, ist die Fähigkeit, das Verhalten (an einer allgemeinen Architektur) der Ausgestaltungen mit sehr viel höheren Geschwindigkeiten zu simulieren. Beispielsweise, aufgrund des besonderen Niveaus der Abstraktion der numerischen VHDL-Typen, die zuvor beschrieben sind, kann man nicht die Ganzzahl-Arithmetik der Zielmaschine, die zur Simulation direkt verwendet ist, verwenden. Im Allgemeinen, müsste man jeden Bitwert eines numerischen Typs als ein getrenntes Byte/Wort auf der Zielmaschine darstellen, und dafür kann die Simulation der arithmetischen VHDL-Befehle langsamer sein als die ursprüngliche Arithmetik der Zielmaschine. Obwohl die Bach-Arithmetik der ursprünglichen Arithmetik der Zielmaschine ähnlicher ist als die numerische VHDL-Arithmetik, kann man dennoch nicht die ursprüngliche Zielmaschinen-Arithmetik ursprünglich aufgrund des Unterschiedes in den Bitbreiten verwenden. Man muss daher Verfahren für die korrekte und effiziente Simulation der exakten Breiten der Arithmetik, die Gewöhnlicherweise in Hardware Beschreibungen verwendet werden, entwickeln.
  • Erneut zielfähige Compiler, wie etwa der Valen-C-Compiler (Graduate School of Information Science and Electrical Engineering (Kyushu University), Advanced Software Technology and Mechatronics Research Institute of Kyoto, Institute of Systems and Information Technologies (Kyushu) and Mitsubishi Electric Corporation. Valen-C Compiler Development Document (English Version 1.01). Information Technology promotion Agency, Japan, April 1998), kann verwendet werden, um ein Eingangsquellprogramm in die Anordnungs-/Maschinensprache von unterschiedlichen Zielmaschinen zu übersetzen. Die Eingangssprache des Valen-C-Compilers ist die Valen-C-Programmierungssprache, welche auch die ANSI-C-Sprache durch exakte Ganzzahl-Breitentypen umfasst. Der Programmierer kann Ganzzahl-Typen der Form intw festlegen, wobei w jede natürliche Zahl außer Null ist, die die Breite des Typs darstellt. Jedoch ist die Semantik der Valen-C-Ganzzahl-Arithmetik dennoch von der Zielarchitektur abhängig und ein Ganzzahl-Typ intw wird tatsächlich definiert, um wenigstens w-Bits lang zu sein, und seine Breite ist ein Vielfaches der Wortgröße der Zielmaschine. Als ein Ergebnis unterscheidet sich das Verhalten des übersetzten Codes von einer Zielmaschine zur anderen.
  • De Coster et al, „Code generation for compiled bit-time simulation of DSP applications", 11. International Symposium an System Synthesis (ISSS '98) 2–4, Dezember 1998, Hsinch, Taiwan (IEEE Computer Society Publications) Seiten 9–14 beschreibt ein Verfahren, das zum Übersetzen von Festpunkt- Ganzzahl-Arithmetik in die Standard-Ganzzahl-Arithmetik für die effiziente Simulation der digitalen Signalverarbeitung (DSP)-Anwendungen geeignet ist. Jedoch wird kein Versuch gemacht, die Werte-Korrekturbefehle in den sich ergebenden Ganzzahl-Arithmetik-Ausdrücken zu minimieren, welche folglich die Zielmaschinen-Resourcen unzureichend nutzen.
  • EP 0 626 640 und EP 0 626 641 beschreiben Techniken zum Umwandeln von Hochniveau-Verarbeitungssprachen in Maschinensprache. Diese Techniken benötigen das Einschreiten eines Anwenders, um festzustellen, ob der Wert eines Befehles wahrscheinlich überlaufen wird, wenn ein Programm durch einen Computer ausgeführt wird. In diesem Fall wird ein Werte-Korrekturbefehl ausgeführt und kann einen Maskierungs-Befehl oder einen Signum-Erweiterungsbefehl umfassen, abhängig davon, ob der Befehl unsigniert oder signiert ist.
  • US 5,418,959 beschreibt ein Verfahren zur Optimierung von Instruktions-Befehlsgrößen in einem Compiler, dessen Zielmaschine mehrfache Instruktions-Befehlsgrößen unterstützt, um die herkömmliche Situation zu unterstützen, in der sich Daten automatisch auf die gleiche Größe wie die größte Befehlsgröße, die auf der Zielmaschine unterstützt wird, ausdehnen, selbst wenn eine kleinere oder effizientere Befehlsgröße möglich gewesen wäre.
  • Gemäß einem ersten Aspekt der Erfindung ist hier ein Computerimplementiertes Verfahren zum Übersetzen eines Quellbefehls auf wenigstens einem Quelloperanden vorgesehen, der eine lineare ganze Zahl mit einer ersten Bitbreite aufweist, in einen entsprechenden Zielbefehl zur Ermittlung durch einen Prozessor, der Ganzzahl-Befehle von binären ganzen Zahlen an der zweiten Bitbreite ausführt, die größer als die erste Bitbreite ist, wobei das Verfahren umfasst: Übersetzen des Quellbefehls in einen Zielbefehl, der wenigstens einen entsprechenden Zieloperanden hat, wobei der oder jeder Zieloperand einen unbenutzten Abschnitt hat, der nicht benutzt wird, um den Wert eines entsprechenden Quellbefehls darzustellen, wobei der Rest ein unbenutzter Abschnitt ist; und gekennzeichnet durch Identifizieren, ob der Wert von unbenutzten Bits in den unbenutzten Abschnitt von dem oder von jedem Zieloperanden den Wert des unbenutzten Abschnitts der Zielbefehlsermittlung beeinflusst und, ob der Zielbefehl oder einer der Zielbefehle in der Lage ist, eines oder mehrere unbenutzte Bits mit einem unrichtigen Wert zu haben, und, wenn ja, Addieren zu dem Zielbefehl einen Korrekturbefehl, um den Wert von dem einen oder jedem der mehreren Bits mit unrichtigem Wert zu korrigieren, bevor der Zielbefehl ausgeführt wird.
  • Der wenigstens eine Quellbefehl kann wenigstens eine Konstante aufweisen.
  • Der wenigstens eine Quellbefehl kann wenigstens eine Variable aufweisen.
  • Der wenigstens eine Quellbefehl kann wenigstens einen Unter-Befehl aufweisen. Das Verfahren kann für den Befehl und den oder jeden Unter-Befehl rekursiv durchgeführt werden.
  • Der Quellbefehl kann eine arithmetische Operation aufweisen. Der Identifizierungsschritt kann das Identifizieren eines unsignierten, unmaskierten Zielbefehls aufweisen, und der Korrekturschritt kann einen Maskierungsschritt aufweisen. Die erste Bitbreite kann w-Bits sein und der Maskierungsschritt kann das Durchführen einer bitweisen UND-Operation zwischen dem unsignierten, unmaskierten Zieloperanden und einer binären Darstellung von (2w – 1) aufweisen. Der Identifizierungsschritt kann das Identifizieren eines signierten, nicht-Signum-erweiterten Zieloperanden umfassen und der Korrekturschritt kann einen Signum-Erweiterungsschritt umfassen.
  • Der Quellbefehl kann einen Relationsbefehl umfassen und der Korrekturschritt kann einen monotonen Befehl umfassen.
  • Der benutzte Abschnitt kann eine erste Bitbreite haben.
  • Das Verfahren kann das Speichern aller Darstellungen des oder jedes Zieloperanden umfassen, der/die wenigstens die Bitbreite des benutzten Abschnitts angibt/angeben. Die Darstellung kann angeben, ob der Zieloperand signiert oder unsigniert ist.
  • Gemäß einem zweiten Aspekt der Erfindung ist hier ein Computerprogramm zur Durchführung eines Verfahrens gemäß dem ersten Aspekt der Erfindung vorgesehen.
  • Gemäß dem dritten Aspekt der Erfindung ist hier ein Speichermedium vorgesehen, das ein Computerprogramm gemäß dem zweiten Aspekt der Erfindung beinhaltet.
  • Gemäß einem vierten Aspekt der Erfindung ist hier ein Computer vorgesehen, der durch ein Programm gemäß dem zweiten Aspekt der Erfindung programmiert ist.
  • Der Begriff „unbenutztes Bit" eines Zieloperanden bezieht sich auf jedes Bit davon, welches nicht benutzt ist, um den Wert eines entsprechenden Quelloperanden darzustellen.
  • Der Begriff „unrichtiger Wert" eines unbenutzten Bits bezieht sich auf einen Wert eines unbenutzten Bits, welches, wenn es in dem Zieloperand dargestellt ist, dazu führt, dass der Zielbefehl auf einen Wert in dem benutzten Abschnitt berechnet wird, der unterschiedlich zu jenem des entsprechenden Quellbefehls ist.
  • Es ist folglich möglich, ein Verfahren für die effiziente Berechnung von arithmetischen und Relationsausdrücken bereitzustellen, die ganze Zahlen jeder Bitbreite einschließen wobei eine vorgegebene Vorrichtung verwendet wird, welche nur Ganzzahl-arithmetische Ausdrücke von bestimmten Bitbreiten berechnen kann.
  • Für eine(n) vorgegebene(n) Vorrichtung oder Mechanismus, genannt die Zielmaschine, welche Ganzzahl-Arithmetik von einigen festgelegten Breiten berechnen kann, sozusagen, w1, w2, etc., übersetzt solch ein Verfahren arithmetische Ausdrücke, die ganze Zahlen jeder Breite involvieren, in effiziente arithmetische Ausdrücke, die ganze Zahlen von festgelegten Breiten einschließen. Die Sprache der Ausdrücke, die Ganzzahl-Arithmetik jeder Breite einschließen, wird als die Quellsprache bezeichnet. Ähnlich wird die Sprache der Ausdrücke, die ganze Zahlen der gegebenen Breite w1, w2, etc. einschließen, als die Zielsprache bezeichnet. Verwendung dieses Verfahrens:
    • • Ein grundsätzlicher Ganzzahl-Ausdruck (wie etwa eine Konstante oder Variable) mit der Breite w wird durch einen grundsätzlichen Ausdruck dargstellt, dessen Breite jene der engsten Zielsprachen-Ganzzahl ist, welche wenigstens w-Bits breit ist. Beispielsweise ist ein grundlegender unsignierter Ausdruck der Breite 5 durch einen grundsätzlichen Ausdruck der Breite 16 dargestellt, wenn die Zielsprache ganze Zahlen der Breite 16, 32, 48 etc. enthält. 20(U5) ☐ 20(U16)
    • • Die Bezeichnung x(Uw) kennzeichnet die Tatsache, dass der Ausdruck ein unsignierter Ganzzahl-Typ der Breite w ist und x ☐ y kennzeichnet die Tatsache, dass der Quellausdruck x in den Zielausdruck y übersetzt wird.
    • • Arithmetische Befehle in der Zielsprache werden verwendet, wenn immer es möglich ist. Beispielsweise: a(U5) + b(U5) ☐ a(U16) + b(U16)
    • • Wegen der unterschiedlichen Breiten in der Quellsprache und Zielsprache unterscheiden sich die Werte der Zieloperationen von jenen der Quellsprache: 20(U5) + 30(U5) = 18(U5) während 20(U16) + 30(U16) = 50(U16) und daher können Werte-Korrekturbefehle benötigt werden, um sicherzustellen, dass der Wert der Befehle in dem Zielausdruck der gleiche ist wie jener in dem Quellausdruck, wenn dieser benötigt wird: a(U5) + b(U5) ☐ (a(U16) + b(U16)) & 31(U16) wobei & der Bitweise UND-Operator ist. Der Befehl x(U16) & 31(U16) korrigiert den 16 Bitwert, der in dem Ausdruck x(U16) gespeichert ist, wobei angenommen wird, dass er einen 5 Bit unsignierten Wert darstellt. Werte-Korrekturbefehle werden nicht auf jeden Unter-Ausdruck angewendet, welcher übersetzt wird, jedoch nur wenn solche Befehle benötigt werden. Beispielsweise der Ausdruck: ((a(U5) + b(U5))*c(U5))/(d(U5)) + e(U5)) wird nicht unbefangen übersetzt in: ((((a(U16) + b(U16)) & 31(U16))*c(U16) & 31(U16))/((d(U16) + e(U16)) & 31(U16)) & 31(U16))welcher 8 Zielmaschinen-Befehle verwendet, sondern in den effizienteren: (((a(U16) + b(U16))*c(U16)) & 31(U16))/((d(U16) + e(U16)) & 31(U16))welcher 6 Befehle verwendet.
    • • Dies wird durch das Verwenden einer internen Darstellung der Zielausdrücke (gespeichert in Speicherorten, oder Registern, auf der Maschine, die verwendet wird, um die Quellausdrucks-Darstellungen in Zielmaschinen-Darstellungen zu übersetzen) erreicht, welches enthält 1. die Darstellung des Zielmaschinen-Ausdrucks; 2. zusammen mit der folgenden zusätzlichen Information: das Signum des Ausdrucks, die Breite des ursprünglichen Ausdrucks (genannt die signifikante Breite), die Breite des Zielausdrucks (genannt die repräsentative Breite), und einige Information bezüglich der möglichen Werte von Bits in dem Ganzzahl-Wert der Zielausdrücke, welche nicht verwendet werden, um den Wert des Quellausdrucks (genannt die Hochbit-Eigenschaften) zu speichern. Die Bits in den Zielausdrucks-Werten, die nicht verwendet werden, um den Wert des Quellausdrucks zu speichern, werden die unbenutzten Bits genannt.
  • Diese Information wird die zusätzliche Typ-Information genannt. Von besonderer Wichtigkeit ist die Information über die Hochbit-Eigenschaften, welche darlegt, ob die folgenden zwei Eigenschaften erfüllt sind:
    • – die maskierte Eigenschaft, welche darlegt, dass all die unbenutzten Bits 0 sind.
    • – die Signum-erweiterte Eigenschaft, welche darlegt, dass all die unbenutzten Bits die gleichen sind, wie das signifikanteste Bit des Wertes des Quellausdrucks.
  • Diese zwei Eigenschaften sind signifikant, da
    • – wenn der Ausdruck unsigniert ist, der Wert des Quellausdrucks dann der gleiche wie der Wert des Zielausdrucks ist, wenn und nur dann, wenn der Zielausdruck die maskierte Eigenschaft hat.
    • – wenn der Ausdruck signiert ist, der Wert des Quellausdrucks dann der gleiche wie der Wert des Zielausdrucks ist, wenn und nur dann, wenn der Zielausdruck die Signum-erweiterte Eigenschaft hat.
  • Durch das Verwenden zusätzlicher Speicherorte, um die zusätzliche Typ-Information (abgesehen von den Speicherorten, die benötigt werden, um die Darstellung des Zielmaschinen-Ausdrucks zu speichern) zu speichern, kann solch ein Übersetzungsverfahren die richtigen Werte-Korrekturbefehle in dem Zielausdruck einsetzen, nur wenn:
    • 1. sich der Wert des Zielausdrucks von jenem des Quellausdrucks unterscheidet (das heißt, wenn der Ausdruck unsigniert ist und keine maskierte Eigenschaft hat, oder wenn er signiert ist und keine Signum-erweiterte Eigenschaft hat), und
    • 2. die zu übersetzende Operation die genauen Zielausdrucks-Werte seiner Operanden benötigt. Bestimmte Befehle, wie etwa + und *, benötigen keinen korrekten Wert für ihre Zieloperanden, solange wie die Werte in den signifikanten Bits die gleichen sind wie die Werte in den Bits des Quellausdrucks. Als ein Ergebnis müssen ihre Operanden nicht Werte korrigiert werden, wenn der Zielausdruck aufgebaut ist. Andere Befehle, wie etwa \ benötigen genaue Werte für ihre Operanden, und daher müssen sie Werte korrigiert sein, wenn ihre genaue Hochbit-Eigenschaft (maskiert, wenn der Ausdruck unsigniert ist, andererseits Signum-erweitert) nicht eingestellt ist. Das Ergebnis der bestimmten Befehle (wie etwa \, jedoch nicht + oder *) ist korrekt und dafür kann die richtige Hochbit-Eigenschaft in der zusätzlichen Typ-Information des Zielausdrucks eingesetzt werden, so dass nachfolgend keine Wertekorrektur an dem resultierenden Ausdruck benötigt wird.
  • Da Werte-Korrekturbefehle gewöhnlicher Weise nicht in allen Befehle eingesetzt werden, ist der resultierende Zielausdruck effizienter.
  • Solch ein Verfahren kann verwendet werden, wenn die Arithmetik, einschließlich ganzer Zahlen von jeder Bitbreite, auf einem Prozessor oder irgendeiner Vorrichtung berechnet werden muss, welche ausschließlich arithmetische Befehle von bestimmten Bitbreiten effizient berechnen kann. Industrielle Anwendungen von solch einem Verfahren schließen ein:
    • • Die effiziente Simulation von Hochniveau-Beschreibungen (mittels Bach oder anderweitig) von arithmetischen Schaltungen auf einigen bestimmten Zielmaschinen. Hardware wird in der Bach-Hochniveausprache beschrieben, und eine Niedrigniveau, synthetisierbare industriell starke Hardware-Beschreibung wird automatisch erzeugt. Da die Hardware-Designer eine Hochniveau-Sprache anstelle einer mit niedrigem Niveau (wie etwa VHDL) verwenden, ist das Ausgestaltungsverfahren sehr viel schneller und daher billiger, als die herkömmlichen Hardware-Auslegungs-Vorgänge. Das vorliegende Verfahren kann in der Simulationsphase des Ausgestaltungsflusses mit Bach verwendet werden, wobei die Bach-Hardware-Beschreibung validiert wird, bevor die tatsächliche Hardware synthetisiert wird. Dies macht die Simulationsphasen sehr viel schneller als das Verwenden von ursprünglichen Verfahren, wobei daher der Zeitverbrauch in der Hardware-Ausgestaltung vermindert wird.
    • • Die effiziente Simulation oder Umwandlung von arithmetischen Befehlen, die auf eine Maschine gerichtet sind, deren ursprüngliche Ganzzahl-Arithmetik sich von jener unterscheidet, die für die Simulation verwendet wird. Beispielsweise kann ein Programm, das auf einen bestimmten Prozessor gezielt ist (welcher langsamer sein kann oder nicht vollständig während der Implementierungsstufe verfügbar ist) auf einem schnelleren, vollständig verfügbaren Prozessor simuliert werden, dessen Architektur sich von der Zielmaschinen-Architektur unterscheidet.
    • • Die effiziente Simulation der Auslegung von eingebauten Systemen, wo die effiziente Simulation von sowohl Hardware als auch Software benötigt wird.
  • Vorteile, welche vollständig erreichbar sind, umfassen:
    • • Die Zielausdrücke, die durch solch ein Verfahren erzeugt wurden, werden effizient, da die ursprüngliche Ganzzahl-Arithmetik der Zielmaschine direkt verwendet wird und die Anzahl von Werte-Korrekturbefehlen vermindert wird.
    • • Das Übersetzungsverfahren selbst ist nicht Zeit-/Raum verbrauchend und können daher in Anwendungen eingesetzt werden, wo eine schnelle Umwandlung der Quellausdrücke in die Zielausdrücke benötigt wird.
  • Die vorliegende Erfindung wird ferner als Beispiel unter Bezugnahme auf die beigefügten Zeichnungen beschrieben, in denen:
  • 1 ein Flussdiagramm ist, das ein Übersetzungsverfahren darstellt, das ein Ausführungsbeispiel der Erfindung bildet;
  • 2 ein schematisches Blockdiagramm eines Computers zum Durchführen des Verfahrens ist, das in 1 dargestellt ist;
  • 3 ein schematisches Flussdiagramm ist, das ein Übersetzungsverfahren darstellt, das ein anderes Ausführungsbeispiel der Erfindung bildet;
  • 4 ein Diagramm ist, das die Bitstruktur einer Quell-Ganzzahl und einer Ziel-Ganzzahl darstellt, in das es übersetzt wird;
  • 5 ein Diagramm ist, das eine interne Datenstruktur zum Darstellen der Zielmaschinen-Ausdrücke darstellt, die in dem in 3 gezeigten Verfahren verwendet werden;
  • 6 ein Hochniveau-Flussdiagramm ist, das die Umwandlung eines Verbund-Quellausdrucks und einen Zielausdruck darstellt, und
  • 7 ein schematisches Flussdiagramm ist, das das Verwenden des Verfahrens von 3 in der Ausgestaltung in Implementierung von Hardware in der Form einer integrierten Schaltung darstellt.
  • Ähnliche Bezugszeichen beziehen sich auf ähnliche Teile während der ganzen Zeichnungen.
  • 1 stellt ein Verfahren zum Übersetzen eines Quellbefehls in einen Zielbefehl dar. Der Quellbefehl wird auf binären ganzen Zahlen einer ersten Bitbreite ausgeführt und kann einen arithmetischen Befehl oder einen Bezugsbefehl umfassen. Der Zielbefehl soll durch eine Vorrichtung, wie etwa einem Computer, ausgeführt werden, welcher arithmetische und/oder logische Befehle mit ganzen Zahlen mit einer zweiten Bitbreite, welche größer als die erste Bitbreite ist, ausführt.
  • Ein Schritt 1 gibt einen Quellbefehl ein, und ein Schritt 2 übersetzt den Quellbefehl in einen entsprechenden Zielbefehl. Ein Schritt 3 erkennt, ob irgendwelche unbenutzten Bits eines Zieloperanden den Zielbefehl beeinflussen können. Der Zielbefehl ist in diesem Zusammenhang „beeinflusst", wenn das Vorhandensein irgendwelcher unbenutzten Bits in der Berechnung des Zielbefehls resultieren kann, der sich von der Berechnung des entsprechenden Quellbefehls unterscheiden kann. Wenn keiner der unbenutzten Bits den Zielbefehl beeinflussen kann, wird der Zielbefehl in einem Schritt 4 zur anschließenden Verarbeitung durch die Zielmaschine ausgegeben.
  • Wenn die unbenutzten Bits den Zielbefehl beeinflussen können, erkennt ein Schritt 5, ob irgendein Zieloperand unrichtige, unbenutzte Bits hat. Beispielsweise kann es sein, dass der oder jeder Operand des Zielbefehls unbenutzte Bits aufweist, welche bereits auf Werte derart eingestellt sind, dass die Berechnung des Zielbefehls nicht beeinflusst wird. In diesem Fall durchläuft die Steuerung den Schritt 4, welcher den Zielbefehl ausgibt. Jedoch, wenn der order irgendein Zieloperand unrichtige, unbenutzte Bits aufweist, fügt ein Schritt 6 einen Korrekturbefehl zu dem Zielbefehl hinzu, bevor der Zielbefehl in Schritt 4 ausgegeben wird. Es kann folglich sichergestellt werden, dass, wenn der Zielbefehl auf der Zielmaschine ausgeführt wird, die resultierende Berechnung die gleiche sein wird, wie der Quellbefehl.
  • 2 stellt einen Computer dar, welcher verwendet werden kann, um das Übersetzungsverfahren auszuführen, das in 1 dargestellt ist. Der Computer umfasst einen Mikroprozessor 10, welcher eine arithmetische und logische Einheit 11 enthält. Der Mikroprozessor ist mit einer Eingabeschnittstelle 12 zum Empfangen der Quellbefehle zur Übersetzung und einer Ausgabeschnittstelle 13 zum Liefern der resultierenden Übersetzungen in der Form von Zielbefehlen ausgestattet. Der Computer weist einen Lesespeicher 14 auf, der ein Programm zum Steuern des Mikroprozessors 10 enthält, um das in 1 dargestellte Verfahren durchzuführen. Der Computer weist auch einen Schreib-Lese-Speicher 15 zum zeitweisen Speichern von Werten auf, welche während der Operation des Mikroprozessors 10 auftreten.
  • Das in 1 dargestellte Verfahren ist ein grundsätzliches Ausführungsbeispiel der Erfindung. Anspruchsvollere Verfahren werden nachfolgend in größerem Detail beschrieben. Die folgenden Verfahren führen Übersetzungen von „Ausdrücken" durch, welche den „Befehlen" entsprechen, die unter Bezugnahme auf 1 beschrieben sind.
  • Arithmetische Ausdrücke berechnen, oder kalkulieren Werte, und wir betrachten den Satz von Werten, welche enthalten:
    • • unsignierte binäre ganze Zahlen jeder Bitbreite;
    • • signierte binäre ganze Zahlen jeder Bitbreite.
  • Wir setzen den Standard der unsignierten binären Interpretation für unsignierte ganze Zahlen voraus, beispielsweise wird die unsignierte binäre Zahl 1101 als die ganze Zahl 13 interpretiert; und wir setzen die zwei komplementären Interpretationen für signierte ganze Zahlen voraus, beispielsweise wird die signierte, binäre Zahl 1101 als die ganze Zahl -3 interpretiert.
  • Um zwischen den unterschiedlichen Typen von Werten zu unterscheiden, können Ausdrücke berechnet werden zu, wir setzen voraus, dass alle Ausdrücke durch einen Begriff der Form typisiert sind;
    • • unsigniert ☐ oder einfach U☐, für unsignierte Ganzzahl-Werte; oder
    • • signierte ☐ oder einfach S☐, für signierte Ganzzahl-Werte;
    wobei die Breite ☐ eine positive ganze Zahl außer Null ist, die die Anzahl von Bits in dem Wert darstellt. Wir schreiben gewöhnlich e(t), um die Tatsache zu kennzeichnen, dass e der Typ t aufweist. Der Typ eines Ausdrucks wird gewöhnlicher Weise weggelassen, wenn er aus dem Kontext abgeleitet werden kann, oder wenn es für die Diskussion nicht relevant ist.
  • Ausdrücke können sein:
    grundsätzlich, wie etwa Konstanten und Variablen, oder
    zusammengesetzt, welche aus einem Operator bestehen, sozusagen op, der auf eine Anzahl von Ausdrücken e1, e2 ... en angewendet wird, genannt die Operanden: op(e1, e2 ... en)
  • Konstanten haben einen feststehenden Wert (folglich ihren Namen), während der Wert von Variablen durch eine Zuordnung gegeben ist: eine Zuordnung (Mapping) von Variablen auf Werte ihres Typs. Die Berechnung eines zusammengesetzten Ausdrucks hängt von dem Operator ab und die Berechnung seiner Operanden. Die Berechnung eines Ausdrucks kann Nebeneffekte aufweisen: Das heißt, sie kann die Zuordnung der Variablen ändern. Beispielsweise, wenn die anfängliche Zuordnung gegeben ist durch: x(S16) ☐ 10(S16) y(S16) ☐ 20(S16) und angenommen, dass die C-Semantiken für die Operatoren =, +, * sind, dann gibt die Berechnung von: (X(S16) = X(S16) + 1, y(S16) = x(S16)*y(S16))den Wert 220(S16) zurück und modifiziert die Zuordnung in: x(S16) ☐ 11(S16) y(S16) = 220(S16)
  • Das Ziel ist es, Ausdrücke einschließlich arithmetischer Unterausdrücke jeder Bitbreite mittels einiger Zielmaschine berechnen zu können, welche in der Lage ist, arithmetische Ausdrücke einschließlich bestimmter Bitbreiten effizient zu berechnen: ☐1, ☐2, ... ausschließlich. Bestehende Verfahren (siehe beispielsweise Giles Brassard und Paul Bratley. Algorithmics: Theory and Practice. Prentice-hall USA, 1998) können verwendet werden, um arithmetische Befehle auf der Zielmaschine effizient auf ganze Zahlen zu berechnen, deren Breite ein Mehrfaches von einer der bestimmten Breiten ist. Mittels dieser Verfahren können wir voraussetzen, dass die gegebene Zielmaschine die Ganzzahl-Arithmetik einschließlich einer unbegrenzten Anzahl von Breiten effizient berechnen kann:
    1, ☐2, ... 2☐1, 2☐2 ... 3☐1, 3☐2 ... etc. Wir beziehen uns auf diese Bitbreiten als die ursprünglichen Bitbreiten der Zielmaschine. Wir beziehen uns auf den Satz von Ausdrücken, welche direkt durch die Zielmaschine als die Zielsprache berechnet werden kann, die formaler durch die folgende Beschreibung definiert ist: Der Ausdruck e ist in der Zielsprache, wenn und nur wenn die Breiten von allen Unterausdrücken von e ursprüngliche Bitbreiten sind. Wir definieren auch die Quellsprache als der Satz von Ausdrücken jeder Bitbreite.
  • 3 gibt einen Überblick des Verfahrens, durch welches Ausdrücke 20 in der Quellsprache durch die gegebene Zielmaschine 21 berechnet werden können. Der Kern dieses Verfahrens ist der Übersetzungsmechanismus 22, welcher einen Quellausdruck 23 mit korrektem Typ übernimmt und eine interne Darstellung 24 des Zielausdruckes zurückgibt. Ein Ausdruck ist von einem richtigen Typ, wenn er eine Anzahl von Sprachen-abhängigen Typenregeln befolgt, wie etwa zum Beispiel jene, dass die Typen der Operanden eines arithemetischen binären Befehls die gleichen sind wie der Typ des Wertes, der durch die Operation zurückgegeben wird. Wir können daher voraussetzen, dass der Quellausdruck als erstes in einen Ausdruck mit richtigem Typ umgewandelt ist. Der Typ-Umwandlungsmechanismus hängt von den Semantiken der Quellsprache ab und wird hier nicht diskutiert (siehe Appendix A6 of (Brian W. Kernighan and Dennis M. Ritchie. The C Programming Language. Prentice-Hall, USA, zweite Auflage, 1988) for the type -conversion mechanism of C expressions). Ist ein Quellausdruck mit richtigem Typ gegeben, gibt der Übersetzungsmechanismus 22 eine interne Darstellung 24 des Zielausdrucks zurück, von welchem ein Zielmaschinen lesbarer Ausdruck 25 extrahiert und berechnet werden kann. Der Mechanismus zum Extrahieren des Maschinen-lesbaren Ausdrucks von der internen Darstellung des Zielausdrucks hängt von der Zielmaschine ab, die verwendet wird, und wird hierin nicht diskutiert.
  • 4 stellt dar, wie ein Ganzzahl-Quellwert durch einen Ganzzahl-Zielwert dargestellt werden kann. Grundsätzlich wird eine ganze n-Bit-Zahl durch eine m-Bit-Ziel-Ganzzahl des gleichen Signums dargestellt, wobei m die kleinste ursprüngliche Bitbreite ist, welche größer oder gleich n ist. Die Ganzzahl-Quellbits 26 werden in den niedrigsten n-Bits 27 der Ziel-Ganzzahl gespeichert. Die höchsten (m – n)-Bits 28 in dem Ziel-Ganzzahlwert werden die unbenutzten Bits genannt. Die niedrigsten n-Bits 27 des Ziel-Ganzzahlwerts werden die wichtigste Bitfolge genannt. Damit die Interpretation des Zielwertes die gleiche ist wie jene des Quellwertes, gilt:
    • • wenn der Ganzzahl-Quellwert unsigniert ist, dann ist der Ziel-Ganzzahlwert maskiert: die unbenutzten Bits in dem Ziel-Ganzzahlwert werden auf 0 eingestellt.
    • • wenn der Quell-Ganzzahlwert signiert ist, dann ist der Ziel-Ganzzahlwert Signum-erweitert: die unbenutzten Bits des Ziel-Ganzzahlwerts werden auf das höchste Bit in der signifikanten Bitfolge eingestellt.
  • Die interne Darstellung der Zielsprach-Ausdrücke ist in 5 dargestellt und enthält:
    • • die externe Darstellung 29 des Zielausdrucks, welcher von der Zielmaschine abhängt; ebenso
    • • eine Typ-Information 30, welche durch den Übersetzungsprozess verwendet wird, um effiziente Zielausdrücke zu erzeugen.
  • Wir verwenden die Bezeichnung <i>t, um die interne Darstellung des Zielausdrucks t mit der Typ-Information i anzuzeigen. Die interne Darstellung des Zielausdrucks sollte eine Extraktions-Operation aufweisen, welche eine Zielmaschinen lesbare Darstellung des Ausdrucks zurückgibt.
  • Die Typ-Information 30 ist eine Datenstruktur, welche die folgenden Funktionen aufweist:
    Signum: das Signum des Ausdrucks, welches entweder signiert oder unsigniert sein kann.
    Signifikante Breite: Die signifikante Breite eines Zielausdrucks ist die Breite des ursprünglichen Ausdrucks, den es darstellt.
    Repräsentative Breite: Die repräsentative Breite eines Zielausdrucks ist seine tatsächliche Bitbreite auf der Zielmaschine. Die repräsentative Breite eines Ganzzahl-Ausdrucks ist größer oder gleich seiner signifikanten Breite. Die Art eines Ausdrucks gilt als genau, wenn seine repräsentative Breite die gleiche ist wie seine signifikante Breite. Die Bits in einer ungenauen Ganzzahl-Darstellung, welche höher ist als seine signifikante Breite, werden die unbenutzten Bits genannt.
    Hochbit-Werte: Die Hochbit-Werte oder Hochbit-Eigenschaften eines ungenauen Ausdrucks geben einige Informationen über seine unbenutzten Bits. Die Hochbit-Eigenschaften eines Ausdrucks sind:
    Maskiert: ein Zielausdruck gibt die maskierten Eigenschaften an, wenn, für jede Zuordnung, er immer einen Wert berechnet, dessen unbenutzte Bits alle auf 0 gesetzt sind.
    Signum-erweitert: ein Zielausdruck gibt die Signum-erweiterte Eigenschaft an, wenn, für jede Zuordnung er immer einen Wert berechnet, dessen unbenutzte Bits den gleichen Wert aufweisen wie das höchste Bit in der signifikanten Bitfolge.
  • Die Eigenschaften schließen sich nicht gegenseitig aus, wie es in dem folgenden Beispiel gezeigt ist, welches einige Ganzzahl-Werte mit repräsentativen Breiten 16 und signifikante Breite 9 auflistet:
    Ganzzahl-Werte (in Bits) Hochbit-Eigenschaften
    unbenutzte Bits signifikante Bits maskiert Signum-erweitert
    0000000 101011011 Ja Nein
    1111111 101011011 Nein Ja
    0010001 101011011 Nein Nein
    0000000 010101101 Ja Ja
    1111111 010101101 nein Nein
  • Ein Zielausdruck gilt als wahr, wenn er für jede Zuordnung einen Wert berechnet, dessen Interpretation die gleiche ist wie jene von seinen signifikanten Bitfolgen (vorausgesetzt das gleiche Signum). Demnach ist ein Ausdruck wahr, wenn:
    • • er unsigniert ist und die maskierte Eigenschaft aufweist, oder wenn
    • • er signiert ist und die Signum-erweiterte Eigenschaft aufweist.
  • Es ist manchmal nützlich, dass jeder Unterausdruck eines Zielausdrucks auch mit der Typ-Information versehen ist, da:
    • • das Signum und die repräsentative Breite des Ausdrucks durch die Operation benötigt werden könnte, welche eine Maschinen-lesbare Darstellung des Zielausdrucks extrahiert;
    • • man Optimierungen von der internen Darstellung der Zielausdrücke entwickeln kann, welche die signifikante Breite und Hochbit-Eigenschaften annehmen.
  • Wir können auch die Hochbit-Werte des Ausdrucks verallgemeinern, um uns das Ausmaß der Maskierung und Signum-Erweiterung des Ausdrucks zu geben, mittels der folgenden zwei Werte:
    Maskierungsausmaß: Ein Zielausdruck e weist ein Maskierungsausmaß von n auf, wobei n kleiner als die repräsentative Breite von e ist, wenn er für jede Zuordnung immer einen Wert berechnet, dessen Bits in der Position größer oder gleich n 0 sind.
    00000001010100011 weist ein Maskierungsausmaß von 10 auf.
    11111000000101010 weist ein Maskierungsausmaß von 17 auf.
    Signum-Erweiterungsausmaß: Ein Zielausdruck e weist ein Signum-Erweiterungsausmaß von n auf, wobei n kleiner als die repräsentative Breite von e ist und größer als 0, wenn für jede Zuordnung er immer einen Wert berechnet, dessen Bits in Position größer oder gleich n gleich zu Bit n – 1 sind.
    00000001010100011 weist ein Signum-Erweiterungsausmaß von 11 auf.
    11111000000101010 weist ein Signum-Erweiterungsausmaß von 13 auf.
  • Bemerke, dass wir den Grundsatz verwenden, dass das am wenigsten signifikante Bit einer Bitfolge in Position 0 ist.
  • Darstellungen der Ganzzahl-Ausdrücke können durch das Anwenden von Werte-Korrekturbefehlen wahr gemacht werden, welche garantieren, dass die Werte, die durch den Ausdruck berechnet werden, maskiert oder Signum-erweitert sind, wie es benötigt wird. Wir setzen voraus, dass die folgenden zwei Befehle an Zielausdrucks-Darstellungen definiert werden können:
    ein Maskierungs-Befehl, welcher einen Ausdruck t übernimmt und einen Ausdruck t' zurückgibt, so dass für jede Zuordnung die signifikanten Bitfolgen von t und t' die gleichen sind, und dass t' die maskierte Eigenschaft aufweist.
    ein Signum-Erweiterungsbefehl, welcher einen Ausdruck t übernimmt und einen Ausdruck t' zurückgibt, so dass für jede Zuordnung die signifikanten Bitfolgen von t und t' die gleichen sind, und dass t' die Signum-Erweiterungseigenschaft aufweist.
  • Wenn ein Ausdruck t gegeben ist, verwenden wir die Bezeichnung m(t) und s(t), um den Ausdruck t darzustellen, der auf die Maskierungs-Operation und/oder die Signum-Erweiterungsoperation angewendet wird. Wir definieren auch den „mache wahr"-Befehl f(t), welcher einen Ausdruck t angibt, der m(t) zurückgibt, wenn t unsigniert ist, und s(t) zurückgibt, wenn t signiert ist.
  • Wir setzen voraus, dass die Berechnung der Zielausdrücke, die durch m(t) und s(t) dargestellt werden, Zeit-/Raumraubender sein können, als die Berechnung des Zielausdrucks, der durch t dargestellt ist, und dass daher die Übersetzung der Quell-Ganzzahl-Ausdrücke in Ziel-Ganzzahl-Ausdrücke versucht werden sollte, um die Anwendungen dieser Befehle zu vermindern, eher als diese unbefangen auf jeden Unterausdruck, der übersetzt wird, anzuwenden.
  • In bestimmten Fällen kann die Implementierung eines Werte-Korrekturbefehls derart sein, dass die Zeit-/Raumbedarf der Berechnung einiger bestimmter Ausdrücke der gleiche ist, wie die Berechnung des Werte-Korrekturausdrucks. Das ist bestimmt der Fall für einen bereits Werte-korrigierten Ausdruck, da der Befehl einfach in den ursprünglichen Ausdruck zurückgegeben werden kann. Es ist auch der Fall für einen konstanten Ausdruck, da er durch die direkte Korrektur des konstanten Werts Werte-korrigiert werden kann, und folglich einen anderen konstanten Ausdruck (mit dem gleichen Aufwand) zurückgibt. Ein Ausdruck t ist einfach maskiert, wenn die Berechnung von m(t) den gleichen Aufwand wie die Berechnung von t aufweist. Ähnlich ist ein Ausdruck einfach Signum-erweitert, wenn die Berechnung von s(t) die gleichen Kosten der Berechnung von t aufweist.
  • Wenn man die Ganzzahl-Ausdrücke einschließlich der nebeneffektfreien Bezugsoperatoren (wie etwa < und <=) übersetzt, welche einen booleschen Wert (dies ist eine Darstellung von den zwei Wahrheitswerten: wahr und falsch) zurückgibt, könnte es nicht notwendig sein, einen Werte-Korrekturbefehl an den Operanden anzuwenden. Anstatt dessen ist es genug, einen Gewöhnlicherweise billigeren monotonen Befehl auf die Operanden anzuwenden, welcher die folgenden Eigenschaften erfüllt:
    • • opS(S1, ..., Sn) berechnet einen booleschen Wert, der wahr darstellt, wenn und nur wenn opT(mn(t1), ..., mn(tn)) einen booleschen Wert berechnet, der wahr darstellt;
    • • opS(S1, ..., Sn) berechnet einen booleschen Wert, der falsch darstellt, wenn und nur wenn opT(mn(t1), ..., mn(tn)) einen booleschen Wert berechnet, der falsch darstellt;
    wobei mn(t) den monotonen Befehl, der auf dem Zielausdruck t angewendet wird, darstellt, opS einen n-stufigen Bezugsbefehl in der Quellsprache ist, opT der entsprechende n-stufige Bezugsbefehl in der Zielsprache ist, s1, .., sn Quellausdrücke sind, und t1, ..., tn ihre entsprechenden (nicht notwendigerweise Werte-korrigierten) Zielausdrücke sind.
  • Unterschiedliche Bezugsbefehle können unterschiedliche monotone Befehle benötigen. Auch können hier einige monotone Befehle vorliegen, die auf die gleichen Bezugs-Befehle anwendbar sind.
  • Wir beschreiben nun die Umwandlung der Typ-Korrektur-Quellausdrücke in die interne Darstellung der Zielausdrücke. Wir beschreiben zuerst den allgemeinen Mechanismus zum Übersetzen eines Quellausdrucks in einen Zielausdruck, und geben dann eine konkrete Darstellung dieses Vorgangs an einem Satz von arithmetischen Ausdrücken, die einige Befehle vom C-Typ anschließen.
  • Die Umwandlung der Quellausdrücke in Zielausdrücke hängt von den unterschiedlichen Operatoren in der Quellsprache ab. Das Verfahren verwendet die folgenden Eigenschaften der Operatoren in der Quellsprache:
    Eigenschaft 1 befasst sich mit den Werten der unbenutzten Bits des Ergebnisses des Befehls. In bestimmten Befehlen, wie etwa +, – und *, beeinflussen die unbenutzten Bits der Operanden nicht die signifikanten Bits des Ergebnisses und die Operanden solcher Befehle werden nicht auf Werte-Korrekturbefehle angewendet, wenn die Quellausdrücke in Zielausdrücke übersetzt werden. Wenn die unbenutzten Bits eines Operanden die signifikanten Bits des Ergebnisses beeinflussen können, dann muss dieser besondere Operand-Wert korrigiert werden, oder, in dem Fall von Bezugsbefehlen, müssen alle Operanden auf einem gültigen gleich bleibenden Befehl angewendet werden.
    Eigenschaft 2 befasst sich damit, wie die unbenutzten Bits und signifikante Bits der Operanden die unbenutzten Bits des Ergebnisses des Befehls beeinflussen. In bestimmten Befehlen, wie etwa \ und %, wird der Wert des Ergebnisses als genau garantiert und dafür kann die entsprechende Hoch-Bit-Eigenschaft in der Typ-Information des Zielausdruckes eingestellt werden.
  • Das hier beschriebenen Verfahren:
    • • verwendet grundsätzlich eine erweiterte Datenstruktur, die den arithmetischen oder logischen Ausdruck darstellt, welcher die Hoch-Bitwerte des Ausdrucks beinhaltet.
    • • besteht grundsätzlich aus den obigen zwei Eigenschaften, um die Werte-Korrekturfunktionen auf die Operanden eines Befehls anzuwenden, nur wenn diese benötigt werden.
  • Diese Punkte stellen dar, dass das vorliegende Verfahren sich von bekannten Verfahren unterscheidet, in denen die Werte-Korrekturfunktionen immer auf das Ergebnis des Befehls angewendet werden.
  • Beispielsweise können wir die Datenstruktur erweitern, um die Maskierung und die Signum-erweiterte Erweiterung des Ausdruckes zu beinhalten, und aufgrund diesen Eigenschaften vermindert das vorliegende Verfahrens die Anzahl der Werte-Korrekturfunktionen erheblich, die während der Übersetzung benötigt werden. In dem Folgenden speichern wir einfach die maskierte und Signum-erweiterte Eigenschaft in der Datenstruktur der Ausdrücke und erläutern, wie diese zwei Eigenschaften effektiv durch das vorliegende Verfahren verwendet werden, um effiziente Zielausdrücke zu erzeugen. Wenn wir die Maskierung und die Signum-erweiterte Erweiterung anstelle der maskierten und Signum-erweiterten Eigenschaft betrachten, dann wird das Verfahren kaum effizientere Ausdrücke erzeugen. Zum Beispiel, haben die Unter-Ausdrücke des folgenden Ausdrucks: (a(U5) & 3(U5)) + 1(U5) die folgenden Maskierungs-Erweiterungen:
    a(U5) & 3(U5) 2
    1(U5) 1
    und durch das Verwenden der Eigenschaft des +-Befehls, dass die Maskierungserweiterung das Ergebnis 1 ist, was zu der maximalen Maskierungserweiterung seiner Befehle hinzugefügt wird, leiten wir dann ab, dass die Maskierungserweiterung des Hauptausdrucks 1 + 2 = 3 ist. Wir wissen daher, dass der Hauptausdruck maskiert und folglich genau ist. Als ein Ergebnis muss er niemals Werte-korrigiert werden. Wenn wir anstelle der Beobachtung des Maskierungsausmaßes einfach die maskierte Eigenschaft betrachten, dann können wir aufgrund der Tatsache, dass die obigen zwei Unterausdrücke die maskierte Eigenschaft aufweisen, nicht ableiten, dass der Hauptausdruck auch maskiert ist. Dies bedeutet, dass es notwendig sein kann, den Ausdruck durch das Hinzufügen eines zusätzlichen Maskierungsbefehls bezüglich des Werts zu korrigieren.
  • Wenn eine Quellausdrucksdarstellung e der Breite ☐ vorgegeben ist, wird die Zielausdrucks-Darstellung wie folgt aufgebaut:
    Schritt 1 Eine Tabelle wird aufgebaut, die Hochbit-Eigenschaften mit den Variablen in dem Quellausdruck e in Verbindung bringt. Diese Tabelle wird das Hochbit-Eigenschaftsmapping genannt und weist die Form auf:
    Variable Hochbit-Eigenschaften
    U0 P0
    U0 . . . Un P1 . . . Pn
  • Wobei U0 ... Un alle Variablen in dem Quellausdruck e sind, und P0 ... Pn ihre entsprechenden Hochbit-Eigenschaften sind, welche eine der folgenden sein können: maskiert, Signum-erweitert, oder keine (das heißt drei mögliche Werte). Die Hochbit-Eigenschaften-Kombination, wo sowohl die maskierten als auch die Signum-erweiterten Eigenschaften eingestellt sind, ist in dieser Tabelle nicht zulässig. Einige Datenstrukturen können für die interne Darstellung des Hochbit-Eigenschaftsmapping verwendet werden und geeignete beinhalten Zuordnungslisten und sortierte binäre Verzeichnisbäume, wenn die Variablen U0 ... Un geordnet werden können.
  • Das Hochbit-Eigenschaftsmapping beeinflusst nicht die Richtigkeit des Übersetzungsmechanismus, und man kann beispielsweise das triviale Mapping verwenden, welches an alle Variablen keine Hochbit-Eigenschaften vergibt. Jedoch kann man eine Heuristik entwickeln, welche eine Hochbit-Eigenschaftsmapping aufbaut abhängig davon, wie (und wie oft) die Variablen in den Quellausdrücken verwendet werden, so dass die Zielausdrücke, die durch diesen Übersetzungsmechanismus aufgebaut werden, möglicherweise effizienter sein können.
  • Schritt 2 Die Typ-Information mit den folgenden Daten wird aufgebaut:
    • • das gleiche Signum wie der Quellausdruck;
    • • die signifikante Breite ☐;
    • • die repräsentative Breite r wird so ausgewählt, dass die kleinste natürliche Breite ist, die größer als oder gleich ☐;
    • • keine Hochbit-Eigenschaften werden eingestellt (für den Moment).
  • Diese Typ-Information wird durch ie gekennzeichnet. Die Typ-Information ie wird von dem Typs von e aufgebaut.
  • Beispielsweise, wenn ein signierter 5-Bit-Ausdruck gegeben ist, und angenommen, dass die natürlichen Bitbreiten der Zielmaschine 16, 32, 48, etc. sind, dann wird die Typ-Information mit den folgenden Daten aufgebaut:
    Signum: signiert
    signifikante Breite 5
    repräsentative Breite 16
    Hochbit-Eigenschaften keine
  • Erneut können einige grundlegende Datenstrukturen für die interne Darstellung der obigen Typ-Information verwendet werden. Eine geeignete ist eine Aufzeichnungsstruktur mit einem booleschen Feld für das Signum, zwei ganzzahligen Feldern für die signifikanten und repräsentativen Breiten, und zwei boolesche Felder für die Hochbit-Eigenschaften (eins für die maskierte Eigenschaft und das andere für die Signum-erweiterte Eigenschaft).
  • Schritt 3 Die interne Darstellung des Zielausdrucks wird rekursiv aufgebaut und die entsprechenden Hochbit-Eigenschaften-Felder in der Typ-Information werden eingestellt. Der Basisfall dieses Rekursionsverfahrens ist, wenn der Quellausdruck e ein grundlegender Ausdruck ist; der rekursive Fall ist, wenn der Quellausdruck e ein Verbundausdruck ist.
  • Basisfall: Wenn e ein grundlegender Ausdruck ist, wird dann ein entsprechender grundlegender Ziel-Ausdruck aufgebaut.
    • 1. Wenn e ein konstanter Quellausdruck es ist, dann wird der konstante Zielausdruck <it> et aufgebaut, wo der Wert der Konstanten et derart ist, dass seine Interpretation die gleiche wie jene von es ist, und die Typ-Information it ist die Typ-Information ie (welche im obigen Schritt 2 aufgebaut wurde) mit den Hochbit-Eigenschaften, die entsprechend dem Wert der unbenutzten Bits in et eingestellt sind.
    • 2. Wenn e ein variabler Quellausdruck ist, dann wird ein variabler Zielausdruck aufgebaut. Eine einheitliche variable Zielkennung wird für jede variable Quellkennung verwendet. Formeller ist das Mapping von variablen Quellkennungen in variable Zielkennungen ein gesamtes injektives Mapping. Die Hochbit-Eigenschaftsfelder der Typ-Information ie, die in dem obigen Schritt 2 aufgebaut ist, werden entsprechend dem Eingang in das Hochbit-Eigenschaftsmapping, das in Schritt 1 aufgebaut ist, eingestellt. Wenn der Hochbit-Eigenschaftsmapping-Eingang für die Quellvariable die maskierte Eigenschaft ist, dann wird das maskierte Feld eingestellt. Ähnlich, wenn der Eingang die Signum-erweiterte Eigenschaft ist, wird dann das Signum-erweiterte Feld eingestellt. Wenn der Eingang angibt, dass keine Hochbit-Eigenschaften der Quellvariablen zugeordnet sind, werden sodann keine Hochbit-Eigenschaften in der Typ-Information ie eingestellt.
  • Rekursion: Ein Quellverbundausdruck op(e1, e2, ..., en) 31, wie er in 6 gezeigt ist, wird in einen Zielausdruck wie folgt umgewandelt:
    • 1. Die Quelloperanden e1, e2, ..., en werden zuerst übersetzt 32 in Zielausdrücke t1, t2, ..., tn mittels dieses Rekursionsverfahrens.
    • 2. Der Zielausdruck 24 wird dann mittels der Befehle 33 der Zielmaschine aufgebaut, so dass: • die Ziel-Unterausdrücke, die in einer arithmetischen Operation verwendet werden, werden auf den Maskierungsbefehl oder den Signum-Erweiterungsbefehl angewendet, wenn die Werte in den unbenutzten Bits der Operanden die Werte der signifikanten Bits des Ergebnisses der Operation beeinflussen können. • In dem Fall des Relationsbefehls, welcher einfach den Wert von zwei oder mehreren Ausdrücken (wie etwa <) vergleicht, ist es dann Gewöhnlicherweise ausreichend, einen monotonen Befehl anzuwenden, welcher den Wert der signifikanten Bitreihe nur verwendet und einen Wert zurückgibt, welcher alle die Bits in dem ganzzahligen Zielwert verwendet. Ein effizientes Beispiel davon ist der Befehl, welcher, wenn ein Ausdruck e gegeben ist, e<<(r – w) zurückgibt, wobei << der Befehl zur Linksverschiebung ist, und r und w die repräsentative und signifikante Breiten von e sind. • Wenn unterschiedliche Befehle (Maskierung, Signum-Erweiterung, monotone Befehle) auf der internen Darstellung der Zieloperanden verwendet werden können, wird dann der Befehl ausgewählt, welcher zu dem günstigsten Zielausdruck führt. • Die Typ-Information it des Zielausdrucks wird aus der Typ-Information ie (obiger Schritt 2) durch das Einstellen der maskierten Hochbit-Eigenschaft aufgebaut, wenn garantiert werden kann, dass der Wert der Operation immer maskiert ist; und in ähnlicher Weise wird die Signum-erweiterte Hochbit-Eigenschaft eingestellt, wenn garantiert werden kann, dass der Wert des Befehls immer Signum-erweitert ist. Dieser Schritt hängt von der zweiten Eigenschaft des betreffenden arithmetischen Befehls, wie er hierin zuvor beschrieben ist.
  • Erneut bestehen hier einige Datenstrukturen, welche verwendet werden können, um den Zielausdruck intern darzustellen. Eine geeignete ist eine Baumstruktur, wo die Blattknoten grundsätzliche Ausdrücke darstellen und die nicht-Blattknoten Befehle darstellen.
  • Letztendlich, wie es in den 3 und 5 gezeigt ist, werden die Daten, die die Typ-Information darstellen, von der letztendlichen internen Darstellung des Zielausdrucks abgezogen.
  • In dem folgenden Beispiel wird angenommen, dass die Quell- und Zielsprachen Konstanten, Variablen und Verbundausdrücke beinhalten, die die folgenden Befehle involvieren:
    • • Die unären Befehle: !, ~ und –, deren Semantiken die gleichen sind wie ihre entsprechenden unären C-Befehle, wie sie mit den Typisierungsregeln gegeben sind, dass die Art des Operanden dieser Befehle die gleiche sein sollte wie die Art des Wertes der Operation.
    • • Die binären Einfügungsbefehle: +, –, *, /, %, &, ☐, ^, &&, ☐☐, = =, !=, <=, >=, <,>,<<,>>,>>,, und =, deren Semantiken die gleichen sind wie ihre entsprechenden binären C-Befehle mit der Ausnahme, dass der Einfachheit halber Umschaltungen (<< und >>) durch Werte größer als die Bitbreite ihres ersten Operanden undefiniert sind. Wir nehmen auch die folgenden Typisierungsregeln an: 1. Die Operanden jeder der Befehle mit der Ausnahme von = =, !=, <=,>=,<,>,<<,>>,>> und , haben den gleichen Typ wie jene des Wertes, den sie zurückführen; 2. Die Operanden der Bezugsbefehle = =, !=,<=,>=,< und > haben den gleichen Typ; 3. Die ersten Operanden von << und >> haben den gleichen Typ wie der Wert, den sie zurückführen; die zweiten Operanden von << und >> sind unsigniert; 4. Der zweite Operand von, hat den gleichen Typ wie der Wert, den er zurückführt. • Bedingungen der Form: e1 ? e2 : e3 deren Semantik die gleiche ist, wie C-Bedingungsausdrücke. Wir nehmen an, dass die Operanden e2 und e3 den gleichen Typ haben wie der Wert, der durch den Bedingungsausdruck zurückgeführt wird. • Typumwandlungen der Form: (type)e1 wobei Typ die Form signiertes w oder unsigniertes w hat, welche ein neues Signum (Signum oder unsigniert) und Breite (w) an den Operanden e1 gibt. Der Wert dieser Operation wird automatisch Signum-erweitert, wenn der Operand e1 signiert ist und näher als w ist.
  • Sind die obigen Befehle gegeben, können einfaches Maskieren oder Signum-erweiterte Befehle wie folgt implementiert werden:
    Maskierung: Wenn ein Ausdruck <it>t gegeben ist, wenn die Typ-Information it die maskierte Eigenschaft hat, dann gibt diese Operation einfach <it>t. Andererseits, wenn die signifikante Breite des Ausdrucks w ist, und ihre entsprechende Breite r ist, dann sind wir gezwungen, den Wert des Ausdrucks mit der r Bit ganzen Zahl zu maskieren, dessen niedrigste w Bits 1 sind und dessen höchste r – w Bits 0 sind. Die m zugeordnete Typ-Information im hat das gleiche Signum wie it, die signifikante Breite r und die repräsentative Breite r. Der benötigte Ausdruck dafür ist: <i't>(< it >t & <im>m) wobei i't die Typ-Information ist, die sich aus der Einstellung der maskierten Eigenschaft in it und das nicht Einstellen seiner Signum-erweiterten Eigenschaft ergibt. Wenn ein Ausdruck e gegeben ist, bezeichnen wir die Anwendung der Maskierungsoperation durch m(e).
    Signum-Erweiterung: Wenn ein Ausdruck < it >t gegeben ist, wenn die Typ-Information it die Signum-erweiterte Eigenschaft hat, dann gibt diese Operation einfach < it >t zurück. Andererseits, wenn die signifikante Breite des Ausdrucks w ist, und ihre repräsentative Breite r ist, dann können wir den Wert von t durch Linksverschiebung durch r – w Stellen Signum-erweitern, und dann eine arithmetische Rechtsverschiebung durch r – w Stellen anwenden. (Bemerke, dass eine arithmetische Rechtsverschiebung das höchste Bit seines Operanden bewahrt.) Lassen Sie uns die Konstante r – w durch u bezeichnen. Die Typ-Information iu, die u zugeordnet ist, ist unsigniert, hat die signifikante Breite r und die repräsentative Breite r. Wenn it signiert ist, dann ist der benötigte Ausdruck: <i''t>((<i't>(< it >t<< <iu>u)) >><iu>u)wobei i't die Typ-Information it ist, die durch das Einstellen des signifikanten Feldes auf r genau erzeugt wird, und i''t die Typ-Information ist, die von it durch das Einstellen der Signum-erweiterten Hochbit-Eigenschaft und das Nicht-Einstellen der maskierten Eigenschaft aufgebaut ist.
  • Wenn it unsigniert ist, dann ist der Unter-Ausdruck: (<i't>(<it>t<< <iu>u))die Typumwandlung durch signiertes r, bevor es rechts umgewandelt wird (um eine arithmetische Rechtsverschiebung zu erreichen, eher als eine logische eins), und der endgültige Ausdruck ist dann die Typumwandlung durch das unsignierte r, um sein Signum beizubehalten.
  • Wenn ein Ausdruck e gegeben ist, bezeichnen wir die Anwendung der Signum-Erweiterungsoperation durch s(e).
  • Wir erinnern uns der Definition von f(e) als m(e), wenn der Ausdruck e unsigniert ist, andererseits als s(e), wenn e signiert ist. Wir definieren auch den folgenden monotonen Befehl, der während der Übersetzung der Relationsbefehle benötigt wird und die ==, !=, <, <=, > und >= involvierend:
    Monotoner Befehl: Wenn ein Ausdruck <it>t mit signifikanter Breite w und repräsentativer Breite r gegeben ist, gibt dieser Befehl zurück: <i't>(<it>t<< <iu>u)wobei u gleich r – w ist, und die Typ-Information i't das gleiche Signum wie it hat, die signifikante Breite r und repräsentative Breite r ist. Die Typ-Information iu ist unsigniert, hat die signifikante Breite r und repräsentative Breite r. Wenn ein Ausdruck e gegeben ist, bezeichnen wir die Anwendung dieses monotonen Befehls durch mn(e).
  • Effizientere Implementierungen der Maskierung, Signum-Erweiterung und der obigen monotonen Befehle sind möglich, obwohl die obigen Implementierungen für die Genauigkeit des hierin beschriebenen Übersetzungsmechanismus ausreichend sind.
  • Solche effizienteren Implementierungen verwenden die Technik des Anwendens von Optimierungstransformationen, um die Effizienz der Ausdrücke zu steigern. Die folgenden sind Transformationen, welche auf die Befehle angewendet werden können:
    Ein maskierter Befehl e der Form t und m kann wie folgt optimiert werden:
    • • Wenn t eine Konstante k ist, dann wird der Wert von e auf angenommen 1 berechnet, und e wird durch 1 ersetzt.
    • • Wenn t von der Form x & k oder k & x ist, wobei k eine Konstante ist, dann wird der Wert von k und m auf angenommen 1 berechnet, und e wird durch t & 1 ersetzt.
    • • Wenn t von der Form x & y ist, wobei entweder (oder beide) x & m oder y & m auf angenommen x' und y' optimiert werden kann (können), dann wird e durch x' und y' ersetzt. Ähnliche Regeln gelten für Befehle der Form x☐x ⁻ y, z ? x : y.
  • Ein Signum-erweiterter Befehl e der Form (t<<u)>>u kann wie folgt optimiert werden:
    • • Wenn t eine Konstante k ist, dann wird der Wert von e auf angenommen 1 berechnet, und e wird durch 1 ersetzt.
    • • Wenn t von der Form x<<k ist, wobei k eine Konstante ist, dann wird der Wert von k + u auf angenommen 1 berechnet, und e wird durch (t<<1)>>u ersetzt.
    • • Wenn t von der Form x & y ist, wobei entweder (oder beide) (x<<u)>>u oder (y<<u)>>u auf angenommen x' und y' optimiert werden kann (können), wird dann e durch x' und y' ersetzt. Ähnliche Regeln gelten für Befehle der Form x☐y, x^y, z?x:y.
  • Ein monotoner Befehl e der Form t<<u kann wie folgt optimiert werden:
    • • Wenn t eine Konstante k ist, wird dann der Wert von e wie angenommen 1 berechnet, und e wird durch 1 ersetzt.
    • • Wenn t von der Form x<<k ist, wobei k eine Konstante ist, wird dann der Wert von k + u auf angenommen 1 berechnet, und e wird durch t<<1 ersetzt.
    • • Wenn t von der Form x & y ist, wobei entweder (oder beide) x<<u oder y<<u auf angenommen x' und y' optimiert werden kann (können), wird dann e durch x' und y' ersetzt. Ähnliche Regeln gelten für Befehle der Form x☐y, x^y, z?x:y.
  • Manchmal müssen wir den effizientesten Ausdruck aus einer Anzahl von Ausdrücken auswählen. Wenn eine Anzahl von Ausdrücken e1, ..., en gegeben ist, verwenden wir den Begriff „der günstigste von e1, ..., en", um den Ausdruck in e1, ..., en zu bezeichnen, der wahrscheinlich am effizientesten zu berechnen ist. Wir definieren auch diesen Begriff an Paaren von Ausdrücken: „die günstigsten von (e1, e'1), ..., (en, e'n)" ist das Paar von Ausdrücken in (e, e') in (e1, e'1),... (en, e'n), so dass die Berechnung von e gefolgt durch jener von e' wahrscheinlich die Effizienteste sein wird. Eine gute Messung der Effizienz eines Zielausdrucks ist die Anzahl der Operator in seiner internen Darstellung:
    der günstigste Ausdruck ist jener mit der geringsten Anzahl von Operatoren.
  • Wir sagen, dass einige Typ-Information i1 die Typ-Information i2 ist, die wahr gemacht ist, wenn i1 von i2 durch das Einstellen der maskierten Hochbit- Eigenschaft, wenn i2 unsigniert ist, und durch das Einstellen der Signum-erweiterten Hochbit-Eigenschaften aufgebaut wird, wenn i2 signiert ist.
  • Wir beschreiben nun das Verfahren zum Übersetzen von Quellausdrücke in Zielausdrücke:
    • • Konstante und Variablen in der Quellsprache werden in Zielkonstanten und Variablen umgewandelt, wie es früher erläutert wurde.
    • • Gegeben ist eine unäre Operation e der Form: op(e1)
  • Wir bauen zuerst die Typ-Information it von dem Typ e (it hat keine Hochbit-Eigenschaften) auf, und transformieren dann den Operanden e1 rekursiv in t1. Der Ausdruck t1 wird mit seiner Typ-Information kommentiert, da er durch die interne Darstellung, wie sie zuvor hierin beschrieben ist, dargestellt wird. Der benötigte Zielausdruck: <i't>op(t'1)wird dann aufgebaut, wobei der Operator op ist:
  • !:
    Der Ausdruck t'1 muss maskiert oder Signum-erweitert werden, da der Wert der unbenutzten Bits von t1 die signifikante Bitfolge in dem Ergebnis von dem !-Befehl beeinflussen kann. Dafür werden die Ausdrücke m(t1) und s(t1) aufgebaut und t'1 wird als der günstigste der zwei ausgewählt. Die Typ-Information i't ist die Typ-Information it, die wahr ist.
    ~:
    der benötigte Operand t'1 ist einfach t1, da die unbenutzten Bits in t1 nicht die signifikante Bitfolge in dem Ergebnis der ~-Operation beeinflussen. Die Typ-Information i't wird von it durch das Einstellen der Signum-erweiterten Eigenschaft aufgebaut, wenn und nur wenn t1 Signum-erweitert ist.
    –:
    Der benötigte Operand t'1 ist t1 und die Typ-Information i't ist it, da der Wert der arithmetischen Negations-Operation – nicht garantiert werden kann, dass er immer maskiert und/oder Signum-erweitert ist.
    • • Gegeben ist eine binäre Operation e der Form: e1 op e2 wir bauen zuerst die Typ-Information it von dem Typ von e auf, und wandeln die Operanden e1 und e2 in t1 und t2 entsprechend um. Der benötigte Zielausdruck ist: <i't>(t'1 op t'2)wobei, wenn der Operator op ist:
    +, *:
    Die Operanden t'1 bzw. t'2 sind t1 bzw. t2. Die Typ-Information i't ist it.
    /, %:
    Die Operanden t'1 und t'2 sind f(t1) und f(t2). Die Typ-Information i't ist it, die wahr ist.
    &&, ☐☐:
    Der Operand t'1 ist der günstigste von m(t1), s(t2); und der Operand t'2 ist der günstigste von m(t2), s(t2). Die Typ-Information i't ist it, die wahr ist.
    &:
    Die Operanden t'1 und t'2 sind t1 und t2. Die Typ-Information i't wird aus it durch das Einstellen der maskierten Eigenschaft aufgebaut, wenn entweder t1 oder t2 maskiert ist, und dann durch das Einstellen der Signum-erweiterten Eigenschaft, wenn sowohl t1 und auch t2 Signum-erweitert sind.
    ☐,⁻:
    Die Operanden t'1 und t'2 sind t1 und t2. Die Typ-Information i't wird aus it durch das Einstellen der maskierten Eigenschaft aufgebaut, wenn sowohl t1 als auch t2 maskiert sind, und dann durch das Einstellen der Signum-erweiterten Eigenschaften, wenn sowohl t1 als auch t2 Signum-erweitert sind.
    = =, !=:
    Das Paar der Operanden (t'1, t'2) ist der günstigste von (m(t1), m(t2)), (s(t1), s(t2)), (mn(t1), mn(t2)). Die Typ-Information i't ist it, die wahr ist.
    <=, >=, <, >:
    Das Paar von Operanden (t'1, t'2) ist das günstigste von ((f(t1), f(t2)), (mn(t1), mn(t2)). Die Typ-Information i't ist it, die wahr ist.
    <<:
    Der erste Operand t'1 ist der Ausdruck t1 und der zweite Operand t'2 ist f(t2). Die Typ-Information i't ist it.
    >>:
    Die Operanden t'1 und t'2 sind f(t1) bzw. f(t2). Die Typ-Information i't ist sinngetreu it.
    =:
    Der erste Operand t'1 ist einfach der Ausdruck t1. Der zweite Operand t'2 ist m(t2), wenn t'1 maskiert ist, s(t2), wenn t'1 Signum-erweitert ist, oder andererseits ist es t2. Die Typ-Information i't wird aus it durch das Einstellen der maskierten Eigenschaft aufgebaut, wenn t'2 maskiert ist, und dann durch das Einstellen der Signum-erweiterten Eigenschaften, wenn t'2 Signum-erweitert ist.
    ,:
    Die Operanden t'1 und t'2 sind t1 und t2. Die Typ-Information i't wird aus it durch das Einstellen der maskierten Eigenschaft aufgebaut, wenn t2 maskiert ist, und dann durch das Einstellen der Signum-erweiterten Eigenschaften, wenn t2 Signum-erweitert ist.
    • • Gegeben ist ein Bestimmungsausdruck e der Form: e1 ? e2 : e3 wir bauen zuerst die Typ-Information von it von des Typs von e auf, und transformieren dann die Operanden e1, e2 bzw. e3 in t1, t2 bzw. t3. Der benötigte Zielausdruck ist: < i't >( t'1 ? t2 : t3)wobei t'1 der geringste von m(t1), s(t1) ist. Die Typ-Information i't wird aus it durch das Einstellen der maskierten Eigenschaft aufgebaut, wenn sowohl t2 und t3 maskiert sind und dann durch das Einstellen der Signum-erweiterten Eigenschaften, wenn sowohl t2 als auch t3 Signum-erweitert sind.
    • • Ein Typumwandlungs-Ausdruck e der Form: (types)e1 wird in den benötigten Zielausdruck umgewandelt, wie es nachfolgend gezeigt ist: 1. Die Typ-Information it wird aus Typ types aufgebaut. Wir definieren st und rt als die signifikante Breite bzw. die repräsentative Breite in It. Wir definieren types als den Typ des benötigten Zielausdrucks; das heißt, typet hat die Breite rt und das Signum von types. 2. Der Operand e1 wird in den Ausdruck t1 umgewandelt. Wir definieren s1 und r1 als die signifikante Breite bzw. die repräsentative Breite von t1. 3. Wenn st die gleiche wie s1 ist, dann ist der Zielausdruck: <it (t1)>( typet)t1 wobei it (t1) von it durch das Einstellen der maskierten Eigenschaft aufgebaut wird, wenn ti maskiert ist und dann durch das Einstellen der Signum-Erweiterungseigenschaft, wenn t1 Signum-erweitert ist. 4. Wenn st kleiner als s1 ist, dann ist der benötigte Zielausdruck: <it>( typet)t1 5. Wenn st größer als s1 ist, dann: (a) Wenn rt das gleiche wie r1 ist, dann ist der Zielausdruck: <it (f(t1))>( typet)f( t1)Die Typ-Information it (f(t1)) wird aus it durch das Einstellen der maskierten Eigenschaft aufgebaut, wenn f(t1) maskiert ist, und dann durch das Einstellen der Signum-Erweiterungseigenschaft, wenn f(t1) Signum-erweitert ist. Dies macht die Typ-Information it (f(t1)) nicht sinngetreu, da das Signum von f(t1) unterschiedlich von jenem im typet sein kann. (b) Wenn rt größer als r1 ist, dann ist der Zielausdruck: <it>( typet)f(t1 ) wobei i't sinngetreu it.
  • Wir stellen nun dieses Verfahren durch das Übersetzen des folgenden Quellausdrucks ((a(U5) + b(U5))*c(U5))/(d(U5) + e(U5))in einen Zielausdruck dar, welcher durch eine 16 Bit-Architektur simuliert werden kann.
  • Der gegebene Quellausdruck ist bereits typgenau.
  • Schritt 1: Die triviale Hochbit-Eigenschaftszuordnung wird aufgebaut, welche jede Variable in dem Quellausdruck mit der „nicht Hochbit-Eigenschaften" Eingabe in Verbindung bringt.
  • Schritt 2: Die Typ-Informations-Datenstruktur wird aufgebaut. Da der Typ des Quellausdrucks unsigniert 5 ist und die Zielarchitektur ein 16-Bit ist, wird die folgende Typ-Information aufgebaut:
    Signum: unsigniert
    Signifikante Breite: 5
    Repräsentative Breite: 16
    Hochbit-Eigenschaften keine
  • Da alle Unterausdrücke in dem gegebenen Quellausdruck den gleichen Typ haben, werden dann die obigen Daten für jeden Unterausdruck während des rekursiven Teils dieses Verfahrens aufgebaut. Im Folgenden verwenden wir die Bezeichnung:
    <Hoch-Bit Eigenschaften>Ausdruck (<hig-bit properties>expression)
    um einen gegebenen Zielausdruck zu kennzeichnen, der mit einigen besonderen Hochbit-Eigenschaften kommentiert ist.
  • Schritt 3: Der Zielquellausdruck wird rekursiv aufgebaut, wie folgt:
    • 1. Von dem Quellausdruck s: ((a(U5) + b(U5))*C(U5))/(d(U5) + e(U5))werden die zwei Operanden: s0 = ((a(U5) + b(U5))*c(U5)) s1 = (d(U5) + e(U5))rekursiv in t0 und t1 übersetzt, wie folgt:
    • (a) Aus dem Quellausdruck so, werden die zwei Operanden: s00 = (a(U5) + b(U5)) s01 = c(U5) rekursiv in t00 und t01 übersetzt, wie folgt: i. Aus dem Quellausdruck s00 die zwei Operanden: s000 = a(U5) s000 = b(U5) werden rekursiv in t000 und t000 durch das einfache Aufbauen einer einheitlichen Zielvariable für jede Quellvariable übersetzt und ist wie folgt gegeben: s000 = <none> a(U5) s000 = <none> b(U5) Die Hochbit-Eigenschaftszuordnung, die in Schritt 2 aufgebaut wird, kennzeichnet keine Hochbit-Eigenschaften zu den obigen Variablen, und daher werden keine eingestellt. ii. Da der Operator, der in s00 betrachtet wird, + ist, muss dann der kein-Wert-Korrekturoperatoren auf die zwei Operanden t000 und t001 angewendet werden, und daher wird der folgende Zielausdruck t00 aufgebaut: t00 = <none> a(U16) + b(U16) Keine Hochbit-Eigenschaften können garantiert werden und daher werden keine eingestellt. iii. Der Quellausdruck s01 wird rekursiv in t01 durch das einfache Aufbauen einer einheitlichen Zielvariable für die Quellvariable aufgebaut und ist folglich gegeben durch: t01 = <none> c(U16) Die Hochbit-Eigenschaftsabbildung, die in Schritt 2 aufgebaut ist, zeigt keine Hochbit-Eigenschaften zu den obigen Variablen an, und daher werden keine eingestellt.
    • (b) Da der Operator, der in so bestimmt ist, * ist, müssen dann keine Werte-Korrekturbefehle auf die zwei Operanden t00 und t01 angewendet werden, und daher wird der folgende Zielausdruck t0 aufgebaut: t0 = <none> ((a(U16) + b(U16))*c(U16)) Keine Hochbit-Eigenschaften können garantiert werden, und daher werden keine eingestellt.
    • (c) Aus dem Quellausdruck s1, werden die zwei Operanden: s10 = d(U5) s11 = e(U5) rekursiv in t10 und t11 durch das einfache Aufbauen einer einheitlichen Zielvariable für jede Quellvariable übersetzt und ist folglich gegeben durch: t10 = <none> d(U16) t11 = <none> e(U16) Die Hochbit-Eigenschaftsabbildung, die in Schritt 2 aufgebaut ist, zeigt keine Hochbit-Eigenschaften zu den obigen Variablen an, und daher werden keine eingestellt.
    • (d) Da der Operator, der in s1 bestimmt ist, + ist, müssen dann keine Werte-Korrekturoperatoren auf die zwei Operanden t10 und t11 angewendet werden, und daher wird der folgende Zielausdruck tim aufgebaut: t1 = <none> (d(U16) + c(U16)) Keine Hochbit-Eigenschaften können garantiert werden und daher werden keine eingestellt.
    • 2. Da der Operator, der in s bestimmt ist, / ist, werden dann die Zielausdrücke t0 und t1 auf den Maskierungs-Werte-Korrektur-Vorgang angewendet, gegeben: t'0 = <masked> ((a(U16) + b(U16))*c(U16)) & 31(U16) t'1 = <masked> (d(U16) + e(U16)) & 31(U16) und der Zielausdruck t = <none> (((a(U16) + b(U16))*c(U16)) & 31(U16))/((d(U16) + e(U16)) & 31(U16))wird aufgebaut. Da die maskierte Eigenschaft in dem Ergebnis der unsignierten Operation garantiert werden kann, wird dann die maskierte Hochbit-Eigenschaft eingestellt, die die folgende letztendliche interne Darstellung von t den Zielausdruck gibt: <masked> (((a(U16) + b(U16))*c(U16)) & 31(U16))/((d(U16) + e(U16)) & 31(U16))Die letzte Stufe ist, die zusätzliche Typ-Information aus dem obigen Ausdruck herauszunehmen, wodurch sich ergibt: (((a(U16) + b(U16))*c(U16)) & 31(U16))/((d(U16) + e(U16)) & 31(U16)) Diese Technik kann in der effizienten Simulation der Hochniveau-Beschreibungen von arithmetischen Schaltungen auf einer bestimmten Zielmaschine verwendet werden. 7 stellt ein Beispiel eines Bach-Hardware-Designflusses dar, in dem Hardware in der Bach-Hochniveau-Sprache beschrieben ist. Die Hardware-Beschreibung ist in 40 implementiert und resultiert in dem Bach-Quellcode. Ein Schritt 41 simuliert die Bach-Hardware-Beschreibung und verwendet das Verfahren, das hierin zuvor beschrieben ist, um eine Übersetzung von Befehlen oder Ausdrücken bereitzustellen, welche in den arithmetischen und/oder logischen Schaltungen der Zielmaschine zu implementieren sind. Das Simulationsergebnis wird in 42 auf Richtigkeit überprüft. Wenn es falsch ist, wird eine erneute Implementierung in Schritt 40 durchgeführt. Wenn das Simulationsergebnis richtig ist, erzeugt ein Schritt 43 eine Niedrigniveau-Hardware-Beschreibung, welche dann mittels bekannter oder entsprechender Techniken in einen Siliziumchip 44 umgewandelt wird.

Claims (16)

  1. Computerimplementiertes Verfahren zum Übersetzen eines Quellbefehls auf wenigstens einem Quelloperanden, der eine binäre ganze Zahl mit einer ersten Bitbreite aufweist, in einen entsprechenden Zielbefehl zur Ermittlung durch einen Prozessor, der Ganzzahl-Befehle von binären ganzen Zahlen einer zweiten Bitbreite ausführt, die größer als die erste Bitbreite ist, wobei das Verfahren umfasst: Übersetzen (2) des Quellbefehls in einen Zielbefehl, der wenigstens einen entsprechenden Zieloperanden hat, wobei der oder jeder Zieloperand einen unbenutzten Abschnitt hat, der nicht benutzt wird, um den Wert eines entsprechenden Quellbefehls darzustellen, wobei der Rest ein benutzter Abschnitt ist; und gekennzeichnet durch Identifizieren (3, 5), ob der Wert von unbenutzten Bits in dem unbenutzten Abschnitt von dem oder von jedem Zieloperanden den Wert des benutzten Abschnitts der Zielbefehlsermittlung beeinflusst und, ob der Zielbefehl oder einer der Zielbefehle in der Lage ist, eines oder mehrere unbenutzte Bits mit einem unrichtigen Wert zu haben, und, wenn ja, Addieren (6) zu dem Zielbefehl einen Korrekturbefehl, um den Wert von dem einen oder jedem der mehreren Bits mit unrichtigem Wert zu korrigieren, bevor der Zielbefehl ausgeführt wird.
  2. Verfahren nach Anspruch 1, worin der wenigstens eine Quellbefehl wenigstens eine Konstante aufweist.
  3. Verfahren nach Anspruch 1 oder 2, worin der wenigstens eine Quellbefehl wenigstens eine Variable aufweist.
  4. Verfahren nach einem der vorhergehenden Ansprüche, worin der wenigstens eine Quellbefehl wenigstens einen Unter-Befehl aufweist.
  5. Verfahren nach Anspruch 4, umfassend die regressive Durchführung des Verfahrens für den Befehl und den oder jeden Unter-Befehl.
  6. Verfahren nach einem der vorhergehenden Ansprüche, worin der Quellbefehl eine arithmetische Operation aufweist.
  7. Verfahren nach Anspruch 6, worin der Identifizierungsschritt das Identifizieren eines unsignierten, unmaskierten Zielbefehls aufweist, und worin der Korrekturschritt einen Maskierungsschritt umfasst.
  8. Verfahren nach Anspruch 7, worin die erste Bitbreite gleich w Bits ist, und worin der Maskierungsschritt das Durchführen einer Bitweisen UND-Operation zwischen dem unsignierten, unmaskierten Zielbefehl und einer binären Darstellung von (2w – 1) aufweist.
  9. Verfahren nach einem der Ansprüche 6 bis 8, worin der Identifizierungsschritt das Identifizieren eines signierten, nicht-Signum-erweiterten Zieloperanden umfasst, und der Korrekturschritt einen Signum-Erweiterungsschritt umfasst.
  10. Verfahren nach einem der Ansprüche 1 bis 5, worin der Quellbefehl einen Relationsbefehl umfasst, und der Korrekturschritt einen monotonen Befehl umfasst.
  11. Verfahren nach einem der vorhergehenden Ansprüche, worin der benutzte Abschnitt eine erste Bitbreite hat.
  12. Verfahren nach einem der vorhergehenden Ansprüche, umfassend das Speichern einer Darstellung des oder jedes Zieloperanden, der/die wenigstens die Bitbreite des benutzten Abschnitts angibt/angeben.
  13. Verfahren nach Anspruch 12, worin die Darstellung angibt, ob der Zielbefehl signiert oder unsigniert ist.
  14. Computerprogramm zur Durchführung eines Verfahrens, wie es in einem der vorhergehenden Ansprüche beansprucht ist.
  15. Speichermedium enthaltend ein Computerprogramm wie es in Anspruch 14 beansprucht ist.
  16. Computer, der durch ein Programm programmiert ist, wie es in Anspruch 14 beansprucht ist.
DE60037229T 1999-10-05 2000-10-04 Verfahren zum Übersetzen eines Quellbefehls in einen Zielbefehl und Rechnerprogramm für das Verfahren Expired - Lifetime DE60037229T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB9923379 1999-10-05
GB9923379A GB2355085A (en) 1999-10-05 1999-10-05 Translating a source operation to a target operation

Publications (2)

Publication Number Publication Date
DE60037229D1 DE60037229D1 (de) 2008-01-10
DE60037229T2 true DE60037229T2 (de) 2008-10-16

Family

ID=10862048

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60037229T Expired - Lifetime DE60037229T2 (de) 1999-10-05 2000-10-04 Verfahren zum Übersetzen eines Quellbefehls in einen Zielbefehl und Rechnerprogramm für das Verfahren

Country Status (5)

Country Link
US (1) US6817012B1 (de)
EP (1) EP1091292B1 (de)
JP (1) JP3755733B2 (de)
DE (1) DE60037229T2 (de)
GB (1) GB2355085A (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7320065B2 (en) * 2001-04-26 2008-01-15 Eleven Engineering Incorporated Multithread embedded processor with input/output capability
US7000226B2 (en) * 2002-01-02 2006-02-14 Intel Corporation Exception masking in binary translation
US7770147B1 (en) * 2004-03-08 2010-08-03 Adaptec, Inc. Automatic generators for verilog programming
US7783467B2 (en) * 2005-12-10 2010-08-24 Electronics And Telecommunications Research Institute Method for digital system modeling by using higher software simulator
JP6495842B2 (ja) * 2016-02-16 2019-04-03 日本電信電話株式会社 変換方法、変換プログラムおよび変換装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0871108B1 (de) * 1991-03-11 2000-09-13 MIPS Technologies, Inc. Rückwärts kompatible Rechnerarchitektur mit erweiterten Wortbreiten und Adressraum
US5440702A (en) * 1992-10-16 1995-08-08 Delco Electronics Corporation Data processing system with condition code architecture for executing single instruction range checking and limiting operations
US5418959A (en) * 1992-11-30 1995-05-23 Intel Corporation Instruction operation size optimization
JP2847688B2 (ja) * 1993-05-27 1999-01-20 松下電器産業株式会社 プログラム変換装置およびプロセッサ
EP1229440B1 (de) * 1993-05-27 2007-05-02 Matsushita Electric Industrial Co., Ltd. Programmumsetzungseinheit und verbesserter Prozessor für Adressierung
US6496922B1 (en) * 1994-10-31 2002-12-17 Sun Microsystems, Inc. Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
US6075942A (en) * 1998-05-04 2000-06-13 Sun Microsystems, Inc. Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers

Also Published As

Publication number Publication date
EP1091292B1 (de) 2007-11-28
JP3755733B2 (ja) 2006-03-15
US6817012B1 (en) 2004-11-09
GB2355085A (en) 2001-04-11
EP1091292A3 (de) 2004-07-07
EP1091292A2 (de) 2001-04-11
JP2001154842A (ja) 2001-06-08
GB9923379D0 (en) 1999-12-08
DE60037229D1 (de) 2008-01-10

Similar Documents

Publication Publication Date Title
DE69737750T2 (de) Erst- und Zweitprozessoren verwendetes Verfahren
DE69125755T2 (de) Kompilerzwischensprache verwendender Installierer für architekturunabhängiges Vertriebsformat (AUVF)
DE69129086T2 (de) Zwischensprache verwendender Kompiler mit architekturunabhängigem Verteilungsformat (AUVF)
DE69224338T2 (de) Verzweigungsauflösung durch rückgerichtete symbolische Ausführung
DE69407772T2 (de) Gerät und verfahren für ein verschiebbares dateiformat
DE69127031T2 (de) Kompilerzwischensprache verwendender Erzeuger für architekturunabhängiges Vertriebsformat (AUVF)
US8006225B1 (en) Method and system for automatic generation of instruction-set documentation from an abstract processor model described using a hierarchical architectural description language
DE69518446T2 (de) Typsicheres Rahmenwerk für dynamisch erweiterbare Objekte
DE69916962T2 (de) Datenverarbeitungssystem mit bedingter Ausführung von erweiterten Verbundbefehlen
DE69115344T2 (de) Vorverarbeitungsprozessor zur Verbindung von Befehlen für einen Cache-Speicher
DE69800686T2 (de) Verfahren und Gerät für effizienten Operationen auf primären Typwerten ohne statisches Überladen
DE3586374T2 (de) Verfahren zur elimination globaler gemeinsamer unterexpressionen und zur kodeverschiebung in einem optimierenden kompilierer.
DE69502952T2 (de) Vorrichtung zur erzeugung von instruktionen
DE69225281T2 (de) Mehrsprachen optimierender compiler mit schablonen zur erzeugung eines mehrfachcodes
DE19945992A1 (de) Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren
DE3750951T2 (de) Verfahren zur Kodeerzeugung für Rechner mit beschränktem Befehlssatz.
DE4403917C2 (de) Vorrichtung zum Berechnen einer Bit-Besetzungszählung
DE69812990T2 (de) Verfahren zur erzeugung von isa simulatoren und assemblierern aus einer maschinenbeschreibung
DE112015003584T5 (de) Maschinenbefehle zum Umsetzen von einem dezimalen Gleitkommaformat zu einem gepackten Dezimalformat
DE102021130906A1 (de) Optimieren von zugriffen auf begrenzungsinformationen beim pufferschutz
DE102016110195A1 (de) Erzeugen von Code in statisch typisierten Programmiersprachen für eine dynamisch typisierte array-basierte Sprache
DE112015003588T5 (de) Maschinenbefehle zum Umsetzen von einem gepackten Dezimalformat zu einem dezimalen Gleitkommaformat
DE60037229T2 (de) Verfahren zum Übersetzen eines Quellbefehls in einen Zielbefehl und Rechnerprogramm für das Verfahren
DE69829854T2 (de) Verfahren und Gerät zur Erzeugung virtueller Szenen
DE60005830T2 (de) Verfahren und vorrichtung zum steuern eines sprungverzögerungsschlitzes in einem pipelineprozessor

Legal Events

Date Code Title Description
8364 No opposition during term of opposition