Build the parameter list once using this form:

         CALL  (15),(PARM1,PARM2,PARM2,BLOCK,PARM5),VL,MF=(E,PARMB),   X
               LINKINST=NOPR,LINKOP='0'

Which generates this code:

+         DS    0H
+         LA    1,PARMB                           LOAD PARAMETER REG 1
+         LA    0,PARM1            PICKUP  PARAMETER
+         ST    0,0(0,1)                          STORE INTO PARAM. LIST
+         LA    0,PARM2            PICKUP  PARAMETER
+         ST    0,4(0,1)                          STORE INTO PARAM. LIST
+         LA    0,PARM2            PICKUP  PARAMETER
+         ST    0,8(0,1)                          STORE INTO PARAM. LIST
+         LA    0,BLOCK            PICKUP  PARAMETER
+         ST    0,12(0,1)                         STORE INTO PARAM. LIST
+         LA    0,PARM5            PICKUP  PARAMETER
+         ST    0,16(0,1)                         STORE INTO PARAM. LIST
+         OI    16(1),X'80'                SET LAST WORD BIT ON @G860P40
+         NOPR      0

The only extra cost is the “NOPR 0” at the end, but since you do it only once 
that shouldn’t be an issue.

Then you can use your 3-instruction sequence to actually do the CALL as many 
times as you need.

Peter

From: IBM Mainframe Assembler List <[email protected]> On Behalf 
Of Dave Clark
Sent: Wednesday, October 18, 2023 12:48 PM
To: [email protected]
Subject: Re: Variable-Length Parameter List Attributes


"IBM Mainframe Assembler List" 
<[email protected]<mailto:[email protected]>> wrote 
on

10/18/2023 12:15:12 PM:

> Execute version of the CALL macro with MF=(E,parm_area_name) can fix

that.





        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





Sincerely,



Dave Clark

--

This message and any attachments are intended only for the use of the addressee 
and may contain information that is privileged and confidential. If the reader 
of the message is not the intended recipient or an authorized representative of 
the intended recipient, you are hereby notified that any dissemination of this 
communication is strictly prohibited. If you have received this communication 
in error, please notify us immediately by e-mail and delete the message and any 
attachments from your system.

Reply via email to