*DECK             EXPOS 
USETEXT   TSOURCE 
USETEXT   TSYMCNS 
USETEXT   TCEXECQ 
USETEXT   TCOM37Q 
USETEXT   TCOM39Q 
USETEXT   TCOM78Q 
USETEXT   TCEXEC
USETEXT   TC7DECS 
PROC EXPOS(LL);                         # L (BY VALUE ) POINTS TO ICF  # JANDRE 
                                        # INSTRUCTION WHICH LOADS      #
                                        # VALUE. EXPOS EXTRACTS A      #
                                        # FIXED-FIELD VALUE FROM A     #
                                        # PACKED WORD (X-REGISTER) AND #
                                        # POSITIONS THE VALUE IN AN    #
                                        # X-REGISTER. THE INTENT IS TO #
                                        # COMBINE THE SCALING SHIFTS   #
                                        # WITH THE EXTRACTING SHIFTS   #
                                        # WHEN POSSIBLE.               #
BEGIN #SOURCE MUST BE LS 60 BITS LONG#
    ITEM L; #ICF POINTER #                                               JANDRE 
ITEM LL; L=LL;     # TO BE DELETED        BY VALUE    #                  JANDRE 
  
  
  
  
*CALL COMEX 
  
  
  
  
    ITEM K;                                                              JANDRE 
    XREF FUNC MSKGEN; 
    XREF PROC MSKGNC;                                                    JANDRE 
    XREF PROC ICFGNR; 
    XREF PROC ERROR;
    XREF PROC ICFGEN; 
    XREF FUNC PSICON; 
  
    ITEM I1,I2,I3,I4; 
    ITEM W,X,Y,Z; 
  
    IF SYG THEN 
        BEGIN #SIGNED SOURCE# 
              # SYMPL CALLS EXPOS WITH POS=0 WHEN SYG = TRUE #           JANDRE 
            IF FBT EQ 0 THEN
                BEGIN 
                ICFGEN(QICFOP"RSHC",L,60-NBT);                           JANDRE 
                RETURN;                                                  JANDRE 
                END 
            IF NBT EQ 18 THEN                                            JANDRE 
                BEGIN 
              IF FBT NQ 42 THEN ICFGEN(QICFOP"LSHC",L,FBT+18);
                ICFGNR(QICFOP"BXND",-1,0);
                RETURN;                                                  JANDRE 
                END 
            ICFGEN(QICFOP"LSHC",L,FBT);                                  JANDRE 
            ICFGNR(QICFOP"RSHC",-1,60-NBT);                              JANDRE 
            RETURN;                                                      JANDRE 
        END 
    #UNSIGNED SOURCE-FIRST COMPUTE LEFT-SHIFT COUNT#
    K=FBT+NBT+POS-60; 
    IF K EQ 0 THEN
        BEGIN #NO SHIFT#
        X=0;                                                             JANDRE 
        MSKGNC(FBT,NBT,Y,X);                                             JANDRE 
        ICFGEN(NDINS[X],Y,L);                                            JANDRE 
        RETURN;                                                          JANDRE 
        END 
    #SHIFT REQUIRED-COMPUTE ALL POSSIBLE MASKS# 
    IF K LS 0 THEN K=K+60;
        X=0; W=0;                                                        JANDRE 
        MSKGNC(FBT,NBT,Y,X);                                             JANDRE 
        MSKGNC(60-NBT-POS,NBT,Z,W);                                      JANDRE 
        IF CONL[Y] GR CONL[Z] THEN
            BEGIN 
            ICFGEN(QICFOP"LSHC",L,K);    # SHIFT FIRST #                 JANDRE 
            ICFGNR(NDINS[W],Z,-1); #AND/NAND AFTER, OR ...# 
            RETURN;                                                      JANDRE 
            END 
        ICFGEN(NDINS[X],Y,L);    # AND/NAND #                            JANDRE 
        ICFGNR(QICFOP"LSHC",-1,K); #SHIFT AFTER#
END 
TERM
