On Mon, 26 Aug 2024 at 11:50, Richard Zierdt < [email protected]> wrote:
> Writing code using relative addressing, as much as reasonably possible. > Problem: some IBM macros, e.g., ATTACH(X) and STORAGE, generate L and > LA(E) instructions instead of, e.g., LRL and LA(E)Y. > > STORAGE OBTAIN, > Length=(0), > Loc=(31,31) > generates this instruction > L 15,=AL1(B'00000000',(0*16),(0),B'01110110') > requiring a base register > instead of, e.g., > LRL 15,=AL1(B'00000000',(0*16),(0),B'01110110') > (Load Relative Long) which does not. > Is that literal is guaranteed to be on a fullword boundary. I realize that literal pool items are generated on a boundary matching their size, but I'm not so sure the "size" of an AL1 even with four sub operands is 4 (vs 1). OK - tried it, and it does indeed generate it on a fullword boundary. ATTACHX EP=SUBTASK > generates > LAE 15,IHB0098 SET UP LIST ADDRESS > instead of > LAEY 15,IHB0098 SET UP LIST ADDRESS > LAEY is still a base-displacement instruction, though of course with a long displacement. How would it help - you still need a register. I don't think there is any relative instruction that sets the matching AR. For that matter, doesn't the use of LAE imply that the AR might not be that of the current code? I suppose trhey could use CPYA or LAM or something followed by LARL. Tony H. ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
