#ifndef _PLY_IR_H #define _PLY_IR_H #include #include #include typedef enum vitype { VI_INSN, VI_LABEL, VI_REG_GET, VI_REG_PUT, } vitype_t; typedef struct vinsn { vitype_t vitype; union { struct { struct bpf_insn bpf; uint16_t dst; uint16_t src; } insn; int16_t label; uint16_t reg; }; } vinsn_t; typedef struct ir { vinsn_t *vi; size_t len; int16_t next_label; uint16_t next_reg; } ir_t; int16_t ir_alloc_label (ir_t *ir); uint16_t ir_alloc_register(ir_t *ir); void ir_emit_insn (ir_t *ir, struct bpf_insn bpf, uint16_t dst, uint16_t src); void ir_emit_label (ir_t *ir, int16_t label); void ir_emit_reg_get(ir_t *ir, uint16_t reg); void ir_emit_reg_put(ir_t *ir, uint16_t reg); ir_t *ir_new(void); #endif /* _PLY_IR_H */