*
* $Id: timexxa.s,v 1.1.1.1 1996/02/15 17:53:19 mclareni Exp $
*
* $Log: timexxa.s,v $
* Revision 1.1.1.1  1996/02/15 17:53:19  mclareni
* Kernlib
*
*
#if defined(CERNLIB_QMIBMXA)
TIMEX    CSECT
*
* CERN PROGLIB# Z007    TIMEX  NEW      .VERSION KERNIBM  2.31  901105
*
*              TIMEX      EXECUTION TIME USED SO FAR (SECONDS)
*
*        There was a problem at DESY: TIMEX specifies AMODE ANY to be
*        able to run "above the line". But it calls the EXTRACT macro.
*        which, with MVS/XA, canNOT run up there.
*        There fore the code was modified by Klaus Tietgen, DESY-R1.
*        Lines added are flagged                                  Tie-A
*        Lines deleted are flagged                                Tie-D
*
*        SPLEVEL  SET=2
TIMEX    AMODE ANY
TIMEX    RMODE ANY
         ENTRY TIMED      EXECUTION TIME SINCE LAST CALL (SEC)
         ENTRY TIMEL      EXECUTION TIME LEFT UNTIL TIME LIMIT (S)
*
*      IN CASE OF TROUBLE YOU MAY DELETE THIS DECK,
*      WHICH GIVES YOU THE OLD TIMEX IN THE NEXT DECK
*
*******************************************************************
*
*    A. BERGLUND / CERN      DATE: 27/02/80
*
*       THE STEP TIME LIMIT IS GIVEN BY ASCBJSTL (4 BYTES)
*       IN UNITS OF 1.048576 SECONDS.
*
*       THE ELAPSED TIME UP TO THE LAST DISPATCH IS GIVEN BY
*       ASCBEJST (8 BYTES) WITH BIT 51 = 1 MICROSECOND.
*       IT IS HOWEVER ONLY UPDATED BY THE DISPATCHER WHEN
*       ANOTHER ADDRESS SPACE IS GIVEN CONTROL
*
*       IN MVS/SE UPDATING OF THE ASCBEJST IS FORCED BY
*       AN SVC 137 (CALLDISP) CALL.
*
*       IN A NON SE SYSTEM ONE CAN USE THE FOLLOWING
*       THE BEST ESTIMATE FOR THE CURRENT ELAPSED TIME
*       IS THE ASCBEJST +
*       THE CURRENT TOD - TOD AT LAST DISPATCH (FROM LCCADTOD).
*
*       THE CORRECT CALCULATION IS MADE FOR TIMED ONLY
*       SINCE THE ACCURACY OF THE ASCBEJST IS SOME
*       10'S OF MILLISECONDS - GOOD ENOUGH FOR TIMEX & TIMEL.
*       ACCURACY OF TIMED IS AROUND 50 MICROSECONDS FOR A NON SE
*       SYSTEM. IN MVS/SE THE ACCURACY IS ABOUT 20 MICROSECONDS
*       (RMS OF DISTRIBUTION). TIME BETWEEN TWO CONSECUTIVE CALLS
*       WITH NO CODE IN BETWEEN IS ABOUT 50 MICROSECONDS.
*
*******************************************************************
*
R1       EQU   1
R2       EQU   2
R3       EQU   3
R4       EQU   4
R5       EQU   5
R6       EQU   6
R13      EQU   13
R14      EQU   14
R15      EQU   15
F0       EQU   0
F2       EQU   2
F4       EQU   4
F6       EQU   6
*
         STM   R2,R5,28(R13)        SAVE REGS
         USING TIMEX,R15            ADDRESSABILITY
         L     R4,CVTPTR
         USING CVT,R4               ADDRESSABILITY OF CVT
         L     R5,CVTTCBP           ADDRESS OF 4 WORD LIST
         L     R5,12(R5)            CURRENT ASCB
         USING ASCB,R5              ADDRESSABILITY OF ASCB
         LM    R2,R3,ASCBEJST       ELAPSED JOB STEP TIME
         SRDA  R2,12                BIT 51 = 1 MICROSECOND
         STM   R2,R3,TEMPD          STORE TEMPORARILY
         MVI   TEMPD,X'4E'          MOVE IN EXPONENT
         LD    F0,TEMPD             LOAD FP (UNNORM)
         DD    F0,=D'1000000.'      GET INTO SECONDS
         L     R2,0(R1)             ADDRESS OF TARGET
         STE   F0,0(R2)             STORE AS REAL*4
         LM    R2,R5,28(R13)        RESTORE REGS
         BR    R14                  & RETURN
         DROP  R15
         DROP  R4
         DROP  R5
*
TIMED    EQU   *             TIME SINCE LAST ENTRY
         USING TIMED,R15
         STM   R2,R5,28(R13)        SAVE REGS
         L     R4,CVTPTR
         USING CVT,R4               ADDRESSABILITY OF CVT
         L     R5,CVTTCBP           ADDRESS OF 4 WORD LIST
         L     R5,12(R5)            CURRENT ASCB
