Annotation of researchv10no/cmd/spitbol/optmov.spt, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.