Annotation of researchv9/cmd/sun/pcc/opmatch.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)opmatch.c 1.1 86/02/03 Copyr 1985 Sun Micro";
        !             3: #endif
        !             4: 
        !             5: /*
        !             6:  * Copyright (c) 1985 by Sun Microsystems, Inc.
        !             7:  */
        !             8: 
        !             9: #include "cpass2.h"
        !            10: 
        !            11: /*
        !            12:  * int
        !            13:  * opmatch(op,tableop)
        !            14:  *     Decides if an operator 'tableop' from the code templates
        !            15:  *     table should be considered in pattern matching when a given
        !            16:  *     operator 'op' shows up in an expression tree.
        !            17:  */
        !            18: 
        !            19: extern int mamask[];   /* from match.c */
        !            20: 
        !            21: int
        !            22: opmatch(op,tableop)
        !            23:        unsigned op;
        !            24:        register unsigned tableop;
        !            25: {
        !            26:        register opmtemp;
        !            27: 
        !            28:        /*
        !            29:         * check target machine dependencies against code generation options
        !            30:         */
        !            31:        if (tableop&OP68SPEC) {
        !            32:                if ((tableop&OP68020) && !use68020)
        !            33:                        return(0);
        !            34:                if ((tableop&OP68881) && !use68881)
        !            35:                        return(0);
        !            36:                if ((tableop&NO68020) && use68020)
        !            37:                        return(0);
        !            38:                if ((tableop&NO68881) && use68881)
        !            39:                        return(0);
        !            40:        }
        !            41:        tableop &= ~OP68SPEC;
        !            42: 
        !            43:        /*
        !            44:         * check for match against a specific operator
        !            45:         */
        !            46:        if ( tableop < OPSIMP )
        !            47:                return( tableop == op );
        !            48: 
        !            49:        /*
        !            50:         * check for match against an operator class (e.g., OPSIMP)
        !            51:         */
        !            52:        if ((opmtemp=mamask[tableop - OPSIMP])&SPFLG){
        !            53:                switch (op) {
        !            54:                case NAME:
        !            55:                case FCON:
        !            56:                case ICON:
        !            57:                case OREG:
        !            58:                case REG:
        !            59:                        return(1);
        !            60:                case UNARY MUL:
        !            61:                        /*
        !            62:                         * for autoincrement addressing, recognize
        !            63:                         * *p++, *--p as LTYPEs, even though they
        !            64:                         * aren't.  We have to finish this test
        !            65:                         * by calling shumul() in match() (bletch)
        !            66:                         */
        !            67:                        return(1);
        !            68:                }
        !            69:                return(0);
        !            70:        }
        !            71:        /*
        !            72:         * same check on ASG operator class
        !            73:         */
        !            74:        return( (dope[op]&(opmtemp|ASGFLG)) == opmtemp );
        !            75: }

unix.superglobalmegacorp.com

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