*COMDECK  PARSKEL - SKELETON SELECTION TABLES FOR PARSER. 
          CTEXT  PARSKEL - SKELETON SELECTION TABLES FOR PARSER.
  
  
**        PARSKEL - SKELETON SELECTION TABLES FOR PARSER. 
* 
*         ALL TABLES NECESSARY FOR THE PARSER TO SELECT PARTICULAR
*         SKELETONS RESIDE IN THIS DECK BECAUSE RELATIVE ADDRESSES
*         ARE USED. 
 BASES    SPACE  4,10 
**        EQUATES FOR PARSER. 
* 
*         FOLLOWING SYMBOLS MUST BE BASE SKELETON OF THE INDICATED
*         GROUP.  IT IS NOT ALWAYS POSSIBLE TO VERIFY THIS CONSTRAINT 
*         AT ASSEMBLY TIME, ALTHOUGH IF THESE SYMBOLS ARE NOT SET 
*         PROPERLY, THE COMILER WILL MALFUNCTION. 
  
  
 OM=CONV  EQUENT V=ITOR-1    FIRST MODE CONVERSION SKELETON, -1 
 OM=IF    EQUENT V=I123      FIRST IF-SKELETON
 OM=INL   EQUENT OM=CONV     FIRST INLINE INTRINSIC 
 DMOD     SPACE  4,10 
**        DMOD - BUILD MODE SELECTION VECTOR. 
* 
* TYPE    DMOD   B,L,I,R,D,C,H
* 
*         ENTRY  TYPE = GENERIC NAME OF THE OPERATION.
*                B, L, I, R, D, C = SUFFIX LETTER FOR TYPED OPERATION.
*                            = "-" IF ERROR.
*                H = SUFFIX LETTER FOR TYPE CHARACTER OPERATION,
*                            OMITTED IF CHARACTER NOT PERMITTED.
* 
*         NOTE THAT MODE SELECTION WORD DOES NOT HAVE SYMBOLIC
*         FIELD DESCRIPTIONS.  THE FORMAT IS INHERENT TO THE USING
*         ROUTINES.  SEE PAR/SDM, OMC.
  
  
          MACRO  DMOD,TYPE,U,L,I,R,D,C,H
 E        MICRO 
 F        SET    1S17 
* 
 .1       ECHO   ,P=(C,D,R,I,L,U) 
          IFC    EQ,/P/-/,2 
 E        MICRO  1,,$"E"8/-0,$
          SKIP   2
 E        MICRO  1,,$"E"8/V=TYPE.P-F,$
 F        MIN    F,V=TYPE.P 
 .1       ENDD
*                            PASTE IT TOGETHER
 OM=TYPE  VFD    12/F,"E" 
          IFC    NE,/H//,1
          VFD    42/0,18/V=TYPE.H 
          ENTRY  OM=TYPE
          ENDM
  
  
*                                  ARITHMETIC.
 ADD      DMOD   I,-,I,R,D,C
 SUB      DMOD   I,-,I,R,D,C
 MUL      DMOD   I,-,I,R,D,C
 DIV      DMOD   I,-,I,R,D,C
 UMI      DMOD   I,-,I,R,D,C
  
*                                  RELATIONS. 
 LT       DMOD   B,-,I,R,D,-,H
 GE       DMOD   B,-,I,R,D,-,H
 NE       DMOD   B,-,I,R,D,D,H
 EQ       DMOD   B,-,I,R,D,D,H
  
*                                  MASKING / LOGICAL. 
 NOT      DMOD   B,L,B,B,B,B
 AND      DMOD   B,L,B,B,B,B
 OR       DMOD   B,L,B,B,B,B
 EQV      DMOD   B,L,B,B,B,B
 XOR      DMOD   B,L,B,B,B,B
  
*                                  MISCELLEANEOUS.
 STR      DMOD   I,I,I,I,D,D,H
 DOC      DMOD   -,-,S,R,D,-       SHORT LOOPS
          LOC    OM=DOC                  ****  KLUDGE  **** 
 DOC      DMOD   -,-,L,R,D,-       LONG LOOPS 
          LOC    *O 
 MODECON  SPACE  4,10 
