Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

MODIFY-MODULE-PROPERTIES

&pagelevel(5)&pagelevel

Alias-Name:    SET-MODULE-PROPERTIES

Mit dieser Anweisung werden die Eigenschaften des zu generierenden Moduls festgelegt.

MODIFY-MODULE-PROPERTIES

SHAREABLE-CODE= *UNCHANGED / *NO / [*YES] (...)


*YES(...)



|

PUBLIC-SLICING=*UNCHANGED / *YES / *NO

,LINKAGE= *UNCHANGED / *ILCS-OUT / *ILCS-INLINE

,WORKSPACE= *UNCHANGED / *TO-STATIC-AREA / *TO-STACK

,SUBROUTINE-CALL= *UNCHANGED / *BASR / *LAB

,ETPND-GENERATION= *UNCHANGED / *NO / [*YES] (...)


*YES(...)



|

DATE-FORMAT= *UNCHANGED / *CALENDAR-DATE-ONLY / *WITH-JULIAN-DATE

,LOWER-CASE-NAMES= *UNCHANGED / *YES / *NO

,SPECIAL-CHARACTERS= *UNCHANGED / *CONVERT-TO-DOLLAR / *KEEP

,STRING-LITERALS= *UNCHANGED / *WRITEABLE / *READ-ONLY

,CONSTANTS= *UNCHANGED / *WRITEABLE / *READ-ONLY

,C-NAMES= *UNCHANGED / *STD / *UNLIMITED / *SHORT

,FP-ARITHMETICS= *UNCHANGED / *390-FORMAT / *IEEE-FORMAT

SHAREABLE-CODE =
Diese Option steuert die gemeinsame Benutzbarkeit des erzeugten Codes.

SHAREABLE-CODE = *UNCHANGED
Es gelten die Einstellungen der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

SHAREABLE-CODE = *NO
Der Compiler erzeugt keinen gemeinsam benutzbaren Code.
*NO ist Voreinstellung.

SHAREABLE-CODE = [*YES] (PUBLIC-SLICING = ...)
Der Compiler erzeugt gemeinsam benutzbaren Code und zwar ein LLM mit einer gemeinsam benutzbaren Code-CSECT und einer nicht gemeinsam benutzbaren Daten-CSECT.

PUBLIC-SLICING = *UNCHANGED / *YES / *NO
Mit PUBLIC SLICING wird gesteuert, ob das generierte Objekt bereits nach dem Attribut PUBLIC in Slices aufgeteilt wird.

*UNCHANGED

Es gelten die Einstellungen der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

*YES

Das Objekt soll bereits nach dem Attribut PUBLIC in Slices aufgeteilt werden. *YES ist Voreinstellung.

*NO

Das Objekt wird in einer Slice abgelegt.

POSIX-Objekte werden stets mit PUBLIC-SLICING = *NO generiert.

Bei sehr großen Programmen kann es sinnvoll sein, PUBLIC-SLICING=*NO zu setzen, da auf diese Weise lange Binde-Laufzeiten für das Einlesen von Objekten mit Slices vermieden werden.

LINKAGE = *UNCHANGED / *ILCS-OUT / *ILCS-INLINE
Die Funktionsaufrufe im erzeugten Modul werden mittels ILCS bewerkstelligt. Mit dieser Option kann angegeben werden, ob der ILCS-Entry-Code für Funktionsaufrufe direkt in die Aufrufstelle eingesetzt werden soll („inline“) oder im Laufzeitsystem angesprungen werden soll („out-of-line“).

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

*ILCS-OUT:

Der ILCS-Entry-Code für Funktionsaufrufe wird im Laufzeitsystem angesprungen. Dadurch reduziert sich das Code-Volumen des Moduls.

*ILCS-INLINE:

Standardmäßig wird der ILCS-Entry-Code inline generiert. Die Laufzeit des erzeugten Objektes wird dadurch beschleunigt.

