Line data Source code
1 : #ifndef HEADER_fd_src_ballet_sbpf_fd_sbpf_instr_h 2 : #define HEADER_fd_src_ballet_sbpf_fd_sbpf_instr_h 3 : 4 : #include "../../util/fd_util.h" 5 : 6 : struct fd_sbpf_opcode_any { 7 : uchar op_class : 3; 8 : uchar _unknown : 5; 9 : }; 10 : typedef struct fd_sbpf_opcode_any fd_sbpf_opcode_any_t; 11 : 12 : struct fd_sbpf_opcode_normal { 13 : uchar op_class : 3; 14 : uchar op_src : 1; 15 : uchar op_mode : 4; 16 : }; 17 : typedef struct fd_sbpf_opcode_normal fd_sbpf_opcode_normal_t; 18 : 19 : struct fd_sbpf_opcode_mem { 20 : uchar op_class : 3; 21 : uchar op_size : 2; 22 : uchar op_addr_mode : 3; 23 : }; 24 : typedef struct fd_sbpf_opcode_mem fd_sbpf_opcode_mem_t; 25 : 26 : union fd_sbpf_opcode { 27 : uchar raw; 28 : fd_sbpf_opcode_any_t any; 29 : fd_sbpf_opcode_normal_t normal; 30 : fd_sbpf_opcode_mem_t mem; 31 : }; 32 : typedef union fd_sbpf_opcode fd_sbpf_opcode_t; 33 : 34 : struct fd_sbpf_instr { 35 : fd_sbpf_opcode_t opcode; 36 : uchar dst_reg : 4; 37 : uchar src_reg : 4; 38 : short offset; 39 : uint imm; 40 : }; 41 : typedef struct fd_sbpf_instr fd_sbpf_instr_t; 42 : 43 : FD_PROTOTYPES_BEGIN 44 : 45 : /* FIXME: Use proper fast ulong decoding and unions */ 46 : 47 : FD_FN_CONST static inline fd_sbpf_instr_t 48 919234383 : fd_sbpf_instr( ulong u ) { 49 919234383 : union { ulong u; fd_sbpf_instr_t instr; } _; 50 919234383 : _.u = u; 51 919234383 : return _.instr; 52 919234383 : } 53 : 54 : FD_FN_CONST static inline ulong 55 835312512 : fd_sbpf_ulong( fd_sbpf_instr_t instr ) { 56 835312512 : union { ulong u; fd_sbpf_instr_t instr; } _; 57 835312512 : _.instr = instr; 58 835312512 : return _.u; 59 835312512 : } 60 : 61 : FD_PROTOTYPES_END 62 : 63 : #endif /* HEADER_fd_src_ballet_sbpf_fd_sbpf_instr_h */