**        MCTBL - GENERATE ONE ROW OF MODE CONVERSION MATRIX. 
* 
* TYPE    MCTBL  B,L,I,R,D,C
  
  
          MACRO  MCTBL,TYPE,B,L,I,R,D,Z,H 
 E        MICRO 
 .1       ECHO   ,P=(H,Z,D,R,I,L,B) 
          IFC    EQ,/P/----/,2
 E        MICRO  1,,$"E",8/-0$
          SKIP   5
          IFC    EQ,/P/****/,2
 E        MICRO  1,,$"E",8/0$ 
          SKIP   2
 R        ERRMI  V=P-OM=CONV       RE-ORDER SKELS 
 E        MICRO  1,,$"E",8/V=P-OM=CONV$ 
 .1       ENDD
* 
 M.TYPE   VFD    4/0"E" 
 MCTBL    ENDM
 F.MODC   SPACE  4,10 
**        F.MODC - MODE CONVERSION MATRIX.
* 
*         ROW (WORD) INDEXED BY TYPE OF OPERAND.
*         COLUMN (BYTE) INDEXED BY DOMINANT MODE. 
* 
*         ----  =>  ERROR.
*         ****  =>  OKAY, NO CONVERSION NEEDED. 
*         MTON  =>  OKAY = OFFSET OF MODE CONVERSION SKELETON.
  
  
 F.MODC   BSSENT             ADDRESS OF TABLE 
          LOC    0
*                BOOL LOG  INT  REAL DBL  CPLX CHAR 
 BOOL     MCTBL  ****,----,****,****,RTOD,RTOC,---- 
 LOG      MCTBL  ----,****,----,----,----,----,---- 
 INT      MCTBL  ****,----,****,ITOR,ITOD,ITOC,---- 
 REAL     MCTBL  ****,----,RTOI,****,RTOD,RTOC,---- 
 DBL      MCTBL  DTOR,----,DTOI,DTOR,****,DTOC,---- 
 CPLX     MCTBL  CTOR,----,CTOI,CTOR,CTOD,****,---- 
 CHAR     MCTBL  ----,----,----,----,----,----,**** 
 .T       IFEQ   TEST,ON,1
 NONE     MCTBL  ----,----,----,----,----,----,---- 
          LOC    *O 
 F.IFT    SPACE  4,30 
**        F.IFT - TABLES FOR SELECTING IF SKELETON. 
  
  
          MACRO  IFTBL,PRE,B,L,I,R,D,C,H
 E        MICRO 
 .1       ECHO   ,P=(B,L,I,R,D,C,H) 
          IFC    EQ,/P/-/,2 
 E        MICRO  1,,$"E"8/-1,$
          SKIP   2
 R        ERRMI  V=P_PRE-OM=IF     (IF_P_PRE) SKEL OUT OF ORDER 
 E        MICRO  1,,$"E"8/V=_P_PRE-OM=IF,$
 .1       ENDD
* 
          VFD    "E"*P/0
          ENDM
  
  
*                                  NEXT LABEL NOT REFERENCED. 
 F.IFS    BSSENT
 123      IFTBL  I,-,I,I,D,-,-
 113      IFTBL  I,-,I,R,D,-,-
 122      IFTBL  I,-,I,I,D,-,-
 121      IFTBL  I,-,I,I,I,-,-
  
*                                  NEXT LABEL REFERENCED ONCE.
 N23      IFTBL  I,-,I,I,D,-,-
 1N3      IFTBL  I,-,I,R,D,-,-
 12N      IFTBL  I,-,I,I,D,-,-
  
*                                  NEXT LABEL REFERENCED 2 OR 3 TIMES.
 F.IFN    BSSENT
 NN3      IFTBL  I,-,I,R,D,-,-
 11N      IFTBL  I,-,I,R,D,-,-
 N22      IFTBL  I,-,I,R,D,-,-
 1NN      IFTBL  I,-,I,R,D,-,-
 1N1      IFTBL  I,-,I,I,I,-,-
 N2N      IFTBL  I,-,I,I,I,-,-
          TITLE  INTRINSIC FUNCTION DEFINITIONS.
 F.INTF   SPACE  4,10 