WORKSPACE = *UNCHANGED / *TO-STATIC-AREA / *TO-STACK
Diese Option beeinflusst einige Optimierungen des Compilers.

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

*TO-STATIC-AREA

Der Compiler führt folgende Optimierungen durch:

  • Für Konversionen wird ein Hilfsspeicher im statischen Datenbereich angelegt und mit konstanten Werten vorbelegt.

  • Bei innersten Funktionen (d.h. solchen ohne weitere Aufrufe) werden Daten, die nur innerhalb der Funktion gültig sind (auto-Variablen), nicht auf dem Stack abgelegt, sondern zusammen mit statischen Daten im Datenmodul.

Durch diese Maßnahmen entfällt die Notwendigkeit, für innerste Funktionen einen eigenen Stack-Bereich zu verwalten, wodurch der Funktions-Entrycode und somit die Laufzeit des Objekts verkürzt wird.

*TO-STACK

Die o.g. Optimierungen unterbleiben.

Die Daten (Doppelworte für Konversionen sowie auto-Variablen und Tempos von innersten Funktionen) werden auf dem Stack abgebildet.
Enthält eine Funktion Konversionen, so muss vor manchen Konversionen jedes Mal wieder ein Doppelwort auf dem Stack dynamisch vorbesetzt werden (ein zusätzlicher Befehl erforderlich).

SUBROUTINE-CALL = *UNCHANGED / *BASR / *LAB
Diese Option steuert die Realisierung von Unterprogramm-Einsprüngen mittels Assembler-Befehlen.

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

*BASR:

Standardmäßig wird der Befehl BASR generiert.

*LAB:

Es werden die maschinenunabhängigen Assembler-Befehle LA und B generiert. Programme mit dieser Befehlsfolge sind auf allen 7500-Anlagen ablauffähig.
Achtung: Diese Option ist in den Modi C++V3 und C++ 2017 nicht erlaubt.

ETPND-GENERATION =
Mit dieser Option wird die #pragma-Anweisung zur Erzeugung eines ETPND-Bereichs (siehe "ETPND-Pragma") gelöscht bzw. das Datum-Format des ETPND-Bereichs festgelegt.

ETPND-GENERATION = *UNCHANGED
Es gelten die Angaben der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

ETPND-GENERATION = *NO
Standardmäßig wird kein ETPND-Bereich erzeugt.

ETPND-GENERATION = *YES(...)

DATE-FORMAT = *UNCHANGED / *CALENDAR-DATE-ONLY / *WITH-JULIAN-DATE

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

*CALENDAR-DATE-ONLY:

Das Datum-Format im ETPND-Bereich erhält die Form: 8 Byte Kalenderdatum - 4 Byte Ladeadresse

*WITH-JULIAN-DATE:

Im ETPND-Bereich wird folgendes Datum-Format generiert: 6 Byte Kalenderdatum - 3 Byte julianisches Datum - 4 Byte Ladeadresse

LOWER-CASE-NAMES = *UNCHANGED / *NO / *YES

Diese Option zur Umwandlung von Klein- in Großbuchstaben betrifft in den C-Sprachmodi und im Cfront-C++-Modus alle externen Symbole, in den Sprachmodi C++ V3 und C++ 2017 nur die mit extern "C" deklarierten Symbole. Bei der Codierung von externen C++-Symbolen in den Modi C++ V3 und C++ 2017 werden generell Kleinbuchstaben beibehalten.

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

*NO:

Standardmäßig werden bei der Generierung von Entry-Namen Klein- in Großbuchstaben umgewandelt.

*YES:

Bei der Generierung von Entry-Namen wird die Kleinschreibung beibehalten.

SPECIAL-CHARACTERS = *UNCHANGED / *CONVERT-TO-DOLLAR / *KEEP
Diese Option zur Umsetzung des Unterstrichs betrifft in den C-Sprachmodi alle externen Symbole, in den C++-Sprachmodi nur die mit extern "C" deklarierten Symbole (nicht die Entry-Namen der C-Bibliotheksfunktionen). Bei der Codierung von externen C++-Symbolen werden generell Unterstriche beibehalten.

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

