root/usr/src/tools/smatch/src/opcode.h
#ifndef OPCODE_H
#define OPCODE_H

#include "symbol.h"

enum opcode {
#define OPCODE(OP,NG,SW,TF,N,FL)  OP_##OP,
#define OPCODE_RANGE(OP,S,E)    OP_##OP = OP_##S, OP_##OP##_END = OP_##E,
#include "opcode.def"
#undef  OPCODE
#undef  OPCODE_RANGE
        OP_LAST,                        /* keep this one last! */
};

extern const struct opcode_table {
        int     negate:8;
        int     swap:8;
        int     to_float:8;
        unsigned int arity:2;
        unsigned int flags:6;
#define                 OPF_NONE        0
#define                 OPF_TARGET      (1 << 0)
} opcode_table[];


static inline int opcode_float(int opcode, struct symbol *type)
{
        if (!type || !is_float_type(type))
                return opcode;
        return opcode_table[opcode].to_float;
}

#endif