Allgemeines
Anwendungsgebiet: | Contingency-Verfahren; siehe "Contingency-Prozesse"; |
Makrotyp: | S-Typ, MF-Format 1: Standardform/L-/E-Form; |
Wird ein Basis- oder Contingency-Prozess durch einen Contingency-Prozess unterbrochen, so wird u.a. der Inhalt seiner Register und des Befehlszählers im PCB (Process Control Block) abgespeichert.
Makrobeschreibung
Mit dem Makro CONTXT hat ein Contingency-Prozess Zugriff auf den Kontext (PCB, Process Control Block) eines unterbrochenen Prozesses.
CONTXT unterstützt alle aktuellen BS2000-Server. Demzufolge kann der unterbrochene Prozess in /390-Code mit /390-Kontext (/390-Server) oder in x86-Code mit x86-Kontext (x86-Server) vorliegen. Da sich die Kontexte unterscheiden, wird der Operand LAYOUT zur Unterscheidung verwendet.
Für LAYOUT=COMPATIBLE (Voreinstellung) werden für einen unterbrochenen /390-Prozess der vollständige Kontext (Register und PC) gelesen. Der gesamte Kontext kann verändert und geschrieben werden.
Für einen unterbrochenen x86-Prozess werden äquivalente Teile des Kontextes auf die entsprechenden Bereiche des Layouts abgebildet. Der Kontext wird also nicht vollständig ausgegeben. Er kann auch nur in Teilen geschrieben werden.
Für LAYOUT=FCONTXT wird der vollständige Kontext eines unterbrochenen x86-Prozesses gelesen. ILC wird gebildet. CC und PM sind ohne Bedeutung.
Der vollständige Kontext eines unterbrochenen /390-Prozesses wird auf die entsprechenden Teilbereiche des Layouts abgebildet.
Der gesamte Kontext eines Prozesses kann verändert und geschrieben werden. Für x86-Prozesse können CC, ILC und PM nicht geschrieben werden.
Siehe auch „PCB-Zugriffe im Prozess-Modus /390“.
Wenn x86-Code in Benutzeranwendungen (/390-Code) eingebunden oder nachgeladen wird (z. B. Nachladen des portierten Produktes SORT), kann an dieser Schnittstelle sowohl der Kontext von x86-Code als auch der Kontext von /390-Code sichtbar werden, je nachdem in welchem Modus die Unterbrechung stattfand. Programme, die vollständig im /390-Modus ablaufen, sind nicht betroffen.
Folgende Unterschiede im Kontext werden sichtbar, wenn ein x86-Programm unterbrochen wurde und der Kontext des unterbrochenen (x86-)Prozesses betrachtet wird (CONTXT SAVE=...,LAYOUT=FCONTXT
):
der Kontext enthält die /390-äquivalenten Teile (Register, PC, Gleitpunkregister, usw.), die auch über die DSECT adressiert werden können und
einen HSI-abhängigen Bereich, der in Blockform gelesen oder geschrieben werden kann
Makroaufrufformat und Operandenbeschreibung
|
|
Die Operanden ILC, CC, PM sind für x86-Server ohne Bedeutung.
SAVE=
Beschreibt die Adresse eines Feldes für den Datenaustausch mit dem PCB des angegebenen Prozesses (Operand PROCESS). Aufbau und Inhalt dieses Feldes hängen vom Operanden LAYOUT ab.
LAYOUT=COMPATIBLE (Voreinstellung)
Das Datenaustauschfeld hat denselben Aufbau wie bei der bisherigen CONTXT-Schnittstelle im /390-Modus. Feldlänge = 68 Byte; Ausrichtung auf Wortgrenze nötig.
Feldaufbau und Zuordnung:Byte 0 bis Byte 63: Register R0 bis R15 des /390-PCB äquivalente Register des x86-PCB Byte 64 bis Byte 67: Adresse des nächsten Befehls (PC / NIA)
LAYOUT=FCONTXT
Zur Unterstützung des x86-Modus hat das Datenaustauschfeld einen eigenen Aufbau. Es enthält neben dem /390-PCB auch den gesamten x86-PCB und damit auch die Gleitpunktregister. Diese werden unabhängig vom Operanden FPR zwischen dem Datenaustauschfeld und dem PCB des angegebenen Prozesses übertragen.Falls der Prozess, auf dessen PCB zugegriffen wird, jedoch im /390-Modus abläuft, findet eine eingeschränkte Übertragung statt. Es werden nur die äquivalenten Bereiche des Datenaustauschfeldes versorgt bzw. gelesen.
Die Feldlänge des Datenaustauschfeldes kann mit dem Makro STXIT, Operand CONTXTL, dynamisch ermittelt werden. Die Validierung des Datenaustauschfeldes geschieht aber immer in der jeweils benutzten Länge. Das Datenaustauschfeld muss auf Doppelwortgrenze ausgerichtet sein.
Durch Aufruf des Makros CONTXT mit dem Operanden LAYOUTF=DSECT kann eine DSECT erzeugt werden, die den neuen Aufbau des Datenaustauschfeldes beschreibt. Mit dieser DSECT ist es möglich, die einzelnen Teilfelder des Datenaustauschfeldes symbolisch zu adressieren.
Bei FUNCT=READ wird der Kontext aus dem PCB des angegebenen Prozesses in das spezifizierte Feld übertragen.
Bei FUNCT=WRITE wird der Inhalt des spezifizierten Feldes in den Kontext des angegebenen Prozesses übertragen. Der Befehlszähler (PC / NIA = Next Instruction Address) kann nur dann geschrieben werden, wenn er in ein /390-Modul zeigt oder LAYOUT= FCONTXT angegeben wurde.
adr
symbolische Adresse (Name) des Feldes für den Datenaustausch
(r)
r = Register mit dem Adresswert von adr
STACKR=
Bezeichnet eine Folge ausgewählter Register (einschließlich Befehlszähler) des angegebenen Prozesses für den Datenaustausch. Für x86-Kontexte werden nur die Äquivalente der /390-Register R0 bis R15 unterstützt. Der Befehlszähler (PC / NIA = Next Instruction Address) darf nur dann geschrieben werden, wenn er in ein /390-Modul zeigt oder wenn LAYOUT=FCONTXT angegeben wurde. Für das Lesen des Befehlszählers gibt es keine derartige Einschränkung.
Hinweis
Bei den Operanden STACKR und OWNR muss jeweils die gleiche Anzahl von Operanden angegeben werden. Die Angaben in den Klammern werden für die Übertragung einander paarweise zugeordnet. Es erfolgt also eine Übertragung zwischen x1 und y1, x2 und y2, x3 und y3, usw.
(x1,x2,...)
x1,x2 = Elemente aus der Menge (0,1,2,.....,15,PC).
Die Zahlen 0, ....,15 stehen für die allgemeinen Register und PC für den Befehlszähler. Bezüglich des Befehlszählers wird nur die Adresse des nächsten Befehls übertragen.
OWNR=
bezeichnet eine Folge ausgewählter Register des aufrufenden (Contingency-)Prozesses, die die gelesenen Werte aufnehmen sollen oder die die zu schreibenden Werte enthalten (siehe auch Hinweis für STACKR).
(y1,y2,...)
y1,y2 = Elemente aus der Menge (0,1,2,.....,15,PC).
Die Zahlen 0, ....,15 stehen für die allgemeinen Register und PC für den Befehlszähler. Bei der Verwendung der Operanden STACKR und OWNR ist zu beachten, dass die Register R1 und R15 durch den Makroaufruf zerstört werden (Register R1: Adresse des Datenbereichs, Register R15: Rücksprunginformation). Daher ist „Schreiben“ des Inhalts von Register R1 und „Lesen“ in das Register R15 nicht möglich.
SAVACR=
Beschreibt die Adresse eines Feldes für den Datenaustausch mit dem PCB des angegebenen Prozesses (Operand PROCESS).
Feldlänge = 64 Byte; Ausrichtung auf Wortgrenze erforderlich.
Bei FUNCT=READ wird der Inhalt der Zugriffsregister AR0 bis AR15 aus dem PCB des angegebenen Prozesses in das spezifizierte Feld übertragen.
Bei FUNCT=WRITE wird der Inhalt des spezifizierten Feldes entsprechend obiger Zuordnung in die Zugriffsregister des angegebenen Prozesses übertragen.
adr
symbolische Adresse (Name) des Feldes für den Datenaustausch
(r)
r = Register mit dem Adresswert von adr
STKACR=
Bezeichnet eine Folge ausgewählter Zugriffsregister des angegebenen Prozesses für den Datenaustausch.
Hinweis
Bei den Operanden STKACR und OWNACR muss jeweils die gleiche Anzahl von Operanden angegeben werden. Die Angaben in den Klammern werden für die Übertragung einander paarweise zugeordnet. Es erfolgt also eine Übertragung zwischen x1 und y1, x2 und y2, x3 und y3, usw.
(x1,x2,...)
x1,x2 = Elemente aus der Menge (0,1,2,.....,15).
Die Zahlen 0, ....,15 stehen für die Zugriffsregister.
OWNACR=
bezeichnet eine Folge von Zugriffsregistern des aufrufenden (Contingency-)Prozesses, die die gelesenen Werte aufnehmen sollen oder die die zu schreibenden Werte enthalten (siehe auch Hinweis für STACKR).
(y1,y2,...)
y1,y2 = Elemente aus der Menge (0,1,2,.....,15).
Die Zahlen 0, ....,15 stehen für die Zugriffsregister.
FPR=
gibt an, ob die Inhalte der Gleitpunktregister übertragen werden sollen.
Dieser Operand ist nur in Verbindung mit LAYOUT=COMPATIBLE (Voreinstellung) von Bedeutung.
Läuft einer der beteiligten Prozesse im x86-Modus, sind von dessen Gleitpunktregistern nur diejenigen an der Übertragung beteiligt, die Äquivalente der /390-Gleitpunktregister darstellen.
NO
Die Inhalte der Gleitpunktregister werden nicht übertragen.
YES
Bei FUNCT=READ wird der Inhalt der Gleitpunktregister des angegebenen Prozesses in die Gleitpunktregister des aufrufenden (Contingency-) Prozesses übertragen.
Bei FUNCT=WRITE wird der Inhalt der Gleitpunktregister des aufrufenden (Contingency-) Prozesses in die Gleitpunktregister des angegebenen Prozesses übertragen.
Bei LAYOUT=FCONTXT findet grundsätzlich keine direkte Übertragung der Gleitpunktregister des aufrufenden Prozesses in die Gleitpunktregister des angegebenen Prozesses oder umgekehrt statt. Stattdessen werden die Gleitpunktregister über das Datenaustauschfeld übertragen, das mit dem Operanden SAVE festgelegt ist. Die Angabe des Operanden FPR wird ignoriert.
Dabei werden unabhängig vom Ablaufmodus des aufrufenden Prozesses alle Gleitpunktregister des x86-Modus übertragen, falls der angegebene Prozess im x86-Modus abläuft.
PROCESS=
gibt an, zu welchem Prozess der Zugriff gewünscht wird.
MAIN
Der Zugriff erfolgt zum Basisprozess, auch wenn der Basisprozess nicht durch den aufrufenden (Contingency-)Prozess unterbrochen wurde.
LAST
Der Zugriff erfolgt zu dem Prozess, der durch den aufrufenden Prozess unterbrochen wurde; das kann ein Contingency- oder der Basisprozess sein.
FUNCT=
gibt an, ob ein Lese- oder Schreibzugriff ausgeführt werden soll. Siehe auch „PCB-Zugriffe im Prozess-Modus /390“.
READ
Die Inhalte der spezifizierten Register und ggf. des Befehlszählers bzw. der komplette x86-Kontext (bei LAYOUT=FCONTEXT auf x86-Servern) werden aus dem PCB des angegebenen Prozesses gelesen und in die angegebenen Felder übertragen.
WRITE
Die spezifizierten Register und ggf. der Befehlszähler bzw. der komplette x86-Kontext (bei LAYOUT=FCONTEXT auf x86-Servern) des angegebenen Prozesses werden mit den Werten überschrieben, die der aufrufende Prozess angibt.
Der Schreibzugriff ist nur möglich, wenn der Speicherschlüssel im PCB des aufrufenden Prozesses mit dem im PCB des angegebenen Prozesses übereinstimmt.
Im /390-Prozess-Modus: Der Inhalt der durch ILC/CC/PM/ASCMOD beschriebenen Felder wird in den PCB des angegebenen Prozesses (unterbrochener Prozess oder Basisprozess) eingetragen. Die Information ist in den korrespondierenden Bits zu hinterlegen.
LAYOUT=
legt Umfang und Aufbau des Datenaustauschfeldes fest, dessen Adresse im Operanden SAVE angegeben wird. Er steuert auch die Funktion „Schreiben NIA“ über den Operanden STACKR=(PC), siehe "CONTXT - Auf Prozessdaten zugreifen".
COMPATIBLE
Umfang und Layout des /390-Kontexts werden erwartet. Die Gleitpunktregister werden nur übertragen, wenn gleichzeitig FPR=YES angegeben wurde.
FCONTXT
Umfang und Layout des jeweiligen x86-Kontextes werden erwartet. Für x86-Kontexte werden die Gleitpunktregister, unabhängig vom Operanden FPR, über das Datenaustauschfeld übertragen. Die Länge der dafür vom Benutzer bereitzustellenden SAVE-Area kann mit dem Makro STXIT, Operand CONTXTL, dynamisch ermittelt werden.
Die tatsächlich benötigte Länge hängt vom Prozess-Modus ab. Zur Länge und zum Layout des jeweiligen Datenaustauschfeldes siehe "Layout der DSECT" auf "CONTXT - Auf Prozessdaten zugreifen".
LAYOUTF=DSECT
veranlasst die Erzeugung einer DSECT für das Datenaustauschfeld wie beim Operanden LAYOUT=FCONTXT angegeben. Die Adresse des Datenaustauschfeldes wird beim Aktionsaufruf im Operanden SAVE angegeben. Bei Angabe dieses Operanden wird als einziger weiterer Operand PREFIX ausgewertet. Die DSECT ist auf "CONTXT - Auf Prozessdaten zugreifen" abgedruckt.
PREFIX=p
Angabe eines Buchstabens, mit dem das erste Zeichen der Feldnamen und der Equates bestimmt wird. Dieser Operand wird nur berücksichtigt, wenn gleichzeitig LAYOUTF= DSECT angegeben ist.
ILC, CC, PM=
Diese Operanden sind für einen x86-PCB ohne Bedeutung. Sie können nicht in einen x86-PCB geschrieben werden.
ILC=
beschreibt die Adresse eines Feldes für den Befehlslängencode (im PCR-Format).
Feldlänge = 1 Byte. Eintrag in Bit 0-1.
adr
symbolische Adresse (Name) des Feldes für den Befehlslängencode
(r)
r = Register mit dem Adresswert von adr
CC=
beschreibt die Adresse eines Feldes für den Condition Code (im PCR-Format).
Feldlänge = 1 Byte. Eintrag in Bit 2-3.
adr
symbolische Adresse (Name) des Feldes für den Condition Code
(r)
r = Register mit dem Adresswert von adr
PM=
beschreibt die Adresse eines Feldes für die Programmaske (im PCR-Format).
Feldlänge = 1 Byte. Eintrag in Bit 4-7.
adr
symbolische Adresse (Name) des Feldes für die Programmaske
(r)
r = Register mit dem Adresswert von adr
PMODE=
Beschreibt die Adresse eines Feldes für den Prozessormodus.
Feldlänge = 1 Byte.
Der Prozessormodus kann auf x86-Servern gelesen oder geändert werden. Auf anderen BS2000-Servern kann er nur gelesen werden.
Es bedeuten:
X'00': /390-Modus (native auf /390-Servern oder unter /390-Firmware auf x86-Servern)
X'01': x86-Modus native
adr
symbolische Adresse (Name) des Feldes für den Prozessormodus
(r)
r = Register mit dem Adresswert von adr
MODE=
beschreibt die Adresse eines Feldes für den Adressierungsmodus. Feldlänge = 1 Byte.
Der Adressierungsmodus des angegebenen Prozesses kann gelesen oder geändert werden.
Es bedeuten:
X'00': 24-Bit-Adressierungsmodus
X'01': 31-Bit-Adressierungsmodus
Bei FUNCT=READ wird der Adressierungsmodus aus dem PCB in das angegebene Feld übertragen.
Bei FUNCT=WRITE wird der angegebene Adressierungsmodus in den PCB übertragen. Bei einer Änderung des Adressierungsmodus muss der Anwender auch für einen gültigen 24-Bit- oder 31-Bit-Kontext sorgen.
adr
symbolische Adresse (Name) des Feldes für den Adressierungsmodus
(r)
r = Register mit dem Adresswert von adr
ASCMOD=
Beschreibt die Adresse eines Feldes für den ASC-Modus (Address Space Control). Feldlänge = 1 Byte. Der Adressierungsmodus des angegebenen Prozesses kann gelesen oder geändert werden.
Es bedeuten:
X'00': Program-Space-Mode
X'40': Access-Register-Mode (ASC-Modus), das Programm läuft im AR-Modus, siehe auch Abschnitt „Erweiterung durch Datenräume“.
adr
symbolische Adresse (Name) des Feldes für den ASC-Modus
(r)
r = Register mit dem Adresswert von adr
PRGCODE=
beschreibt die Adresse eines Feldes für den Programm-Code. In diesem Feld wird der unterbrochene Befehl bzw. der durch NIA (Next Instruction Address) festgelegte Befehl (aus dem spezifizierten Prozess: LAST- oder MAIN-PCB) linksbündig zur Verfügung gestellt. Nur Lesezugriff erlaubt. Feldlänge = 6 Byte. Angabe nur zusammen mit dem Operanden PRGCODL.
adr
symbolische Adresse (Name) des Feldes für den Programm-Code
(r)
r = Register mit dem Adresswert von adr
PRGCODL=
beschreibt die Adresse eines Feldes für den Programm-Code. In diesem Feld wird die Länge dieses Befehls abgelegt. Feldlänge = 1 Byte.
Angabe nur zusammen mit dem Operanden PRGCODE.
Folgende Werte sind möglich:
> 0: (=2 oder =4 oder =6): Länge des ermittelten Programm-Codes.
= 0: Anzeige: Der Programm-Code konnte nicht ermittelt werden. Das Feld PRGCODE
bleibt unverändert.
adr
symbolische Adresse (Name) des Feldes für die Länge des Programm-Codes.
(r)
r = Register mit dem Adresswert von adr
PARMOD=
steuert die Makroauflösung. Es wird entweder die 24-Bit- oder die 31-Bit-Schnittstelle generiert.
Wenn PARMOD nicht spezifiziert wird, erfolgt die Makroauflösung entsprechend der Angabe für den Makro GPARMOD oder der Voreinstellung für den Assembler (= 24-Bit-Schnittstelle).
24
Die 24-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 24-Bit-Adressen (Adressraum <= 16 MB).
31
Die 31-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 31-Bit-Adressen (Adressraum <= 2 GB).
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. für einen Präfix) siehe Abschnitt „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
Layout der DSECT für LAYOUT=FCONTXT
CONTXT LAYOUTF=DSECT 1 * 1 ********************************************************************** 1 * DSECT FOR SAVE-FIELD BY LAYOUT = FCONTXT * 1 ********************************************************************** 1 * 1 SFCONTXT DSECT 1 * 1 SAVEHSI DS X HSI INDICATOR 1 SHSI390 EQU X'01' /390 HSI 1 SHSI390E EQU X'03' /390 HSI + ESA 1 SHSIRISC EQU X'04' RISC HSI (NOT USED) 1 SHSISPAC EQU X'08' SPARC HSI 1 SHSISPME EQU X'0A' SPARC HSI + ESA 1 SHSISXI EQU X'10' IA64 HSI 1 SHSISXE EQU X'12' IA64 HSI+ ESA 1 SHSIX86 EQU X'20' X86 HSI 1 SHSIX86E EQU X'22' X86 HSI+ ESA 1 * 1 SAVEAMOD DS X ADDRESS MODE 1 SAMODE24 EQU X'00' 24-BIT ADDRESS MODE 1 SAMODE31 EQU X'01' 31-BIT ADDRESS MODE 1 * 1 SAVEPMOD DS X PROCESSOR MODE 1 SPMODE1 EQU X'00' "/390" (/390 - MASCHINE) RESP. 1 * "/390-EMULATION" (SPARC-MASCHINE) 1 SPMODE2 EQU X'01' "SPARC " (SPARC-MASCHINE) 1 * 1 SAVEILC DS X INSTRUCT LENGTH CODE (PCR-FORMAT:BIT 0-1) 1 SAVECC DS X CONDITION CODE (PCR-FORMAT: BIT 2-3) 1 SAVEPM DS X PROGRAM MASK (PCR-FORMAT: BIT 4-7) 1 * 1 SAVEASCM DS X ASC-MODE (ESA) >> NOT USED ON RISC 1 * 1 DS XL1 UNUSED 1 * 1 *---------------------------------------------------------------- 1 * PROCESS MODE DEPENDENT AREA 1 *---------------------------------------------------------------- 1 * 1 SAV390A DS 0D AREA FOR PMODE = /390 AND SPARC 1 * 1 * ( RISC ) & /390 GENERAL REGISTERS 1 * 1 SAVERR0 DS 2F R0 ) (HARD-WIRED TO ZERO ! ) 1 SAVERR1 DS 2F R1 )
1 SAVERR2 DS 2F R2 ) 1 SAVERR3 DS 2F R3 ) 1 SAVERR4 DS 2F R4 >> RISC ONLY 1 SAVERR5 DS 2F R5 ) 1 SAVERR6 DS 2F R6 ) 1 SAVERR7 DS 2F R7 ) 1 * 1 SAVERR8 DS 2F R8 1 SAVEGR0 EQU SAVERR8+4 /390: R0 EQUIVALENT 1 SAVERR9 DS 2F R9 1 SAVEGR1 EQU SAVERR9+4 /390: R1 EQUIVALENT 1 SAVERR10 DS 2F R10 1 SAVEGR2 EQU SAVERR10+4 /390: R2 EQUIVALENT 1 SAVERR11 DS 2F R11 1 SAVEGR3 EQU SAVERR11+4 /390: R3 EQUIVALENT 1 SAVERR12 DS 2F R12 1 SAVEGR4 EQU SAVERR12+4 /390: R4 EQUIVALENT 1 SAVERR13 DS 2F R13 1 SAVEGR5 EQU SAVERR13+4 /390: R5 EQUIVALENT 1 SAVERR14 DS 2F R14 1 SAVEGR6 EQU SAVERR14+4 /390: R6 EQUIVALENT 1 SAVERR15 DS 2F R15 1 SAVEGR7 EQU SAVERR15+4 /390: R7 EQUIVALENT 1 SAVERR16 DS 2F R16 1 SAVEGR8 EQU SAVERR16+4 /390: R8 EQUIVALENT 1 SAVERR17 DS 2F R17 1 SAVEGR9 EQU SAVERR17+4 /390: R9 EQUIVALENT 1 SAVERR18 DS 2F R18 1 SAVEGR10 EQU SAVERR18+4 /390: R10 EQUIVALENT 1 SAVERR19 DS 2F R19 1 SAVEGR11 EQU SAVERR19+4 /390: R11 EQUIVALENT 1 SAVERR20 DS 2F R20 1 SAVEGR12 EQU SAVERR20+4 /390: R12 EQUIVALENT 1 SAVERR21 DS 2F R21 1 SAVEGR13 EQU SAVERR21+4 /390: R13 EQUIVALENT 1 SAVERR22 DS 2F R22 1 SAVEGR14 EQU SAVERR22+4 /390: R14 EQUIVALENT 1 SAVERR23 DS 2F R23 1 SAVEGR15 EQU SAVERR23+4 /390: R15 EQUIVALENT 1 * 1 SAVERR24 DS 2F R24 ) 1 SAVERR25 DS 2F R25 ) 1 SAVERR26 DS 2F R26 ) 1 SAVERR27 DS 2F R27 >> RISC ONLY 1 SAVERR28 DS 2F R28 ) 1 SAVERR29 DS 2F R29 ) 1 SAVERR30 DS 2F R30 ) (ADDRESS MODE MASK) 1 SAVERR31 DS 2F R31 )
1 * 1 * 1 SAVENIA DS 2F NIA/PC (NEXT INSTRUCTION ADDRESS) 1 SVNIA390 EQU SAVENIA+4 /390: NIA-EQUIVALENT 1 * 1 * 1 SAVEHI DS 2F MULTIPLE/DIVIDE REG HI RESULT (RISC ONLY) 1 SAVELO DS 2F MULTIPLE/DIVIDE REG LO RESULT (RISC ONLY) 1 * 1 * 1 * ( RISC ) & /390 FLOATING POINT REGISTERS 1 * 1 SAVEF0 DS F F0 : F0/1 = /390: EXT FPR 8 EQUIVALENT 1 SAVEF1 DS F F1 1 SAVEF2 DS F F2 : F2/3 = /390: EXT FPR 10 EQUIVALENT 1 SAVEF3 DS F F3 1 SAVEF4 DS F F4 : F4/5 = /390: EXT FPR 12 EQUIVALENT 1 SAVEF5 DS F F5 1 SAVEF6 DS F F6 : F6/7 = /390: EXT FPR 14 EQUIVALENT 1 SAVEF7 DS F F7 1 SAVEF8 DS F F8 : F8/9 = /390: EXT FPR 1 EQUIVALENT 1 SAVEF9 DS F F9 1 SAVEF10 DS F F10: F10/11 = /390: EXT FPR 3 EQUIVALENT 1 SAVEF11 DS F F11 1 SAVEF12 DS F F12: F12/13 = /390: EXT FPR 5 EQUIVALENT 1 SAVEF13 DS F F13 1 SAVEF14 DS F F14: F14/15 = /390: EXT FPR 7 EQUIVALENT 1 SAVEF15 DS F F15 1 SAVEF16 DS F F16: F16/17 = /390: EXT FPR 9 EQUIVALENT 1 SAVEF17 DS F F17 1 SAVEF18 DS F F18: F18/19 = /390: EXT FPR 11 EQUIVALENT 1 SAVEF19 DS F F19 1 * 1 SAVEF20 DS 2F F20/21 = /390: FPR 0 EQUIVALENT 1 SAVEF22 DS 2F F22/23 = /390: FPR 2 EQUIVALENT 1 SAVEF24 DS 2F F24/25 = /390: FPR 4 EQUIVALENT 1 SAVEF26 DS 2F F26/27 = /390: FPR 6 EQUIVALENT 1 * 1 SAVEF28 DS F F28: F28/29 = /390: EXT FPR 13 EQUIVALENT 1 SAVEF29 DS F F29 1 SAVEF30 DS F F30: F30/31 = /390: EXT FPR 15 EQUIVALENT 1 SAVEF31 DS F F31 1 * 1 SAVEFCR DS F FP-CONTROL-/STATUS REG >> NOT USED ON RISC 1 * 1 * 1 * /390-ESA ACCESS REGISTERS 1 *
1 SAVEAR0 DS F ACR0 ) 1 SAVEAR1 DS F ACR1 ) 1 SAVEAR2 DS F ACR2 ) 1 SAVEAR3 DS F ACR3 >> NOT USED ON RISC 1 DS 9F ACR4-ACR12 ) 1 SAVEAR13 DS F ACR13 ) 1 SAVEAR14 DS F ACR14 ) 1 SAVEAR15 DS F ACR15 ) 1 * 1 SWOSPARC EQU *-SFCONTXT LENGTH - WITHOUT SPARC-BLOCK 1 * 1 *---------------------------------------------------------------- 1 * SPARC CONTEXT BLOCK 1 *---------------------------------------------------------------- 1 * 1 DS 0D ) 1 SSPARCB DS 100D SPARC-AREA: BEGIN ) 1 DS 100D >> /390: NOT USED 1 DS 15D ) 1 SSPARCE DS 0D SPARC-AREA: END ) 1 SLSPARCB EQU SSPARCE-SSPARCB LENGTH OF SPARC-BLOCK (SPARC) 1 * 1 *---------------------------------------------------------------- 1 * 1 SAVLNGTH EQU *-SFCONTXT LENGTH OF SAVE-FIELD 1 * 1 *---------------------------------------------------------------1 * IA64 CONTEXT BLOCK: FCONTEXT 1 *---------------------------------------------------------------1 * 1 ORG SSPARCB REDEFINITION OF NATIVE AREA 1 SSXIB DS 0D IA64-AREA: BEGIN 1 SLIA64 EQU SWOSPARC+4064 LENGTH OF IA64 CONTEXT 1 * 1 * 1 * 1 *---------------------------------------------------------------1 * X86 CONTEXT BLOCK: FCONTEXT 1 *---------------------------------------------------------------- 1 * 1 ORG SSPARCB REDEFINITION OF NATIVE AREA 1 SX86E DS 0D X86-AREA: BEGIN 1 SLX86E EQU SWOSPARC+4096 LENGTH OF X86 CONTEXT 1 * 1 *----------------------------------------------------------------
Rückinformation und Fehleranzeigen
Während der Makrobearbeitung enthält Register R1 die Adresse der Operandenliste.
R15:
+---------------+ | | | | | |b|b| | | | |a|a| +---------------+
Über die Ausführung des Makros CONTXT wird ein gegliederter Returncode (aa=primärer RC, bb=sekundärer RC) im Register R15 übergeben.
aa=X'00': normale Ausführung
aa!=
X'00': Funktion nicht ausgeführt.
X'bb' | X'aa' | Erläuterung |
X'00' | X'00' | normale Ausführung. PCB wurde (im aktuellen Unterbrechungszustand) noch nicht verändert. |
X'04' | X'00' | normale Ausführung. PCB wurde (im aktuellen Unterbrechungszustand) bereits mit CONTXT verändert. |
X'04' | X'04' | Funktion nicht ausgeführt. Ungültige Operanden. |
X'04' | X'08' | Funktion nicht ausgeführt. Makroaufruf erfolgte im Basisprozess. |
X'04' | X'18' | Schreiben nicht zulässig
|
X'04' | X'1C' | Funktion nicht ausgeführt. Bei FUNCT=WRITE stimmt der Speicherschlüssel im zu ändernden PCB nicht mit dem im aktuellen PCB überein |
X'04' | X'20' | Funktion nicht ausgeführt: |
PCB-Zugriffe im Prozess-Modus /390
Die folgende Tabelle zeigt das Ergebnis der Zugriffe auf den PCB in Abhängigkeit von den CONTXT-Operanden, vom Ablaufmodus des unterbrochenen Prozesses und der Angabe im Operanden LAYOUT:
CONTXT | CONTXT | LAYOUT=COMPATIBLE | LAYOUT=FCONTXT | ||
/390-PCB | x86-PCB | /390-PCB | x86-PCB | ||
SAVE | READ | (1) | (2) | (3) | (4) |
WRITE | (1) | RC=X'18' (*) | (3) | (4) | |
OWNR/STACKR | READ | wie bisher | R0-R15 | wie bisher | R0-R15 |
WRITE | wie bisher | R0-R15 | wie bisher | R0-R15 | |
STACKR=(PC) | READ | wie bisher | x86 native NIA | wie bisher | x86 native NIA |
WRITE | wie bisher | RC=X'18' (*) | wie bisher | x86 native NIA | |
SAVACR/ | READ | wie bisher | wie bisher | wie bisher | wie bisher |
STKACR / | WRITE | wie bisher | wie bisher | wie bisher | wie bisher |
FPR | READ | (5) | (5) | (6) | (7) |
WRITE | (5) | (5) | (6) | (7) | |
ILC | READ | wie bisher | Wert: 0 oder 4 | wie bisher | Wert: 0 oder 4 |
WRITE | wie bisher | RC=X'18' | wie bisher | RC=X'18' | |
CC | READ | wie bisher | Wert: X'00' | wie bisher | Wert: X'00' |
WRITE | wie bisher | RC=X'18' | wie bisher | RC=X'18' | |
PM | READ | wie bisher | Wert: X'00' | wie bisher | Wert: X'00' |
WRITE | wie bisher | RC=X'18' | wie bisher | RC=X'18' | |
MODE | READ | wie bisher | wie bisher | wie bisher | wie bisher |
WRITE | wie bisher | wie bisher | wie bisher | wie bisher | |
PMODE | READ | X'00' | X'01' | X'00' | X'01' |
WRITE | (8) | (8) | (8) | (8) |
Bedeutung der in der Tabelle verwendeten Abkürzungen:
R0 - R15: allgemeine Register
RC: Returncode
Bedeutung der in der Tabelle verwendeten Anmerkungen:
(*) | Der Befehlszähler (PC / NIA = Next Instruction Address) darf nur dann geschrieben werden, wenn er in ein /390-Modul zeigt (mit |
(1) | Das Datenaustauschfeld hat den gleichen Aufbau wie bisher. |
(2) | Das Datenaustauschfeld hat den gleichen Aufbau wie bisher. |
(3) | Das Datenaustauschfeld hat den neuen Aufbau. Es werden nur die zu den /390-Registern äquivalenten Register, die zu den /390-Gleitpunktregistern äquivalenten x86-Gleitpunktregister, NIA und die weiteren Prozessstati gelesen oder geschrieben (soweit überschreibbar). Der Austausch erfolgt über die entsprechenden Felder |
(4) | Zusätzlich zu (3) wird der vollständige x86-Kontext gelesen oder geschrieben (über den Austauschbereich |
(5) | Die Datenübertragung findet zwischen den /390-Gleitpunktregistern des angegebenen PCB und denen des Contingency-PCB statt. |
(6) | Nur über den Operanden SAVE, siehe (3) |
(7) | Nur über den Operanden SAVE, siehe (4) |
(8) | Das Schreiben des PMODE wird erlaubt, um z.B. den unterbrochenen PCB auf einer zentralen Beendigungsroutine wieder aufzusetzen, deren PMODE nicht der unterbrochene PMODE ist. Sinnvoll ist das Schreiben des PMODE nur, wenn gleichzeitig NIA verändert wird. |