*CONVERT-TO-DOLLAR:

Standardmäßig werden bei der Generierung von Entry-Namen Unterstriche in Dollarzeichen umgewandelt.

*KEEP:

Bei der Generierung von Entry-Namen werden die Unterstriche beibehalten.

Hinweise zu LOWER-CASE-NAMES und SPECIAL-CHARACTERS

  1. Die (voreingestellte) Umsetzung von Klein- in Großbuchstaben sowie von Unterstrichen in Dollarzeichen ist immer dann notwendig, wenn das erzeugte LLM mit Objekten verknüpft werden soll, in denen die Entry-Namen entsprechend umgesetzt wurden. Dies sind:

    • Objektmodule

    • mit dem C-V2.0-Compiler erzeugte LLMs

    • mit dem C/C++-Compiler erzeugte LLMs, in denen die Entry-Namen entsprechend umgesetzt wurden

    • Objekte, die mit anderen Sprachübersetzern erzeugt wurden (z.B. COBOL, ASSEMBLER)

  2. Die C-Bibliotheksfunktionen werden nur dann vollständig unterstützt, wenn die Optionen LOWER-CASE-NAMES und SPECIAL-CHARACTERS in einer der beiden folgenden Kombinationen vorliegen:
    • SPECIAL-CHARACTERS=*CONVERT-TO-DOLLAR und
      LOWER-CASE-NAMES=*NO

    • SPECIAL-CHARACTERS=*KEEP und LOWER-CASE-NAMES=*YES

STRING-LITERALS = *UNCHANGED / *WRITEABLE / *READ-ONLY

Zeichenketten-Konstanten (z.B. "abc") werden entweder im Datenmodul (*WRITEABLE) oder im Codemodul (*READ-ONLY) abgelegt.

CONSTANTS = *UNCHANGED / *WRITEABLE / *READ-ONLY

const-qualifizierte Objekte werden entweder im Datenmodul (*WRITEABLE) oder im Codemodul (*READ-ONLY) abgelegt.

C-NAMES = *UNCHANGED / *STD / *UNLIMITED / *SHORT

Diese Option legt die Länge von externen C-Namen fest und betrifft in den C-Sprachmodi alle externen Symbole, in den C++-Sprachmodi nur die mit extern "C" deklarierten Symbole (nicht die Entry-Namen der C-Bibliotheksfunktionen).
Die Option wirkt auch auf Static-Funktionen.

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

*STD:

Standardmäßig sind externe C-Namen maximal 32 Zeichen lang. Längere Namen werden vom Compiler auf 32 Zeichen verkürzt. Bei der Generierung von gemeinsam nutzbarem Code können nur 30 Zeichen genutzt werden.

*UNLIMITED:

Es findet keine Namensverkürzung statt. Der Compiler generiert in diesem Fall Entry-Namen im EEN-Format. EEN-Namen können eine Länge von maximal 32000 Zeichen erreichen. Module, die EEN-Namen enthalten, werden vom Compiler im LLM-Format 4 abgelegt. Ausführliche Informationen zur Weiterverarbeitung von LLMs im Format 4 finden Sie bei "BIND" (BIND-Anweisung, OUTPUT-FORMAT-Option).
Die Angabe *UNLIMITED wird im Cfront-C++-Modus nicht unterstützt.

*SHORT:

Externe C-Namen werden vom Compiler auf 8 Zeichen verkürzt. Diese Namensverkürzung entspricht der Behandlung von externen Namen innerhalb von Objektmodulen. Die Option wird benötigt, wenn im Programm externe Namen verwendet werden, die länger als 8 Zeichen lang sind und das vom C/C++-Compiler erzeugte Modul mit Objektmodulen verknüpft werden soll, die von den Vorgänger-Compilern C und C++ oder von Compilern für andere ILCS-Sprachen (z.B. COBOL85) erzeugt wurden.

