The LE Programming Guide answers most of your questions, see the sections around https://www.ibm.com/docs/en/zos/2.4.0?topic=stack-xplink-register-conventions ________________________________ From: IBM Mainframe Assembler List <ASSEMBLER-LIST@LISTSERV.UGA.EDU> on behalf of ASSEMBLER-LIST automatic digest system <lists...@listserv.uga.edu> Sent: Thursday, June 17, 2021 2:01 PM To: ASSEMBLER-LIST@LISTSERV.UGA.EDU <ASSEMBLER-LIST@LISTSERV.UGA.EDU> Subject: ASSEMBLER-LIST Digest - 13 Jun 2021 to 16 Jun 2021 (#2021-6)
There is 1 message totaling 58 lines in this issue. Topics of the day: 1. XPLINK lp64 assembler ---------------------------------------------------------------------- Date: Wed, 16 Jun 2021 21:56:41 +0000 From: Richard Way <richard....@microfocus.com> Subject: XPLINK lp64 assembler I'm rather confused about the requirements for converting an existing AMODE 31 "ordinary" assembler program to one that can participate in an XPLINK lp64 environment, and I'm hoping one or more of you can help me to clarify this. I found documentation here --> http://www.redbooks.ibm.com/redbooks/pdfs/sg245991.pdf, in section 4.2.1 starting on page 24 that tells me what the register conventions are in XPLINK as well as the restriction that my module cannot call other modules (which is fine, it doesn't.) That section also explains the required prolog and epilog macros. Some of the information is confusing to me though - for example, in one section it says all XPLINK assembler code must be "leaf" modules that don't call other modules, then it talks about the DSASIZE parameter on the prolog macro being used to "buy" a stack frame, and then adds that "XPLINK leaf (Xleaf) routines may not "buy" a stack frame!" (emphasis mine.) This seems contradictory, so I must not be understanding it. The documentation is also unclear (to me) about the need to (not) use certain registers. At one point in the discussion of the example, it states "EDCXPRLG generate the necessary STM instruction that will save (and later restore) the non-volatile registers," then it is pointed out that "This XPLink assembler function uses GPRs 0 and 3 as work registers, as these are volatile registers and don't need to be preserved across the call." Across which call? The call OF the routine? If the prolog saves, and the epilog restores, the non-volatile registers, why can't they too be used as work registers in a leaf case like this one? Do I really have to change the code that uses, for example, R6 and R7 as work registers even though the prolog saves them and the epilog restores them and this is a "leaf" routine? To top it off, the example is too simple to really be useful. How does one access input parameters beyond the first, for example, in the XPLINK-enabled assembler code? And it uses DSASIZE=0, whereas I believe I will need to allocate some DSA. What I'm looking for are the bare minimum changes required to make my AMODE 31 program into an XPLINK lp64 module. I was hoping for something like a step-by-step "cookbook" but I'm not finding much out there. Can anyone point me to some additional doc that might be useful? Or perhaps a SHARE presentation? Thanks in advance! Rich Way Micro Focus 4555 Great America Parkway Santa Clara, CA 95054 +1 408 857 0216 ------------------------------ End of ASSEMBLER-LIST Digest - 13 Jun 2021 to 16 Jun 2021 (#2021-6) *******************************************************************