X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Ffilter-bytecode.h;h=7c76e3286e987e88b4314ab87bdd5dfb5926597c;hp=e9df11db60d02f85eceb6a8b2003132cf0720f8d;hb=78370c0c89a55749732f38caf1b460e4137423a4;hpb=65775683e9e3cc9bdc4aab1b0cab0e5eae042f5e diff --git a/src/lib/lttng-ctl/filter-bytecode.h b/src/lib/lttng-ctl/filter-bytecode.h index e9df11db6..7c76e3286 100644 --- a/src/lib/lttng-ctl/filter-bytecode.h +++ b/src/lib/lttng-ctl/filter-bytecode.h @@ -29,12 +29,6 @@ * offsets are absolute from start of bytecode. */ -enum filter_register { - REG_R0 = 0, - REG_R1 = 1, - REG_ERROR, -}; - struct field_ref { /* Initially, symbol offset. After link, field offset. */ uint16_t offset; @@ -68,6 +62,8 @@ enum filter_op { FILTER_OP_BIN_AND, FILTER_OP_BIN_OR, FILTER_OP_BIN_XOR, + + /* binary comparators */ FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, @@ -75,10 +71,55 @@ enum filter_op { FILTER_OP_GE, FILTER_OP_LE, + /* string binary comparator */ + FILTER_OP_EQ_STRING, + FILTER_OP_NE_STRING, + FILTER_OP_GT_STRING, + FILTER_OP_LT_STRING, + FILTER_OP_GE_STRING, + FILTER_OP_LE_STRING, + + /* s64 binary comparator */ + FILTER_OP_EQ_S64, + FILTER_OP_NE_S64, + FILTER_OP_GT_S64, + FILTER_OP_LT_S64, + FILTER_OP_GE_S64, + FILTER_OP_LE_S64, + + /* double binary comparator */ + FILTER_OP_EQ_DOUBLE, + FILTER_OP_NE_DOUBLE, + FILTER_OP_GT_DOUBLE, + FILTER_OP_LT_DOUBLE, + FILTER_OP_GE_DOUBLE, + FILTER_OP_LE_DOUBLE, + + /* Mixed S64-double binary comparators */ + FILTER_OP_EQ_DOUBLE_S64, + FILTER_OP_NE_DOUBLE_S64, + FILTER_OP_GT_DOUBLE_S64, + FILTER_OP_LT_DOUBLE_S64, + FILTER_OP_GE_DOUBLE_S64, + FILTER_OP_LE_DOUBLE_S64, + + FILTER_OP_EQ_S64_DOUBLE, + FILTER_OP_NE_S64_DOUBLE, + FILTER_OP_GT_S64_DOUBLE, + FILTER_OP_LT_S64_DOUBLE, + FILTER_OP_GE_S64_DOUBLE, + FILTER_OP_LE_S64_DOUBLE, + /* unary */ FILTER_OP_UNARY_PLUS, FILTER_OP_UNARY_MINUS, FILTER_OP_UNARY_NOT, + FILTER_OP_UNARY_PLUS_S64, + FILTER_OP_UNARY_MINUS_S64, + FILTER_OP_UNARY_NOT_S64, + FILTER_OP_UNARY_PLUS_DOUBLE, + FILTER_OP_UNARY_MINUS_DOUBLE, + FILTER_OP_UNARY_NOT_DOUBLE, /* logical */ FILTER_OP_AND, @@ -95,6 +136,11 @@ enum filter_op { FILTER_OP_LOAD_S64, FILTER_OP_LOAD_DOUBLE, + /* cast */ + FILTER_OP_CAST_TO_S64, + FILTER_OP_CAST_DOUBLE_TO_S64, + FILTER_OP_CAST_NOP, + NR_FILTER_OPS, }; @@ -102,7 +148,6 @@ typedef uint8_t filter_opcode_t; struct load_op { filter_opcode_t op; - uint8_t reg; /* enum filter_register */ char data[0]; /* data to load. Size known by enum filter_opcode and null-term char. */ } __attribute__((packed)); @@ -113,7 +158,6 @@ struct binary_op { struct unary_op { filter_opcode_t op; - uint8_t reg; /* enum filter_register */ } __attribute__((packed)); /* skip_offset is absolute from start of bytecode */ @@ -122,6 +166,10 @@ struct logical_op { uint16_t skip_offset; /* bytecode insn, if skip second test */ } __attribute__((packed)); +struct cast_op { + filter_opcode_t op; +} __attribute__((packed)); + struct return_op { filter_opcode_t op; } __attribute__((packed));