Wenn der Natural Optimizer aktiviert wurde, können Sie Prüfungen angeben, indem Sie die in diesem Abschnitt erklärten Optionen einstellen.
Die Optionen können nicht benutzt werden, um Statements anzugeben, die optimiert werden sollen.
Dieser Abschnitt behandelt folgende Themen:
Die folgende Tabelle enthält eine Liste mit den Beschreibungen der Natural Optimizer Compiler-Optionen. Unterstrichene Werte sind Standardwerte (Default Values), d.h. dieser Wert wird angenommen, wenn die Option nicht vorhanden ist.
Eine Natural Optimizer Compiler-Option besteht aus einer
Zeichenkette, die von Klammern oder einzelnen Ausrufungszeichen umschlossen ist
(Ausnahme: im Natural-Statement OPTIONS), wobei die Optionen
durch Kommas voneinander abgetrennt sind. Einige Optionen haben Werte, während
die bloße Existenz einiger Optionen in der Optionszeichenfolge ausreicht, um
die Umgebung zu ändern.
Es gelten folgende Regeln:
Optionale Klauseln sind von rechteckigen Klammern [
] umgeben.
Wahlmöglichkeiten sind von geschweiften Klammern {
} umgeben.
Wahlmöglichkeiten sind voneinander durch senkrechte Linien
|abgetrennt.
Es kann nur eine dieser Wahlmöglichkeiten angegeben werden.
ON ist gleichbedeutend mit Y (Yes),
OFF ist gleichbedeutend mit N (No).
Optionen, die ohne die optionale Klausel ON oder
OFF (falls zutreffend) oder deren Äquivalenzwerte angegeben
werden, werden so interpretiert, als ob sie auf ON gesetzt sind.
Beispiel: OVFLW ist identisch zu OVFLW=ON.
Mit Ausnahme der Option OFF gelten alle beim
Optimieren angegebenen Optionsschalter (als ob ON angegeben wäre)
und der Standardwert. Beispiel: INDEX ist identisch zu
ON,INDEX.
| Option | Erklärung |
|---|---|
ABEND |
Zwingt den Natural Optimizer Compiler, Code zu
generieren, der bewirkt, dass Natural sofort abnormal beendet wird, wenn der
Natural Optimizer Compiler während des Kompilierens die Option
ABEND antrifft. Die Option muss selbständig erscheinen, sonst wird
sie ignoriert. Andere Parameter werden durch diese Option nicht geändert oder
zurückgesetzt. Diese Option kann für Debugging-Zwecke nützlich sein.
|
ARCH |
Gibt an, welcher Architecture Level für die Codegenerierung benutzt werden soll, siehe ARCH-Option im folgenden Abschnitt. |
ARROPT |
Gibt
an, welche Generierung für Array-Zuweisungen des Typs
A(*):=scalar verwendet werden soll,
siehe ARROPT-Option im
folgenden Abschnitt.
|
CACHE[={ON| OFF |Y|N}] |
Schaltet die Variablenzwischenspeicherung (Variable Caching) ein oder aus. Siehe auch Variablenzwischenspeicherung (Caching) im Abschnitt Performance-Überlegungen. |
CPU= /370 |
Gibt die Ziel-Architektur an. |
DIGTCHCK[={ON| OFF |Y|N}] |
Gibt an, ob die Ziffern
von gepackten oder ungepackten Feldern (Formate P und N) geprüft werden sollen,
wenn sie in eine andere Variable gleichen Typs und gleicher Genauigkeit
verschoben werden. Wenn beispielsweise DIGTCHCK auf
ON gesetzt ist und eine ungepackte Variable (Format N) eine
ungültige Ziffer enthält, z.B. X'FA', dann generiert das
Verschieben in eine andere ungepackte numerische Variable gleichen Typs den
Fehler S0C7 (oder NAT0954). Wenn
DIGTCHCK auf OFF gesetzt ist, wird kein Fehler
generiert, aber der generierte Code ist viel schneller.
|
ERRDUMP[={ON| OFF |Y|N}] |
Gibt an, ob der Natural Optimizer Compiler abbrechen soll, wenn während der Kompilierungsphase ein Fehler festgestellt wird. Dies ist nützlich, um am Natural Optimizer Compiler selbst eine Fehlerbehebung (Debugging) durchzuführen. |
INDEX[={ON| OFF |Y|N}] |
Gibt an, ob Array-Indizes auf Out-of-Bound-Werte im
optimierten Code überprüft werden.
Siehe auch die folgende Anmerkung. |
INDX[={ON| OFF |Y|N}] |
Gibt an, ob Array-Indizes auf Out-of-Bound-Werte im
optimierten Code überprüft werden.
Zusätzlich wird Siehe auch die folgende Anmerkung. |
IO[={ON| OFF|Y|N}] |
Nur aus Kompatibilitätsgründen vorhanden. Keine Wirkung. |
LOOPS[={ON| OFF |Y|N}] |
Nur aus Kompatibilitätsgründen vorhanden. Keine Wirkung. |
MIX[={ON| OFF |Y|N}] |
Nur aus Kompatibilitätsgründen vorhanden. Keine Wirkung. |
NODBG[={ON|
OFF|Y|N}] |
Wenn NODBG=OFF/N (Standardeinstellung)
gesetzt ist, kann der Natural Debugger benutzt werden, um Fehler im optimierten
Code zu beheben (dann wird zusätzlicher Code generiert, um zu prüfen, ob der
Test-Modus eingeschaltet worden ist (TEST ON).
Bei Siehe auch |
NOSGNTR[={ON| OFF |Y|N}] |
Gilt nur bei gepackten Zahlen.
Bei Bei |
ON |
Schaltet die Optimierung ein.
Wenn keine zusätzliche Option angegeben wird, gilt der
für jede Option definierte Standardwert. Wie in der folgenden Anmerkung
mitgeteilt, kann dies unerwünschte Ergebnisse zur Folge haben. Dies gilt
insbesondere für die Optionen |
OFF |
Schaltet die Optimierung aus. |
OPTLEV={ 2|3} |
Gibt die Optimierungsstufe an - entspricht in etwa der
Anzahl der Durchläufe durch das Programm.
|
OVFLW[={ON| OFF |Y|N}] |
Gibt an, ob Überlaufprüfungen bei aritmetischen
Operationen oder Zuweisungen in den optimierten Code aufgenommen werden.
Siehe auch die folgende Anmerkung. |
PGEN[={ON| OFF |Y|N}] |
Gibt an, ob eine Disassemblierung des optimierten Code ausgegeben werden soll. Mit dieser Option werden auch alle anderen Nachverfolgungsoptionen aktiviert, siehe PGEN Option im folgenden Abschnitt. |
RANGE[={ON| OFF |Y|N}] |
Gibt an, ob bei Operationen mit Arrays
Bereichsprüfungen durchgeführt werden. Dadurch wird sichergestellt, dass
Array-Bereiche eine gleiche Anzahl an Elementen in allen entsprechenden
Dimensionen aller Operanden haben.
Siehe auch die folgende Anmerkung. |
SIGNCHCK[={
ON|OFF|Y|N}] |
Gibt an, ob das Ergebnis einer Multiplikation mit
einem gepackten oder nicht gepackten Multiplikator auf eine negative Null
geprüft werden soll. Wenn Null mit einer negativen Zahl multipliziert wird,
generiert die Maschineninstruktion MP ein negatives Null-Ergebnis. Wenn
SIGNCHCK auf ON gesetzt ist, wird diese negative Null
in eine positive Null umgewandelt. Die Prüfung auf eine negative Null erfolgt
bei jeder Multiplikation mit einem gepackten oder nicht gepackten
Multiplikator.
|
TRENTRY |
Nur für den internen Gebrauch durch Software AG bestimmt. Die Einstellung dieses Parameters nicht ändern. |
UNICC |
Gibt an, ob optimierter Code für
IF- und DECIDE-Statements mit Unicode-Operanden
generiert wird, siehe UNICC
Option im folgenden Abschnitt.
|
ZD[={
ON|OFF|Y|N}] |
Gibt an, ob Divisoren auf Null geprüft werden sollen.
Ist diese Option angegeben, dann wird Code eingefügt,
damit sich das Programm gemäß dem Natural-Profilparameter
Ist diese Option nicht angegeben, tritt der
Natural-Fehler Siehe auch ZD - Division durch Null in der Natural Parameter-Referenz-Dokumentation. |
Anmerkung zu INDEX, INDX, OVFLW und RANGE
Wenn die Option INDEX, INDX,
OVFLW oder RANGE gesetzt ist, werden zusätzliche
Instruktionen zu dem generierten Code hinzugefügt, um Datenüberlauf- und
Index-außerhalb-Bereich-Situationen zu entdecken, falls solche während der
Programmausführung auftreten sollten. Zwar vergrößert die Benutzung dieser
Optionen den generierten Code, sie wird aber empfohlen, um sicherzustellen,
dass fehlerhafte Programme aufgespürt werden und nicht zu unvorhersehbaren
Ergebnissen, Speicherbeschädigungen oder abnormalen Programmabbrüchen führen
können.
Folgende Themen werden behandelt:
DEFINE DATA LOCAL ... 1 P1 (P1/9) ... 1 P3 (P3/9) ... 1 I (I4) 1 J (I4) 1 K (I4) 1 L (I4) END-DEFINE ... P1(I:J) := P3(K:L) ... END
Bei INDX=ON oder INDEX=ON wird Code
generiert, um zu überprüfen, dass I, J,
K und L innerhalb der für P1 bzw.
P3 definierten Bereiche sind.
Bei INDX=ON oder RANGE=ON wird Code
generiert, um zu überprüfen, dass I:J und K:L
Bereiche von der gleichen Länge bezeichnen.
Bei OVFLW=ON wird Code generiert, um zu überprüfen,
dass der Wert von P3 in die entsprechende P1-Variable
passt.
Zum Beispiel: Der Wert 100 würde hier einen
Überlauf verursachen.
Beispiel-Fehlersituation:
Wenn bei gesetztem OVFLW=OFF eine der Ausprägungen
von P3 den Wert 100 enthält, ist der Wert, der der
entsprechenden P1-Ausprägung zugewiesen wird, Null. Ist bei
gesetztem INDX=OFF die Index-Variable I Null oder
größer als 9, werden Speicherbereiche, die nicht zu Array
P1 gehören, beschädigt. Sind diese Optionen (OVFLW
und INDX) auf ON gesetzt, tritt ein Natural-Fehler
auf, so wie es in der Standard-Natural-Laufzeit der Fall ist.
Für die oben angegebenen NOC-Optionen wird zusätzlicher Code generiert. Dies wird jedoch durch den Vorteil einer Prüfung gut kompensiert, die z. B. vor schwer zu entdeckenden und bereinigenden Fehlern schützt. Unentdeckte Fehler können natürlich zu unvorhersehbaren Ergebnissen führen.
Um sicherzustellen, dass die geringste Menge an Code generiert wird, und somit optimale Leistung zu erreichen, verwenden Sie:
OPT='NODBG,NOSGNTR,SIGNCHCK=OFF,ZD=OFF'
Wenden Sie diese Einstellung jedoch nur auf Objekte an, die gründlich mit dem Debugger fehlerbereinigt wurden, siehe auch Anmerkung zu INDEX, INDX, OVFLW und RANGE.
Die ARCH-Option dient zur Angabe des IBM Hardware
Architecture Level, der zum Generieren von Code für ausführbare Natural-Objekte
benutzt werden soll.
Wenn Sie einen ARCH-Wert angeben, generiert der
Natural Optimizer Compiler neuere und schnellere Maschineninstruktionen, die
die Leistung des generierten Codes verbessern können. Der angegebene Wert darf
nicht höher sein als der Architecture Level Ihrer aktuellen Maschine. Ein mit
einem ARCH-Level katalogisiertes ausführbares Natural-Objekt kann
nur auf einer Maschine mit gleichem oder einem höheren Architecture Level
laufen. Deshalb empfehlen wir, die ARCH-Option nicht zu verwenden,
wenn die katalogisierten Objekte auf einer beliebigen Maschine, insbesondere
auf einer Maschine mit niedrigerem Architecture Level, ausgeführt werden
sollen.
Ausführliche Informationen zu IBM Hardware Architecture Level siehe IBM-Literatur (z/Architecture, Principles of Operation).
Die folgenden Architecture Levels werden von der
ARCH-Option des Natural Optimizer Compiler unterstützt:
| IBM Architecture Level | Erforderliche IBM Hardware Facility |
|---|---|
0 |
Gibt an, dass kein Architecture Level benutzt wird. Dies ist die Standardeinstellung für alle von Natural unterstützen Großrechnerplattformen. |
1 bis
4 |
Diese Werte werden nicht ausgewertet
und wie ARCH=0 behandelt.
|
5 bis
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
Anmerkung:
Bei einem ARCH-Wert größer als Null generiert der
Natural Optimizer Compiler Instruktionen bis hin zu dem in obiger Tabelle
beschriebenen Facility Level. Ein ARCH-Wert größer als der
Architecture Level der zugrunde liegenden Maschine wird bei der Kompilierung
abgelehnt. Der Versuch, ein Programm, das mit einem ARCH-Level
kompiliert wurde, auf einer Maschine mit einem niedrigeren Architecture Level
zu starten, führt zu einem Laufzeitfehler NAT1394.
Informationen zu der aktuellen Maschine können Sie sich mit dem Systemkommando
TECH
anzeigen lassen.
Folgende Themen werden behandelt:
Bei gesetztem ARCH=10 generiert der Natural
Optimizer Compiler Instruktionen, die von der Decimal-Floating-Point (DFP)
Zoned-Conversion Facility für die in den folgenden Abschnitten beschriebenen
numerischen Operationen zur Verfügung gestellt werden. Dies kann die
Ausführungsgeschwindigkeit für Statements, die diese Operationen verwenden,
erheblich verbessern.
- Operationen optimiert durch ARCH=10
Die folgenden arithmetischen Operationen auf Variablen der Natural-Datenformate I (ganzzahlig), N (numerisch ungepackt) und P (gepackt numerisch) profitieren von
ARCH=10.
Wertzuweisungen:
P:=I
P:=N
N:=I
N:=N
N:=Pnur wenn die Anzahl gepackter Ziffern kleiner gleich 15 ist.
I:=NArithmetische Operationen wie zum Beispiel mit den Statements
ADD,SUBTRACT,DIVIDEundMULTIPLY, jedoch nur wenn folgende Bedingungen zutreffen:Mindestens einer der verwendeten Operanden ist im Format N oder I.
Das Ergebnis der Operation überschreitet nicht 34 Stellen (Ganzzahl- + Dezimalstellen).Vergleiche wie zum Beispiel mit den Statements
IFundDECIDE, jedoch nur wenn folgende Bedingungen zutreffen:Mindestens einer der verwendeten Operanden ist im Format N.
Die beiden Operanden habe verschiedene Formate.
Bei gesetztem ARCH=11 verwendet der Natural
Optimizer Compiler Maschineninstruktionen, die mit der DFP Packed-Conversion
Facility eingeführt wurden. Zusätzlich zu den mit
ARCH=10 optimierten
numerischen Operationen optimiert ARCH=11 auch Operationen, die
nur gepackte Variablen verwenden.
Bei gesetztem ARCH=12 generiert der Natural
Optimizer Compiler Maschineninstruktionen, die mit der Vector Packed-Decimal
Facility (VPD) eingeführt wurden. Dies kann die Ausführungsgeschwindigkeit bei
Zuweisungen, Vergleichen und Berechnungen verbessern, wenn mindestens ein
gepackter Operand verwendet wird.
VPD-Maschineninstruktionen werden bei den gleichen Natural-Operationen generiert, die bei Architecture Level 10 und Architecture Level 11 benutzt werden, sie werden jedoch nur bei arithmetischen Operationen verwendet, deren Ergebnisse 31 Stellen (Ganzzahlstellen + Dezimalstellen) nicht übersteigen.
Wenn ARCH=10 benutzt wird, generiert der Natural
Optimizer Compiler Maschineninstruktionen, die mit der Decimal-Floating-Point
(DFP) Zoned-Conversion Facility oder der DFP Packed-Conversion Facility
eingeführt wurden. Diese Instruktionen bewirken eine schnellere Ausführung als
die Standard-Maschinencode-Instruktionen für arithmetische Operationen, sie
akzeptieren jedoch keine Daten, die in Bezug auf den gezonten numerischen
Datentyp (N) unzulässig sind.
Dies kann zu Laufzeitfehlern führen, wenn ein N-Feld innerhalb
eines REDEFINE-Abschnitts einer alphanumerischen oder binären
Variablen definiert ist und das N-Feld nicht zulässig initialisiert wird, bevor
es in einer arithmetischen Operation benutzt wird.
Ein numerisches zoniertes Feld enthält eine Ziffer in einem
Byte. Normalerweise enthält jedes Byte x’F’ im linken Halbbyte
(Zone Bits) und den Ziffernwert (0-9) im rechten
Halbbyte (Numeric Bits). Dies gilt für alle
Bytes, außer dem letzten, das (A-F) im linken Halbbyte enthält (Sign Bits).
Ein Vorzeichen-Halbbyte (C,A,F,E) stellt einen positiven Wert dar, während (B,D) für einen negativen Wert steht. Ein anderer Wert als (0-9) innerhalb des numerischen Halbbytes (N) und ein anderer Wert als (A-F) innerhalb des Vorzeichen-Halbbytes (S) wird als ungültig angesehen. Die Daten innerhalb der Zonen-Halbbytes (Z) werden von arithmetischen Konvertierungsanweisungen nicht berücksichtigt und können einen beliebigen Wert (0-F) haben.
Beispiel für eine Variable, die als (N6) definiert ist:
| ZN | ZN | ZN | ZN | ZN | SN | Vorzeichen ist | Wert ist | Funktioniert bei
ARCH<=9
|
Funktioniert bei
ARCH>=10 |
|---|---|---|---|---|---|---|---|---|---|
| F1 | F2 | F3 | F4 | F5 | F6 | F=positive | 123456, ok | ja | ja |
| F3 | F2 | F6 | F3 | F3 | D2 | D=negative | 323662, ok | ja | ja |
| 40 | 40 | 40 | 40 | 40 | 40 | 4=ungültig | 000000, ok | ja | NAT7024 |
| 00 | 00 | 00 | 00 | 00 | 00 | 0=ungültig | 000000, ok | ja | NAT7024 |
| 12 | 13 | 14 | 15 | 16 | 17 | 1=ungültig | 234567, ok | ja | NAT7024 |
| 51 | 6B | 72 | 7A | 12 | F1 | F=positive | 1B2A21, ungültig | NAT0954 | NAT7024 |
Wenn ARCH=9 (oder niedriger) benutzt wird, werden
ungültige Vorzeichen-Halbbytes (0-9) durch den generierten Code automatisch in
ein positives Vorzeichen (F) korrigiert. Dadurch werden N-Felder mit leerem
Inhalt zu gültigen Daten mit dem Wert Null. Das Gleiche gilt für
Hexa-Null-Daten.
Wenn ARCH=10 oder ARCH=11 benutzt
wird, bleiben ungültige Vorzeichen-Halbbytes (0-9) unverändert und führen zu
einer Programmprüfung (Data Exception), wenn auf sie von einer DFP-Instruktion
zugegriffen wird. Wenn ein solcher Abbruchfehler auftritt, gibt Natural
anstelle des Fehlers
NAT0954
den Fehler NAT7024
aus, um eindeutig anzuzeigen, dass der Fehler durch eine N-Variable verursacht
wird, die keine gültigen numerischen Daten enthält.
Wenn ein numerisches Halbbyte (N) nicht den Wert (0-9) enthält, erfolgt unabhängig vom benutzten Architecture Level eine Programmprüfung (Data Exception).
Benutzen Sie ARCH=10 oder ARCH=11
nicht mit einem anderen Vorzeichenwert als (A-F), um ein Programm zu
katalogisieren, das mit unsauberen numerischen Daten arbeitet.
Beispiel:
OPTIONS MCG=(PGEN,ARCH=9) DEFINE DATA LOCAL 1 #A (A6) 1 REDEFINE #A 2 #N (N6) END-DEFINE /* ARCH=9 ARCH=10 #A := H'F1F2F3F4F5F6' ADD 1 TO #N WRITE #N /* ok ok #A := H'F3F2F6F3F3D2' ADD 1 TO #N WRITE #N /* ok ok #A := H'404040404040' ADD 1 TO #N WRITE #N /* ok NAT7024 #A := H'000000000000' ADD 1 TO #N WRITE #N /* ok NAT7024 #A := H'121314151617' ADD 1 TO #N WRITE #N /* ok NAT7024 #A := H'516B727A12F1' ADD 1 TO #N WRITE #N /* NAT0954 NAT7024 END
Darüber hinaus, wenn ARCH=10 (oder höher) benutzt
wird, kann Natural einen Fehler
NAT1305
(abgeschnittener numerischer Wert) anstelle eines Fehlers
NAT1301
(Zwischenergebnis zu groß) aus folgendem Grund ausgeben: Zur Berechnung von
Zwischenergebnissen wird das numerische DFP-Format benutzt und ein Überlauf
wird erst am Ende der arithmetischen Operation festgestellt, wenn das DFP in
das Format des Ereignisses umgewandelt wird.
Wenn ARCH=12 benutzt wird, generiert der Natural
Optimizer Compiler Maschineninstruktionen, die mit der Vector Packed-Decimal
Facility (VPD) eingeführt wurden und die in Bezug auf die Unrichtigkeit der
Daten mit dem Code kompatibel sind, der mit ARCH=9 (oder
niedriger) generiert wurde.
Numerische Datenfelder (N) mit unrichtigen
Vorzeichendarstellungen (0-9) werden in den positiven Vorzeichenwert (F)
konvertiert. Dabei werden numerische Felder mit Leerzeichen oder einem
hex00-Inhalt akzeptiert und als Wert Null behandelt. Eine
Daten-Ausnahme (Abend) tritt in dieses Fällen nicht auf.
Die Option ARROPT bestimmt den
Generierungsalgorithmus, der bei Array-Zuweisungen des Typs
A(*):=scalar verwendet werden soll.
Gültige Werte für ARROPT:
| Wert | Erklärung |
|---|---|
ON |
Empfohlene Einstellung für Arrays mit
mindestens 50 Ausprägungen.
|
OFF |
Empfohlene Einstellung für Arrays mit weniger als 50 Ausprägungen. |
Die PGEN-Option bewirkt, dass der Natural Optimizer
Compiler den generierten Code und interne Natural-Strukturen ausgibt. Dies
ermöglicht es, Code und Strukturen zu untersuchen, z.B. zur Fehlerbehebung,
Performance-Überprüfung und bei Support-Fragen.
Um die von der PGEN-Option gelieferten Ergebnisse
interpretieren zu können, ist ein Verständnis der Arbeitsweise des
/370-Assemblers von IBM erforderlich.
Wir empfehlen Ihnen, diese Option mit Unterstützung durch Ihren lokalen Software AG-Vertreter zu benutzen.
Folgende Themen werden behandelt:
Um die PGEN-Funktion zu benutzen, müssen Sie die
PGEN-Option setzen, wenn Sie den Optimizer Compiler
aktivieren.
Da der Pufferbereich im Speicher vorgehalten wird, kann es
vorkommen, dass der Benutzer-Thread nicht groß genug ist, um die
Trace-Informationen aufzunehmen. In diesem Fall sollten Sie versuchen,
PGEN nur für den Teil des Programms zu setzen, dessen Ablauf
verfolgt werden soll, zum Beispiel:
OPTIONS
MCG=(PGEN=ON,TRGPT=ON)oder OPTIONS MCG=+PGEN,TRGPT |
Schaltet die Ablaufverfolgung (Tracing) ein, einschließlich der Ablaufverfolgung der GPT-Einträge. |
OPTIONS MCG=(PGEN=OFF)oder OPTIONS MCG=-PGEN |
Schaltet die Ablaufverfolgung aus. |
Es sind verschiedene Optionen verfügbar, die den Inhalt der
Ausgabe beeinflussen. In ihrer Grundform bewirkt die PGEN-Option
eine formatierte Auflistung von Natural-Sourcecode-Zeilen und eine
Disassemblierung des entsprechenden Codes, der generiert und im Speicher
abgelegt werden soll, um von dort mittels der NOCSHOW-Utility
extrahiert zu werden, siehe Beschreibung in
Ausgabe der
PGEN-Option.
Die Optionen TRSTMT, TRGPT,
TRMPT und TRVDT bewirken, dass Hex-Dumps von internen
Datenstrukturen, die mit jeder Zeile verbunden sind, ausgegeben werden.
Die Optionen TRBASES und TRCACHE
bewirken, dass Informationen über Basisregister und Cache-Variablen ausgedruckt
werden.
In der folgenden Tabelle werden die Optionen beschrieben, die
bei PGEN=ON verfügbar sind. Die Erklärung der verwendeten Syntax
finden Sie in der Einleitung zum Abschnitt Liste der Optionen
weiter oben.
| Option | Erklärung |
|---|---|
LPP={5|..| 55 |..|255} |
Zeilen pro Seite für die Trace-Ausgabe. Nur bei
TREXT=ON benutzt.
|
NOsrcE[={ON| OFF |Y|N}] |
Bei NOsrcE=OFF wird das
Natural-Quellcode-Statement in die Ausgabe aufgenommen.
|
TRACELEV={ 0 |..|255} |
Gibt den Trace Level an. Jedes Bit in diesem
Ein-Byte-Wert gibt einen Puffertyp für die Verfolgung an; diese Bits können mit
den Optionen TRxxx ebenfalls
eingeschaltet werden.
|
TRBASES[={ON| OFF |Y|N}] |
Gibt an, ob Basisregisterzuweisungen verfolgt werden. |
TRCACHE[={ON|
OFF|Y|N}] |
Gibt an, ob CACHE-Einträge verfolgt
werden.
|
TREXT[={ON| OFF |Y|N}] |
Bei |
TRGPT[={ON| OFF |Y|N}] |
Gibt an, ob GPT-Einträge verfolgt
werden.
|
TRMPT[=ON| OFF |Y|N}] |
Gibt an, ob MPT-Einträge verfolgt
werden.
|
TRSTMT[={ON| OFF |Y|N}] |
Gibt an, ob STMT-Einträge verfolgt
werden.
|
TRVDT[={ON| OFF |Y|N}] |
Gibt an, ob VDT-Einträge verfolgt
werden.
|
Siehe auch die folgenden Beispiele.
Es gibt zwei Stellen, an die der Natural Optimizer Compiler die
Ausgabe von PGEN leiten kann.
Der Inhalt dieses Pufferspeichers wird jedes Mal
überschrieben, wenn eines der Kommandos CHECK,
CAT, STOW oder
RUN ausgeführt wird.
Es wird ein Systemdienstprogramm (Utility)
NOCSHOW bereitgestellt, mit dem der Inhalt dieses Puffers
angesehen, durchsucht oder gedruckt werden kann.
Um die Utility NOCSHOW aufzurufen:
Geben Sie das Direktkommando
NOCSHOW ein, nachdem eines der Kommandos
CHECK, STOW,
CAT oder RUN ausgeführt
worden ist, während der Natural Optimizer Compiler aktiv gewesen ist.
Im Bildschirm sind folgenden PF-Tasten belegt:
| PF-Taste | Funktion |
|---|---|
| PF2 | Position am oberen Rand der Ausgabe. |
| PF4 | Position eine Zeile zurück |
| PF5 | Position eine Zeile vor |
| PF6 | In Report (1) drucken |
| PF7 | Position eine Seite zurück |
| PF8 | Position eine Seite vorwärts |
| PF9 | Via Entire Connection in Report (7) drucken |
| PF10 | Nach Zeichenkette durchsuchen |
| PF11 | Suche wiederholen |
Wenn TREXT=ON angegeben ist, übergibt der Natural
Optimizer Compiler jede Ausgabezeile an den User Exit NOCPRINT,
anstatt sie im Trace-Pufferspeicher hinzuzufügen.
Der Aufruf von NOCPRINT erfolgt gemäß normalen
Betriebssystem-Registerkonventionen. Register 1 zeigt auf ein Vollwort, das die
Adresse der 81-Byte-Druckzeile mit ANSI-Vorschubsteuerzeichen in Position 1
enthält. Register 13 zeigt auf einen Bereich von 18*4 Bytes, der als
Speicherregister benutzt werden kann. Register 14 enthält die Rückgabeadresse
und Register 15 enthält die Eingabeadresse von NOCPRINT.
Der User Exit NOCPRINT kann in einer beliebigen
Sprache geschrieben sein, die die oben genannten Registerkonventionen
unterstützt. Der User Exit muß zusammen mit dem Natural Optimizer
Compiler-Nukleus mit dem Natural-Nukleus verlinkt sein.
Dieser Abschnitt enthält Hinweise und Erläuterungen, wie die mit
der PGEN-Option erstellte Ausgabe zu interpretieren ist.
Oben in der PGEN-Ausgabe stehen einige
disassemblierte Zeilen, die scheinbar nicht zu einer Sourcecode-Zeile gehören.
Es handelt sich um die Instruktionen, aus denen der Prolog besteht, der immer
dann ausgeführt wird, wenn die Steuerung vom nicht-optimierten zum optimierten
Code übergeben wird. Permanente Basisregister werden geladen und die Steuerung
wird an den korrekten Punkt im Prolog übergeben. Siehe
Beispiel Abschnitt
A weiter unten.
Manchmal werden viele Zeilen ohne Code gedruckt. Dies bedeutet, dass dort kein Code erforderlich war oder das diese Statements von der NOC-Optimierung ausgeschlossen sind. Siehe Beispiel Abschnitt B weiter unten.
Besteht daraüber hinaus der für ein Natural-Statement generierte Code nur aus Folgendem:
BAS R14,RETH DC X'....'
so bedeutes dies eine Rückkehr zur Standardlaufzeit, weil
dieses Statement nicht von NOC optimiert werden konnte (siehe Zeile
0170).
Wenn NODBG=OFF (Standardeinstellung) angegeben
worden ist, wird zu Beginn eines jeden neuen Natural-Statement eine
Instruktionsfolge generiert.
BALR R9,R11 DC X'....'
Diese Instruktionsfolge setzt (im Fehlerfall) die
Zeilennummer und prüft, ob der Test-Modus eingeschaltet ist (TEST
auf ON). Ohne diese Instruktionsfolge ist ein Debugging von
NOC-kompilierten Statements durch den Natural Debugger nicht möglich. Siehe
Beispiel Abschnitt
C weiter unten.
Manchmal ist zwischen disassemblierten Zeilen ein Zeilenumbruch vorhanden. Der Umbruch zeigt eine interne Statement-Trennung an. Dies kommt vor, weil ein einzelnes Natural-Statement oft mehrere interne (Pseudo-Code-)Statements generiert.
Die bedienten Natural-Variablen werden in den Assembler-Code eingefügt.
Die Angaben auf der rechten Seite (z.B. START
8FEC) sind interner Art. Sie dokumentieren den Pfad, wie der Code von
den NOC-Modulen generiert wurde.
Alle Adressarten innerhalb des Codes werden aufgelöst und in
der Form =(00044) zur Verfügung gestellt. Dies dokumentiert den
Versatz im Code, an dem die Verzweigung ausgeführt wird.
Die erste und die letzte Code-Instruktion enthält die zum
Kompilieren dieses Programms benutzte NOC-Version: 4700 8410
bedeutet NOC-Version V841.
000000 4700 8410 NOP 1040(,R8) START 8FEC
000004 5880 D354 L R8,CONST D9DC
000008 5870 D370 L R7,LOCAL D9DC
00000C 4810 6006 LH R1,6(,R6) 90A0
000010 1F60 SLR R6,R0 90BA
000012 47F1 A000 B 0(R1,R10) 90C0
000016 4DE0 B040 BAS R14,RETH RETN F0AA
00001A 0034 DC X'0034' F0C0
0010 0010 OPTIONS MCG=(PGEN,OVFLW,INDX) 0020 DEFINE DATA LOCAL 0030 1 I(I4) 0040 1 P(P7.2) 0050 1 T(P7.2) 0060 END-DEFINE 0070 * 0080 SETTIME 0090 *
0100 FOR I=1 TO 100000
00001C 0D9B BASR R9,R11 MOVE 1724A
00001E 004A DC X'004A' 17278
000020 D203 7000 8148 MVC I(4),#KST0148 97D2
000026 47F0 A044 B 68(,R10) =(00044) GOTO EF44
00002A 0D9B BASR R9,R11 ADD 1724A
00002C 006A DC X'006A' 17278
00002E BF0F 7000 ICM R0,B'1111',I BB20
000032 5A00 8148 A R0,#KST0148 1E4E
000036 0D90 BASR R9,0 F12A
000038 4710 B15C BO NAT1301 1E9E
00003C BE0F 7000 STCM R0,B'1111',I A9CC
000040 0D9B BASR R9,R11 IF 1724A
000042 007C DC X'007C' 17278
000044 BF0F 7000 ICM R0,B'1111',I BB20
000048 5900 819B C R0,#KST019B 3FDA
00004C 47D0 A054 BNH 84(,R10) =(00054) EF44
000050 47F0 A078 B 120(,R10) =(00078) GOTO EF44
0110 ADD 1.00 TO P
000054 0D9B BASR R9,R11 ADD 1724A
000056 0092 DC X'0092' 17278
000058 FA41 7004 819F AP P(5),#KST019F(2) 20A0
00005E 0D90 BASR R9,0 F12A
000060 4710 B15C BO NAT1301 1071C
000064 910D 7008 TM P+4,X'0D' 120B0
000068 4710 A070 BO 112(,R10) =(00070) 120F6
00006C 960F 7008 OI P+4,X'0F' 1210ª
0120 END-FOR
0130 *
000070 0D9B BASR R9,R11 GOTO 1724A
000072 00A4 DC X'00A4' 17278
000074 47F0 A02A B 42(,R10) =(0002A) EF44
0140 T:=*TIMD(0080)
000078 0D9B BASR R9,R11 SYFU 1724A
00007A 00AE DC X'00AE' 17278
00007C 4DE0 B0D8 BAS R14,SYSFUNC 5F1A
000080 0190 B881 DC X'0190B881' 5F28
000084 F246 7009 8190 PACK T(5),#KST0190(7) MOVE AD18
00008A 910F 700D TM T+4,X'0F' 12130
00008E 4710 A0A0 BO 160(,R10) =(000A0) 12176
000092 17EE XR R14,R14 1218E
000094 43E0 700D IC R14,T+4 12194
000098 43EE B488 IC R14,PSGNTR(R14) 121AA
00009C 42E0 700D STC R14,T+4 121B2
0000A0 F040 7009 0002 SRP T(5),2,0 ACA2
0000A6 17EE XR R14,R14 1218E
0000A8 43E0 700D IC R14,T+4 12194
0000AC 43EE B488 IC R14,PSGNTR(R14) 121AA
0000B0 42E0 700D STC R14,T+4 121B2
0150 T:=T / 10
0160 *
0000B4 0D9B BASR R9,R11 DIV 1724A
0000B6 00C0 DC X'00C0' 17278
0000B8 F864 D100 7009 ZAP OP1(7),T(5) AC60
0000BE FD61 D100 81A1 DP OP1(7),#KST01A1(2) 327A
0000C4 F844 7009 D100 ZAP T(5),OP1(5) AC60
0000CA 910D 700D TM T+4,X'0D' 120B0
0000CE 4710 A0D6 BO 214(,R10) =(000D6) 120F6
0000D2 960F 700D OI T+4,X'0F' 1210A
0170 DISPLAY 'ELAPSED TIME (S)' T
0000D6 4DE0 B040 BAS R14,RETH RETN F0AA
0000DA 00D2 DC X'00D2' F0C0
0180 END
0000DC 40D6 D7E3 F844 2000 DC X'40D6D7E3F8442000' =' OPT8à..' END 927E
0000E4 0000 0000 DC X'00000000' nf
0000E8 40D5 D6C3 F8F4 F140 DC X'40D5D6C3F8F4F140' =' NOC841 ' 92E4
Die UNICC-Option steuert die Generierung von
optimiertem Code für IF-, DECIDE FOR- und
DECIDE ON-Statements, die Unicode-Operanden enthalten.
Gültige Werte für UNICC:
| Wert | Erklärung |
|---|---|
ON |
Generiert optimierten Code und prüft,
ob COLLATE=OFF
gesetzt ist (siehe Profilparameter CFICU in der
Parameter-Referenz-Dokumentation).
Falls |
FORCE |
Generiert optimierten Code wie bei
ON, aber ohne abzuprüfen, ob COLLATE=OFF gesetzt
ist..
Der mit |
OFF |
Es wird kein optimierter Code
generiert.
|
Der Natural Optimizer Compiler generiert optimierten Code für Natural-Statements mit Unicode-Zeichenketten, wenn die folgenden Erfordernisse erfüllt sind:
| Statement | Erforderlich |
|---|---|
| Alle Statements | Alle im Statement benutzten Operanden müssen vom Typ Unicode sein. |
EXAMINE |
Die ARCH-Option muss auf einen Wert
größer gleich 6 gesetzt sein.
|
|
|
|
|
|
Die ARCH-Option muss auf einen Wert
größer gleich 5 gesetzt sein.
|
Der globale Parameter ZD beeinflusst das
Verhalten des NOC-Compiler. Siehe Beschreibung der ZD-Option unter
Liste der
Optionen weiter oben.
Der COMPOPT-Subparameter
PSIGNF (siehe auch Systemkommando
COMPOPT in
der Natural-Systemkommando-Dokumentation) beeinflusst das
Verhalten, indem er erzwingt, dass positive gepackte Dezimalzahlen bei
ON auf F und bei OFF auf C gesetzt werden. Der
Parameter wird angewendet, wenn NOSGNTR=OFF angegeben ist.
Siehe die Tabelle unten für gepackte Daten (Format P) :
NOSGNTR=OFF |
und | PSIGNF=ON |
Alle Vorzeichen werden auf F normalisiert (Standard). |
NOSGNTR=OFF |
und | PSIGNF=OFF |
Alle Vorzeichen werden auf C normalisiert. |
NOSGNTR=ON |
Alle Vorzeichen werden so belassen, wie sie bei der letzten Operation erzeugt wurden. | ||
Für numerische Daten (Format N) werden die Vorzeichen immer auf F
normalisiert, unabhängig von den Einstellungen von NOSGNTR und
PSIGNF.