Version 2.2.3
[lttng-ust.git] / liblttng-ust / filter-bytecode.h
index 61d10cd7732eed1be9034012540507a49af93dac..ce2dbc7394db17d37506bb7ed210adc1f06b172d 100644 (file)
  * 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;
@@ -100,6 +94,21 @@ enum filter_op {
        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,
@@ -114,22 +123,30 @@ enum filter_op {
        /* logical */
        FILTER_OP_AND,
        FILTER_OP_OR,
-       FILTER_OP_AND_S64,
-       FILTER_OP_OR_S64,
-       FILTER_OP_AND_DOUBLE,
-       FILTER_OP_OR_DOUBLE,
 
-       /* load */
+       /* load field ref */
        FILTER_OP_LOAD_FIELD_REF,
        FILTER_OP_LOAD_FIELD_REF_STRING,
        FILTER_OP_LOAD_FIELD_REF_SEQUENCE,
        FILTER_OP_LOAD_FIELD_REF_S64,
        FILTER_OP_LOAD_FIELD_REF_DOUBLE,
 
+       /* load immediate from operand */
        FILTER_OP_LOAD_STRING,
        FILTER_OP_LOAD_S64,
        FILTER_OP_LOAD_DOUBLE,
 
+       /* cast */
+       FILTER_OP_CAST_TO_S64,
+       FILTER_OP_CAST_DOUBLE_TO_S64,
+       FILTER_OP_CAST_NOP,
+
+       /* get context ref */
+       FILTER_OP_GET_CONTEXT_REF,
+       FILTER_OP_GET_CONTEXT_REF_STRING,
+       FILTER_OP_GET_CONTEXT_REF_S64,
+       FILTER_OP_GET_CONTEXT_REF_DOUBLE,
+
        NR_FILTER_OPS,
 };
 
@@ -137,7 +154,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));
@@ -148,7 +164,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 */
@@ -157,6 +172,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));
This page took 0.024149 seconds and 4 git commands to generate.