Re: XPLINK lp64 assembler

2021-06-25 Thread Barry Lichtenstein
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

2021-06-25 Thread Barry Lichtenstein
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

2021-06-21 Thread Tom Marchant
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

2021-06-16 Thread Richard Way
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