I came across the following code today. The program can either be called
by JCL or from either an HLL or assembler program. While I included some
extra code for clarity, the code I am asking for comments on is the code
that 'fixes' R14 so that a BSM can be used instead of a BR. I just
thought I would ask what others think about this method.
XXXXXXXX CSECT
XXXXXXXX AMODE ANY
XXXXXXXX RMODE 24 SOME IBM CODE IN HERE MAY REQUIRE R24
USING XXXXXXXX,R15
B COPYRGHTEND
......
COPYRGHTEND DS 0D
STM R14,R12,12(R13) SAVE CALLERS REGISTERS
BCTR R14,0 BACKUP TO CALLING INST
BCTR R14,0 .
CLI 0(R14),X'0C' BASSM?
BE R14_OK
CLI 0(R14),X'0D' BSM?
BE R14_OK
L R14,12(,R13) GET ORG R14
LA R14,0(,R14) CLEAR HI BIT/BYTE
BSM R14,0 ADD PROPER AMODE
ST R14,12(,R13) SET R14 FOR RETURN BY BSM
R14_OK DS 0H
DROP R15
LA R1,SAVEAREA
ST R1,8(,R13) FORWARD POINTER
ST R13,4(,R1) BACKWARD POINTER
LR R13,R1 ESTABLISH PERM R13 AREA
L R1,4(,R13) GET BACK ORG R0 & R1
LM R0,R1,20(R1) FROM ORG SAVEAREA
*
LA R8,0(,R15) ESTABLISH ADDRESSABILITY
LA R15,1 .
LA R10,4095(R15,R8) .
USING XXXXXXXX,R8,R10 .
The return code is:
RETURNR15 DS 0H
L R1,4(,R13) GET CALLER SAVE AREA ADDRESS
ST R15,16(,R1) SAVE RETURN CODE
LM R14,R12,12(R13) RESTORE REGISTERS
BSM 0,R14 GO BACK
Tony Thigpen