|
|
1.1 ! root 1: -IN80 ! 2: -TITLE OPTIMISE OUT REDUNDANT MOV OPS FROM MACRO SOURCE ! 3: -STITL PREAMBLE ! 4: * ! 5: * This Spitbol program is a quick&dirty pass over the ! 6: * translated Minimal source (MACRO-32) to remove the ! 7: * unneeded MOVL instructions. The unneeded MOVL instructions are ! 8: * those which move into a register or memory location, and are ! 9: * immediately followed by an unlabelled opcode ***L2 that can ! 10: * be converted into ***L3 form, that is operating on the same register ! 11: * ! 12: * This is not recommended, as the ***L3 form seems to be slower! ! 13: * ! 14: * Steve Duff August 1980 ! 15: * ! 16: -STITL INITIALIZATION ! 17: &STLIMIT = 10000000; &TRIM = 1; &ANCHOR = 1 ! 18: ARITHOPCODES = 'ADDL2' | 'SUBL2' | 'MULL2' | 'DIVL2' | ! 19: + 'BISL2' | 'BICL2' | 'XORL2' ! 20: OPTRANS = TABLE(19) ! 21: OPTRANS['ADDL2'] = 'ADDL3'; OPTRANS['SUBL2'] = 'SUBL3' ! 22: OPTRANS['MULL2'] = 'MULL3'; OPTRANS['DIVL2'] = 'DIVL3' ! 23: OPTRANS['BISL2'] = 'BISL3'; OPTRANS['BICL2'] = 'BICL3' ! 24: OPTRANS['XORL2'] = 'XORL3' ! 25: SB = SPAN(' ') ! 26: LABEL = LEN(5) '::' ! 27: OPTPATT = ((LABEL | '') SB) . LAB 'MOVL' SB BREAK(',') . OP1 LEN(1) ! 28: + (BREAK(' ') | REM) . OP2 ! 29: ARITHPATT = SB ARITHOPCODES . OPCODE SB BREAK(',') . OP1A LEN(1) ! 30: + *OP2 ((SB | RPOS(0)) REM) . COMMENT ! 31: TERMINAL = 'Enter name of file (including extension).' ! 32: FILENAME = TERMINAL ! 33: INPUT(.INFILE,1,FILENAME) :F(END) ! 34: OUTPUT(.OUTFILE,2,FILENAME) ! 35: LOOP ! 36: CARD1 = INFILE :F(EXIT) ! 37: CARD1 ANY(';') :S(FLUSH1) ! 38: CARD1 OPTPATT :F(FLUSH1) ! 39: CARD2 = INFILE :F(HUH) ! 40: CARD2 ARITHPATT :F(FLUSH2) ! 41: OP2 ('-' | (RTAB(1) '+')) :S(FLUSH2) ! 42: TERMINAL = CARD1; TERMINAL = CARD2 ! 43: OUTFILE = LAB OPTRANS[OPCODE] ' ' OP1A ',' OP1 ',' OP2 COMMENT ! 44: TERMINAL = OUTFILE ! 45: TERMINAL = ! 46: COUNT = COUNT + 1 ! 47: :(LOOP) ! 48: FLUSH1 OUTFILE = CARD1 :(LOOP) ! 49: FLUSH2 OUTFILE = CARD1 ! 50: OUTFILE = CARD2 :(LOOP) ! 51: EXIT TERMINAL = COUNT + 0 ' MOVL OPCODES REMOVED.' ! 52: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.