          IDENT  DSA6064
          TITLE  DSM$PACK 60 TO 64
          ENTRY  P60TO64
          EXT    ZSMRENT,ZSMRRET,PARSV
          SPACE  4,10
*         P60TO64 - PACK 56/60 BITS INTO 64 BITS IN 60 BIT WORDS.
*
*         A BUFFER OF 56/60 BITS RIGHT JUSTIFIED IN 60 BITS
*         IS REPACKED INTO 64 BITS.
*
*         ENTRY  - FROM CYBIL CODE WITH PARAMETERS
*                  P60P0 = NUMBER OF 60 BIT WORDS - MUST BE MOD 16(10)
*                  MDEP1 = MODE 0 FOR B60, 1 FOR B56,
*                  MSKP2 = BIT MASK, 56/52 BITS,
*                  B60P3 = BUFFER OF 60/56 BITS,
*                  B64P4 = BUFFER OF PACKED 64 BITS.
*
*         EXIT   - INPUT ARRAY REPACKED INTO OUTPUT BUFFER.
*
 MASK     CON    3777777777777777777B
          CON    77777777777777777760B
          CON    0
 P60P0    EQU    0           PARAMETER 0 ADDRESS IN PARSV AREA
 MDEP1    EQU    1           DITTO FOR PARAMETER ONE
 MSKP2    EQU    2           DITTO FOR PARAMETER TWO
 B60P3    EQU    3           DITTO FOR PARAMETER THREE
 B64P4    EQU    4           DITTO FOR PARAMETER FOUR
*
 P60TO64  BSS    0
          RJ     ZSMRENT     SAVE CYBIL ENVNMNT AND PARAMETERS
 P56.ENT  BSS    0           LOAD PARAMETERS
*
          SA1    PARSV+P60P0
          SB2    X1          NUMBER OF WORDS IN *B2*
*
          SA1    PARSV+MDEP1
          SB5    X1          MODE 0/1 = B60/B56 IN *B5*
*
          SA2    PARSV+B60P3
          SB3    X2          INPUT BUFFER ADDRESS IN *B3*
*
          SA2    PARSV+B64P4
          SB4    X2          OUTPUT BUFFER ADDRESS IN *B4*
*
          SX5    B5          B5 = 0 FOR B60
          NZ     X5,P56.00   B56 CONVERSION
*
*         B60 CONVERSION
*
 P60.00   BSS    0
          SA1    B5+MASK
*         X1                 MASK IN *X1*
          MX0    -56
          SA2    B3          LOAD WORDS W0 - W3 INTO X2 - X5
          SA3    A2+B1
          SA4    A3+B1
          SA5    A4+B1
*
          LX2    -4
          BX6    X1*X2
          AX1    4           RIGHT SHIFT B56/52 MASK
          SA6    B4          SAVE W0, U56 BITS
*
          LX3    -8
          BX7    X1*X3
          AX1    4
          BX2    X0*X2
          AX0    4
          BX7    X2+X7
          SA7    A6+B1       SAVE W0L4,W1U52
*
          LX4    -12
          BX6    X1*X4
          AX1    4           RIGHT SHIFT 17B MASK, EXTEND SIGN ON LEFT
          BX3    X0*X3
          AX0    4
          BX6    X3+X6
          SA6    A7+B1       SAVE W1L8,W2U48
*
          LX5    -16
          BX7    X1*X5
          AX1    4
          BX4    X0*X4
          AX0    4
          BX7    X4+X7
          SA7    A6+B1       SAVE W2L12,W3U44
*
          BX7    X0*X5       TEMP SAVE W3 L16
          AX0    4
*
          SA2    A5+B1       LOAD WORDS W4 - W7 INTO X2 - X5
          SA3    A2+B1
          SA4    A3+B1
          SA5    A4+B1
*
          LX2    -20
          BX6    X1*X2
          AX1    4
          BX6    X6+X7
          SA6    A7+1        SAVE W3L16,W4U40
*
          LX3    -24
          BX7    X1*X3
          AX1    4
          BX2    X0*X2
          AX0    4
          BX7    X2+X7
          SA7    A6+B1       SAVE W4L20,W5U36
*
          LX4    -28
          BX6    X1*X4
          AX1    4
          BX3    X0*X3
          AX0    4
          BX6    X3+X6
          SA6    A7+B1       SAVE W5L24,W6U32
*
          LX5    -32
          BX7    X1*X5
          AX1    4
          BX4    X0*X4
          AX0    4
          BX7    X4+X7
          SA7    A6+B1       SAVE W6L28,W7U28
*
          BX7    X0*X5       TEMP SAVE W7L32
          AX0    4
*
          SA2    A5+B1       LOAD WORDS W8 - W11 INTO X2 - X5
          SA3    A2+B1
          SA4    A3+B1
          SA5    A4+B1
*
          LX2    -36
          BX6    X1*X2
          AX1    4
          BX6    X6+X7
          SA6    A7+1        SAVE W7L28,W8U24
*
          LX3    -40
          BX7    X1*X3
          AX1    4
          BX2    X0*X2
          AX0    4
          BX7    X2+X7
          SA7    A6+B1       SAVE W8L36,W9U20
*
          LX4    -44
          BX6    X1*X4
          AX1    4
          BX3    X0*X3
          AX0    4
          BX6    X3+X6
          SA6    A7+B1       SAVE W9L40,W10U16
*
          LX5    -48
          BX7    X1*X5
          AX1    4
          BX4    X0*X4
          AX0    4
          BX7    X4+X7
          SA7    A6+B1       SAVE W12L44,W11U12
