*  shifts --- shortcall routines to do variable shifts
*
*
*           ENT      C$LSHFS        Left shift signed & unsigned ints
*           ENT      C$LSHFL        Left shift signed & unsigned longs
*           ENT      C$RSHFSS       Right shift signed int
*           ENT      C$RSHFSL       Right shift signed long
*           ENT      C$RSHFUS       Right shift unsigned int
*           ENT      C$RSHFUL       Right shift unsigned long
*
*  Left shift signed & unsigned ints (shorts)
*
*     Shift count in X reg
*     Operand in A reg
*     Return address in XB% reg
*
            SEG
            SYML
            RLIT

            ENT      C$LSHFS
            PROC
C$LSHFS     EQU      *
            TAB
            TXA
            CAS      ='177777       bounds check
            CAS      ='21
            RCB
            LDA      ='20
            TAX
            TBA
            XEC      LSHFS$TB,X
            JMP%     XB%
            FIN

LSHFS$TB    RCB
            ALL      1
            ALL      2
            ALL      3
            ALL      4
            ALL      5
            ALL      6
            ALL      7
            ALL      8
            ALL      9
            ALL      10
            ALL      11
            ALL      12
            ALL      13
            ALL      14
            ALL      15
            CRA                     has to be zero (no sign)
            END

*
*  Left shift signed & unsigned long ints
*
*     Shift count in X reg
*     Operand in L reg
*     Return address in XB% reg
*
            SEG
            SYML
            RLIT

            ENT      C$LSHFL
            PROC
C$LSHFL     EQU      *
            ILE
            TXA
            CAS      ='177777       bounds check
            CAS      ='41
            RCB
            LDA      ='40
            TAX
            ILE
            XEC      LSHFL$TB,X
            JMP%     XB%
            FIN

LSHFL$TB    RCB
            LLL      1
            LLL      2
            LLL      3
            LLL      4
            LLL      5
            LLL      6
            LLL      7
            LLL      8
            LLL      9
            LLL      10
            LLL      11
            LLL      12
            LLL      13
            LLL      14
            LLL      15
            LLL      16             for both signed & unsigned
            LLL      17
            LLL      18
            LLL      19
            LLL      20
            LLL      21
            LLL      22
            LLL      23
            LLL      24
            LLL      25
            LLL      26
            LLL      27
            LLL      28
            LLL      29
            LLL      30
            LLL      31
            CRL
            END

*
*  Right shift unsigned ints
*
*     Shift count in X reg
*     Operand in A reg
*     Return address in XB% reg
*
            SEG
            SYML
            RLIT

            ENT      C$RSHFUS
            PROC
C$RSHFUS    EQU      *
            TAB
            TXA
            CAS      ='177777       bounds check
            CAS      ='21
            RCB
            LDA      ='20
            TAX
            TBA
            XEC      RSHUS$TB,X
            JMP%     XB%
            FIN

RSHUS$TB    RCB
            ARL      1
            ARL      2
            ARL      3
            ARL      4
            ARL      5
            ARL      6
            ARL      7
            ARL      8
            ARL      9
            ARL      10
            ARL      11
            ARL      12
            ARL      13
            ARL      14
            ARL      15
            CRA
            END

*
*  Right shift unsigned longs
*
*     Shift count in X reg
*     Operand in L reg
*     Return address in XB% reg
*
            SEG
            SYML
            RLIT

            ENT      C$RSHFUL
            PROC
C$RSHFUL    EQU      *
            ILE
            TXA
            CAS      ='177777       bounds check
            CAS      ='41
            RCB
            LDA      ='40
            TAX
            ILE
            XEC      RSHUL$TB,X
            JMP%     XB%
            FIN

RSHUL$TB    RCB
            LRL      1
            LRL      2
            LRL      3
            LRL      4
            LRL      5
            LRL      6
            LRL      7
            LRL      8
            LRL      9
            LRL      10
            LRL      11
            LRL      12
            LRL      13
            LRL      14
            LRL      15
            XCA
            LRL      17
            LRL      18
            LRL      19
            LRL      20
            LRL      21
            LRL      22
            LRL      23
            LRL      24
            LRL      25
            LRL      26
            LRL      27
            LRL      28
            LRL      29
            LRL      30
            LRL      31
            CRL
            END

*
*  Right shift signed ints
*
*     Shift count in X reg
*     Operand in A reg
*     Return address in XB% reg
*
            SEG
            SYML
            RLIT

            ENT      C$RSHFSS
            PROC
C$RSHFSS    EQU      *
            TAB
            TXA
            CAS      ='177777       bounds check
            CAS      ='21
            RCB
            LDA      ='20
            TAX
            TBA
            XEC      RSHSS$TB,X
            JMP%     XB%
            FIN

RSHSS$TB    RCB
            ARS      1
            ARS      2
            ARS      3
            ARS      4
            ARS      5
            ARS      6
            ARS      7
            ARS      8
            ARS      9
            ARS      10
            ARS      11
            ARS      12
            ARS      13
            ARS      14
            ARS      15
            CRA                     has to be zero (no sign)
            END

*
*  Right shift signed long int
*
*     Shift count in X reg
*     Operand in L reg
*     Return address in XB% reg
*
            SEG
            SYML
            RLIT

            ENT      C$RSHFSL
            PROC
C$RSHFSL    EQU      *
            ILE
            TXA
            CAS      ='177777       bounds check
            CAS      ='41
            RCB
            LDA      ='40
            TAX
            ILE
            XEC      RSHSL$TB,X
            JMP%     XB%
            FIN

RSHSL$TB    RCB
            LRS      1
            LRS      2
            LRS      3
            LRS      4
            LRS      5
            LRS      6
            LRS      7
            LRS      8
            LRS      9
            LRS      10
            LRS      11
            LRS      12
            LRS      13
            LRS      14
            LRS      15
            LRS      16
            LRS      17
            LRS      18
            LRS      19
            LRS      20
            LRS      21
            LRS      22
            LRS      23
            LRS      24
            LRS      25
            LRS      26
            LRS      27
            LRS      28
            LRS      29
            LRS      30
            LRS      31
            CRL                     has to be zero (no sign)
            END