Before this patch:
in: frag frag-off @s4
in: ip version @s8
out: (@nh,0,8 & 0xf0) >> 4 == @s8
out: (frag unknown & 0xfff8 [invalid type]) >> 3 == @s4
after:
out: frag frag-off >> 0 == @s4
out: ip version >> 0 == @s8
Next patch adds support for zero-shift removal.
Signed-off-by: Florian Westphal <fw@strlen.de>
* templates.
*/
binop_postprocess(ctx, expr, &expr->left);
+ } else if (binop->op == OP_RSHIFT && binop->left->op == OP_AND &&
+ binop->right->etype == EXPR_VALUE && binop->left->right->etype == EXPR_VALUE) {
+ /* Handle 'ip version @s4' and similar, i.e. set lookups where the lhs needs
+ * fixups to mask out unwanted bits AND a shift.
+ */
+
+ binop_postprocess(ctx, binop, &binop->left);
}
}