In addition, there are often opportunities to handle work typically performed 
in bits 32-63 of a GPR in bits 0-31, and this might help free up another base 
register for you.  Depending on your execution environment, use of floating 
point regs (especially 0-7) might be an option, not necessarily for floating 
point arithmetic, but just to help free up a GPR if you're constraint is really 
bad. They are generally much faster than moving some intermediate value in and 
out of storage.    

-----Original Message-----
From: IBM Mainframe Assembler List [mailto:[email protected]] On 
Behalf Of Seymour J Metz
Sent: Monday, April 5, 2021 9:43 PM
To: [email protected]
Subject: Re: DSECT which refers to area inside CSECT

Caution! This message was sent from outside your organization.

> base + < 4K displacement

That limit certainly exists for some instructions, but not for the long 
displacement instructions. Whether that helpss depends on what you're doing.


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3

________________________________________
From: IBM Mainframe Assembler List [[email protected]] on behalf 
of Charles Mills [[email protected]]
Sent: Monday, April 5, 2021 9:38 PM
To: [email protected]
Subject: Re: DSECT which refers to area inside CSECT

Do be aware that all of the dependent USINGs in the world do not overcome the 
architectural limitation of base + < 4K displacement. It is not the area of the 
USING that must be < 4K; it is that every field in the dependent USING that you 
intend to reference must be within 4K of the register.

OTOH, you may be able to free up a code base register. Executable code barely 
needs a base register anymore. If you convert all of the branches to relative 
jumps you may be able to free up the "permanent" code base register, and just 
use a "work" register as a temporary code base where necessary.

There is a macro that will convert branches to jumps under the covers. The Goo 
Gal (or some diligent poster) should supply the name.

Charles


-----Original Message-----
From: IBM Mainframe Assembler List [mailto:[email protected]] On 
Behalf Of Bernd Oppolzer
Sent: Monday, April 5, 2021 3:42 PM
To: [email protected]
Subject: Re: DSECT which refers to area inside CSECT

Yes, perfectly. This way I don't need an extra register for the static #DRENT.
I'll try it tomorrow, but I'm very sure it will work.

Thanks a lot

Bernd


Am 06.04.2021 um 00:35 schrieb Charles Mills:
> Not sure I follow perfectly but if you have two areas that are defined 
> separately in the assembler but that have some fixed relationship known at 
> assemble time, you should be able to use the non-register form of USING. Let 
> me see if I can explain better.
>
> AREAA DSECT
> Blah blah blah
>
> SOME  CSECT
> Blah blah blah
> AREAB DS ...
>
> Let's say you know at assembly time that AREAB is 1024 bytes beyond 
> the address of AREAA. Add the following to AREAA DSECT
>
>          ORG AREAA+1024
> AREAB_dummy EQU *
>
> Then in your code say
>           USING AREAA,Rx
>           USING AREAB,AREAB_Dummy

Reply via email to