***       F.INTF - TABLE OF ALL KNOWN INTRINSIC FUNCTIONS.
* 
*         SEE FTN5TXT FOR FORMAT. 
* 
*         NAMES WHICH ARE GENERIC ONLY (THAT IS, A NAME WHICH IS NOT
*         ALSO A SPECIFIC NAME), ARE SPECIFIED AS 'EXTBF' SO AS NOT 
*         TO REFER TO A NON-EXISTANT SKELETON.
*         A GENERIC FUNCTION HAS A SELECTOR WORD INSERTED IN THIS 
*         TABLE IMMEDIATELY FOLLOWING ITS ENTRY.
* 
*         SEE X3J3/90, TABLE 5. 
  
  
          MACRO  NLINE,NAME,ARGTYP,FUNTYP,NOARGS,FLAGS
 .C       MICRO  1,,$NAME$
 .CD      MICRO  1,,._NAME_.
 .D       MICRO  1,, V=".CD"-OM=INL 
 R        ERRMI  ".D"        SKEL OUT OF ORDER _________________________
 NAME     INTF=  ".C",ARGTYP,FUNTYP,NOARGS,(FLAGS)
          ENDM
  
  
          MACRO  NPAR,NAME,ARGTYP,FUNTYP,NOARGS,FLAGS 
 .D       MICRO  1,9, =XES=NAME 
 NAME     INTF=  NAME,ARGTYP,FUNTYP,NOARGS,(PAR,FLAGS)
          ENDM
  
  
          MACRO  EXTBF,NAME,ARGTYP,FUNTYP,NOARGS,FLAGS,BREG 
 .D       MICRO  1,, 0
          IRP    BREG 
 .D       DECMIC ".D"+1S_BREG 
          IRP 
 NAME     INTF=  NAME,ARGTYP,FUNTYP,NOARGS,(EXT,FLAGS)
          ENDM
 F.INTF   SPACE  4,20 
