Robert A. Rosenberg wrote:
At 11:51 -0600 on 02/21/2006, Todd Burch wrote about Re: z/Architecture Principles of Operation (SA22-7832-04):

Certainly I can do that. And, when I do that, I have absolutely no need for
the LDF instructions.

The purpose of the Long Displacement Facility is to provide relief for base register constraint. Coding a "LAY R1" to get around a macro expansion, and taking up a base register to do that, doesn't buy me diddly squat in terms
of "base register relief".

R1 IS the register that is loaded by the MF=(E,LIST) parm. Thus loading it via a LAY and coding MF=(E,(1)) tells the Macro to not generate the LA 1,List (since R1 has already been loaded). There is no EXTRA register used. Here are the expansions for your review.

000000                00000 00014     1 TESTMF   CSECT
                 R:C  00000           2          USING *,12
                                      3          WTO   MF=(E,LIST)
000000 4110 C010            00010     7+         LA    1,LIST
000004 0A23                           8+         SVC   35
000006 E310 C010 0071       00010     9          LAY   1,LIST
                                     10          WTO   MF=(E,(1))
00000C 0A23                          14+         SVC   35
000010                               15 LIST     DS    F
                                     16          END

This works only for very simplistic cases. Many modern interfaces have numerous parameters that are access by the macro via LA instructions or moved directly to/from the parameter list using the MVC instruction. For example:

|0000005C 0000 0000 0000 00000000 00000000 59 MVC PLIST(LOGRGBRML),LOGRGBRM Copy model IXGBRWSE prm list
|** ASMA034E Operand PLIST(LOGRGBRML) beyond active USING range by 363 bytes
|** ASMA435I Record 0 in EDJX2.TESTSCH.J0076849.D0000101.? on volume:
| 60 IXGBRWSE REQUEST=READCURSOR, | DIRECTION=YOUNGTOOLD, | RETBLOCKID=BLOCKID,
|                                                                BUFFER=(4),
| BUFFLEN=BUFLEN, | BLKSIZE=BLKSIZE, | STREAMTOKEN=STRMTOK, | BROWSETOKEN=BRWSTOK, | TIMESTAMP=STAMP, | MODE=SYNCECB,
|                                                                ECB=MYECB,
| ANSAREA=ANSAREA, | ANSLEN=ANSLEN, | MF=(E,PLIST) | 61+* MACDATE -03/06/16-<3> |00000062 62+M00M0004 DS 0H IXGBRWSE-3
|                                              63+              PUSH  PRINT
| 64+ PRINT ON |00000062 0000 0000 00000000 65+ LA 1,PLIST ++ LOCATE ARG PARMS
|** ASMA034E Operand PLIST beyond active USING range by 363 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000066 D75B 1000 1000 00000000 00000000 66+ XC 0(92,1),0(1) ++ INITIALIZE |0000006C 9202 1001 00000001 67+ MVI 1(1),2 ++ INPUT XREQUEST |00000070 D601 1002 C168 00000002 00000168 68+ OC 2(2,1),=BL2'1000000000000000' ++ INPUT BL2 |00000076 5040 1008 00000008 69+ ST 4,8(,1) ++ INPUT XBUFFER |0000007A 0000 0000 0000 00000000 00000000 70+ MVC 16(4,1),BUFLEN ++ INPUT XBUFFLEN
|** ASMA034E Operand BUFLEN beyond active USING range by 633 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000080 0000 0000 00000000 71+ LA 14,BLKSIZE ++ INPUT XBLKSIZE
|** ASMA034E Operand BLKSIZE beyond active USING range by 637 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000084 50E0 1018 00000018 72+ ST 14,24(,1) ++ INPUT XBLKSIZE |00000088 0000 0000 00000000 73+ LA 14,MYECB ++ INPUT XECB
|** ASMA034E Operand MYECB beyond active USING range by 665 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|0000008C 50E0 101C 0000001C 74+ ST 14,28(,1) ++ INPUT XECB |00000090 0000 0000 00000000 75+ LA 14,ANSAREA ++ INPUT XANSAREA
|** ASMA034E Operand ANSAREA beyond active USING range by 669 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000094 50E0 1020 00000020 76+ ST 14,32(,1) ++ INPUT XANSAREA |00000098 0000 0000 0000 00000000 00000000 77+ MVC 36(4,1),ANSLEN ++ INPUT XANSLEN
|** ASMA034E Operand ANSLEN beyond active USING range by 673 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|0000009E 0000 0000 0000 00000000 00000000 78+ MVC 40(16,1),STRMTOK ++ INPUT XSTREAMTOKEN
|** ASMA034E Operand STRMTOK beyond active USING range by 641 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|000000A4 0000 0000 00000000 79+ LA 14,BRWSTOK ++ INPUT XBROWSETOKEN
|** ASMA034E Operand BRWSTOK beyond active USING range by 649 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|000000A8 50E0 1038 00000038 80+ ST 14,56(,1) ++ INPUT XBROWSETOKEN |000000AC 0000 0000 00000000 81+ LA 14,BLOCKID ++ INPUT XRETBLOCKID
|** ASMA034E Operand BLOCKID beyond active USING range by 625 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|000000B0 50E0 1044 00000044 82+ ST 14,68(,1) ++ INPUT XRETBLOCKID |000000B4 0000 0000 00000000 83+ LA 14,STAMP ++ INPUT XTIMESTAMP
|** ASMA034E Operand STAMP beyond active USING range by 657 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|000000B8 50E0 1050 00000050 84+ ST 14,80(,1) ++ INPUT XTIMESTAMP |000000BC 5010 1004 00000004 85+ ST 1,4(,1) ++ STORE ADDR OF PARM LIST |000000C0 4110 1004 00000004 86+ LA 1,4(,1) ++ LOAD ADDR OF PARM LIST PTR INTO R1 |000000C4 58F0 0010 00000010 87+ L 15,16(0,0) GET CVT ADDRESS |000000C8 58FF 008C 0000008C 88+ L 15,140(15,0) GET ECVT ADDRESS |000000CC 58FF 0120 00000120 89+ L 15,288(15,0) GET LSAB ADDRESS |000000D0 58FF 007C 0000007C 90+ L 15,124(15,0) GET ENTRY POINT ADDRESS |000000D4 4100 0005 00000005 91+ LA 0,5 EX OF BROWSE SERVICE |000000D8 05EF 92+ BALR 14,15 INVOKE SERVICE ROUTINE |000000DA 5810 1000 00000000 93+ L 1,0(,1) RESTORE PARMLIST ADDRESS
|                                              94+         POP   PRINT
| 95+* IXGBRWSE-3