*                          FORCE ASCB UPDATING    MVS/SE
         LR    R2,R15                             MVS/SE
         LR    R3,R1                              MVS/SE
         CALLDISP                                 MVS/SE
         LR    R15,R2                             MVS/SE
         LR    R1,R3                              MVS/SE
         USING ASCB,R5              ADDRESSABILITY OF ASCB
         LM    R2,R3,ASCBEJST       ELAPSED JOB STEP TIME
         SRDA  R2,12                BIT 51 = 1 MICROSECOND
         STM   R2,R3,TEMPD          STORE TEMPORARILY
         MVI   TEMPD,X'4E'          MOVE IN EXPONENT
         LD    F0,TEMPD             LOAD FP (UNNORM)
         DD    F0,=D'1000000.'      GET INTO SECONDS
         DROP  R4
         DROP  R5
         LDR   F2,F0                SAVE
         SD    F0,LAST              SUBTRACT TIME AT LAST ENTRY
         STD   F2,LAST              SAVE THIS ELAPSED
         L     R5,0(R1)             ADDRESS OF RESULT
         STE   F0,0(R5)             STORE AS REAL*4
         LM    R2,R5,28(R13)        RESTORE REGS
         BR    R14                  & RETURN
         DROP  R15
*
TIMEL    EQU   *         TIME LEFT UNTIL TIME LIMIT
         STM   R2,R6,28(R13)        SAVE REGS
         LR    R6,R15
         USING TIMEL,R6
         L     R4,CVTPTR
         USING CVT,R4               ADDRESSABILITY OF CVT
         L     R5,CVTTCBP           ADDRESS OF 4 WORD LIST
         L     R5,12(R5)            CURRENT ASCB
         USING ASCB,R5              ADDRESSABILITY OF ASCB
         L     R2,ASCBJSTL          JOB STEP TIME LIMIT
         S     R2,ASCBEJST          SUBTRACT OFF TOP HALF OF ELAPSED
         ST    R2,TEMPD+4           STORE TEMPORARILY
         MVC   TEMPD(4),=X'4E000000' MOVE IN EXPONENT HALF
         LD    F2,TEMPD             OAD FP
         MD    F2,=D'1.048576'      INTO SECONDS
         LDR   F0,F2                LOAD & TEST
         BNM   OPSTOP
         SDR   F0,F0                IF NEG SET TO ZERO
         DROP  R4
         DROP  R5
*---SET REMAINING TIME TO ZERO IF OPERATOR HAS ISSUED A STOP COMMAND
*---MODIFIED BY WIEGANDT/RICHARDS JAN 17 1977
OPSTOP   ICM   R3,15,COMECBAD
         BNZ   TESTECB
         STM   R4,R2,SVZTI                                        Tie-A
         L     R15,EXPG                                           Tie-A
         LTR   R15,R15                                            Tie-A
         BNZ   EXPGJ                                              Tie-A
         GETMAIN R,LV=EXMUL                                       Tie-A
         ST    R1,EXPG                                            Tie-A
         MVC   0(EXMUL-24,R1),EXMU                                Tie-A
         LR    R15,R1                                             Tie-A
EXPGJ    BASSM R14,R15                                            Tie-A
         LM    R4,R2,SVZTI                                        Tie-A
*        LR    R5,R1               SAVE R1 HERE                   Tie-D
*        EXTRACT CPTR,FIELDS=COMM                                 Tie-D
*        LR    R1,R5               RESTORE CONTENTS OF R1         Tie-D
*        L     R3,CPTR                                            Tie-D
         L     R3,0(R3)            ADDRESS(COMMUNICATIONS ECB)
         ST    R3,COMECBAD
TESTECB  TM    0(R3),X'40'         ECB POSTED
         BNO   STRESULT
         SER   F0,F0
STRESULT EQU   *
         L     R4,0(R1)            ADDRESS OF RESULT
         STE   F0,0(R4)            STORE AS REAL*4
         LM    R2,R6,28(R13)       RESTORE REGS
         BR    R14                 & RETURN
SVZTI    DS    15F                                                Tie-A
LAST     DC    D'0'                ELAPSED TIME AT LAST ENTRY
TODCLOCK DS    D                   TOD
TEMPD    DS    D                   TEMPORARY FOR FIX -> FLOAT
*CPTR     DC    F'0'                                              Tie-D
COMECBAD DC    F'0'
EXPG     DC    F'0'                                               Tie-A
EXMU     STM   R14,R2,HV-*(R15)    MUSTERPROGRAMM ZUM KOPIEREN    Tie-A
         BALR  R14,0                                              Tie-A
         DROP  R6                                                 Tie-A
         USING *,R14                                              Tie-A
         LA    R2,HV-4                                            Tie-A
         EXTRACT (2),FIELDS=COMM                                  Tie-A
         L     R3,HV-4             RESULT IN R3                   Tie-A
         LM    R14,R2,HV                                          Tie-A
         BSM   0,R14                                              Tie-A
         DS    0F                                                 Tie-A
HV       EQU   *+4                                                Tie-A
EXMUL    EQU   *-EXMU+24                                          Tie-A
         LTORG
*
         CVT   DSECT=YES,LIST=YES
         IHAASCB DSECT=YES
         END
#ifdef CERNLIB_SYMVS_TIMEXN
#undef CERNLIB_SYMVS_TIMEXN
#endif
#ifdef CERNLIB_SYMVS_TIMEX
#undef CERNLIB_SYMVS_TIMEX
#endif
#ifdef CERNLIB_TCGEN_TIMED
#undef CERNLIB_TCGEN_TIMED
#endif
#ifdef CERNLIB_TCGEN_TIMEL
#undef CERNLIB_TCGEN_TIMEL
#endif
#ifdef CERNLIB_TCGEN_TIMEX
#undef CERNLIB_TCGEN_TIMEX
#endif
#endif