For the record, this has been an enlightening* discussion, but it is all a moot 
point for programs that can run under Language Environment, because LE does not 
support anything but standard 72-byte chaining in the save areas (in amode 
24/31 programs).

This is documented in:

z/OS 2.3 Language Environment > z/OS Language Environment Programming Guide > 
Specialized programming tasks > Register conventions > Non-Language Environment 
conforming assembler routines:

"The register save area back chain must be set to a valid 31-bit address"


z/OS 2.3 MVS > z/OS MVS Programming: Assembler Services Guide > Linkage 
conventions > Using a caller-provided save area > If changing the contents of 
bits 0-31 of the 64-bit GPRs but not changing ARs:

"If the caller provides a 72-byte save area, then the target program must save 
the low halves of the 64-bit GPRs in that 72-byte area, and then must save the 
high halves in its own save area, which might be a Format 5 or Format 8 save 
areas IF THE PROGRAM IS NOT RUN UNDER the CONTROL OF LANGUAGE ENVIRONMENT"   
(emphasis mine)

"Word 1: Value of "F5SA" or "F8SA"... Note: This field must contain a valid 
address if the programs are run under Language Environment"


Enterprise COBOL for z/OS 6.2 > Migration Guide > Appendixes > Applications 
with COBOL and assembler > Saving and restoring the high halves of General 
Purpose Registers in assembler programs:

"Do not use the F5SA or F8SA save area formats as described in the MVS(tm) 
Programming: Assembler Services Guide."


* The fact that is so confusing implies that the Assembler Services Guide is 
not doing a good job of explaining it. It is hard to understand because it 
defies expectations. What you *expect* is that you have a value that describes 
the format of a structure, and by implication, its length.

-----Original Message-----
From: IBM Mainframe Assembler List <ASSEMBLER-LIST@LISTSERV.UGA.EDU> On Behalf 
Of Seymour J Metz
Sent: Thursday, January 20, 2022 11:22 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: Saving Caller's 64-bit Registers

Some of the new formats are used in conjunction with a 72-byte save area, and 
you can definitely use them in A31. I don't know what LE supports (OCO delenda 
est!).


--
Shmuel (Seymour J.) Metz
https://clicktime.symantec.com/3SeUTRDS2aQHgDGTDxwuQwH7VN?u=http%3A%2F%2Fmason.gmu.edu%2F~smetz3

________________________________________
From: IBM Mainframe Assembler List [ASSEMBLER-LIST@LISTSERV.UGA.EDU] on behalf 
of Schmitt, Michael [michael.schm...@dxc.com]
Sent: Thursday, January 20, 2022 10:56 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: Saving Caller's 64-bit Registers

The problem is that the new save area formats are not compatible with the 
72-byte save area format, so you can't use them in amode 31 unless you control 
both the calling and called programs. And they're not supported by Language 
Environment.

-----Original Message-----
From: IBM Mainframe Assembler List <ASSEMBLER-LIST@LISTSERV.UGA.EDU> On Behalf 
Of Steve Smith
Sent: Thursday, January 20, 2022 9:52 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: Re: Saving Caller's 64-bit Registers

I don't know what you found, but that's incorrect.  A standard Format-4
save area is 144 bytes, and there are additional formats (5-8) that can
hold combinations of ARs and high-halves.

As previously mentioned, the Assembler Services Guide defines all this.

sas

Reply via email to