Re: XPLINK lp64 assembler
On Fri, 25 Jun 2021 15:16:57 -0400, Barry Lichtenstein wrote: Should have been more clear (and replied to OP), I meant the redbook is outdated! Vendor Interfaces also has lots of useful and current information! >On Mon, 21 Jun 2021 17:55:49 -0400, Tom Marchant >wrote: > >I think that's rather old and outdated. It cites the reasons for Xleaf only >as because there's no WSA and no call mechanism from assembler. Both of those >were remedied. Start with the XL C/C++ Programming Guide here >https://www.ibm.com/docs/en/zos/2.4.0?topic=programs-xplink-assembler and also >look at the CEEPDDA and CEEPLDA macros in the Language Environment Programming >Guide for how to work with your own WSA variables. > >>Documentation for XPLINK and XPLINK64 is in the LE Vendor Interfaces manual. >> >>-- >>Tom Marchant >> >>On Wed, 16 Jun 2021 21:56:41 +, Richard Way >>wrote: >> >>>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. >>>
Re: XPLINK lp64 assembler
On Mon, 21 Jun 2021 17:55:49 -0400, Tom Marchant wrote: I think that's rather old and outdated. It cites the reasons for Xleaf only as because there's no WSA and no call mechanism from assembler. Both of those were remedied. Start with the XL C/C++ Programming Guide here https://www.ibm.com/docs/en/zos/2.4.0?topic=programs-xplink-assembler and also look at the CEEPDDA and CEEPLDA macros in the Language Environment Programming Guide for how to work with your own WSA variables. >Documentation for XPLINK and XPLINK64 is in the LE Vendor Interfaces manual. > >-- >Tom Marchant > >On Wed, 16 Jun 2021 21:56:41 +, Richard Way >wrote: > >>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. >>
Re: XPLINK lp64 assembler
Documentation for XPLINK and XPLINK64 is in the LE Vendor Interfaces manual. -- Tom Marchant On Wed, 16 Jun 2021 21:56:41 +, Richard Way wrote: >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. >
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