**        INLINE INTRINSICS.
  
  
 F.INTF   BSSENT 0
  
          QUAL   INTF 
          NOREF  .A,.B,.G 
          LOC    0
 ERR.     EXTBF  BOOL,BOOL   DEFAULT ILLEGAL ENTRY
  
 BTOR.    NLINE  BOOL,REAL,1 INVISIBLE SPECIFIC NAMES 
 BTOD.    NLINE  BOOL,DBL,1 
 BTOC.    NLINE  BOOL,CPLX,1
 ITOD.    NLINE  INT,DBL,1
 ITOC.    NLINE  INT,CPLX,1 
 RTOB.    NLINE  REAL,BOOL,1
 RTOC.    NLINE  REAL,CPLX,1
 DTOB.    NLINE  DBL,BOOL,1 
 DTOC.    NLINE  DBL,CPLX,1 
 CTOB.    NLINE  CPLX,BOOL,1
 CTOI.    NLINE  CPLX,INT,1 
 CTOD.    NLINE  CPLX,DBL,1 
  
 AMAX0    NLINE  INT,REAL 
 AMAX1    NLINE  REAL,REAL
 AMIN0    NLINE  INT,REAL 
 AMIN1    NLINE  REAL,REAL
 AND      NLINE  BOOL,BOOL,,(NONANSI) 
 BOOL$    EXTBF  CHAR,BOOL,1,(BYN),(2,3,4,5,6,7)
 BOOL     NLINE  INT,BOOL,1,(GENERIC,GNO) 
 CHAR     EXTBF  INT,CHAR,1,(BYN,CHAR)
 CMPL.    EXTBF  BOOL,CPLX,1,(GENERIC)   MUST BE CMPLX-2 (PAR/VIL)
 CMPLX    NPAR   REAL,CPLX,2,(GENERIC,GNO)
 DBLE     NLINE  REAL,DBL,1,(GENERIC,GNO) 
 DMAX1    NLINE  DBL,DBL
 DMIN1    NLINE  DBL,DBL
 EQV      NLINE  BOOL,BOOL,,(NONANSI) 
 FLOAT    NLINE  INT,REAL,1 
 ICHAR    EXTBF  CHAR,INT,1,(BYN,CHAR)
 IDINT    NLINE  DBL,INT,1
 IFIX     NLINE  REAL,INT,1 
 INT      NLINE  REAL,INT,1,(GENERIC) 
 LGE      NPAR   CHAR,LOG,2,(BYN) 
 LGT      NPAR   CHAR,LOG,2,(BYN) 
 LLE      NPAR   CHAR,LOG,2,(BYN) 
 LLT      NPAR   CHAR,LOG,2,(BYN) 
 LOCF$    EXTBF  CHAR,BOOL,1,(BYN),(2,3,4,5,6,7)
 LOCF     NPAR   BOOL,BOOL,1,(GEN,NANS) 
 MAX      EXTBF  INT,INT,,(GENERIC,GNO) 
 MAX0     NLINE  INT,INT
 MAX1     NLINE  REAL,INT 
 MIN      EXTBF  INT,INT,,(GENERIC,GNO) 
 MIN0     NLINE  INT,INT
 MIN1     NLINE  REAL,INT 
 NEQV     NLINE  BOOL,BOOL,,(NONANSI) 
 OR       NLINE  BOOL,BOOL,,(NONANSI) 
 REAL     NLINE  CPLX,REAL,1,(GENERIC)
 SNGL     NLINE  DBL,REAL,1 
 XOR      NLINE  BOOL,BOOL,,(NONANSI) 
 LOG      EXTBF  REAL,REAL,1,(GENERIC,GNO)
 LOG10    EXTBF  REAL,REAL,1,(GENERIC,GNO)
 SUM1S    NLINE  BOOL,BOOL,1,(NONANSI)
          QUAL
 Z.INTA   BSSENT 0           ABOVE CANNOT BE ACTUAL ARGUMENTS 
          QUAL   *
  
 ABS      NLINE  REAL,REAL,1,(GENERIC)
 AIMAG    NLINE  CPLX,REAL,1
 AINT     NLINE  REAL,REAL,1,(GENERIC)
 AMOD     NLINE  REAL,REAL,2
 ANINT    NLINE  REAL,REAL,1,(GENERIC)
 CABS     EXTBF  CPLX,REAL,1
 COMPL    NLINE  BOOL,BOOL,1,(NONANSI)
 CONJG    NLINE  CPLX,CPLX,1
 DABS     NLINE  DBL,DBL,1
 DDIM     NLINE  DBL,DBL,2
 DIM      NLINE  REAL,REAL,2,(GENERIC)
 DINT     NLINE  DBL,DBL,1
 DMOD     EXTBF  DBL,DBL,2
 DNINT    NLINE  DBL,DBL,1
 DPROD    NLINE  REAL,DBL,2 
 DSIGN    NLINE  DBL,DBL,2
 IABS     NLINE  INT,INT,1
 IDIM     NLINE  INT,INT,2
 V=IDNINT EQU    V=IDNIN
 IDNINT   NLINE  DBL,INT,1
 INDEX    EXTBF  CHAR,INT,2,(BYN) 
 ISIGN    NLINE  INT,INT,2
 LEN$     EXTBF  CHAR,INT,1,(BYN),(2,3,4,5,6,7) 
 LEN      NPAR   CHAR,INT,1 
 MASK     NPAR   INT,BOOL,1,(NONANSI) 
 MOD      NLINE  INT,INT,2,(GENERIC)
 NINT     NLINE  REAL,INT,1,(GENERIC) 
 RANF     NPAR   BOOL,REAL,0,(NONANSI)
 SECOND   EXTBF  BOOL,REAL,0,(BYN,NANS),(2,3,4,5,6,7) 
 SHIFT    NPAR   BOOL,BOOL,2,(NONANSI)
 SIGN     NLINE  REAL,REAL,2,(GENERIC)
  
