ER[SLH]; *I = 36 TARGET[ILC]; %THIS FILE CONTAINS ALL THE SKIP, LOGIC, HALF-WORD, FULL-WORD, AND COMPARE INSTRUCTIONS.% %THE UMOVE INSTRUCTIONS USE USER MODE ONLY IF CFM=0. IN THAT CASE THEY SET ALL OF THE XCTN FLAGS AND CONTINUE THE MAIN LOOP (IF EFFECTIVE ADDRESS IS INDIRECT) OR ELSE RETURN (NO INDIRECTION). TIMING = MOVE TIMING + 3 (MOVE TIMING IS GIVEN BELOW) I = 2 % UMOVE: SETF[XCTN], MAPVA_P, Q_LAC, GOTO[RETN,H=1]; GOTO[INDLP]; DIS[100,UMOVE,RARG,PTOAC]; *UMOVE DIS[101,UMOVE,PTOAC,SPUNT]; *UMOVEI DIS[102,UMOVE,WREFQ,SPUNT]; *UMOVEM DIS[103,UMOVE,RMWARG,PTOS]; *UMOVES %MOVE INSTRUCTIONS TIMING: MOVE = M + R +3 MOVEI = M + 1 MOVEM = M + W + 1 MOVES = M + R + 3 + W % DI[200,RARG,PTOAC,SPUNT]; *MOVE DI[201,PTOAC,SPUNT,SPUNT]; *MOVEI DI[202,WREFQ,SPUNT,SPUNT]; *MOVEM DI[203,RMWARG,PTOS,SPUNT]; *MOVES DI[204,SRARG,PTOAC,SPUNT]; *MOVS DI[205,ESWAP,PTOAC,SPUNT]; *MOVSI DI[206,Q22H,WREFP,SPUNT]; *MOVSM DI[207,RMWQARG,Q22H,PTOS]; *MOVSS DI[210,RARG,MINP,SPUNT]; *MOVN DI[211,MINP,SPUNT,SPUNT]; *MOVNI DI[212,NEGQTOP,SPUNT,SPUNT]; *MOVNM DI[213,RMWARG,NEGPS,SPUNT]; *MOVNS DI[214,RARG,MAGPTOAC,SPUNT]; *MOVM DI[215,PTOAC,SPUNT,SPUNT]; *MOVMI (SAME AS MOVEI) DI[216,AQQ,MAGQTOP,SPUNT]; *MOVMM DI[217,RMWARG,MAGPTOS,SPUNT]; *MOVMS %TIMING = M + 3 + R + W I = 1 % EXCH: MDR_Q, LAC_P, WRESTART, GOTO[QTOMCHK]; DI[250,RMWARG,EXCH,SPUNT]; LMOVE: LAC_P, INCAC, P_MDRL, RETURN; LMOVEM: MDR_Q, INCAC; Q_LAC; MDRL_Q, RETURN; DI[105,RARG,LMOVE,PTOAC]; *LMOVE DI[106,LMOVEM,WTOP1,SPUNT]; *LMOVEM %HALF-WORD INSTRUCTIONS. % DI[500,RHARG,HLLA,SPUNT]; *HLL DI[501,ACHARG,PAQA,SPUNT]; *HLLI (CLEARS L.H. OF AC) DI[502,RMWHARG,HLLM,REMAPPC]; *HLLM DI[503,RMWARG,PTOS,SPUNT]; *HLLS DI[504,RQARG,Q22H,HLLA]; *HRL DI[505,IQARG,Q22H,HLLA]; *HRLI DI[506,RMWHARG,HRLM,REMAPPC]; *HRLM DI[507,RMWHARG,HRLS,SPUNT]; *HRLS DI[510,RHARG,PANQA,SPUNT]; *HLLZ DI[511,SETZ,SPUNT,SPUNT]; *HLLZI (SAME AS SETZ) DI[512,ACHARG,WPANQM,SPUNT]; *HLLZM DI[513,RMWHARG,PANQS,SPUNT]; *HLLZS DI[514,RQARG,Q22H,PANQA]; *HRLZ DI[515,IQARG,Q22H,PANQA]; *HRLZI DI[516,Q22H,WPANQM,SPUNT]; *HRLZM DI[517,RMWQARG,Q22H,PANQS]; *HRLZS DI[520,RHARG,POQA,SPUNT]; *HLLO DI[521,EHARG,QTOAC,SPUNT]; *HLLOI (SAME AS MOVEI 777777) DI[522,ACHARG,WPOQM,SPUNT]; *HLLOM DI[523,RMWHARG,POQS,SPUNT]; *HLLOS DI[524,RQARG,Q22H,POQA]; *HRLO DI[525,IQARG,Q22H,POQA]; *HRLOI DI[526,Q22H,WPOQM,SPUNT]; *HRLOM DI[527,RMWQARG,Q22H,POQS]; *HRLOS DI[530,RHARG,HLLEA,SPUNT]; *HLLE DI[531,SETZ,SPUNT,SPUNT]; *HLLEI (SAME AS SETZ) DI[532,ACHARG,HLLEM,SPUNT]; *HLLEM DI[533,RMWHARG,HLLES,REMAPPC]; *HLLES DI[534,RQARG,Q22H,HLLEA]; *HRLE DI[535,IQARG,Q22H,HLLEA]; *HRLEI DI[536,Q22H,HLLEM,SPUNT]; *HRLEM DI[537,RMWQARG,Q22H,HLLES]; *HRLES DI[540,RHARG,HRRA,SPUNT]; *HRR DI[541,EHARG,HRRA,SPUNT]; *HRRI DI[542,RMWHARG,HRRM,REMAPPC]; *HRRM DI[543,RMWARG,PTOS,SPUNT]; *HRRS (SAME AS MOVES DI[544,RQARG,Q22H,HRRA]; *HLR DI[545,ACHARG,PANQA,SPUNT]; *HLRI (CLEARS R.H. OF AC) DI[546,RMWHARG,HLRM,SPUNT]; *HLRM DI[547,RMWHARG,HLRS,SPUNT]; *HLRS DI[550,RHARG,PAQA,SPUNT]; *HRRZ DI[551,PTOAC,SPUNT,SPUNT]; *HRRZI (SAME AS MOVEI) DI[552,ACHARG,WPAQM,SPUNT]; *HRRZM DI[553,RMWHARG,PAQS,SPUNT]; *HRRZS DI[554,RQARG,Q22H,PAQA]; *HLRZ DI[555,SETZ,SPUNT,SPUNT]; *HLRZI (SAME AS SETZ) DI[556,Q22H,WPAQM,SPUNT]; *HLRZM DI[557,RMWQARG,Q22H,PAQS]; *HLRZS DI[560,RHARG,PONQA,SPUNT]; *HRRO DI[561,EHARG,PONQA,SPUNT]; *HRROI DI[562,ACHARG,WPONQM,SPUNT]; *HRROM DI[563,RMWHARG,PONQS,SPUNT]; *HRROS DI[564,RQARG,Q22H,PONQA]; *HLRO DI[565,IQARG,Q22H,PONQA]; *HLROI DI[566,Q22H,WPONQM,SPUNT]; *HLROM DI[567,RMWQARG,Q22H,PONQS]; *HLROS DI[570,RARG,HRREA,SPUNT]; *HRRE DI[571,HRREA,SPUNT,REMAPPC]; *HRREI DI[572,HRREM,SPUNT,SPUNT]; *HRREM DI[573,RMWQARG,Q22H,HLRES]; *HRRES DI[574,RARG,HLREA,SPUNT]; *HLRE DI[575,HLREA,SPUNT,REMAPPC]; *HLREI DI[576,HLREM,SPUNT,SPUNT]; *HLREM DI[577,RMWARG,HLRES,REMAPPC]; *HLRES %LOGIC INSTRUCTIONS % DI[400,SETZ,SPUNT,SPUNT]; *SETZ DI[401,SETZ,SPUNT,SPUNT]; *SETZI DI[402,SETZM,SPUNT,SPUNT]; *SETZM DI[403,SETZB,SPUNT,SPUNT]; *SETZB DI[404,RARG,PAQA,SPUNT]; *AND DI[405,PAQA,SPUNT,SPUNT]; *ANDI DI[406,RMWARG,PAQM,SPUNT]; *ANDM DI[407,RMWARG,PAQB,SPUNT]; *ANDB DI[410,RARG,PANQA,SPUNT]; *ANDCA DI[411,PANQA,SPUNT,SPUNT]; *ANDCAI DI[412,RMWARG,PANQM,SPUNT]; *ANDCAM DI[413,RMWARG,PANQB,SPUNT]; *ANDCAB DI[414,RARG,PTOAC,SPUNT]; *SETM (SAME AS MOVE) DI[415,PTOAC,SPUNT,SPUNT]; *SETMI (SAME AS MOVEI) DI[416,RMWARG,PTOM,SPUNT]; *SETMM (NOOP REFERENCING MEMORY BY R-M-W) DI[417,RMWARG,PTOB,SPUNT]; *SETMB DI[420,RARG,NPAQA,SPUNT]; *ANDCM DI[421,NPAQA,SPUNT,SPUNT]; *ANDCMI DI[422,RMWARG,NPAQM,SPUNT]; *ANDCMM DI[423,RMWARG,NPAQB,SPUNT]; *ANDCMB DI[424,REMAPPC,SPUNT,SPUNT]; *SETA (NOOP) DI[425,REMAPPC,SPUNT,SPUNT]; *SETAI (NOOP) DI[426,WREFQ,SPUNT,SPUNT]; *SETAM (SAME AS MOVEM) DI[427,WREFQ,SPUNT,SPUNT]; *SETAB (SAME AS MOVEM) DI[430,RARG,PXQA,SPUNT]; *XOR DI[431,PXQA,SPUNT,SPUNT]; *XORI DI[432,RMWARG,PXQM,SPUNT]; *XORM DI[433,RMWARG,PXQB,SPUNT]; *XORB DI[434,RARG,POQA,SPUNT]; *IOR DI[435,POQA,SPUNT,SPUNT]; *IORI DI[436,RMWARG,POQM,SPUNT]; *IORM DI[437,RMWARG,POQB,SPUNT]; *IORB DI[440,RARG,NPANQA,SPUNT]; *ANDCB DI[441,NPANQA,SPUNT,SPUNT]; *ANDCBI DI[442,RMWARG,NPANQM,SPUNT]; *ANDCBM DI[443,RMWARG,NPANQB,SPUNT]; *ANDCBB DI[444,RARG,PEQA,SPUNT]; *EQV DI[445,PEQA,SPUNT,SPUNT]; *EQVI DI[446,RMWARG,PEQM,SPUNT]; *EQVM DI[447,RMWARG,PEQB,SPUNT]; *EQVB DI[450,NQA,SPUNT,SPUNT]; *SETCA DI[451,NQA,SPUNT,SPUNT]; *SETCAI DI[452,NQM,SPUNT,SPUNT]; *SETCAM DI[453,NQB,SPUNT,SPUNT]; *SETCAB DI[454,RARG,PONQA,SPUNT]; *ORCA DI[455,PONQA,SPUNT,SPUNT]; *ORCAI DI[456,RMWARG,PONQM,SPUNT]; *ORCAM DI[457,RMWARG,PONQB,SPUNT]; *ORCAB DI[460,RARG,NPA,SPUNT]; *SETCM DI[461,NPA,SPUNT,SPUNT]; *SETCMI DI[462,RMWARG,NPM,SPUNT]; *SETCMM DI[463,RMWARG,NPB,SPUNT]; *SETCMB DI[464,RARG,NPOQA,SPUNT]; *ORCM DI[465,NPOQA,SPUNT,SPUNT]; *ORCMI DI[466,RMWARG,NPOQM,SPUNT]; *ORCMM DI[467,RMWARG,NPOQB,SPUNT]; *ORCMB DI[470,RARG,NPONQA,SPUNT]; *ORCB DI[471,NPONQA,SPUNT,SPUNT]; *ORCBI DI[472,RMWARG,NPONQM,SPUNT]; *ORCBM DI[473,RMWARG,NPONQB,SPUNT]; *ORCBB DI[474,SETO,SPUNT,SPUNT]; *SETO DI[475,SETO,SPUNT,SPUNT]; *SETOI DI[476,SETOM,SPUNT,SPUNT]; *SETOM DI[477,SETOB,SPUNT,SPUNT]; *SETOB %THE INSTRUCTION CLASSES CAM, AOS, SOS, CAI, AND SKIP ALL USE THE FOLLOWING TERMINATION ROUTINES. TIMING: CAIX M + 2 + 1 IF IT SKIPS CAMX M + R + 4 + 1 IF IT SKIPS SKIPX M + R + 4 + 1 IF IT SKIPS AOSX M + R + 3 + W SOSX M + R + 3 + W I = 25 TOTAL % *NO SKIP IS REMAPPC LCSKIP: FRZBALUBC, GOTO[GSKIP,H=1]; LSKIP: ENDM[ALU>=0]; P_MAPVA_P+1, SAMASK[22], GOTO[REMAP1]; PAQES: P AND Q; ESKIP: ENDM[ALU#0]; P_MAPVA_P+1, SAMASK[22], GOTO[REMAP1]; LECSKIP: FRZBALUBC, GOTO[GSKIP,H=1]; LESKIP: ENDM[ALU>0]; P_MAPVA_P+1, SAMASK[22], GOTO[REMAP1]; ASKIP: P_PC, GOTO[ASKIP1]; GECSKIP: FRZBALUBC, GOTO[LSKIP,H=1]; GESKIP: ENDM[ALU<0]; ASKIP1: P_MAPVA_P+1, SAMASK[22], Q_1R, GOTO[REMAP1]; PAQNS: P AND Q; NSKIP: ENDM[ALU=0]; P_MAPVA_P+1, SAMASK[22], GOTO[REMAP1]; GCSKIP: FRZBALUBC, GOTO[LSKIP,H=1]; GSKIP: ENDM[ALU<=0]; P_MAPVA_P+1, SAMASK[22], GOTO[REMAP1]; %THE ROUTINES BELOW IMPLEMENT THE CAM, CAI, AOS, SOS, AND SKIP INSTRUCTION CLASSES% COMP: P-Q, SETHOVF, RETURN; SKIP: LACS_P, MAPVA_P_PC, ACFS, Q_1R, RETURN; AOS: Q_1R, WRESTART; MDR_LACS_Q_P+Q, SETOVPC01, RETURN[G=0]; LX_Q, RETURN; SOS: Q_A1, WRESTART, GOTO[.-2]; DI[300,REMAPPC,SPUNT,SPUNT]; *CAI (NO-OP) TIMING = M DI[301,COMP,GCSKIP,SPUNT]; *CAIL DI[302,COMP,ESKIP,SPUNT]; *CAIE DI[303,COMP,GECSKIP,SPUNT]; *CAILE DI[304,ASKIP,SPUNT,SPUNT]; *CAIA DI[305,COMP,LECSKIP,SPUNT]; *CAIGE DI[306,COMP,NSKIP,SPUNT]; *CAIN DI[307,COMP,LCSKIP,SPUNT]; *CAIG DI[310,RARG,REMAPPC,SPUNT]; *CAM (RARG FOR MAP LOADING COMPATIBILITY) DI[311,RARG,COMP,GCSKIP]; *CAML DI[312,RARG,COMP,ESKIP]; *CAME DI[313,RARG,COMP,GECSKIP]; *CAMLE DI[314,RARG,ASKIP,SPUNT]; *CAMA DI[315,RARG,COMP,LECSKIP]; *CAMGE DI[316,RARG,COMP,NSKIP]; *CAMN DI[317,RARG,COMP,LCSKIP]; *CAMG DI[330,RARG,SKIP,REMAP1]; DI[331,RARG,SKIP,LSKIP]; DI[332,RARG,SKIP,ESKIP]; DI[333,RARG,SKIP,LESKIP]; DI[334,RARG,SKIP,ASKIP1]; DI[335,RARG,SKIP,GESKIP]; DI[336,RARG,SKIP,NSKIP]; DI[337,RARG,SKIP,GSKIP]; DI[350,RMWARG,AOS,REMAPPC]; DI[351,RMWARG,AOS,LSKIP]; DI[352,RMWARG,AOS,ESKIP]; DI[353,RMWARG,AOS,LESKIP]; DI[354,RMWARG,AOS,ASKIP]; DI[355,RMWARG,AOS,GESKIP]; DI[356,RMWARG,AOS,NSKIP]; DI[357,RMWARG,AOS,GSKIP]; DI[370,RMWARG,SOS,REMAPPC]; DI[371,RMWARG,SOS,LSKIP]; DI[372,RMWARG,SOS,ESKIP]; DI[373,RMWARG,SOS,LESKIP]; DI[374,RMWARG,SOS,ASKIP]; DI[375,RMWARG,SOS,GESKIP]; DI[376,RMWARG,SOS,NSKIP]; DI[377,RMWARG,SOS,GSKIP]; %THE 64 TEST-AND-SET INSTRUCTIONS REQUIRE ONLY A SMALL NUMBER OF ROUTINES BECAUSE OF COMMON USAGE BY MANY INSTRUCTIONS OF EACH ONE. THE TRANSLATION OF INSTRUCTIONS TO ROUTINES IS DIAGRAMMED BELOW: R O - T L Z E D C N S N A R --- O TIOR - REMAPPC L ESWAP Z TANDCM E ESKIP D RARG C TXOR N NSKIP S SRARG N APANDQ A ASKIP1 ESWAP, RARG, AND SRARG ARE IN THE "MAIN" PACKAGE WITH THE OTHER PREPARATION ROUTINES. I=4 % APANDQ: P AND Q, RETURN, P_MAPVA_PC, ACFS; TIOR: LAC_P OR Q, GOTO[APANDQ]; TANDCM: LAC_NOT P AND Q, GOTO[APANDQ]; TXOR: LAC_P#Q, GOTO[APANDQ]; DI[600,REMAPPC,SPUNT,SPUNT]; *TRN IS NO-OP DI[601,REMAPPC,SPUNT,SPUNT]; *TLN IS NO-OP DI[602,APANDQ,ESKIP,SPUNT]; *TRNE DI[603,ESWAP,APANDQ,ESKIP]; *TLNE DI[604,ASKIP,SPUNT,SPUNT]; *TRNA DI[605,ASKIP,SPUNT,SPUNT]; *TLNA DI[606,APANDQ,NSKIP,SPUNT]; *TRNN DI[607,ESWAP,APANDQ,NSKIP]; *TLNN DI[610,RARG,REMAPPC,SPUNT]; *TDN (NO-OP REFERENCING MEMORY) DI[611,RARG,REMAPPC,SPUNT]; *TSN DI[612,RARG,APANDQ,ESKIP]; *TDNE DI[613,SRARG,APANDQ,ESKIP]; *TSNE DI[614,RARG,ASKIP,SPUNT]; *TDNA DI[615,RARG,ASKIP,SPUNT]; *TSNA DI[616,RARG,APANDQ,NSKIP]; *TDNN DI[617,SRARG,APANDQ,NSKIP]; *TSNN DI[620,NPAQA,SPUNT,SPUNT]; *TRZ SAME AS ANDCMI DI[621,ESWAP,NPAQA,SPUNT]; *TLZ DI[622,TANDCM,ESKIP,SPUNT]; *TRZE DI[623,ESWAP,TANDCM,ESKIP]; *TLZE DI[624,TANDCM,ASKIP1,SPUNT]; *TRZA DI[625,ESWAP,TANDCM,ASKIP1]; *TLZA DI[626,TANDCM,NSKIP,SPUNT]; *TRZN DI[627,ESWAP,TANDCM,NSKIP]; *TLZN DI[630,RARG,NPAQA,SPUNT]; *TDZ DI[631,SRARG,NPAQA,SPUNT]; *TSZ DI[632,RARG,TANDCM,ESKIP]; *TDZE DI[633,SRARG,TANDCM,ESKIP]; *TSZE DI[634,RARG,TANDCM,ASKIP1]; *TDZA DI[635,SRARG,TANDCM,ASKIP1]; *TSZA DI[636,RARG,TANDCM,NSKIP]; *TDZN DI[637,SRARG,TANDCM,NSKIP]; *TSZN DI[640,PXQA,SPUNT,SPUNT]; *TRC (SAME AS XORI) DI[641,ESWAP,PXQA,SPUNT]; *TLC DI[642,TXOR,ESKIP,SPUNT]; *TRCE DI[643,ESWAP,TXOR,ESKIP]; *TLCE DI[644,TXOR,ASKIP1,SPUNT]; *TRCA DI[645,ESWAP,TXOR,ASKIP1]; *TLCA DI[646,TXOR,NSKIP,SPUNT]; *TRCN DI[647,ESWAP,TXOR,NSKIP]; *TLCN DI[650,RARG,PXQA,SPUNT]; *TDC SAME AS XOR DI[651,SRARG,PXQA,SPUNT]; *TSC DI[652,RARG,TXOR,ESKIP]; *TDCE DI[653,SRARG,TXOR,ESKIP]; *TSCE DI[654,RARG,TXOR,ASKIP1]; *TDCA DI[655,SRARG,TXOR,ASKIP1]; *TSCA DI[656,RARG,TXOR,NSKIP]; *TDCN DI[657,SRARG,TXOR,NSKIP]; *TSCN DI[660,POQA,SPUNT,SPUNT]; *TRO SAME AS IORI DI[661,ESWAP,POQA,SPUNT]; *TLO DI[662,TIOR,ESKIP,SPUNT]; *TROE DI[663,ESWAP,TIOR,ESKIP]; *TLOE DI[664,TIOR,ASKIP1,SPUNT]; *TROA DI[665,ESWAP,TIOR,ASKIP1]; *TLOA DI[666,TIOR,NSKIP,SPUNT]; *TRON DI[667,ESWAP,TIOR,NSKIP]; *TLON DI[670,RARG,POQA,SPUNT]; *TDO SAME AS IOR DI[671,SRARG,POQA,SPUNT]; *TSO DI[672,RARG,TIOR,ESKIP]; *TDOE DI[673,SRARG,TIOR,ESKIP]; *TSOE DI[674,RARG,TIOR,ASKIP1]; *TDOA DI[675,SRARG,TIOR,ASKIP1]; *TSOA DI[676,RARG,TIOR,NSKIP]; *TDON DI[677,SRARG,TIOR,NSKIP]; *TSON