| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #ifndef _PLY_IR_H
- #define _PLY_IR_H
- #include <stdint.h>
- #include <stdlib.h>
- #include <linux/bpf.h>
- 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 */
|