If the caller only passes a 72 byte save area (rather than part of a larger save area stack) then I've got bigger problems than how to test and/or set c'F4SA' in the save area. :-)
*Mark* On Tue, Nov 30, 2021 at 12:14 PM Seymour J Metz <[email protected]> wrote: > You could certainly do a normal STM R14,R12,12(R13); 4(R13) is normally > the back point for 24-bit linkage. > > The 72-byte SA only has 15 words left at offset 12; that's not enough for > that STGM, so you need to test first. > > -- > Shmuel (Seymour J.) Metz > http://mason.gmu.edu/~smetz3 > > ________________________________________ > From: IBM Mainframe Assembler List [[email protected]] on > behalf of Mark Hammack [[email protected]] > Sent: Tuesday, November 30, 2021 12:43 PM > To: [email protected] > Subject: Re: Base-less macros > > Couldn't do a "normal" STM R14,R12,4(R13) since that would overlay the area > to be checked. STGM 14,12,8(13) would probably work in most cases. Either > the first 72 bytes will be rewritten with the STM or the data is already > stored. The only issue I see is possibly debugging, trying to decipher the > RSA chain to figure out what routine was called prior to the current > routine (had to do that a couple of times). > > > > *Mark* > > > On Tue, Nov 30, 2021 at 10:13 AM Charles Mills <[email protected]> wrote: > > > > the caller must provide a large enough area to allow for the 144 byte > > > > Does that not make the problem go away? Simply automatically always save > > the low order halves of the registers, and if the subroutine will be > > altering the high halves, save those also. Done. The *caller* has no say > in > > the save area format. > > > > Charles > > > > > > -----Original Message----- > > From: IBM Mainframe Assembler List [mailto: > [email protected]] > > On Behalf Of Mark Hammack > > Sent: Tuesday, November 30, 2021 7:54 AM > > To: [email protected] > > Subject: Re: Base-less macros > > > > In our case, the caller doesn't "know" whether the called subroutine is > > base 31 or base 64. So it is up to the called subroutine to "figure out" > > whether the caller used a 72 byte save area or a 144 byte save area. > > Parameters to the macro set addressing mode, RSA size, etc. This allows > > for a 31 bit module to call a 64 bit subroutine and vice versa. That's > > what I really mean by "switches between". The one caveat is that the > > caller must provide a large enough area to allow for the 144 byte area. > > > > Since some subroutines accept arguments in R0 and/or R1 (and > unfortunately > > assume other registers are pre-loaded) those can't be touched before > being > > saved. Likewise, if the routine is called from another 64 bit > subroutine, > > the high halves of registers are (potentially) in use. However, since > > (currently) all of our programs run below the bar, using the high half of > > R14 may be an option. I need to look into using a FPR or AR but the 4 > byte > > literal pool works for now. Storing R14 in 8(R13) is not a bad idea > > either. > > >
