! ! TYPCHK.DEFINITIONS - this file contains the definitions that drive type-checking of MACRO-32 instructions. ! ! Note that the defintions in this file are specified as position independent with commas, tabs, EOLs or blanks as field ! separators. All text is case insensitive. All comments begin with an exclamation point. Note parens are not allowed in ! data type definition names as parens are part of the syntax to the DEFINE_OPCODE statement. ! Keywords not to re-defined are: DEFINE_TYPE, DEFINE_OPCODE, DEFINE_EXCEPTION, *NO_CHECK*, DEFINE_OPTION, *LABEL*, ! *REG*, any option_flag_name, DEFINE_TYPE_MODE. The data type names are invariant however but the data type ID strings ! for these data types can be redefined. ! ! If you make a clever change to these definitions that catches a bug then please share it with your colleagues by informing ! Paul Houlihan will see that it gets propogated. ! ! X-1 PJH Paul J houlihan 3-MAR-1991 ! Create Initial definitions ! ! --- ! DEFINE_OPTION ! Define option flags. Select the desired options. The options are: ! ! FLAG_INTEGERS - Flag all arguments that are just integers, this check assumes "#" is missing. ! FLAG_LOCAL - Flag local modules symbols that are used in arguments. By default this flagging is selected as it is useful ! to check field size assumptions for the local symbols that don't have the field size built into the symbol name. ! However there maybe facilities that need to use this option to reduce noise. A local symbol is an argument ! that contains alphanumeric or underscore characters but not "$". ! FLAG_INDEXING_MISMATCHES - Flag all mismatches between the data type imbedded in the field name and the expected data ! type used for indexing. The expected indexing data type is unique for each opcode and argument and is specified in ! the argument data type suffix for the DEFINE_OPCODE statements below. ! FLAG_NODT_INDEXING - Flag all arguments using indexing that have no data type as no field name exists (ie. (R2)[R3]). ! This allows manual checking of all such arguments against the type of indexing done for this opcode and argument. ! FLAG_UNSIGNED_BRANCHES - Flag all unsigned branch (BGTR, BGEQ, BLSS, BLEQ) that follows a byte or word opcode. This ! attempts to locate branch opcodes that should be unsigned as they result from operations on unsigned fields. ! FLAG_LITERAL_WRITE_ADDRS - Flag all instructions that write values to a literal address which is in most cases not ! intended. The argument access type suffix for the DEFINE_OPCODE statement specifies whether an argument is used ! as the address of a write. ! FLAG_IMPLICIT_REGISTER_USE - Flag all opcodes that implicitly destroy (or return data in) registers other than AP/FP/SP/PC. ! ASSUME_SUPPRESS - If this option is selected then any field which is included in an ASSUME statement prior to a ! data type mismatch will have the warning suppressed. If option not selected then ASSUME are ignored. Only the last ! five ASSUME statements prior to a given instruction are checked. ! FULL_TYPCHK_FILE - If selected this option results in a complete copy of the original listing file with warnings imbedded. ! Without this option, the TYPCHK file terminates after the instructions and warnings at the beginning of the symbol ! table or Alpha machine code listing. ! FLAG_REGISTER_ONLY_ARGS - Flag arguments that are only registers with no field name offset as error for manual checking. ! ! SYNTAX: ! ! DEFINE_OPTION option_flag_name ! DEFINE_OPTION FLAG_INTEGERS,FLAG_LOCAL,FLAG_INDEXING_MISMATCHES,FLAG_UNSIGNED_BRANCHES,FLAG_LITERAL_WRITE_ADDRS DEFINE_OPTION FLAG_IMPLICIT_REGISTER_USE ! --- ! DEFINE_TYPE ! Define the strings that identify the data type of a MACRO-32 field name. Note that the correct usage of TEXT and ADDR ! data types is hard to predict, so the DEFINE_OPCODE statements uses these sparingly. You may wish to remove these data ! types to flag all references or add them to other opcodes to reduce the noise. Note that a data_type_name can contain ! alphanumeric, $ or _ characters. The SOFT and HARD data types are longword or quadword data types depending on the target ! environment sensed by the Type Checker. The following are special data types: ! *NO_CHECK* is a special keyword used for the data_type_id_string which specifies no checking to be done on this data type. ! *LABEL* is a special data type that is defined to be the format of a valid Macro-32 local label. ! ! SYNTAX: ! ! DEFINE_TYPE data_type_name [data_type_id_string1,data_type_id_string2,...] ! DEFINE_TYPE BYTE $B_,$GB_,$AB_,_B_,_GB_,_AB_,$IB_,$GIB_,$AIB_,_IB_,_GIB_,_AIB_ DEFINE_TYPE WORD $W_,$GW_,$AW_,_W_,_GW_,_AW_,$IW_,$GIW_,$AIW_,_IW_,_GIW_,_AIW_ DEFINE_TYPE LONG $L_,$GL_,$AL_,_L_,_GL_,_AL_,$IL_,$GIL_,$AIL_,_IL_,_GIL_,_AIL_ DEFINE_TYPE QUAD $Q_,$GQ_,$AQ_,_Q_,_GQ_,_AQ_,$IQ_,$GIQ_,$AIQ_,_IQ_,_GIQ_,_AIQ_ DEFINE_TYPE INT_S $IS_,$GIS_,$AIS_,_IS_,_GIS_,_AIS_ DEFINE_TYPE INT_H $IH_,$GIH_,$AIH_,_IH_,_GIH_,_AIH_ DEFINE_TYPE PTR_S $PS_,$GPS_,$APS_,_PS_,_GPS_,_APS_ DEFINE_TYPE PTR_H $PH_,$GPH_,$APH_,_PH_,_GPH_,_APH_ DEFINE_TYPE OCTA $O_,$GO_,$AO_,_O_,_GO_,_AO_ DEFINE_TYPE FLOAT $F_,$GF_,$AF_,_F_,_GF_,_AF_ DEFINE_TYPE DFLOAT $D_,$GD_,$AD_,_D_,_GD_,_AD_ DEFINE_TYPE GFLOAT $G_,$GG_,$AG_,_G_,_GG_,_AG_ DEFINE_TYPE HFLOAT $H_,$GH_,$AH_,_H_,_GH_,_AH_ DEFINE_TYPE PACKED $P_,$GP_,$AP_,_P_,_GP_,_AP_ DEFINE_TYPE VIELD $V_,_V_ DEFINE_TYPE MASK $M_,_M_ DEFINE_TYPE SIZE $S_,_S_ DEFINE_TYPE ANY_TYPE *NO_CHECK* DEFINE_TYPE LABEL *LABEL* DEFINE_TYPE CONSTANT $K_,$GK_,$AK_,$C_,$GC_,$AC_,$_,_K_,_GK_,_AK_,_C_,_GC_,_AC_ DEFINE_TYPE TEXT $T_,$GT_,$AT_,_T_,_GT_,_AT_ DEFINE_TYPE ADDR $A_,$GA_,$AA_,$AR_,_A_,_GA_,_AA_,_AR_ DEFINE_TYPE PTR_L $PL_,$GPL_,$APL_,_PL_,_GPL_,_APL_ DEFINE_TYPE PTR_Q $PQ_,$GPQ_,$APQ_,_PQ_,_GPQ_,_APQ_ DEFINE_TYPE REG_MASK #^M ! ! Other IDSM conventional data type whose macro usage I couldn't predict. Thus these fields aren't used in checking. ! !DEFINE_TYPE RECORD $R_,$GR_,$AR_,_R_,_GR_,_AR_ !DEFINE_TYPE NUM_STRING $N_,$GN_,$AN_,_N_,_GN_,_AN_ ! NUMERIC STRING (ALL BYTE FORMS) !DEFINE_TYPE VARIABLE $Z_,$GZ_,$AZ_,_Z_,_GZ_,_AZ_ ! --- ! DEFINE_OPCODE ! Argument Data Types for standard VAX instructions. The opcode string is specified along with and the type for each of ! it's arguments. Multiple data types acceptable for a given argument can be surrounded by parens. The floating point ! instructions are mostly commented out as these are rare in the VMS Exec. Any data type name used in a DEFINE_OPCODE ! statement must have previously been defined in a DEFINE_TYPE statement. Each argument has an optional suffix describing ! the access type and data size of the argument (very close to the SRM conventions). This access type suffix is used in the ! FLAG_LITERAL_WRITE_ADDRS option to detect constants in arguments used writes. The data type is used by the Flag ! Indexing options to determine the type of indexing done for this argument. ! ! SYNTAX: ! ! DEFINE_OPCODE opcode_string [argument1_type,argument2_type,...] where ! argumentN_type = data_type_name- or ! ( data_type_name1,data_type_name2,... )- ! where: ! access_type = R:Read or W:Write or M:Modify or B:Branch ! data_type = B:Byte or W:Word or L:Long or Q:Quad or O:Octa or D or F or G or H ! DEFINE_OPCODE ACBB BYTE-RB BYTE-RB BYTE-MB ANY_TYPE-BB !DEFINE_OPCODE ACBD DFLOAT-RD DFLOAT-RD DFLOAT-MD ANY_TYPE-BW !DEFINE_OPCODE ACBF FLOAT-RF FLOAT-RF FLOAT-MF ANY_TYPE-BW !DEFINE_OPCODE ACBG GFLOAT-RG GFLOAT-RG GFLOAT-MG ANY_TYPE-BW !DEFINE_OPCODE ACBH HFLOAT-RH HFLOAT-RH HFLOAT-MH ANY_TYPE-BW DEFINE_OPCODE ACBL LONG-RL LONG-RL LONG-ML ANY_TYPE-BW DEFINE_OPCODE ACBW WORD-RW WORD-RW WORD-MW ANY_TYPE-BW DEFINE_OPCODE ADAWI WORD-RW WORD-MW DEFINE_OPCODE ADDB BYTE-RB BYTE-MB DEFINE_OPCODE ADDB2 BYTE-RB BYTE-MB DEFINE_OPCODE ADDB3 BYTE-RB BYTE-RB BYTE-WB !DEFINE_OPCODE ADDD DFLOAT-RD DFLOAT-MD !DEFINE_OPCODE ADDD2 DFLOAT-RD DFLOAT-MD !DEFINE_OPCODE ADDD3 DFLOAT-RD DFLOAT-RD DFLOAT-WD !DEFINE_OPCODE ADDF FLOAT-RF FLOAT-MF !DEFINE_OPCODE ADDF2 FLOAT-RF FLOAT-MF !DEFINE_OPCODE ADDF3 FLOAT-RF FLOAT-RF FLOAT-WF !DEFINE_OPCODE ADDG2 GFLOAT-RG GFLOAT-MG !DEFINE_OPCODE ADDG3 GFLOAT-RG GFLOAT-RG GFLOAT-WG !DEFINE_OPCODE ADDH2 HFLOAT-RH HFLOAT-MH !DEFINE_OPCODE ADDH3 HFLOAT-RH HFLOAT HFLOAT-WH DEFINE_OPCODE ADDL LONG-RL LONG-ML DEFINE_OPCODE ADDL2 LONG-RL LONG-ML DEFINE_OPCODE ADDL3 LONG-RL LONG-RL LONG-WL DEFINE_OPCODE ADDP WORD-RW PACKED-RB WORD-RW PACKED-MB DEFINE_OPCODE ADDP4 WORD-RW PACKED-RB WORD-RW PACKED-MB DEFINE_OPCODE ADDP6 WORD-RW PACKED-RB WORD-RW PACKED-RB WORD-RW PACKED-WB DEFINE_OPCODE ADDW WORD-RW WORD-MW DEFINE_OPCODE ADDW2 WORD-RW WORD-MW DEFINE_OPCODE ADDW3 WORD-RW WORD-RW WORD-WW DEFINE_OPCODE ADWC LONG-RL LONG-ML DEFINE_OPCODE AOBLEQ LONG-RL LONG-ML ANY_TYPE-BB DEFINE_OPCODE AOBLSS LONG-RL LONG-ML ANY_TYPE-BB DEFINE_OPCODE ASHL (VIELD,SIZE)-RB LONG-RL LONG-WL DEFINE_OPCODE ASHP BYTE-RB WORD-RW PACKED-RB BYTE-RB WORD-RW PACKED-WB DEFINE_OPCODE ASHQ (SIZE,VIELD)-RB QUAD-RQ QUAD-WQ DEFINE_OPCODE BBC VIELD-RL ANY_TYPE-RB ANY_TYPE-BB DEFINE_OPCODE BBCC VIELD-RL ANY_TYPE-MB ANY_TYPE-BB DEFINE_OPCODE BBCCI VIELD-RL ANY_TYPE-MB ANY_TYPE-BB DEFINE_OPCODE BBCS VIELD-RL ANY_TYPE-MB ANY_TYPE-BB DEFINE_OPCODE BBS VIELD-RL ANY_TYPE-RB ANY_TYPE-BB DEFINE_OPCODE BBSC VIELD-RL ANY_TYPE-MB ANY_TYPE-BB DEFINE_OPCODE BBSS VIELD-RL ANY_TYPE-MB ANY_TYPE-BB DEFINE_OPCODE BBSSI VIELD-RL ANY_TYPE-MB ANY_TYPE-BB DEFINE_OPCODE BCC ANY_TYPE-BB DEFINE_OPCODE BCS ANY_TYPE-BB DEFINE_OPCODE BEQL ANY_TYPE-BB DEFINE_OPCODE BEQLU ANY_TYPE-BB DEFINE_OPCODE BGEQ ANY_TYPE-BB DEFINE_OPCODE BGEQU ANY_TYPE-BB DEFINE_OPCODE BGTR ANY_TYPE-BB DEFINE_OPCODE BGTRU ANY_TYPE-BB DEFINE_OPCODE BICB (BYTE,MASK,CONSTANT)-RB BYTE-MB DEFINE_OPCODE BICB2 (BYTE,MASK,CONSTANT)-RB BYTE-MB DEFINE_OPCODE BICB3 (BYTE,MASK,CONSTANT)-RB BYTE-RB BYTE-WB DEFINE_OPCODE BICL (LONG,MASK,CONSTANT)-RL LONG-ML DEFINE_OPCODE BICL2 (LONG,MASK,CONSTANT)-RL LONG-ML DEFINE_OPCODE BICL3 (LONG,MASK,CONSTANT)-RL LONG-RL LONG-WL DEFINE_OPCODE BICPSW (WORD,MASK,CONSTANT)-RW DEFINE_OPCODE BICW (WORD,MASK,CONSTANT)-RW WORD-MW DEFINE_OPCODE BICW2 (WORD,MASK,CONSTANT)-RW WORD-MW DEFINE_OPCODE BICW3 (WORD,MASK,CONSTANT)-RW WORD-RW WORD-WW DEFINE_OPCODE BISB (BYTE,MASK,CONSTANT)-RB BYTE-MB DEFINE_OPCODE BISB2 (BYTE,MASK,CONSTANT)-RB BYTE-MB DEFINE_OPCODE BISB3 (BYTE,MASK,CONSTANT)-RB BYTE-RB BYTE-WB DEFINE_OPCODE BISL (LONG,MASK,CONSTANT)-RL LONG-ML DEFINE_OPCODE BISL2 (LONG,MASK,CONSTANT)-RL LONG-ML DEFINE_OPCODE BISL3 (LONG,MASK,CONSTANT)-RL LONG-RL LONG-WL DEFINE_OPCODE BISPSW (WORD,MASK,CONSTANT)-RW DEFINE_OPCODE BISW (WORD,MASK,CONSTANT)-RW WORD-MW DEFINE_OPCODE BISW2 (WORD,MASK,CONSTANT)-RW WORD-MW DEFINE_OPCODE BISW3 (WORD,MASK,CONSTANT)-RW WORD-RW WORD-WW DEFINE_OPCODE BITB (BYTE,MASK,CONSTANT)-RB (BYTE,TEXT)-RB DEFINE_OPCODE BITL (LONG,MASK,CONSTANT)-RL LONG-RL DEFINE_OPCODE BITW (WORD,MASK,CONSTANT)-RW WORD-RW DEFINE_OPCODE BLBC (BYTE,WORD,LONG)-RL ANY_TYPE-BB DEFINE_OPCODE BLBS (BYTE,WORD,LONG)-RL ANY_TYPE-BB DEFINE_OPCODE BLEQ ANY_TYPE-BB DEFINE_OPCODE BLEQU ANY_TYPE-BB DEFINE_OPCODE BLSS ANY_TYPE-BB DEFINE_OPCODE BLSSU ANY_TYPE-BB DEFINE_OPCODE BNEQ ANY_TYPE-BB DEFINE_OPCODE BNEQU ANY_TYPE-BB !DEFINE_OPCODE BPT ANY_TYPE-BB DEFINE_OPCODE BRB ANY_TYPE-BB DEFINE_OPCODE BRW ANY_TYPE-BW DEFINE_OPCODE BSBB ANY_TYPE-BB DEFINE_OPCODE BSBW ANY_TYPE-BW DEFINE_OPCODE BVC ANY_TYPE-BB DEFINE_OPCODE BVS ANY_TYPE-BB DEFINE_OPCODE CALLG CONSTANT-RL ANY_TYPE-BB DEFINE_OPCODE CALLS LONG-RL ANY_TYPE-BB DEFINE_OPCODE CASEB BYTE-RB BYTE-RB BYTE-RB DEFINE_OPCODE CASEL LONG-RL LONG-RL LONG-RL DEFINE_OPCODE CASEW WORD-RW WORD-RW WORD-RW DEFINE_OPCODE CHME (WORD,CONSTANT)-RW DEFINE_OPCODE CHMK (WORD,CONSTANT)-RW DEFINE_OPCODE CHMS (WORD,CONSTANT)-RW DEFINE_OPCODE CHMU (WORD,CONSTANT)-RW DEFINE_OPCODE CLRB (BYTE,TEXT)-WB !DEFINE_OPCODE CLRD DFLOAT-WD !DEFINE_OPCODE CLRF FLOAT-WF !DEFINE_OPCODE CLRG GFLOAT-WG !DEFINE_OPCODE CLRH HFLOAT-WH DEFINE_OPCODE CLRL (LONG,ADDR,PTR_L)-WL DEFINE_OPCODE CLRO OCTA-WO DEFINE_OPCODE CLRQ (QUAD,PTR_Q)-WQ DEFINE_OPCODE CLRW WORD-WW DEFINE_OPCODE CMPB (BYTE,TEXT)-RB (BYTE,TEXT)-RB DEFINE_OPCODE CMPC WORD-RW ANY_TYPE-RB ANY_TYPE-RB DEFINE_OPCODE CMPC3 WORD-RW ANY_TYPE-RB ANY_TYPE-RB DEFINE_OPCODE CMPC5 WORD-RW ANY_TYPE-RB BYTE-RB WORD-RW ANY_TYPE-RB !DEFINE_OPCODE CMPD DFLOAT-RD DFLOAT-RD !DEFINE_OPCODE CMPF FLOAT-RF FLOAT-RF !DEFINE_OPCODE CMPG GFLOAT-RG GFLOAT-RG !DEFINE_OPCODE CMPH HFLOAT-RH HFLOAT-RH DEFINE_OPCODE CMPL (LONG,ADDR,PTR_L)-RL (LONG,ADDR,PTR_L)-RL DEFINE_OPCODE CMPP WORD-RW PACKED-RB PACKED-RB DEFINE_OPCODE CMPP3 WORD-RW PACKED-RB PACKED-RB DEFINE_OPCODE CMPP4 WORD-RW PACKED-RB WORD-RW PACKED-RB DEFINE_OPCODE CMPV VIELD-RL SIZE-RB ANY_TYPE-RB LONG-RL DEFINE_OPCODE CMPW WORD-RW WORD-RW DEFINE_OPCODE CMPZV VIELD-RL SIZE-RB ANY_TYPE-RB LONG-RL DEFINE_OPCODE CRC ANY_TYPE-RB LONG-RL WORD-RW ANY_TYPE-RB !DEFINE_OPCODE CVTBD BYTE-RB DFLOAT-WD !DEFINE_OPCODE CVTBF BYTE-RB FLOAT-WF !DEFINE_OPCODE CVTBG BYTE-RB GFLOAT-WG !DEFINE_OPCODE CVTBH BYTE-RB HFLOAT-WH DEFINE_OPCODE CVTBL BYTE-RB LONG-WL DEFINE_OPCODE CVTBW BYTE-RB WORD-WW !DEFINE_OPCODE CVTDB DFLOAT-RD BYTE-WB !DEFINE_OPCODE CVTDF DFLOAT-RD FLOAT-WF !DEFINE_OPCODE CVTDH DFLOAT-RD HFLOAT-WH !DEFINE_OPCODE CVTDL DFLOAT-RD LONG-WL !DEFINE_OPCODE CVTDW DFLOAT-RD WORD-WW !DEFINE_OPCODE CVTFB FLOAT-RF BYTE-WB !DEFINE_OPCODE CVTFD FLOAT-RF DFLOAT-WD !DEFINE_OPCODE CVTFG FLOAT-RF GFLOAT-WG !DEFINE_OPCODE CVTFH FLOAT-RF HFLOAT-WH !DEFINE_OPCODE CVTFL FLOAT-RF LONG-WL !DEFINE_OPCODE CVTFW FLOAT-RF WORD-WW !DEFINE_OPCODE CVTGB GFLOAT-RG BYTE-WB !DEFINE_OPCODE CVTGF GFLOAT-RG FLOAT-WF !DEFINE_OPCODE CVTGH GFLOAT-RG HFLOAT-WH !DEFINE_OPCODE CVTGL GFLOAT-RG LONG-WL !DEFINE_OPCODE CVTGW GFLOAT-RG WORD-WW !DEFINE_OPCODE CVTHB HFLOAT-RG BYTE-WB !DEFINE_OPCODE CVTHD HFLOAT-RG DFLOAT-WD !DEFINE_OPCODE CVTHF HFLOAT-RG FLOAT-WF !DEFINE_OPCODE CVTHG HFLOAT-RG GFLOAT-WG !DEFINE_OPCODE CVTHL HFLOAT-RG LONG-WL !DEFINE_OPCODE CVTHW HFLOAT-RG WORD-WW DEFINE_OPCODE CVTLB LONG-RL BYTE-WB !DEFINE_OPCODE CVTLD LONG-RL DFLOAT-WD !DEFINE_OPCODE CVTLF LONG-RL FLOAT-WF !DEFINE_OPCODE CVTLG LONG-RL GFLOAT-WG !DEFINE_OPCODE CVTLH LONG-RL HFLOAT-WH DEFINE_OPCODE CVTLP LONG-RL WORD-RW PACKED-WB DEFINE_OPCODE CVTLW LONG-RL WORD-WW DEFINE_OPCODE CVTPL WORD-RW PACKED-RB LONG-WL DEFINE_OPCODE CVTPS WORD-RW PACKED-RB WORD-RW ANY_TYPE-WB DEFINE_OPCODE CVTPT WORD-RW PACKED-RB ANY_TYPE-RB WORD-RW ANY_TYPE-WB !DEFINE_OPCODE CVTRDL DFLOAT-RD LONG-WL !DEFINE_OPCODE CVTRFL FLOAT-RF LONG-WL !DEFINE_OPCODE CVTRGL GFLOAT-RG LONG-WL !DEFINE_OPCODE CVTRHL HFLOAT-RH LONG-WL DEFINE_OPCODE CVTSP WORD-RW ANY_TYPE-RB WORD-RW PACKED-WB DEFINE_OPCODE CVTTP WORD-RW ANY_TYPE-RB ANY_TYPE-RB WORD-RW PACKED-WB DEFINE_OPCODE CVTWB WORD-RW BYTE-WB !DEFINE_OPCODE CVTWD WORD-RW DFLOAT-WD !DEFINE_OPCODE CVTWF WORD-RW FLOAT-WF !DEFINE_OPCODE CVTWG WORD-RW GFLOAT-WG !DEFINE_OPCODE CVTWH WORD-RW HFLOAT-WH DEFINE_OPCODE CVTWL WORD-RW LONG-WL DEFINE_OPCODE DECB BYTE-MB DEFINE_OPCODE DECL LONG-ML DEFINE_OPCODE DECW WORD-MW DEFINE_OPCODE DIVB BYTE-RB BYTE-MB DEFINE_OPCODE DIVB2 BYTE-RB BYTE-MB DEFINE_OPCODE DIVB3 BYTE-RB BYTE-RB BYTE-WB !DEFINE_OPCODE DIVD DFLOAT-RD DFLOAT-MD !DEFINE_OPCODE DIVD2 DFLOAT-RD DFLOAT-MD !DEFINE_OPCODE DIVD3 DFLOAT-RD DFLOAT-RD DFLOAT-WD !DEFINE_OPCODE DIVF FLOAT-RF FLOAT-MF !DEFINE_OPCODE DIVF2 FLOAT-RF FLOAT-MF !DEFINE_OPCODE DIVF3 FLOAT-RF FLOAT-RF FLOAT-WF !DEFINE_OPCODE DIVG GFLOAT-RG GFLOAT-MG !DEFINE_OPCODE DIVG2 GFLOAT-RG GFLOAT-MG !DEFINE_OPCODE DIVG3 GFLOAT-RG GFLOAT-RG GFLOAT-WG !DEFINE_OPCODE DIVH HFLOAT-RH HFLOAT-MH !DEFINE_OPCODE DIVH2 HFLOAT-RH HFLOAT-MH !DEFINE_OPCODE DIVH3 HFLOAT-RH HFLOAT-RH HFLOAT-WH DEFINE_OPCODE DIVL LONG-RL LONG-ML DEFINE_OPCODE DIVL2 LONG-RL LONG-ML DEFINE_OPCODE DIVL3 LONG-RL LONG-RL LONG-WL DEFINE_OPCODE DIVP WORD-RW PACKED-RB WORD-RW PACKED-RB WORD-RW PACKED-WB DEFINE_OPCODE DIVW WORD-RW WORD-MW DEFINE_OPCODE DIVW2 WORD-RW WORD-MW DEFINE_OPCODE DIVW3 WORD-RW WORD-RW WORD-WW DEFINE_OPCODE EDITPC WORD-RW ANY_TYPE-RB ANY_TYPE-RB ANY_TYPE-WB DEFINE_OPCODE EDIV LONG-RL QUAD-RQ LONG-WL LONG-WL !DEFINE_OPCODE EMODD DFLOAT-RD BYTE-RB DFLOAT-RD LONG-WL DFLOAT-WD !DEFINE_OPCODE EMODF FLOAT-RF BYTE-RB FLOAT-RF LONG-WL FLOAT-WF !DEFINE_OPCODE EMODG GFLOAT-RG WORD-RW GFLOAT-RG LONG-WL GFLOAT-WG !DEFINE_OPCODE EMODH HFLOAT-RH WORD-RW HFLOAT-RH LONG-WL HFLOAT-WH DEFINE_OPCODE EMUL LONG-RL LONG-RL LONG-RL QUAD-WQ DEFINE_OPCODE EXTV VIELD-RL SIZE-RB ANY_TYPE-RB LONG-WL DEFINE_OPCODE EXTZV VIELD-RL SIZE-RB ANY_TYPE-RB LONG-WL DEFINE_OPCODE FFC VIELD-RL SIZE-RB ANY_TYPE-RB LONG-WL DEFINE_OPCODE FFS VIELD-RL SIZE-RB ANY_TYPE-RB LONG-WL !DEFINE_OPCODE HALT DEFINE_OPCODE INCB BYTE-WB DEFINE_OPCODE INCL LONG-WL DEFINE_OPCODE INCW WORD-WW DEFINE_OPCODE INDEX LONG-RL LONG-RL LONG-RL LONG-RL LONG-RL LONG-WL DEFINE_OPCODE INSQHI (QUAD,LONG)-WB (QUAD,LONG)-WB DEFINE_OPCODE INSQTI (QUAD,LONG)-WB (QUAD,LONG)-WB DEFINE_OPCODE INSQUE (QUAD,LONG)-WB (QUAD,LONG)-WB DEFINE_OPCODE INSV ANY_TYPE-RL VIELD-RL SIZE-RB ANY_TYPE-WB DEFINE_OPCODE JMP ANY_TYPE-BB DEFINE_OPCODE JSB ANY_TYPE-BB !DEFINE_OPCODE LDPCTX DEFINE_OPCODE LOCC BYTE-RB WORD-RW ANY_TYPE-RB DEFINE_OPCODE MATCHC WORD-RW ANY_TYPE-RB WORD-RW ANY_TYPE-RB DEFINE_OPCODE MCOMB BYTE-RB BYTE-WB DEFINE_OPCODE MCOML LONG-RL LONG-WL DEFINE_OPCODE MCOMW WORD-RW WORD-WW DEFINE_OPCODE MFPR CONSTANT-RL (CONSTANT,LONG)-WL DEFINE_OPCODE MNEGB BYTE-RB BYTE-WB !DEFINE_OPCODE MNEGD DFLOAT-RD DFLOAT-WD !DEFINE_OPCODE MNEGF FLOAT-RF FLOAT-WF !DEFINE_OPCODE MNEGG GFLOAT-RG GFLOAT-WG !DEFINE_OPCODE MNEGH HFLOAT-RH HFLOAT-WH DEFINE_OPCODE MNEGL LONG-RL LONG-WL DEFINE_OPCODE MNEGW WORD-RW WORD-WW DEFINE_OPCODE MOVAB ANY_TYPE-RB (LONG,ADDR,PTR_L)-WL !DEFINE_OPCODE MOVAD DFLOAT-RD LONG-WL !DEFINE_OPCODE MOVAF FLOAT-RF LONG-WL !DEFINE_OPCODE MOVAG GFLOAT-RG LONG-WL !DEFINE_OPCODE MOVAH HFLOAT-RH LONG-WL DEFINE_OPCODE MOVAL ANY_TYPE-RL (LONG,ADDR,PTR_L)-WL DEFINE_OPCODE MOVAO ANY_TYPE-RO (LONG,ADDR,PTR_L)-WL DEFINE_OPCODE MOVAQ ANY_TYPE-RQ (LONG,ADDR,PTR_L)-WL DEFINE_OPCODE MOVAW ANY_TYPE-RW (LONG,ADDR,PTR_L)-WL DEFINE_OPCODE MOVB (BYTE,TEXT)-RB (BYTE,TEXT)-WB DEFINE_OPCODE MOVC WORD-RW ANY_TYPE-RB ANY_TYPE-WB DEFINE_OPCODE MOVC3 WORD-RW ANY_TYPE-RB ANY_TYPE-WB DEFINE_OPCODE MOVC5 WORD-RW ANY_TYPE-RB BYTE-RB WORD-RW ANY_TYPE-WB !DEFINE_OPCODE MOVD DFLOAT-RD DFLOAT-WD !DEFINE_OPCODE MOVF FLOAT-RF FLOAT-WF !DEFINE_OPCODE MOVG GFLOAT-RG GFLOAT-WG !DEFINE_OPCODE MOVH HFLOAT-RH HFLOAT-WH DEFINE_OPCODE MOVL (LONG,ADDR,PTR_L)-RL (LONG,ADDR,PTR_L)-WL DEFINE_OPCODE MOVO OCTA-RO OCTA-WO DEFINE_OPCODE MOVP WORD-RW PACKED-RB PACKED-WB DEFINE_OPCODE MOVPSL LONG-WL DEFINE_OPCODE MOVQ (QUAD,PTR_Q)-RQ (QUAD,PTR_Q)-WQ DEFINE_OPCODE MOVTC WORD-RW ANY_TYPE-RB BYTE-RB ANY_TYPE-RB WORD-RW ANY_TYPE-WB DEFINE_OPCODE MOVTUC WORD-RW ANY_TYPE-RB BYTE-RB ANY_TYPE-RB WORD-RW ANY_TYPE-WB DEFINE_OPCODE MOVW WORD-RW WORD-WW DEFINE_OPCODE MOVZBL (BYTE,TEXT)-RB LONG-WL DEFINE_OPCODE MOVZBW (BYTE,TEXT)-RB WORD-WW DEFINE_OPCODE MOVZWL WORD-RW LONG-WL DEFINE_OPCODE MTPR (CONSTANT,LONG,MASK)-RL CONSTANT-RL DEFINE_OPCODE MULB BYTE-RB BYTE-MB DEFINE_OPCODE MULB2 BYTE-RB BYTE-MB DEFINE_OPCODE MULB3 BYTE-RB BYTE-RB BYTE-WB !DEFINE_OPCODE MULD DFLOAT-RD DFLOAT-MD !DEFINE_OPCODE MULD2 DFLOAT-RD DFLOAT-MD !DEFINE_OPCODE MULD3 DFLOAT-RD DFLOAT-RD DFLOAT-WD !DEFINE_OPCODE MULF FLOAT-RF FLOAT-MF !DEFINE_OPCODE MULF2 FLOAT-RF FLOAT-MF !DEFINE_OPCODE MULF3 FLOAT-RF FLOAT-RF FLOAT-WF !DEFINE_OPCODE MULG GFLOAT-RG GFLOAT-MG !DEFINE_OPCODE MULG2 GFLOAT-RG GFLOAT-MG !DEFINE_OPCODE MULG3 GFLOAT-RG GFLOAT-RG GFLOAT-WG !DEFINE_OPCODE MULH HFLOAT-RH HFLOAT-MH !DEFINE_OPCODE MULH2 HFLOAT-RH HFLOAT-MH !DEFINE_OPCODE MULH3 HFLOAT-RH HFLOAT-RH HFLOAT-WH DEFINE_OPCODE MULL LONG-RL LONG-ML DEFINE_OPCODE MULL2 LONG-RL LONG-ML DEFINE_OPCODE MULL3 LONG-RL LONG-RL LONG-WL DEFINE_OPCODE MULP WORD-RW PACKED-RB WORD-RW PACKED-RB WORD-RW PACKED-WB DEFINE_OPCODE MULW WORD-RW WORD-MW DEFINE_OPCODE MULW2 WORD-RW WORD-MW DEFINE_OPCODE MULW3 WORD-RW WORD-RW WORD-WW !DEFINE_OPCODE NOP !DEFINE_OPCODE POLYD DFLOAT-RD WORD-RW ANY_TYPE-RB !DEFINE_OPCODE POLYF FLOAT-RF WORD-RW ANY_TYPE-RB !DEFINE_OPCODE POLYG GFLOAT-RG WORD-RW ANY_TYPE-RB !DEFINE_OPCODE POLYH HFLOAT-RH WORD-RW ANY_TYPE-RB DEFINE_OPCODE POPL LONG-WL DEFINE_OPCODE POPR REG_MASK-RW DEFINE_OPCODE PROBER BYTE-RB (WORD,SIZE,CONSTANT)-RW ANY_TYPE-RB DEFINE_OPCODE PROBEW BYTE-RB (WORD,SIZE,CONSTANT)-RW ANY_TYPE-RB DEFINE_OPCODE PUSHAB ANY_TYPE-RB !DEFINE_OPCODE PUSHAD DFLOAT-RD !DEFINE_OPCODE PUSHAF FLOAT-RF !DEFINE_OPCODE PUSHAG GFLOAT-RG !DEFINE_OPCODE PUSHAH HFLOAT-RH DEFINE_OPCODE PUSHAL ANY_TYPE-RL DEFINE_OPCODE PUSHAO ANY_TYPE-RO DEFINE_OPCODE PUSHAQ ANY_TYPE-RQ DEFINE_OPCODE PUSHAW ANY_TYPE-RW DEFINE_OPCODE PUSHL (LONG,ADDR,PTR_L)-RL DEFINE_OPCODE PUSHR REG_MASK-RW !DEFINE_OPCODE REI DEFINE_OPCODE REMQHI (QUAD,LONG)-WB LONG-WL DEFINE_OPCODE REMQTI (QUAD,LONG)-WB LONG-WL DEFINE_OPCODE REMQUE (QUAD,LONG)-WB LONG-WL !DEFINE_OPCODE RET DEFINE_OPCODE ROTL (SIZE,VIELD)-RB LONG-RL LONG-WL !DEFINE_OPCODE RSB DEFINE_OPCODE SBWC LONG-RL LONG-ML DEFINE_OPCODE SCANC WORD-RW ANY_TYPE-RB ANY_TYPE-RB BYTE-RB DEFINE_OPCODE SKPC BYTE-RB WORD-RW ANY_TYPE-RB DEFINE_OPCODE SOBGEQ LONG-ML ANY_TYPE-BB DEFINE_OPCODE SOBGTR LONG-ML ANY_TYPE-BB DEFINE_OPCODE SPANC WORD-RW ANY_TYPE-RB ANY_TYPE-RB BYTE-RB DEFINE_OPCODE SUBB BYTE-RB BYTE-MB DEFINE_OPCODE SUBB2 BYTE-RB BYTE-MB DEFINE_OPCODE SUBB3 BYTE-RB BYTE-RB BYTE-WB !DEFINE_OPCODE SUBD DFLOAT-RD DFLOAT-MD !DEFINE_OPCODE SUBD2 DFLOAT-RD DFLOAT-MD !DEFINE_OPCODE SUBD3 DFLOAT-RD DFLOAT-RD DFLOAT-WD !DEFINE_OPCODE SUBF FLOAT-RF FLOAT-MF !DEFINE_OPCODE SUBF2 FLOAT-RF FLOAT-MF !DEFINE_OPCODE SUBF3 FLOAT-RF FLOAT-RF FLOAT-WF !DEFINE_OPCODE SUBG GFLOAT-RG GFLOAT-MG !DEFINE_OPCODE SUBG2 GFLOAT-RG GFLOAT-MG !DEFINE_OPCODE SUBG3 GFLOAT-RG GFLOAT-RG GFLOAT-WG !DEFINE_OPCODE SUBH HFLOAT-RH HFLOAT-MH !DEFINE_OPCODE SUBH2 HFLOAT-RH HFLOAT-MH !DEFINE_OPCODE SUBH3 HFLOAT-RH HFLOAT-RH HFLOAT-WH DEFINE_OPCODE SUBL LONG-RL LONG-ML DEFINE_OPCODE SUBL2 LONG-RL LONG-ML DEFINE_OPCODE SUBL3 LONG-RL LONG-RL LONG-WL DEFINE_OPCODE SUBP WORD-RW PACKED-RB WORD-RW PACKED-MB DEFINE_OPCODE SUBP4 WORD-RW PACKED-RB WORD-RW PACKED-MB DEFINE_OPCODE SUBP6 WORD-RW PACKED-RB WORD-RW PACKED-RB WORD-RW PACKED-WB DEFINE_OPCODE SUBW WORD-RW WORD-MW DEFINE_OPCODE SUBW2 WORD-RW WORD-MW DEFINE_OPCODE SUBW3 WORD-RW WORD-RW WORD-WW !DEFINE_OPCODE SVPCTX DEFINE_OPCODE TSTB (BYTE,TEXT)-RB !DEFINE_OPCODE TSTD DFLOAT-RD !DEFINE_OPCODE TSTF FLOAT-RF !DEFINE_OPCODE TSTG GFLOAT-RG !DEFINE_OPCODE TSTH HFLOAT-RH DEFINE_OPCODE TSTL (LONG,ADDR,PTR_L)-RL DEFINE_OPCODE TSTW WORD-RW !DEFINE_OPCODE XFC DEFINE_OPCODE XORB (BYTE,MASK,CONSTANT)-RB BYTE-MB DEFINE_OPCODE XORB2 (BYTE,MASK,CONSTANT)-RB BYTE-MB DEFINE_OPCODE XORB3 (BYTE,MASK,CONSTANT)-RB BYTE-RB BYTE-WB DEFINE_OPCODE XORL (LONG,MASK,CONSTANT)-RL LONG-ML DEFINE_OPCODE XORL2 (LONG,MASK,CONSTANT)-RL LONG-ML DEFINE_OPCODE XORL3 (LONG,MASK,CONSTANT)-RL LONG-RL LONG-WL DEFINE_OPCODE XORW (WORD,MASK,CONSTANT)-RW WORD-MW DEFINE_OPCODE XORW2 (WORD,MASK,CONSTANT)-RW WORD-MW DEFINE_OPCODE XORW3 (WORD,MASK,CONSTANT)-RW WORD-RW WORD-WW ! DEFINE_OPCODE EVAX_LDAQ QUAD-WQ (QUAD,PTR_Q)-RQ DEFINE_OPCODE EVAX_LDQ QUAD-WQ (QUAD,PTR_Q)-RQ DEFINE_OPCODE EVAX_LDQL QUAD-WQ (QUAD,PTR_Q)-RQ DEFINE_OPCODE EVAX_LDQU QUAD-WQ (QUAD,PTR_Q)-RQ DEFINE_OPCODE EVAX_STQ QUAD-RQ (QUAD,PTR_Q)-WQ DEFINE_OPCODE EVAX_STQC QUAD-RQ (QUAD,PTR_Q)-WQ DEFINE_OPCODE EVAX_STQU QUAD-RQ (QUAD,PTR_Q)-WQ DEFINE_OPCODE EVAX_ADDQ QUAD-RQ (CONSTANT,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_SUBQ QUAD-RQ (CONSTANT,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_MULQ QUAD-RQ (CONSTANT,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_UMULH QUAD-RQ (CONSTANT,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_AND QUAD-RQ (CONSTANT,MASK,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_OR QUAD-RQ (CONSTANT,MASK,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_XOR QUAD-RQ (CONSTANT,MASK,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_BIC QUAD-RQ (CONSTANT,MASK,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_ORNOT QUAD-RQ (CONSTANT,MASK,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_EQV QUAD-RQ (CONSTANT,MASK,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_SLL QUAD-RQ (VIELD,SIZE,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_SRL QUAD-RQ (VIELD,SIZE,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_SRA QUAD-RQ (VIELD,SIZE,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_EXTBL QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_EXTWL QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_EXTLL QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_EXTQL QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_EXTBH QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_EXTWH QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_EXTLH QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_EXTQH QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_INSBL QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_INSWL QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_INSLL QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_INSQL QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_INSBH QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_INSWH QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_INSLH QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_INSQH QUAD-RQ CONSTANT-RQ QUAD-WQ DEFINE_OPCODE EVAX_CMPEQ QUAD-RQ (CONSTANT,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_CMPLT QUAD-RQ (CONSTANT,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_CMPLE QUAD-RQ (CONSTANT,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_CMPULT QUAD-RQ (CONSTANT,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_CMPULE QUAD-RQ (CONSTANT,QUAD)-RQ QUAD-WQ DEFINE_OPCODE EVAX_BEQ QUAD-RQ ANY_TYPE DEFINE_OPCODE EVAX_BNE QUAD-RQ ANY_TYPE ! --- ! ! Define some facility specific macros to check. You specify the macro name and the type for each of it's arguments. ! Multiple data types acceptable for a given argument can be surrounded by parens. Macro name can only contain ! alpha-numerics, $ or _ characters. ! ! SYNTAX: ! ! DEFINE_OPCODE macro_name [argument1_type,argument2_type,...] where ! argumentN_type = data_type_name or ! ( data_type_name1,data_type_name2,... ) ! DEFINE_OPCODE $REMQHI (QUAD,LONG)-WB LONG-WL ! --- ! DEFINE_EXCEPTION ! Define some facility specific field names to exclude from type-checking. These field names don't obey conventions and generate ! excessive errors. You merely specify a character string(SYMBOL_NAME) and no argument containing this string ever reports an error. ! ! SYNTAX: ! ! DEFINE_EXCEPTION [symbol_name,...] ! ! EXAMPLE: ! DEFINE_EXCEPTION CTL$GQ_RMS_RUREC_LKSB ! --- ! DEFINE_TYPE_MODE ! Define the addressing mode(s) that MUST or MUST NOT be used for specific data types. Addressing mode names are builtin and ! placing an uparrow character before the address mode name means the address mode must not be used with this data type. I will ! add recognition of other addressing modes if there are good uses for them. The following addr_mode_names are defined: ! ! LITERAL - an argument beginning with the string #,S^#,I^# ! ! SYNTAX: ! ! DEFINE_TYPE_MODE type_name [arg_mode1,arg_mode2,...] where ! arg_mode = addr_mode_name or ! ^addr_mode_name ! DEFINE_TYPE_MODE CONSTANT LITERAL DEFINE_TYPE_MODE MASK LITERAL DEFINE_TYPE_MODE SIZE LITERAL DEFINE_TYPE_MODE VIELD LITERAL DEFINE_TYPE_MODE ANY_TYPE ^LITERAL