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

Reply via email to