On Wed, 18 Oct 2023 at 12:48, Dave Clark <[email protected]> wrote:

> [...]
>         Well, the other issue is performance.  I potentially call this
> program hundreds of times.  So, I can build the parameter list just once
> and call it as follows:
>
> LA    R1,SHVPARMB
> L     R15,ARXEXCOM
> BALR  R14,R15
>
>         Or I can call it as follows -- much less desireable.  Note that
> the program address is not supplied by a V-con but by an external program
> vector list from REXX.  That is why I have to preload R15 rather than
> puting it in the CALL statement.  But, I still wouldn't want a V-con
> inserted into the middle of my instructions by the CALL with a branch
> around it.
>
> L     R15,ARXEXCOM
> CALL  (15),(SHVPARM1,SHVPARM2,SHVPARM2,SHVBLOCK,SHVPARM5),    X
>       MF=(E,SHVPARMB)
> DS    0H
> LA    1,SHVPARMB
> LA    0,SHVPARM1
> ST    0,0(0,1)
> LA    0,SHVPARM2
> ST    0,4(0,1)
> LA    0,SHVPARM2
> ST    0,8(0,1)
> LA    0,SHVBLOCK
> ST    0,12(0,1)
> LA    0,SHVPARM5
> ST    0,16(0,1)
> OI    16(1),X'80
> BALR  14,15
>

The CALL macro is smart enough to load the addresses into some range of
R14-R1, and then issue an STM to put up to four values into the arg list.
If there are more than four then it starts over.

Tony H.

Reply via email to