*
          BX7    X0*X5       TEMP SAVE W11L48
          AX0    4
*
          SA2    A5+B1       LOAD WORDS W12 - W14 INTO X2 - X4
          SA3    A2+B1
          SA4    A3+B1
*
          LX2    -52
          BX6    X1*X2
          AX1    4
          BX6    X6+X7
          SA6    A7+B1       SAVE W11L48,W12U8
*
          LX3    -56
          BX7    X1*X3
          AX1    4
          BX2    X0*X2
          AX0    4
          BX7    X2+X7
          SA7    A6+B1       SAVE W12L52,W13U4
*
          BX6    X0*X3
          SA6    A7+B1       SAVE W13L56
*
          SX5    B5
          BX7    X4
 P60.01   SA7    A6+B1      SAVE W14U60
*
          SB2    B2-15D      DECREMENT B2 BY ARRAY BLOCK COUNT
          SB4    A7+B1       STEP B4 TO NEXT PACKED 64 BIT WORD
          SB3    A4+B1       STEP B3 TO NEXT ARRAY WORD
          NE     B0,B2,P60.00  MORE BUFFER WORDS TO UNPACK
 P60.EXI  BSS    0
          JP     ZSMRRET     RESTORE ISWL ENVIRONMENT AND RETURN
*
*
*         B56 CONVERSION
*
 P56.00   BSS    0
          SA1    B5+MASK
*         X1                 MASK IN *X1*
          SA2    B3          LOAD WORDS W0 - W3 INTO X2 - X5
          SA3    A2+B1
          SA4    A3+B1
          SA5    A4+B1
*
          LX2    4
          MX1    -4
          BX6    X1*X2
*
          LX3    8
          BX0    -X1*X3
          MX1    -8
          BX6    X6+X0
*
          SA6    B4          SAVE W0L56,W1U4
*
          BX7    X1*X3
*
          LX4    12
          BX0    -X1*X4
          MX1    -12
          BX7    X7+X0
*
          SA7    A6+B1       SAVE W1L52,W2U8
*
          BX6    X1*X4
*
          LX5    16
          BX0    -X1*X5
          MX1    -16
          BX6    X6+X0
*
          SA6    A7+B1       SAVE W2L48,W3U12
*
          BX7    X1*X5
*
          SA2    A5+B1       LOAD WORDS W4 - W7 INTO X2 - X5
          SA3    A2+B1
          SA4    A3+B1
          SA5    A4+B1
*
          LX2    20
          BX0    -X1*X2
          MX1    -20
          BX7    X7+X0
*
          SA7    A6+B1       SAVE W3L44,W4U16
*
          BX6    X1*X2
*
          LX3    24
          BX0    -X1*X3
          MX1    -24
          BX6    X6+X0
*
          SA6    A7+B1       SAVE W4L40,W5U20
*
          BX7    X1*X3
*
          LX4    28
          BX0    -X1*X4
          MX1    -28
          BX7    X7+X0
*
          SA7    A6+B1       SAVE W5L36,W6U24
*
          BX6    X1*X4
*
          LX5    32
          BX0    -X1*X5
          MX1    -32
          BX6    X6+X0
*
          SA6    A7+B1      SAVE W6L32,W7U28
*
          BX7    X1*X5
*
          SA2    A5+B1       LOAD WORDS W8 - 11 INTO X2 - X5
          SA3    A2+B1
          SA4    A3+B1
          SA5    A4+B1
*
          LX2    36
          BX0    -X1*X2
          MX1    -36
          BX7    X7+X0
*
          SA7    A6+B1       SAVE W7L28,W8U32
*
          BX6    X1*X2
*
          LX3    40
          BX0    -X1*X3
          MX1    -40
          BX6    X6+X0
*
          SA6    A7+B1       SAVE W8L24,W9U36
*
          BX7    X1*X3
*
          LX4    44
          BX0    -X1*X4
          MX1    -44
          BX7    X7+X0
*
          SA7    A6+B1       SAVE W9L20,W10U40
*
          BX6    X1*X4
*
          LX5    48
          BX0    -X1*X5
          MX1    -48
          BX6    X6+X0
*
          SA6    A7+B1      SAVE W10L16,W11U44
*
          BX7    X1*X5
*
*
          SA2    A5+B1       LOAD WORDS W12 - W14 INTO X2 - X5
          SA3    A2+B1
          SA4    A3+B1
*
          LX2    52
          BX0    -X1*X2
          MX1    -52
          BX7    X7+X0
*
          SA7    A6+B1       SAVE W11L12,W12U48
*
          BX6    X1*X2
*
          LX3    56
          BX0    -X1*X3
          MX1    -56
          BX6    X6+X0
*
          SA6    A7+B1       SAVE W12L8,W13U44
*
          BX7    X1*X3
*
          LX4    60
          BX0    -X1*X4
          MX1    -60
          BX7    X7+X0
*
          SA7    A6+B1       SAVE W13U4,W14L56
*
          SB2    B2-15D      DECREMENT B2 BY ARRAY BLOCK COUNT
          SB4    A7+B1       STEP B4 TO NEXT PACKED 60 BIT WORD
          SB3    A4+B1       STEP B3 TO NEXT ARRAY WORD
          NE     B0,B2,P56.00  MORE BUFFER WORDS TO UNPACK
          JP     P60.EXI     RESTORE ISWL ENVIRONMENT AND RETURN
          END