Is helped only moderately by pre-loading the address of the parameter list area using the LAY instruction:


|000000DE E310 C16A 0171 0000116A 98 LAY 1,PLIST Point to parm list area |000000E4 D25B 1000 C000 00000000 00000000 99 MVC 0(LOGRGBRML,1),LOGRGBRM Copy model IXGBRWSE prm list | 100 IXGBRWSE REQUEST=READCURSOR, | DIRECTION=YOUNGTOOLD, | RETBLOCKID=BLOCKID,
|                                                                BUFFER=(4),
| BUFFLEN=BUFLEN, | BLKSIZE=BLKSIZE, | STREAMTOKEN=STRMTOK, | BROWSETOKEN=BRWSTOK, | TIMESTAMP=STAMP, | MODE=SYNCECB,
|                                                                ECB=MYECB,
| ANSAREA=ANSAREA, | ANSLEN=ANSLEN,
|                                                                MF=(E,(1))
| 101+* MACDATE -03/06/16-<3> |000000EA 102+M00M0005 DS 0H IXGBRWSE-3
|                                             103+              PUSH  PRINT
| 104+ PRINT ON |000000EA D75B 1000 1000 00000000 00000000 105+ XC 0(92,1),0(1) ++ INITIALIZE |000000F0 9202 1001 00000001 106+ MVI 1(1),2 ++ INPUT XREQUEST |000000F4 D601 1002 C168 00000002 00000168 107+ OC 2(2,1),=BL2'1000000000000000' ++ INPUT BL2 |000000FA 5040 1008 00000008 108+ ST 4,8(,1) ++ INPUT XBUFFER |000000FE 0000 0000 0000 00000000 00000000 109+ MVC 16(4,1),BUFLEN ++ INPUT XBUFFLEN
|** ASMA034E Operand BUFLEN beyond active USING range by 633 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000104 0000 0000 00000000 110+ LA 14,BLKSIZE ++ INPUT XBLKSIZE
|** ASMA034E Operand BLKSIZE beyond active USING range by 637 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000108 50E0 1018 00000018 111+ ST 14,24(,1) ++ INPUT XBLKSIZE |0000010C 0000 0000 00000000 112+ LA 14,MYECB ++ INPUT XECB
|** ASMA034E Operand MYECB beyond active USING range by 665 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000110 50E0 101C 0000001C 113+ ST 14,28(,1) ++ INPUT XECB |00000114 0000 0000 00000000 114+ LA 14,ANSAREA ++ INPUT XANSAREA
|** ASMA034E Operand ANSAREA beyond active USING range by 669 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000118 50E0 1020 00000020 115+ ST 14,32(,1) ++ INPUT XANSAREA |0000011C 0000 0000 0000 00000000 00000000 116+ MVC 36(4,1),ANSLEN ++ INPUT XANSLEN
|** ASMA034E Operand ANSLEN beyond active USING range by 673 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000122 0000 0000 0000 00000000 00000000 117+ MVC 40(16,1),STRMTOK ++ INPUT XSTREAMTOKEN
|** ASMA034E Operand STRMTOK beyond active USING range by 641 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000128 0000 0000 00000000 118+ LA 14,BRWSTOK ++ INPUT XBROWSETOKEN
|** ASMA034E Operand BRWSTOK beyond active USING range by 649 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|0000012C 50E0 1038 00000038 119+ ST 14,56(,1) ++ INPUT XBROWSETOKEN |00000130 0000 0000 00000000 120+ LA 14,BLOCKID ++ INPUT XRETBLOCKID
|** ASMA034E Operand BLOCKID beyond active USING range by 625 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|00000134 50E0 1044 00000044 121+ ST 14,68(,1) ++ INPUT XRETBLOCKID |00000138 0000 0000 00000000 122+ LA 14,STAMP ++ INPUT XTIMESTAMP
|** ASMA034E Operand STAMP beyond active USING range by 657 bytes
|** ASMA435I Record 9569 in SYS1.MACLIB(IXGBRWSE) on volume:
|0000013C 50E0 1050 00000050 123+ ST 14,80(,1) ++ INPUT XTIMESTAMP |00000140 5010 1004 00000004 124+ ST 1,4(,1) ++ STORE ADDR OF PARM LIST |00000144 4110 1004 00000004 125+ LA 1,4(,1) ++ LOAD ADDR OF PARM LIST PTR INTO R1 |00000148 58F0 0010 00000010 126+ L 15,16(0,0) GET CVT ADDRESS |0000014C 58FF 008C 0000008C 127+ L 15,140(15,0) GET ECVT ADDRESS |00000150 58FF 0120 00000120 128+ L 15,288(15,0) GET LSAB ADDRESS |00000154 58FF 007C 0000007C 129+ L 15,124(15,0) GET ENTRY POINT ADDRESS |00000158 4100 0005 00000005 130+ LA 0,5 EX OF BROWSE SERVICE |0000015C 05EF 131+ BALR 14,15 INVOKE SERVICE ROUTINE |0000015E 5810 1000 00000000 132+ L 1,0(,1) RESTORE PARMLIST ADDRESS
|                                             133+         POP   PRINT
| 134+* IXGBRWSE-3

It's quite unrealistic to think there will always be enough registers available to be able to pass every parameter using its own register.

--
Edward E Jaffe
Phoenix Software International, Inc
5200 W Century Blvd, Suite 800
Los Angeles, CA 90045
310-338-0400 x318
[EMAIL PROTECTED]
http://www.phoenixsoftware.com/

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to