Why? What are you trying to solve by wrappng the MVC in a macro?

         MVC   0(2),0
         ORG   *-4
         DC    S(&OP1)
         DC    S(&OP2)

but, again, why?

--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3
עַם יִשְׂרָאֵל חַי
נֵ֣צַח יִשְׂרָאֵ֔ל לֹ֥א יְשַׁקֵּ֖ר

________________________________________
From: IBM Mainframe Assembler List <[email protected]> on behalf 
of David Eisenberg <[email protected]>
Sent: Monday, February 26, 2024 8:22 AM
To: [email protected]
Subject: Macro parameters: parsing a relocatable address

I’m seeking some guidance if anyone is able to help. I’d like to write a macro 
like this:

&NAME    MYCLC &FIELD1,&FIELD2

in which both &FIELD1 and &FIELD2 are relocatable addresses. It’s &FIELD1 that 
is of particular interest to me. &FIELD1 might be expressed as a hard-coded 
displacement and base register, or a relocatable symbol… or it could be an 
absolute symbol equivalent to a displacement, followed by a base register… etc. 
I.e., it could be any valid relocatable address syntax. What &FIELD1 will *not* 
have is an *explicit length.* The macro parameters will specify valid 
relocatable addresses, and nothing more.

My question: I’d like the MYCLC macro to generate a CLC instruction in which 
the two parameters are compared to each other for a constant length of 2. So 
far, the only ways I can think of to do this are:

1. Parse &FIELD1 to figure out how the relocatable address is expressed, and 
insert an explicit length of 2 to generate a valid CLC first operand. I would 
do it that way, but (unless I'm missing something) it seems quite complex to 
code.
2. Generate this DC statement: DC X’D501’,S(&FIELD1,&FIELD2) . This seems to 
work, but it’s a bit unattractive in a PRINT GEN (and it looks a bit odd in the 
assembly listing, because the assembler doesn't treat it like a machine 
instruction in the object code on the left side of the listing).

I’m wondering if anyone can suggest a reasonable way to code option 1 above. 
Can the macro assembler give me any help in parsing &FIELD1 so that I can 
transform that parameter to insert an explicit length, regardless of how 
&FIELD1 is expressed? Or is there some other approach that I haven’t considered 
at all? Or should I just go with option 2 above?

Please note that I don’t want the macro to generate more than one machine 
instruction. One way or another, I just want the macro to generate a CLC for a 
length of 2. (And I really do want the CLC located in the macro as opposed to 
open code, because the macro does some analysis on the comparands prior to 
generating the CLC.)

Any advice would be appreciated... thank you!

David

Reply via email to