! ! OPCODES AND CONSTINTEGER FOR PERQ IMP ! P REFS ARE TO PERQ Q-CODE MANAUAL ! %CONSTINTEGER LDC0=0; ! P21 LOAD WORD CONSTANTS 0-15 %CONSTINTEGER LDCN=22; ! P21 LOAD CONSTANT NIL %CONSTINTEGER LDCMO=16; ! P21 LOAD CONSTANT -1 %CONSTINTEGER LDCB=17; ! P21 LOAD CONSTANT (SIGNED)BYTE %CONSTINTEGER LDCW=18; ! P21 LOAD CONSTANT (SIGNED)WORD %CONSTINTEGER LDLDB=80; ! ADDITION LOAD LOCAL DOUBLE -BYTE OFFSET %CONSTINTEGER LDLDW=81; ! ADDITION LOAD LOCAL DOUBLE -WORD OFFSET %CONSTINTEGER LDODB=82; ! ADDITION LOAD LOCAL DOUBLE -BYTE OFFSET %CONSTINTEGER LDODW=83; ! ADDITION LOAD LOCAL DOUBLE -WORD OFFSET %CONSTINTEGER STLDB=84; ! ADDITION STORE LOCAL DOUBLE -BYTE OFFSET %CONSTINTEGER STLDW=85; ! ADDITION STORE LOCAL DOUBLE -WORD OFFSET %CONSTINTEGER STODB=86; ! ADDITION STORE LOCAL DOUBLE -BYTE OFFSET %CONSTINTEGER STODW=87; ! ADDITION STORE LOCAL DOUBLE -WORD OFFSET %CONSTINTEGER LDL0=109; ! P22 LOAD LOCAL WORD(0-15) %CONSTINTEGER LDLB=107; ! P22 LOAD LOCAL UNSIGNED BYTE OFFSET %CONSTINTEGER LDLW=108; ! P22 LOAD LOCAL WORD OFFSET %CONSTINTEGER LLAB=125; ! P22 LOAD LOCAL ADDRESS UBYTE OFFSET %CONSTINTEGER LLAW=126; ! P22 LOAD LOCAL ADDRESS WORD OFFSET %CONSTINTEGER STL0=129; ! P22 STORE LOCAL WORD (0-7 ONLY!) %CONSTINTEGER STLB=127; ! P22 STORE LOCAL WORD UBYTE OFFSET %CONSTINTEGER STLW=128; ! P22 STORE LOCAL WORD WORD OFFSET %CONSTINTEGER LDO0=139; ! P23 SHORT LOAD OWN WORD %CONSTINTEGER LDOB=137; ! P23 LOAD OWN WORD UBYTE OFFSET %CONSTINTEGER LDOW=138; ! P23 LOAD OWN WORD WORD OFFSET %CONSTINTEGER LOAB=155; ! P23 LOAD OWN ADDRESS UBYTE OFFSET %CONSTINTEGER LOAW=156; ! P23 LOAD OWN ADDRESS WORD OFFSET %CONSTINTEGER STO0=159; ! P23 STORE SHORT OWN WORD(0-7!!) %CONSTINTEGER STOB=157; ! P23 STORE OWN UBYTE OFFSET %CONSTINTEGER STOW=158; ! P23 STORE OWN WORD WORD OFFSET %CONSTINTEGER LDGB=192; ! P24 LOAD GLOBAL BYTE OFFSET %CONSTINTEGER LDGW=193; ! P24 LOAD GLOBAL WORD OFFSET %CONSTINTEGER LGAB=194; ! P24 LOAD GLOBAL ADDR BYTE OFFSET %CONSTINTEGER LGAW=195; ! P24 LOAD GLOBAL ADDR WORD OFFSET %CONSTINTEGER LGAWW=181; ! P24 SPECIAL LOAD GLOBAL ADDR %CONSTINTEGER STGB=196; ! P24 STORE GLOBAL BYTE OFFSET %CONSTINTEGER STGW=197; ! P24 STORE GLOBAL WORD OFFSET %CONSTINTEGER LDIB=215; ! P25 LOAD INTERMEDIATE-UBYTE OFFSET %CONSTINTEGER LDIW=216; ! P25 LOAD INTERMEDIATE WORD OFFSET %CONSTINTEGER LIAB=217; ! P25 LOAD INTERMEDIATE ADDR-UBYTE OFFSET %CONSTINTEGER LIAW=218; ! P25 LOAD INTERMEDIATE ADDR WORD OFFSET %CONSTINTEGER STIB=219; ! P25 STORE INTERMEDIATE-UBYTE OFFSET %CONSTINTEGER STIW=220; ! P25 STORE INTERMEDIATE WORD OFFSET %CONSTINTEGER STIND=21; ! P26 STORE INDIRECT ETOS TO ETOS-1 %CONSTINTEGER LDIND=173; ! P26 LOAD INDIRECT ETOS %CONSTINTEGER LDDC=237; ! P27 LAOD DOUBLE CONSTANT %CONSTINTEGER LDDW=239; ! P27 LOAD DOUBLE WORD %CONSTINTEGER STDW=183; ! P27 STORE DOUBLE WORD %CONSTINTEGER LDMC=236; ! P27 LOAD MULTIPLE WORD CONSTANT (TO MSTACK) %CONSTINTEGER LDMW=238; ! P27 LOAD MULTIPLE WORDS (TO MSTACK) %CONSTINTEGER STMW=182; ! P27 STORE MULTIPLE WORDS (FROM MSTACK) ! ! ARRAY STRING AND RECORD ACCESSING SECTION ! %CONSTINTEGER LDB=23; ! P28 LOAD BYTE (VIA POINTER) %CONSTINTEGER STB=24; ! P28 STORE BYTE (VIA POINTER) %CONSTINTEGER MVBB=167; ! P28 MOVE BYTES (VIA 2 POINTERS&FIXED LENGTH) %CONSTINTEGER MVBW=168; ! P28 MOVE BYTES (VIA 2 POINTERS&VARAIBLE LENGTH) %CONSTINTEGER LSA=19; ! P29 LOAD STRING ADDRESS(OF CONSTANT) %CONSTINTEGER SAS=184; ! P29 STRING ASSIGN %CONSTINTEGER LDCH=25; ! P29 LOAD CHARACTER (FROM STRING) %CONSTINTEGER STCH=28; ! P29 STORE CHARACTER (INTO STRING) %CONSTINTEGER MOVB=169; ! P30 MOVE WORDS BYTE COUNTER %CONSTINTEGER MOVW=170; ! P30 MOVE WORDS WORD COUNTER %CONSTINTEGER SIND0=173; ! P30 SHORT INDEX&LOAD WORD(0-7) %CONSTINTEGER INDB=171; ! P30 STATIC INDEX&LOAD(UBYTE OFFSET) %CONSTINTEGER INDW=172; ! P30 STATIC INDEX&LOAD(WORD OFFSET) %CONSTINTEGER INCB=232; ! P30 INCREMENT POINTER(UBYTE INDEX) %CONSTINTEGER INCW=233; ! P30 INCREMENT POINTER(WORD INDEX) %CONSTINTEGER IXAB=221; ! P30 INDEX ARRAY UBYTE ARRAY SIZE %CONSTINTEGER IXAW=222; ! P30 INDEX ARRAY WORD ARRAY SIZE %CONSTINTEGER IXA1=223; ! P31 INDEX ARRAY SHORT ARRAY SIZE(1-4) %CONSTINTEGER IXP=214; ! P31 INDEXED PACKED ARRAY %CONSTINTEGER LDP=26; ! P31 LOAD PACKED ARRAY %CONSTINTEGER IXODW=245; ! ADDITION INDEX OWN ARRAY %CONSTINTEGER STP=27; ! P31 STORE PACKED ARRAY %CONSTINTEGER ROTSHI=20; ! P31 ROTATE OR SHIFT 16BIT FIELD ! ! 16 BIT ARITHMETIC ! %CONSTINTEGER LAND=30; ! P32 LOGICAL AND %CONSTINTEGER LOR=31; ! P32 LOGICAL OR %CONSTINTEGER LNOT=32; ! P32 LOGICAL NOT %CONSTINTEGER NEQBOOL=34; ! P32 DOES AN EXCLUSIVE OR ! %CONSTINTEGER ABI=71; ! P33 INTEGER ABS %CONSTINTEGER ADI=72; ! P33 INTEGER ADD %CONSTINTEGER NGI=73; ! P33 INTEGER UNARY NEGATE %CONSTINTEGER SBI=74; ! P33 INTEGER SUBTRACT %CONSTINTEGER MPI=75; ! P33 INTEGER MULTIPLY %CONSTINTEGER DVI=76; ! P33 INTEGER DIVIDE %CONSTINTEGER MODI=77; ! P33 INTEGER MODULO %CONSTINTEGER CHK=78; ! P33 CHECK SUBSCRIPT RANGE %CONSTINTEGER CHKD=79; ! ADDITION CHECK 32BIT RANGE %CONSTINTEGER EQUI=39; ! P33 INTEGER = %CONSTINTEGER NEQI=40; ! P33 INTEGER # %CONSTINTEGER LEQI=41; ! P33 INTEGER <= %CONSTINTEGER LESI=42; ! P33 INTEGER < %CONSTINTEGER GEQI=43; ! P33 INTEGER >= %CONSTINTEGER GTRI=44; ! P33 INTEGER > ! ! 32BIT REAL OPERATIONS ALL ON TOP 4 CELLS OF ETOS ! %CONSTINTEGER ROPS=250; ! ESCAPE CODE FOR REALS ! ! OPERATIONS ON SETS ! %CONSTINTEGER ADJ=185; ! P35 ADJUST SET SIZE %CONSTINTEGER SGS=66; ! P35 BUILD SINGLETON SET %CONSTINTEGER SRS=68; ! P35 BUILD SUBRANGE SET %CONSTINTEGER INN=88; ! P35 SET MEMBERSHIP %CONSTINTEGER UNI=89; ! P35 SET UNION %CONSTINTEGER SETINT=90; ! P35 SET INTERSECTION(RENAMED) %CONSTINTEGER DIF=91; ! P35 SET DIFFERENCE %CONSTINTEGER EQUPOWR=63; ! P35 SET = %CONSTINTEGER NEQPOWR=64; ! P35 SET # %CONSTINTEGER LEQPOWR=65; ! P36 SET <= (SUBSET OF) %CONSTINTEGER GEQPOWR=67; ! P36 >= SET >= (SUPERSET OF) ! ! STRING ARRAY AND RECORD COMPARISONS ! %CONSTINTEGER EQUSTR=51; ! P37 STRING COMPARISON = %CONSTINTEGER NEQSTR=52; ! P37 STRING COMPARISON # %CONSTINTEGER LEQSTR=53; ! P37 STRING COMPARISON <= %CONSTINTEGER LESSTR=54; ! P37 STRING COMPARISON < %CONSTINTEGER GEQSTR=55; ! P37 STRING COMPARISON >= %CONSTINTEGER GTRSTR=56; ! P37 STRING COMPARISON >= %CONSTINTEGER EQUBYT=57; ! P38 BYTE ARRAY COMPARISON = %CONSTINTEGER NEQBYT=58; ! P38 BYTE ARRAY COMPARISON # %CONSTINTEGER LEQBYT=59; ! P38 BYTE ARRAY COMPARISON <= %CONSTINTEGER LESBYT=60; ! P38 BYTE ARRAY COMPARISON < %CONSTINTEGER GEQBYT=61; ! P38 BYTE ARRAY COMPARISON >= %CONSTINTEGER GTRBYT=62; ! P38 BYTE ARRAY COMPARISON > %CONSTINTEGER EQUWORD=69; ! P39 MULTIWORD COMPARISON # %CONSTINTEGER NEQWORD=70; ! P39 MULTIWORD COMPARISON # %CONSTINTEGER LOPS=252; ! LONG OPERATIONS(32 BIT INTEGERS) ! ! JUMPS CALLS AND EXITS ETC ! %CONSTINTEGER JMPB=204; ! P41 UNCONDIONAL JUMP (BYTE OFFSET) %CONSTINTEGER JMPW=205; ! P41 UNCONDIONAL JUMP (WORD OFFSET) %CONSTINTEGER JFB=206; ! P41 FALSE JUMP (BYTE OFFSET) %CONSTINTEGER JFW=207; ! P41 FALSE JUMP (WORD OFFSET) %CONSTINTEGER JTB=208; ! P41 TRUE JUMP (BYTE OFFSET) %CONSTINTEGER JTW=209; ! P41 TRUE JUMP (WORD OFFSET) %CONSTINTEGER JEQB=210; ! P41 EQUAL JUMP (BYTE OFFSET) %CONSTINTEGER JEQW=211; ! P41 EQUAL JUMP (WORD OFFSET) %CONSTINTEGER JNEB=212; ! P41 NOT EQUAL JUMP (BYTE OFFSET) %CONSTINTEGER JNEW=213; ! P41 NOT EQUAL JUMP (WORD OFFSET) %CONSTINTEGER XJP=100; ! P41 CASE JUMP %CONSTINTEGER CALL=186; ! P43 CALL INTERNAL ROUTINE %CONSTINTEGER CALLXB=234; ! P43 CALL EXTERNAL ROUTINE(BYTE OFFSET) %CONSTINTEGER CALLXW=235; ! P43 CALL EXTERNAL ROUTINE(WORD OFFSET) %CONSTINTEGER LVRD=98; ! P43 LOAD VARIABLE ROUTINE DESCRIPTOR %CONSTINTEGER CALLV=187; ! P43 CALL VARIABLE ROUTINE DESCRIPTOR %CONSTINTEGER RETURN=200; ! P43 RETURN FROM ROUTINE %CONSTINTEGER JLK=198; ! ADDITION JUMP AND LINK %CONSTINTEGER JMS=199; ! JUMP ON MEMORY STACK(IE RETURN FROM JLK) ! ! ODDS & ENDS OF CONTROL INSTRUCTIONS ! %CONSTINTEGER NOOP=93; ! P45 NO OPERATION %CONSTINTEGER REPL=94; ! P45 REPLICATE ETOS %CONSTINTEGER REPL2=95; ! P45 REPLICATE ETOS & ETOS-1 %CONSTINTEGER MMS=96; ! P45 MOVE 16BITS TO MEMORY STACK %CONSTINTEGER MES=97; ! P45 MOVE 16BITS FROM MEMORY STACK %CONSTINTEGER MMS2=201; ! P45 MOVE 32 BITS TO MEMORY STACK %CONSTINTEGER MES2=202; ! P45 MOVE 32 BITS FROM MEMORY STACK %CONSTINTEGER RASTER=102; ! P45 RASTER OPERATION %CONSTINTEGER EXCH=230; ! P48 EXCHANGE TOS&TOS-1 %CONSTINTEGER EXCH2=231; ! P48 EXCHANGE TOS&TOS-1 WITH TOS-2&TOS-3 %CONSTINTEGER TLATE1=227; ! P48 TRANSLATE SEE DOCMTN %CONSTINTEGER TLATE2=228; ! P48 TRANSLATE SEE DOCMTN %CONSTINTEGER TLATE3=229; ! P48 TRANSLATE SEE DOCMTN %CONSTINTEGER STLATE=240; ! P48 TRANSLATE SEE DOCMTN %CONSTINTEGER PERMD=246; ! ADDITION SWAP DOUBLE&QUAD %CONSTINTEGER LSSN=99; ! P49 LOAD STACK SEGMENT NO %CONSTINTEGER LDTP=203; ! P49 LOAD TOP POINTER %CONSTINTEGER LDAP=244; ! P49 LOAD ACTIVATION POINTER %CONSTINTEGER ATPB=188; ! P49 ! ADD SIGNED BYTE TO TOP POINTER %CONSTINTEGER ATPW=189; ! P49 ADD ETOS TO TOP POINTER %CONSTINTEGER WCS=190; ! P49 WRITE CONTROL STORE %CONSTINTEGER JCS=191; ! P49 JUMP TO CONTROL STORE %CONSTINTEGER REFILL=255; ! P45 REFILL OP FILE %CONSTINTEGER INCDDS=251; ! P50 INCREMENT DIAGNOSTICS ! ! SUBCODE FOR THE LOPS AND ROPS ESCAPE OPCODES ! %CONSTINTEGER LOPSSHRTN=0; ! 32BITS TO 16 %CONSTINTEGER LOPSLNGTHN=1; ! 16 BITS TO 32 %CONSTINTEGER LOPSADD=2; ! 32 BIT ADD %CONSTINTEGER LOPSNEG=3; ! 32 BIT NEGATE %CONSTINTEGER LOPSSUB=4; ! 32 BIT SUBTRACT %CONSTINTEGER LOPSMULT=5; ! 32 BITMULTIPLY %CONSTINTEGER LOPSDIV=6; ! 32 BIT DIVIDE %CONSTINTEGER LOPSMOD=7; ! 32 BIT REMAINDER (NOT IMP MOD!) %CONSTINTEGER LOPSABS=8; ! 32 BIT MODULUS %CONSTINTEGER LOPSEQU=9; ! TEST 32 BIT EQUALS %CONSTINTEGER LOPSNEQ=10; ! TEST 32 BIT NOT EQUALS %CONSTINTEGER LOPSLEQ=11; ! TEST 32 BIT LESS THAN OR EQUALS %CONSTINTEGER LOPSLES=12; ! TEST 32 BIT LESS THAN %CONSTINTEGER LOPSGEQ=13; ! TEST 32 BIT GREATER THAN OR EQUALS %CONSTINTEGER LOPSGTR=14; ! TEST 32 BIT GREATER THAN %CONSTINTEGER LOPSSHIFT=15; ! SHIFT 32 BIT BY 16 BIT %CONSTINTEGER LOPSNOT=16; ! 32 BIT LOGICAL NOT %CONSTINTEGER LOPSAND=17; ! 32 BIT LOGICAL AND %CONSTINTEGER LOPSOR=18; ! 32 BI2 LOGICAL OR %CONSTINTEGER LOPSXOR=19; ! 32 BIT LOGICAL EXCLUSIVE OR %CONSTINTEGER ROPSTNC=0; ! TRUNCATE 32 BIT REAL TO 16 BIT INTEGER %CONSTINTEGER ROPSFLT=1; ! 16 BIT INTEGER TO 32 BIT REAL %CONSTINTEGER ROPSADD=2; ! 32 BIT REAL ADD %CONSTINTEGER ROPSNEG=3; ! 32 BIT REAL NEGATE %CONSTINTEGER ROPSSUB=4; ! 32 BIT REAL SUBTRACT %CONSTINTEGER ROPSMULT=5; ! 32 BIT REALMULTIPLY %CONSTINTEGER ROPSDIV=6; ! 32 BIT REAL DIVIDE %CONSTINTEGER ROPSRND=7; ! 32 BIT REAL TO NEAREST 16 BIT INTEGER %CONSTINTEGER ROPSABS=8; ! 32 BIT REAL MODULUS %CONSTINTEGER ROPSEQU=9; ! TEST 32 BIT REAL EQUALS %CONSTINTEGER ROPSNEQ=10; ! TEST 32 BIT REAL NOT EQUALS %CONSTINTEGER ROPSLEQ=11; ! TEST 32 BIT REAL LESS THAN OR EQUALS %CONSTINTEGER ROPSLES=12; ! TEST 32 BIT REAL LESS THAN %CONSTINTEGER ROPSGEQ=13; ! TEST 32 BIT REAL GREATER THAN OR EQUALS %CONSTINTEGER ROPSGTR=14; ! TEST 32 BIT REAL GREATER THAN %CONSTINTEGER ROPSDTNC=0+16; ! TRUNCATE 64 BIT REAL TO 32 BIT INTEGER %CONSTINTEGER ROPSDFLT=1+16; ! 32 BIT INTEGER TO 64 BIT REAL %CONSTINTEGER ROPSDADD=2+16; ! 64 BIT REAL ADD %CONSTINTEGER ROPSDNEG=3+16; ! 64 BIT REAL NEGATE %CONSTINTEGER ROPSDSUB=4+16; ! 64 BIT REAL SUBTRACT %CONSTINTEGER ROPSDMULT=5+16; ! 64 BIT REAL MULTIPLY %CONSTINTEGER ROPSDDIV=6+16; ! 64 BIT REAL DIVIDE %CONSTINTEGER ROPSDRND=7+16; ! 64 BIT REAL TO NEAREST 32 BIT INTEGER %CONSTINTEGER ROPSDABS=8+16; ! 64 BIT REAL MODULUS %CONSTINTEGER ROPSDEQU=9+16; ! TEST 64 BIT REAL EQUALS %CONSTINTEGER ROPSDNEQ=10+16; ! TEST 64 BIT REAL NOT EQUALS %CONSTINTEGER ROPSDLEQ=11+16; ! TEST 64 BIT REAL LESS THAN OR EQUALS %CONSTINTEGER ROPSDLES=12+16; ! TEST 64 BIT REAL LESS THAN %CONSTINTEGER ROPSDGEQ=13+16; ! TEST 64 BIT REAL GREATER THAN OR EQUALS %CONSTINTEGER ROPSDGTR=14+16; ! TEST 64 BIT REAL GREATER THAN %CONSTINTEGER ROPSXTNC=32; ! TRUNCATE 32 BIT REAL TO 32 BIT INTEGER %CONSTINTEGER ROPSXFLT=33; ! 32 BIT INTEGER TO 32 BIT REAL %CONSTINTEGER ROPSSHRTN=34; ! 64 BIT REAL SHORTENED TO 32 BITS %CONSTINTEGER ROPSLNGTHN=35; ! 32 BIT REAL LENGTHENED TO64 BIT REAL %CONSTINTEGER ROPSXRND=36; ! 32 BIT REAL ROUNDED TO NEAREST 32 BIT INTEGER %CONSTINTEGER ROPSLDQ=37; ! 64 BIT REAL LOAD %CONSTINTEGER ROPSSTQ=38; ! 64 BIT REAL STORE %CONSTINTEGER ROPSEXCH4=39; ! 64 BIT REAL EXCHANGE ! ! END OF PERQCODE1S !