!! New pass2 for pdp11 imp ! Missing: Reals ! Procedures as parameters ! Jam transfer ! Machine code !Control bits %constinteger no eis = 256; !Set if EIS option missing %constinteger stack check = 512 ! %externalroutine pass2 %externalroutinespec poctal(%integer n) %externalstring(15)%fnspec itos(%integer n,m) %systemroutinespec move(%integer l,f,t) ;!EMAS %systemintegermapspec comreg(%integer n) ;!EMAS: %owninteger fptr,fend ;!EMAS: !SIZE CONSTANTS %constinteger max vars = 700, %c max label = 150, %c max depth = 10, %c max stack = 30, %c max envir = 7, %c max for = 10 %constinteger max uses = 4*3*max envir !ABORTS ! 0 - CONSISTENCY CHECK FAILS ! 1 - CLAIM BAD REGISTER ! 2 - RELEASE BAD REGISTER ! 3 - REGISTER NOT CLAIMED ! 4 - FORGET BAD REGISTER ! 5 - TOO MANY LABELS ! 6 - CANNOT GET A REGISTER ! 7 - ILLEGAL SOURCE/DEST ! 8 - BAD BASE REGISTER ! 9 - NO FREE DESCRIPTORS ! 10 - DESCRIPTOR NOT CLAIMED ! 11 - HAZARD FAILS - SPURIOUS USE ! 12 - HAZARD FAILS - ILLEGAL FORM ! 13 - STACK OVERFLOW ! 14 - STACK UNDERFLOW ! 15 - TOO MANY NAMES ! 16 - RESULT MISSING ! 17 - TOO MANY LEVELS ! 18 - TOO MANY NESTED FOR LOOPS ! 19 - LOAD FAILS ! 20 - DESCRIPTOR NOT RELEASED ! 21 - AMAP FAILS ! 22 - REGISTER NOT RELEASED ! 23 - BOUNDS INSIDE-OUT ! 24 - ILLEGAL REAL OPERATION !FILE DEFINITION %constinteger icode = 1; !INTERMEDIATE CODE %constinteger object=2,direct=3,report=0,trace=0 !EMAS: %CONSTINTEGER OBJECT = 1, DIRECT = 2, TRACE = 3, REPORT = 0 %CONST %INTEGER LAST MCODE = 147 %CONST %STRING(6) %ARRAY MC TEXT(0:LAST MCODE) = %c "NOP", "CLR", "CLRB", "DEC", "DECB", "INC", "INCB", "NEG", "NEGB", "TST", "TSTB", "COM", "COMB", "ASR", "ASRB", "ASL", "ASLB", "ASH", "ASHC", "ADC", "ADCB", "SBC", "SBCB", "SXT", "ROL", "ROLB", "ROR", "RORB", "SWAB", "FADD", "FSUB", "FMUL", "FDIV", "MOV", "MOVB", "ADD", "SUB", "CMP", "CMPB", "MUL", "DIV", "XOR", "BIS", "BISB", "BIT", "BITB", "BIC", "BICB", "BR", "BEQ", "BNE", "BMI", "BPL", "BCS", "BCC", "BVS", "BVC", "BLT", "BGE", "BLE", "BGT", "BHI", "BLOS", "BLO", "BHIS", "JSR", "MARK", "RTS", "SPL", "JMP", "SOB", "EMT", "TRAP", "BPT", "IOT", "RTI", "RTT", "HALT", "WAIT", "RESET", "MTPI", "MTPD", "MFPI", "MTPD", "MTPS", "MFPS", "CLC", "CLV", "CLZ", "CLN", "SEC", "SEV", "SEZ", "SEN", "SCC", "CCC", "XFC", "MED", "LDUB", "MNS", "MPP", "MAS", "LDF", "LDD", "STF", "STD", "ADDF", "ADDD", "SUBF", "SUBD", "NEGF", "NEGD", "MULF", "MULD", "DIVF", "DIVD", "CMPF", "CMPD", "MODF", "MODD", "LDCDF", "LDCFD", "STCFD", "STCDF", "LDCIF", "LDCID", "LDCLF", "LDCLD", "STCFI", "STCFL", "STCDI", "STCDL", "LDEXP", "STEXP", "CLRF", "CLRD", "ABSF", "ABSD", "TSTF", "TSTD", "SETF", "SETD", "SETI", "SETL", "LDFPS", "STFPS", "STST", "CFCC" %CONST %integer %ARRAY MC CODE(0:LAST MCODE) = %c k'000240', k'005000', k'105000', k'005300', k'105300', k'005200', k'105200', k'005400', k'105400', k'005700', k'105700', k'005100', k'105100', k'006200', k'106200', k'006300', k'106300', k'072000', k'073000', k'005500', k'105500', k'005600', k'105600', k'006700', k'006100', k'106100', k'006000', k'106000', k'000300', k'075000', k'075010', k'075020', k'075030', k'010000', k'110000', k'060000', k'160000', k'020000', k'120000', k'070000', k'071000', k'074000', k'050000', k'150000', k'030000', k'130000', k'040000', k'140000', k'000400', k'001400', k'001000', k'100400', k'100000', k'103400', k'103000', k'102400', k'102000', k'002400', k'002000', k'003400', k'003000', k'101000', k'101400', k'103400', k'103000', k'004000', k'006400', k'000200', k'000230', k'000100', k'077000', k'104000', k'104400', k'000003', k'000004', k'000002', k'000006', k'000000', k'000001', k'000005', k'006600', k'106600', k'006500', k'106500', k'106400', k'106700', k'000241', k'000242', k'000244', k'000250', k'000261', k'000262', k'000264', k'000270', k'000277', k'000257', k'076700', k'076600', k'170003', k'170004', k'170005', k'170007', k'172400', k'172400', k'174000', k'174000', k'172000', k'172000', k'173000', k'173000', k'170700', k'170700', k'171000', k'171000', k'174400', k'174400', k'173400', k'173400', k'171400', k'171400', k'177400', k'177400', k'176000', k'176000', k'177000', k'177000', k'177000', k'177000', k'175400', k'175400', k'175400', k'175400', k'176400', k'175000', k'170400', k'170400', k'170600', k'170600', k'170500', k'170500', k'170001', k'170011', k'170002', k'170012', k'170100', k'170200', k'170300', k'170000' %CONST %BYTEinteger %ARRAY MC TYPE(0:LAST MCODE) = %c 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 9, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 13, 13, 13, 13, 13, 13, 9, 9, 9, 13, 13, 13, 13, 13, 13, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 2, 5, 1, 6, 12, 3, 3, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 11, 11, 10, 10, 11, 11, 11, 11, 6, 6, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 11, 10, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 6, 6, 6, 0 !REGISTER DEFINITION %constinteger integer reg = 0, real reg = 4 %constinteger fpbit = x'1000' %constinteger r0 = 1, f0 = r0+real reg, %c r1 = 2, f1 = r1+real reg, %c r2 = 3, f2 = r2+real reg, %c r3 = 4, f3 = r3+real reg, %c lnb = 9, %c ds = 10, %c sp = 11, %c pc = 12 %constinteger param= 13 %constinteger primitive = 14 %constintegerarray actual(0:pc) = 0, 0,1,2,3,