void codegen_field(Parser* p, Item* record, char* name);
typedef union {
- struct {
- char* name;
- long version;
- } var;
- ImmValue imm;
+ long i;
+ double f;
+ char* s;
} Operand;
typedef struct {
- int opcode;
- Operand dest;
- Operand arg1;
- Operand arg2;
+ int code : 28;
+ int type : 4;
+ union {
+ Operand args[3];
+ struct {
+ size_t nargs;
+ size_t margs;
+ long* args;
+ } call;
+ }
} Operation;
typedef struct {
Operation** ops;
} Block;
+long ir_startblock(Parser* p);
+void ir_endblock(Parser* p);
+void ir_rawop(Parser* p, Operation* op);
+void ir_binopi(Parser* p, int op, long dest, long arg, long imm);
+void ir_binopf(Parser* p, int op, long dest, long arg, double imm);
+void ir_unnopi(Parser* p, int op, long dest, long imm);
+void ir_unopf(Parser* p, int op, long dest, double imm);
+
/* <op> <reg>, <base>+<off> */
/* <op> <base>+<off>, <reg> */
/* <op> <reg>, <reg> */