*                            MATH LIBRARY INTRINSICS. 
  
 SQRT     EXTBF  REAL,REAL,1,(GENERIC),(5,6,7)
 DSQRT    EXTBF  DBL,DBL,1
 CSQRT    EXTBF  CPLX,CPLX,1
 EXP      EXTBF  REAL,REAL,1,(GENERIC),(5,6,7)
 DEXP     EXTBF  DBL,DBL,1,,(5,6,7) 
 CEXP     EXTBF  CPLX,CPLX,1
 ALOG     EXTBF  REAL,REAL,1,,(5,6,7) 
 DLOG     EXTBF  DBL,DBL,1
 CLOG     EXTBF  CPLX,CPLX,1
 ALOG10   EXTBF  REAL,REAL,1,,(5,6,7) 
 DLOG10   EXTBF  DBL,DBL,1
  
 SIN      EXTBF  REAL,REAL,1,(GENERIC),(5,6,7)
 DSIN     EXTBF  DBL,DBL,1
 CSIN     EXTBF  CPLX,CPLX,1
 SIND     EXTBF  REAL,REAL,1,(NONANSI)         **FCL ANY B-REGS 
 COS      EXTBF  REAL,REAL,1,(GENERIC),(5,6,7)
 DCOS     EXTBF  DBL,DBL,1
 CCOS     EXTBF  CPLX,CPLX,1
 COSD     EXTBF  REAL,REAL,1,(NONANSI)         **FCL ANY B-REGS 
 TAN      EXTBF  REAL,REAL,1,(GENERIC)
 DTAN     EXTBF  DBL,DBL,1
 TAND     EXTBF  REAL,REAL,1,(NONANSI)         **FCL ANY B-REGS 
  
 ASIN     EXTBF  REAL,REAL,1,(GENERIC),(6,7)
 DASIN    EXTBF  DBL,DBL,1
 ACOS     EXTBF  REAL,REAL,1,(GENERIC),(6,7)
 DACOS    EXTBF  DBL,DBL,1
 ATAN     EXTBF  REAL,REAL,1,(GENERIC),(5,6,7)
 DATAN    EXTBF  DBL,DBL,1
 ATAN2    EXTBF  REAL,REAL,2,(GENERIC),(5,6,7)
 DATAN2   EXTBF  DBL,DBL,2
  
 SINH     EXTBF  REAL,REAL,1,(GENERIC),(5,6,7)
 DSINH    EXTBF  DBL,DBL,1,,(6,7) 
 COSH     EXTBF  REAL,REAL,1,(GENERIC),(5,6,7)
 DCOSH    EXTBF  DBL,DBL,1,,(6,7) 
 TANH     EXTBF  REAL,REAL,1,(GENERIC)
 DTANH    EXTBF  DBL,DBL,1,,(6,7) 
 ATANH    EXTBF  REAL,REAL,1,(NONANSI)         **FCL ANY B-REGS 
  
 ERF      EXTBF  REAL,REAL,1,(NONANSI)         **FCL ANY B-REGS 
 ERFC     EXTBF  REAL,REAL,1,(NONANSI)         **FCL ANY B-REGS 
  
          QUAL   *
 Z.INTF   BSSENT 0           LENGTH OF INTRINSIC TABLE
          LOC    *O 
 OMI=CPX  EQUENT /INTF/CMPLX
 OMI=LEN  EQUENT /INTF/LEN$ 
 OMI=SHF  EQUENT /INTF/SHIFT
 OMI=LCF  EQUENT /INTF/LOCF$
 GENF     SPACE  4,10 
**        GENF - MODE SELECTION VECTORS FOR GENERIC INTRINSICS. 
* 
* NAME    GENF   B,I,R,D,Z,H,L
* 
*         ENTRY  B,I,R,D,Z,H,L = SPECIFIC NAME FOR EACH TYPE -- 
*                            BOOL, INT, REAL, DBL, CPLX, CHAR, LOG. 
*                NOTE THAT TRAILING ILLEGAL ENTRIES MAY BE OMITTED. 
* 
*         THIS MACRO FILLS IN THE SLOT LEFT IN (F.INTF), AFTER THE ENTRY
*         FOR THE GENERIC NAME, WITH A MODE SELECTION VECTOR. 
*         OBVIOUSLY THEN, THERE MUST BE A *GENF* MACRO CALL FOR EACH
*         INTRINSIC FUNCTION MARKED *GENERIC*.
  
  
          MACRO  GENF,NAM,B,I,R,D,Z,H,L 
 E        MICRO 