FP-ARITHMETICS = *UNCHANGED / *390-FORMAT / *IEEE-FORMAT
Diese Option legt fest, ob der C/C++-Compiler für Gleitpunktzahlen und -Operationen Code im /390-Format oder im IEEE-Format erzeugt. Dies betrifft alle Variablen und Konstanten der Datentypen float, double und long double innerhalb eines C/C++-Programms.

*UNCHANGED

Es gelten die Angaben der letzten MODIFY-MODULE-PROPERTIES-Anweisung.

*390-FORMAT:

Der C/C++-Compiler erzeugt Code für Konstanten und Operationen im /390-Format (/390-Gleitpunkt-Arithmetik).
*390-FORMAT ist Voreinstellung.

*IEEE-FORMAT:

Der C/C++-Compiler erzeugt Code für Konstanten und Operationen im IEEE-Format (IEEE-Gleitpunkt-Arithmetik).

Achtung:

  • Es gibt keine Vorkehrungen beim Zusammenbinden von Objekten, die mit unterschiedlich erzeugten Floatingpoint-Arithmetiken übersetzt wurden. Dies kann beim Ablauf solcher Programme zu unerwarteten Ergebnissen führen.

  • Je nachdem, ob für Gleitpunkt-Datentypen und -Operationen das IEEE-Format oder das /390-Format verwendet wird, kann dasselbe C/C++-Programm aus folgenden Gründen unterschiedliche Ergebnisse liefern:

    • IEEE-Gleitpunktzahlen verwenden eine andere interne Darstellung als /390-Gleitpunktzahlen.

    • long double hat im IEEE-Format die gleiche Größe und Darstellung wie double. Das Layout von Strukturen mit einem long double hängt deshalb von dem Wert dieser Option ab.
    • IEEE-Gleitpunkt-Operationen unterscheiden sich semantisch von den entsprechenden /390-Gleitpunkt-Operationen, z.B. beim Runden. So wird im IEEE-Format standardmäßig „Round to Nearest“ angewendet anstatt „Round to Zero“ wie beim /390-Format.

Voraussetzungen:

  • Bei Nutzung der IEEE-Gleitpunktarithmetik dürfen Sie die C-Bibliotheksfunktionen in Ihrem Quellprogramm nicht explizit deklarieren, sondern nur indirekt via Inkludieren des entsprechenden CRTE-Headers (siehe Handbuch „C-Bibliotheksfunktionen“ [2]). Andernfalls kann es zum Übersetzungsfehler ‘CFE1079[ERROR]..: Typangabe erwartet /expected a type specifier‘ kommen.

  • Inkludieren Sie für jede in Ihrem Programm verwendete CRTE-Funktion (C-Bibliotheksfunktion), die mit Gleitpunkzahlen arbeitet, die dazugehörige bzw. passende Include-Datei. Andernfalls können diese Funktionen die Gleitpunktzahlen nicht korrekt verarbeiten. Insbesondere müssen Sie für die Funktion printf() die Include-Datei <stdio.h> mit #include <stdio.h> inkludieren.

    Achtung:

    C++-Bibliotheksfunktionen unterstützen das IEEE-Format nicht und müssen deshalb gegebenenfalls durch C-Funktionen ersetzt werden.

  • Im Laufzeitsystem CRTE gibt es einige C-Bibliotheksfunktionen, die IEEE-Format für Gleitpunktzahlen verwenden. Für die Verwendung der IEEE-Gleitpunkt-Arithmetik sollte die MODIFY-MODULE-PROPERTIES-Anweisung wie folgt angegeben werden:

    MODIFY-MODULE-PROPERTIES        -
       ...
       FP-ARITHMETICS=*IEEE-FORMAT, -
       LOWER-CASE-NAMES=*YES,       -
       SPECIAL-CHARACTERS=*KEEP,    -
       ...