*DECK S$GNSMM 
          IDENT  S$GNSMM
          COMMENT GENERATE CODE TO SAVE SUM RESULTS (TRN) 
  
*CALL LBLPTR
  
**        S$GNSMM- GENERATE CODE TO SAVE SUM RESULTS (TRN)
* 
*     CALLING SEQUENCE- 
*         S$GNSMM(BITOFFSET, NBITS, REMAIN);
* 
*     GIVEN-
*         BITOFFSET = OFFSET OF (SUB)FIELD WITHIN TRN 
*         NBITS = LENGTH OF (SUB)FIELD WITHIIN TRN
*         REMAIN = NO OF REMAINING BITS OF SUM FIELD IN NEXT WORD.
* 
*     DOES- 
*         GENERATE CODE TO- 
*                SAVE THE (SUB)FIELD FROM X3 TO X4 (THE LL TRN) 
*                SAVE THE (SUB)FIELD FROM X5 TO X6 (THE CR TRN) 
* 
*     GENERATED CODE EXPECTS REGISTERS- 
*                SAME AS S$GNSMA, BUT-
*                            WITHOUT X2 
*                            WITH X3 = LL (SUB)FIELD RESULT 
*                            WITH X5 = CR (SUB)FIELD RESULT 
* 
  
          ENTRY  S$GNSMM
 S$GNSMM  SUBR
          SB1    1           CONSTANT 1 
  
*         OBTAIN PARAMETERS 
  
          SA4    X1          X4 = BITOFFSET 
  
          SA5    A1+1 
          SA5    X5          X5 = NBITS 
          IX4    X4+X5       X4 = BITOFFSET+NBITS 
          SX7    X4-60
          BX7    -X7         X7 = 60-(BITOFFSET+NBITS)
          SA3    A1+2        ADDR OF REMAIN 
          SA3    X3          X3 = REMAINING BITS IN NEXT WORD 
          SB3    X3               OF SUM FIELD
  
* SHIFT TO RE-ALIGN FOR UPPER PART OF SUM FIELD IN THIS WORD
  
          GEN    (BX7 X3) 
          GEN    (AX3 0),B3 
          SB7    B0-B3
          GEN    (MX0 60),B7
          GEN    (BX7 -X0*X7) 
          GEN    (SA7 "SUMSVX3")
  
          GEN    (BX7 X5) 
          GEN    (AX5 0),B3 
          SB7    B0-B3
          GEN    (MX0 60),B7
          GEN    (BX7 -X0*X7) 
          GEN    (SA7 "SUMSVX5")
  
  
*         SET UP MASK 
  
          GEN    (MX0 0),X5 
          GEN    (LX0 0),X5            (X5 = MASK, LOW) 
  
*         LL
  
          GEN    (LX4 0),X4 
          GEN    (BX4 -X0*X4)          (X4 = LL TRN-(SUB)FIELD) 
          GEN    (BX7 X0*X3)           (X7 = RESULT (SUB)FIELD) 
          GEN    (BX4 X4+X7)           (X4 = LL+RESULT) 
          IFTHEN X7\0        IF POSITIVE OR ZERO MODIFIER 
            GEN    (LX4 0),X7 
          ELSE- 
            GEN    (LX4 60),X7
            ENDIF.
  
*         CR
  
          GEN    (LX6 0),X4            (SAME FOR CR)
          GEN    (BX6 -X0*X6) 
          GEN    (BX7 X0*X5)
          GEN    (BX6 X6+X7)
          IFTHEN X7\0        IF POSITIVE OR ZERO MODIFIER 
            GEN    (LX6 0),X7 
          ELSE- 
            GEN    (LX6 60),X7
            ENDIF.
  
          EXIT
          END 
