Thank you for your suggestions so far.
The base register for the literals is no problem; the literal pool is at the end
macro of the subroutine and is covered by a base register. In fact, I solved
some of the issues by changing LA Rx,constant to L RX,=A(constant) which works
in the baseless case. The key is: no base registers cover the code area, but
there is a base register which covers the static data area.
There is also a LOOP macro in the SP macro set, which generates in some cases
(in the NORENT case) a decimal loop counter, which is in defined inline, near
the loop instructions. This is problematic because of two things:
- first, this loop counter cannot be reached in the baseless case,
- second, because there are stores near the instruction stream, the I-cache is
always invalidated, which is IMHO a performance issue.
I solved this by moving the definitions of those LOOP counters from inline to
the END macro of the subroutine; all the LOOP counters (their names and
attributes) are stored in macro variable vectors and generated at the end of the
subroutine, that is, not inline, but after the instruction stream, where they
are covered by the data base register.
Am 05.04.2013 22:11, schrieb P.F:
> That works for the CALL only if the parameters are not in a dynamic area
> in a DSECT somewhere. For the GETMAIN, note that the "L" for the literal
> loaded into R15 requires a base register able to address the LTORG area.