Except for some of the most recent additions to the architecture, data
fields (including constants) need to be addressed via base register.
Setting it up via LARL does not change that fact.

The convention for macros usually is: If a symbol is supplied then it can be
addressed via a pre-established base register and USING. Otherwise the
address can be passed in a register, using the (reg) notation.  If the
module has not set up a base register and USING for a symbol prior to
calling the macro then the module is in error.

David Bond

On Mon, 20 Dec 2010 11:16:59 -0500, Bodoh John Robert wrote:

>David,
>
>No, I'm not trying to use LARL for everything.  I just want to use it
>for the case when a code developer specifies a symbol that references a
>storage area that can only be referenced by using LARL.  That is, no
>base register.  Some of my macro usage would be for a particular symbol
>to "usually" be a constant, but would not have to be a constant.  For
>example, I have a macro that generated the parameter list to IEANTCR.
>The LEVEL that is passed is usually a constant, but it wouldn't have to
>be.  If it's a constant within the CSECT and the CSECT does not have a
>base register, LARL would be the only way to obtain the address of the
>LEVEL.  In all other cases, a LA would work.
>
>John
>
>-----Original Message-----
>
>My advice is to do what most assembler programmers and most compilers
>do.
>Use base registers for data and relative addressing for instructions.
>
>Since most data access instructions require a base register, most data
>areas
>will have a base register and USING established before a macro is
>invoked.
>Yes, it is possible to use LARL to set up a temporary base register
>before
>every data access instruction. e.g.
>LARL R14,TARGET
>LARL R15,SOURCE
>MVC 0(L'TARGET,R14),0(R15)
>But it is impractical and pipeline hostile to do so.
>
>A good use for LARL is to set up the base register for the constants -
>and
>maybe the modifiable data area if the program is not reentrant.  LARL
>can
>even be used to get the address of other control sections.  But I think
>you
>are trying to use LARL for everything.
>
>David Bond
>
>On Mon, 20 Dec 2010 10:46:43 -0500, Bodoh John Robert wrote:
>>David,
>>
>>I cannot assume anything, except that the CPU on which the program is
>>running supports baseless instructions.  So, the phrase "in general"
>>doesn't apply.
>>
>>The fact is, a program could specify a symbol on a macro and the symbol
>>could reference storage anywhere.  It could be a based symbol or a
>>baseless symbol addressable by relative addressing instructions.
>>Relative addressing is NOT restricted to branching.  LARL is not a
>>branch.
>>
>>John

Reply via email to