>I suppose that that depends what you think is the "obvious location". 
>I think that the obvious location is in the linkage conventions
>documentation (which is within the assembler services guide). 

Indeed.

>That is where the information is. 

FSVO is; that is where the information on the responsibilities of user-written 
subroutines is. Perhaps it was supposed to say that system services are written 
to do the same thing, but it doesn't.




--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3


________________________________________
From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> on behalf of 
Peter Relson <rel...@us.ibm.com>
Sent: Sunday, November 10, 2019 9:30 AM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: WTO

<snip>
Yes it's documented and legit, but it's a change in behaviour over the
last few z/OS releases. In IIRC z/OS 1.x, WTO did not clobber AR15,
and STORAGE OBTAIN did not change the high half of R1.
</snip>

You have no way of knowing if that is true or not. All that you could
possibly say is that you did not encounter such a case. The environment
that could cause such a case might even not have been under your control
and might be uncommon. Anyone relying on the system to preserve regs
0,1,15 (high half or low half, AR or not) in the absence of explicit
documentation otherwise is doing so at their customers' peril. This is not
new news.

The statement is not correct about STORAGE OBTAIN. The high half of R1 has
been changed on STORAGE OBTAIN ever since high halves existed. I think
that there was a situation, due to user code relying incorrectly on the
high half of reg 15 being unchanged across the invocation, where STORAGE
OBTAIN acceptably changed the high half of GR15 and the incorrect user
code stopped working.

<snip>
Worse, I can't find the general description that existed way back when
about R15-R1 being transient. If it's still there, it's not in the obvious
location.
</snip>

I suppose that that depends what you think is the "obvious location". I
think that the obvious location is in the linkage conventions
documentation (which is within the assembler services guide). That is
where the information is.

Copied from the assembler services guide:

Unless otherwise defined by the individual interface, the calling program
expects upon return:
The low halves (Bits 32-63) of GPRs 2 - 13 are unchanged
The high halves (Bits 0-31) of GPRs 2 - 14 are unchanged
ARs 2 - 13 are unchanged
FPRs 8 - 15 are unchanged; The Floating Point Control (FPC) Register is
unchanged except for two fields: the IEEE exception flags and the data
exception code (DXC).
Vector registers (VRs) 8 - 15, bytes 0 - 7, and the entirety of VRs 16 -
23 are unchanged.
When return information is provided in GPR 0, 1, or 15 (for example return
and reason codes), only bits 32-63 of the register contain the returned
value.
Individual interfaces can define that extra registers are unchanged, or
that extra registers are not unchanged, or that returned information in
registers uses more than bits 32-63.

Peter Relson
z/OS Core Technology Design


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to