1 #ifndef OPCODE_H 2 #define OPCODE_H 3 4 #include "symbol.h" 5 6 enum opcode { 7 #define OPCODE(OP,NG,SW,TF,N,FL) OP_##OP, 8 #define OPCODE_RANGE(OP,S,E) OP_##OP = OP_##S, OP_##OP##_END = OP_##E, 9 #include "opcode.def" 10 #undef OPCODE 11 #undef OPCODE_RANGE 12 OP_LAST, /* keep this one last! */ 13 }; 14 15 extern const struct opcode_table { 16 int negate:8; 17 int swap:8; 18 int to_float:8; 19 unsigned int arity:2; 20 unsigned int flags:6; 21 #define OPF_NONE 0 22 #define OPF_TARGET (1 << 0) 23 } opcode_table[]; 24 25 26 static inline int opcode_float(int opcode, struct symbol *type) 27 { 28 if (!type || !is_float_type(type)) 29 return opcode; 30 return opcode_table[opcode].to_float; 31 } 32 33 #endif