* 
 .1       ECHO   ,P=(H,Z,D,R,I,L,B) 
          IFC    NE,/P//,1
          IFC    EQ,/P/-/,2 
 E        MICRO  1,,\"E"8/-0,\
          SKIP   4
          IFC    EQ,/P/****/,2
 E        MICRO  1,,\"E"8/0,\ 
          SKIP   1
 E        MICRO  1,,\"E"8//INTF/P,\ 
 .1       ENDD
* 
          ORG    F.INTF+/INTF/NAM+1 
          VFD    4/,"E" 
          ENDM
  
  
 BOOL     GENF   ****,****,****,DTOB.,CTOB.,BOOL$ 
 INT      GENF   ****,****,INT,IDINT,CTOI.,-
 REAL     GENF   ****,FLOAT,****,SNGL,REAL,-
 DBLE     GENF   BTOD.,ITOD.,DBLE,****,CTOD.,-
 CMPL.    GENF   BTOC.,ITOC.,RTOC.,DTOC.,****,- 
 CMPLX    GENF   CMPLX,CMPLX,CMPLX,CMPLX,-,-
*                            MODE CONVERSION FOR CMPLX DONE IN PAR/ESF. 
  
 ABS      GENF   IABS,IABS,ABS,DABS,CABS,-
 AINT     GENF   -,-,AINT,DINT,-,-
 ANINT    GENF   -,-,ANINT,DNINT,-,-
 DIM      GENF   DIM,IDIM,DIM,DDIM,-,-
 LOCF     GENF   LOCF,LOCF,LOCF,LOCF,LOCF,LOCF,LOCF 
 MOD      GENF   MOD,MOD,AMOD,DMOD,-,-
 MAX      GENF   MAX0,MAX0,AMAX1,DMAX1,-,-
 MIN      GENF   MIN0,MIN0,AMIN1,DMIN1,-,-
 NINT     GENF   -,-,NINT,IDNINT,-,-
 SIGN     GENF   ISIGN,ISIGN,SIGN,DSIGN,-,- 
  
 SQRT     GENF   -,-,SQRT,DSQRT,CSQRT,- 
 EXP      GENF   -,-,EXP,DEXP,CEXP,-
 LOG      GENF   -,-,ALOG,DLOG,CLOG,- 
 LOG10    GENF   -,-,ALOG10,DLOG10,-,-
 SIN      GENF   -,-,SIN,DSIN,CSIN,-
 COS      GENF   -,-,COS,DCOS,CCOS,-
 TAN      GENF   -,-,TAN,DTAN,-,- 
 ASIN     GENF   -,-,ASIN,DASIN,-,- 
 ACOS     GENF   -,-,ACOS,DACOS,-,- 
 ATAN     GENF   -,-,ATAN,DATAN,-,- 
 ATAN2    GENF   -,-,ATAN2,DATAN2,-,- 
 SINH     GENF   -,-,SINH,DSINH,-,- 
 COSH     GENF   -,-,COSH,DCOSH,-,- 
 TANH     GENF   -,-,TANH,DTANH,-,- 
          ORG    F.INTF+Z.INTF
 F.IMCV   SPACE  4,10 
**        F.IMCV - TABLE OF INTRINSICS REQUIRING MODE CONVERSION. 
* 
*         THE ARITHMETIC FOR THE FOLLOWING INLINE INTRINSICS IS 
*         PERFORMED IN THE MODE OF THE ARGUMENTS.  THE PARTIAL
*         RESULT MUST THEREFORE BE CONVERTED INTO THE RESULT MODE 
*         OF THE FUNCTION.
* 
*         PAR/VIL SCANS THIS TABLE TO DETERMINE IF SUCH ACTION IS 
*         REQUIRED, AND, IF SO, WHAT CONVERSION SKELETON TO USE.
  
  
 F.IMCV   BSSENT             INTRINSICS TO MODE CONVERT 
          VFD    24//INTF/AMAX0,18/V=ITOR-OM=CONV,18/M.REAL 
          VFD    24//INTF/AMIN0,18/V=ITOR-OM=CONV,18/M.REAL 
          VFD    24//INTF/_MAX1,18/V=RTOI-OM=CONV,18/M.INT
          VFD    24//INTF/_MIN1,18/V=RTOI-OM=CONV,18/M.INT
 Z.IMCV   EQUENT *-F.IMCV 
  
  
 PARSKEL  ENDX
