Home | History | Annotate | Line # | Download | only in libbpfjit
t_bpfjit.c revision 1.1.4.3
      1  1.1.4.3  yamt /*	$NetBSD: t_bpfjit.c,v 1.1.4.3 2014/05/22 11:42:20 yamt Exp $ */
      2  1.1.4.2  yamt 
      3  1.1.4.2  yamt /*-
      4  1.1.4.2  yamt  * Copyright (c) 2011-2012 Alexander Nasonov.
      5  1.1.4.2  yamt  * All rights reserved.
      6  1.1.4.2  yamt  *
      7  1.1.4.2  yamt  * Redistribution and use in source and binary forms, with or without
      8  1.1.4.2  yamt  * modification, are permitted provided that the following conditions
      9  1.1.4.2  yamt  * are met:
     10  1.1.4.2  yamt  *
     11  1.1.4.2  yamt  * 1. Redistributions of source code must retain the above copyright
     12  1.1.4.2  yamt  *    notice, this list of conditions and the following disclaimer.
     13  1.1.4.2  yamt  * 2. Redistributions in binary form must reproduce the above copyright
     14  1.1.4.2  yamt  *    notice, this list of conditions and the following disclaimer in
     15  1.1.4.2  yamt  *    the documentation and/or other materials provided with the
     16  1.1.4.2  yamt  *    distribution.
     17  1.1.4.2  yamt  *
     18  1.1.4.2  yamt  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  1.1.4.2  yamt  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  1.1.4.2  yamt  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     21  1.1.4.2  yamt  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
     22  1.1.4.2  yamt  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     23  1.1.4.2  yamt  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
     24  1.1.4.2  yamt  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     25  1.1.4.2  yamt  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     26  1.1.4.2  yamt  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     27  1.1.4.2  yamt  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     28  1.1.4.2  yamt  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     29  1.1.4.2  yamt  * SUCH DAMAGE.
     30  1.1.4.2  yamt  */
     31  1.1.4.2  yamt 
     32  1.1.4.2  yamt #include <sys/cdefs.h>
     33  1.1.4.3  yamt __RCSID("$NetBSD: t_bpfjit.c,v 1.1.4.3 2014/05/22 11:42:20 yamt Exp $");
     34  1.1.4.2  yamt 
     35  1.1.4.2  yamt #include <atf-c.h>
     36  1.1.4.2  yamt #include <stdint.h>
     37  1.1.4.2  yamt #include <string.h>
     38  1.1.4.2  yamt 
     39  1.1.4.3  yamt #define	__BPF_PRIVATE
     40  1.1.4.3  yamt #include <net/bpf.h>
     41  1.1.4.3  yamt #include <net/bpfjit.h>
     42  1.1.4.3  yamt 
     43  1.1.4.2  yamt static uint8_t deadbeef_at_5[16] = {
     44  1.1.4.2  yamt 	0, 0xf1, 2, 0xf3, 4, 0xde, 0xad, 0xbe, 0xef, 0xff
     45  1.1.4.2  yamt };
     46  1.1.4.2  yamt 
     47  1.1.4.3  yamt static bpf_ctx_t bc_zeroed;
     48  1.1.4.3  yamt static bpf_ctx_t *bc = &bc_zeroed;
     49  1.1.4.3  yamt 
     50  1.1.4.2  yamt ATF_TC(bpfjit_empty);
     51  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_empty, tc)
     52  1.1.4.2  yamt {
     53  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
     54  1.1.4.2  yamt 	    "Test that JIT compilation for an empty bpf program fails");
     55  1.1.4.2  yamt }
     56  1.1.4.2  yamt 
     57  1.1.4.2  yamt ATF_TC_BODY(bpfjit_empty, tc)
     58  1.1.4.2  yamt {
     59  1.1.4.2  yamt 	struct bpf_insn dummy;
     60  1.1.4.2  yamt 
     61  1.1.4.3  yamt 	ATF_CHECK(bpfjit_generate_code(bc, &dummy, 0) == NULL);
     62  1.1.4.2  yamt }
     63  1.1.4.2  yamt 
     64  1.1.4.2  yamt ATF_TC(bpfjit_alu_add_k);
     65  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_add_k, tc)
     66  1.1.4.2  yamt {
     67  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
     68  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_ADD+BPF_K");
     69  1.1.4.2  yamt }
     70  1.1.4.2  yamt 
     71  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_add_k, tc)
     72  1.1.4.2  yamt {
     73  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
     74  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 3),
     75  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 2),
     76  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
     77  1.1.4.2  yamt 	};
     78  1.1.4.2  yamt 
     79  1.1.4.3  yamt 	bpfjit_func_t code;
     80  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
     81  1.1.4.2  yamt 
     82  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
     83  1.1.4.2  yamt 
     84  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
     85  1.1.4.2  yamt 
     86  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
     87  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
     88  1.1.4.2  yamt 
     89  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 5);
     90  1.1.4.2  yamt 
     91  1.1.4.2  yamt 	bpfjit_free_code(code);
     92  1.1.4.2  yamt }
     93  1.1.4.2  yamt 
     94  1.1.4.2  yamt ATF_TC(bpfjit_alu_sub_k);
     95  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_sub_k, tc)
     96  1.1.4.2  yamt {
     97  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
     98  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_SUB+BPF_K");
     99  1.1.4.2  yamt }
    100  1.1.4.2  yamt 
    101  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_sub_k, tc)
    102  1.1.4.2  yamt {
    103  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    104  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 1),
    105  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_SUB+BPF_K, 2),
    106  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    107  1.1.4.2  yamt 	};
    108  1.1.4.2  yamt 
    109  1.1.4.3  yamt 	bpfjit_func_t code;
    110  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    111  1.1.4.2  yamt 
    112  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    113  1.1.4.2  yamt 
    114  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    115  1.1.4.2  yamt 
    116  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    117  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    118  1.1.4.2  yamt 
    119  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_MAX);
    120  1.1.4.2  yamt 
    121  1.1.4.2  yamt 	bpfjit_free_code(code);
    122  1.1.4.2  yamt }
    123  1.1.4.2  yamt 
    124  1.1.4.2  yamt ATF_TC(bpfjit_alu_mul_k);
    125  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_mul_k, tc)
    126  1.1.4.2  yamt {
    127  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    128  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_MUL+BPF_K");
    129  1.1.4.2  yamt }
    130  1.1.4.2  yamt 
    131  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_mul_k, tc)
    132  1.1.4.2  yamt {
    133  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    134  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
    135  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_K, 3),
    136  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    137  1.1.4.2  yamt 	};
    138  1.1.4.2  yamt 
    139  1.1.4.3  yamt 	bpfjit_func_t code;
    140  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    141  1.1.4.2  yamt 
    142  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    143  1.1.4.2  yamt 
    144  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    145  1.1.4.2  yamt 
    146  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    147  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    148  1.1.4.2  yamt 
    149  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(0xfffffffd));
    150  1.1.4.2  yamt 
    151  1.1.4.2  yamt 	bpfjit_free_code(code);
    152  1.1.4.2  yamt }
    153  1.1.4.2  yamt 
    154  1.1.4.2  yamt ATF_TC(bpfjit_alu_div0_k);
    155  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div0_k, tc)
    156  1.1.4.2  yamt {
    157  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    158  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=0");
    159  1.1.4.2  yamt }
    160  1.1.4.2  yamt 
    161  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div0_k, tc)
    162  1.1.4.2  yamt {
    163  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    164  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 0),
    165  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    166  1.1.4.2  yamt 	};
    167  1.1.4.2  yamt 
    168  1.1.4.3  yamt 	bpfjit_func_t code;
    169  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    170  1.1.4.2  yamt 
    171  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    172  1.1.4.2  yamt 
    173  1.1.4.2  yamt 	//ATF_CHECK(bpf_validate(insns, insn_count));
    174  1.1.4.2  yamt 
    175  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    176  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    177  1.1.4.2  yamt 
    178  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0);
    179  1.1.4.2  yamt 
    180  1.1.4.2  yamt 	bpfjit_free_code(code);
    181  1.1.4.2  yamt }
    182  1.1.4.2  yamt 
    183  1.1.4.2  yamt ATF_TC(bpfjit_alu_div1_k);
    184  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div1_k, tc)
    185  1.1.4.2  yamt {
    186  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    187  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=1");
    188  1.1.4.2  yamt }
    189  1.1.4.2  yamt 
    190  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div1_k, tc)
    191  1.1.4.2  yamt {
    192  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    193  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 7),
    194  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 1),
    195  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    196  1.1.4.2  yamt 	};
    197  1.1.4.2  yamt 
    198  1.1.4.3  yamt 	bpfjit_func_t code;
    199  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    200  1.1.4.2  yamt 
    201  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    202  1.1.4.2  yamt 
    203  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    204  1.1.4.2  yamt 
    205  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    206  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    207  1.1.4.2  yamt 
    208  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 7);
    209  1.1.4.2  yamt 
    210  1.1.4.2  yamt 	bpfjit_free_code(code);
    211  1.1.4.2  yamt }
    212  1.1.4.2  yamt 
    213  1.1.4.2  yamt ATF_TC(bpfjit_alu_div2_k);
    214  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div2_k, tc)
    215  1.1.4.2  yamt {
    216  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    217  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=2");
    218  1.1.4.2  yamt }
    219  1.1.4.2  yamt 
    220  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div2_k, tc)
    221  1.1.4.2  yamt {
    222  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    223  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 7),
    224  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 2),
    225  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    226  1.1.4.2  yamt 	};
    227  1.1.4.2  yamt 
    228  1.1.4.3  yamt 	bpfjit_func_t code;
    229  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    230  1.1.4.2  yamt 
    231  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    232  1.1.4.2  yamt 
    233  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    234  1.1.4.2  yamt 
    235  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    236  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    237  1.1.4.2  yamt 
    238  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 3);
    239  1.1.4.2  yamt 
    240  1.1.4.2  yamt 	bpfjit_free_code(code);
    241  1.1.4.2  yamt }
    242  1.1.4.2  yamt 
    243  1.1.4.2  yamt ATF_TC(bpfjit_alu_div4_k);
    244  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div4_k, tc)
    245  1.1.4.2  yamt {
    246  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    247  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=4");
    248  1.1.4.2  yamt }
    249  1.1.4.2  yamt 
    250  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div4_k, tc)
    251  1.1.4.2  yamt {
    252  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    253  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
    254  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 4),
    255  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    256  1.1.4.2  yamt 	};
    257  1.1.4.2  yamt 
    258  1.1.4.3  yamt 	bpfjit_func_t code;
    259  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    260  1.1.4.2  yamt 
    261  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    262  1.1.4.2  yamt 
    263  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    264  1.1.4.2  yamt 
    265  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    266  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    267  1.1.4.2  yamt 
    268  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(0x3fffffff));
    269  1.1.4.2  yamt 
    270  1.1.4.2  yamt 	bpfjit_free_code(code);
    271  1.1.4.2  yamt }
    272  1.1.4.2  yamt 
    273  1.1.4.2  yamt ATF_TC(bpfjit_alu_div10_k);
    274  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div10_k, tc)
    275  1.1.4.2  yamt {
    276  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    277  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=10");
    278  1.1.4.2  yamt }
    279  1.1.4.2  yamt 
    280  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div10_k, tc)
    281  1.1.4.2  yamt {
    282  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    283  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
    284  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 10),
    285  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    286  1.1.4.2  yamt 	};
    287  1.1.4.2  yamt 
    288  1.1.4.3  yamt 	bpfjit_func_t code;
    289  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    290  1.1.4.2  yamt 
    291  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    292  1.1.4.2  yamt 
    293  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    294  1.1.4.2  yamt 
    295  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    296  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    297  1.1.4.2  yamt 
    298  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(429484384));
    299  1.1.4.2  yamt 
    300  1.1.4.2  yamt 	bpfjit_free_code(code);
    301  1.1.4.2  yamt }
    302  1.1.4.2  yamt 
    303  1.1.4.2  yamt ATF_TC(bpfjit_alu_div10000_k);
    304  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div10000_k, tc)
    305  1.1.4.2  yamt {
    306  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    307  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=10000");
    308  1.1.4.2  yamt }
    309  1.1.4.2  yamt 
    310  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div10000_k, tc)
    311  1.1.4.2  yamt {
    312  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    313  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
    314  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, 10000),
    315  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    316  1.1.4.2  yamt 	};
    317  1.1.4.2  yamt 
    318  1.1.4.3  yamt 	bpfjit_func_t code;
    319  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    320  1.1.4.2  yamt 
    321  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    322  1.1.4.2  yamt 
    323  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    324  1.1.4.2  yamt 
    325  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    326  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    327  1.1.4.2  yamt 
    328  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(429484));
    329  1.1.4.2  yamt 
    330  1.1.4.2  yamt 	bpfjit_free_code(code);
    331  1.1.4.2  yamt }
    332  1.1.4.2  yamt 
    333  1.1.4.2  yamt ATF_TC(bpfjit_alu_div7609801_k);
    334  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div7609801_k, tc)
    335  1.1.4.2  yamt {
    336  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    337  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=7609801");
    338  1.1.4.2  yamt }
    339  1.1.4.2  yamt 
    340  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div7609801_k, tc)
    341  1.1.4.2  yamt {
    342  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    343  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
    344  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, UINT32_C(7609801)),
    345  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    346  1.1.4.2  yamt 	};
    347  1.1.4.2  yamt 
    348  1.1.4.3  yamt 	bpfjit_func_t code;
    349  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    350  1.1.4.2  yamt 
    351  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    352  1.1.4.2  yamt 
    353  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    354  1.1.4.2  yamt 
    355  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    356  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    357  1.1.4.2  yamt 
    358  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 564);
    359  1.1.4.2  yamt 
    360  1.1.4.2  yamt 	bpfjit_free_code(code);
    361  1.1.4.2  yamt }
    362  1.1.4.2  yamt 
    363  1.1.4.2  yamt ATF_TC(bpfjit_alu_div80000000_k);
    364  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div80000000_k, tc)
    365  1.1.4.2  yamt {
    366  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    367  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_K with k=0x80000000");
    368  1.1.4.2  yamt }
    369  1.1.4.2  yamt 
    370  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div80000000_k, tc)
    371  1.1.4.2  yamt {
    372  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    373  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
    374  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, UINT32_C(0x80000000)),
    375  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    376  1.1.4.2  yamt 	};
    377  1.1.4.2  yamt 
    378  1.1.4.3  yamt 	bpfjit_func_t code;
    379  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    380  1.1.4.2  yamt 
    381  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    382  1.1.4.2  yamt 
    383  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    384  1.1.4.2  yamt 
    385  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    386  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    387  1.1.4.2  yamt 
    388  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
    389  1.1.4.2  yamt 
    390  1.1.4.2  yamt 	bpfjit_free_code(code);
    391  1.1.4.2  yamt }
    392  1.1.4.2  yamt 
    393  1.1.4.2  yamt ATF_TC(bpfjit_alu_and_k);
    394  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_and_k, tc)
    395  1.1.4.2  yamt {
    396  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    397  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_AND+BPF_K");
    398  1.1.4.2  yamt }
    399  1.1.4.2  yamt 
    400  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_and_k, tc)
    401  1.1.4.2  yamt {
    402  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    403  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead),
    404  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_AND+BPF_K, 0xbeef),
    405  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    406  1.1.4.2  yamt 	};
    407  1.1.4.2  yamt 
    408  1.1.4.3  yamt 	bpfjit_func_t code;
    409  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    410  1.1.4.2  yamt 
    411  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    412  1.1.4.2  yamt 
    413  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    414  1.1.4.2  yamt 
    415  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    416  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    417  1.1.4.2  yamt 
    418  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == (0xdead&0xbeef));
    419  1.1.4.2  yamt 
    420  1.1.4.2  yamt 	bpfjit_free_code(code);
    421  1.1.4.2  yamt }
    422  1.1.4.2  yamt 
    423  1.1.4.2  yamt ATF_TC(bpfjit_alu_or_k);
    424  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_or_k, tc)
    425  1.1.4.2  yamt {
    426  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    427  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_OR+BPF_K");
    428  1.1.4.2  yamt }
    429  1.1.4.2  yamt 
    430  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_or_k, tc)
    431  1.1.4.2  yamt {
    432  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    433  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead0000),
    434  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_OR+BPF_K, 0x0000beef),
    435  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    436  1.1.4.2  yamt 	};
    437  1.1.4.2  yamt 
    438  1.1.4.3  yamt 	bpfjit_func_t code;
    439  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    440  1.1.4.2  yamt 
    441  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    442  1.1.4.2  yamt 
    443  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    444  1.1.4.2  yamt 
    445  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    446  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    447  1.1.4.2  yamt 
    448  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0xdeadbeef);
    449  1.1.4.2  yamt 
    450  1.1.4.2  yamt 	bpfjit_free_code(code);
    451  1.1.4.2  yamt }
    452  1.1.4.2  yamt 
    453  1.1.4.2  yamt ATF_TC(bpfjit_alu_lsh_k);
    454  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_lsh_k, tc)
    455  1.1.4.2  yamt {
    456  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    457  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_LSH+BPF_K");
    458  1.1.4.2  yamt }
    459  1.1.4.2  yamt 
    460  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_lsh_k, tc)
    461  1.1.4.2  yamt {
    462  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    463  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
    464  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 16),
    465  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    466  1.1.4.2  yamt 	};
    467  1.1.4.2  yamt 
    468  1.1.4.3  yamt 	bpfjit_func_t code;
    469  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    470  1.1.4.2  yamt 
    471  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    472  1.1.4.2  yamt 
    473  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    474  1.1.4.2  yamt 
    475  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    476  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    477  1.1.4.2  yamt 
    478  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0xbeef0000);
    479  1.1.4.2  yamt 
    480  1.1.4.2  yamt 	bpfjit_free_code(code);
    481  1.1.4.2  yamt }
    482  1.1.4.2  yamt 
    483  1.1.4.2  yamt ATF_TC(bpfjit_alu_lsh0_k);
    484  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_lsh0_k, tc)
    485  1.1.4.2  yamt {
    486  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    487  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_LSH+BPF_K with k=0");
    488  1.1.4.2  yamt }
    489  1.1.4.2  yamt 
    490  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_lsh0_k, tc)
    491  1.1.4.2  yamt {
    492  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    493  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
    494  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 0),
    495  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    496  1.1.4.2  yamt 	};
    497  1.1.4.2  yamt 
    498  1.1.4.3  yamt 	bpfjit_func_t code;
    499  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    500  1.1.4.2  yamt 
    501  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    502  1.1.4.2  yamt 
    503  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    504  1.1.4.2  yamt 
    505  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    506  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    507  1.1.4.2  yamt 
    508  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0xdeadbeef);
    509  1.1.4.2  yamt 
    510  1.1.4.2  yamt 	bpfjit_free_code(code);
    511  1.1.4.2  yamt }
    512  1.1.4.2  yamt 
    513  1.1.4.2  yamt ATF_TC(bpfjit_alu_rsh_k);
    514  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_rsh_k, tc)
    515  1.1.4.2  yamt {
    516  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    517  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_RSH+BPF_K");
    518  1.1.4.2  yamt }
    519  1.1.4.2  yamt 
    520  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_rsh_k, tc)
    521  1.1.4.2  yamt {
    522  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    523  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
    524  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_K, 16),
    525  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    526  1.1.4.2  yamt 	};
    527  1.1.4.2  yamt 
    528  1.1.4.3  yamt 	bpfjit_func_t code;
    529  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    530  1.1.4.2  yamt 
    531  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    532  1.1.4.2  yamt 
    533  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    534  1.1.4.2  yamt 
    535  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    536  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    537  1.1.4.2  yamt 
    538  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0x0000dead);
    539  1.1.4.2  yamt 
    540  1.1.4.2  yamt 	bpfjit_free_code(code);
    541  1.1.4.2  yamt }
    542  1.1.4.2  yamt 
    543  1.1.4.2  yamt ATF_TC(bpfjit_alu_rsh0_k);
    544  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_rsh0_k, tc)
    545  1.1.4.2  yamt {
    546  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    547  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_RSH+BPF_K with k=0");
    548  1.1.4.2  yamt }
    549  1.1.4.2  yamt 
    550  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_rsh0_k, tc)
    551  1.1.4.2  yamt {
    552  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    553  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
    554  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_K, 0),
    555  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    556  1.1.4.2  yamt 	};
    557  1.1.4.2  yamt 
    558  1.1.4.3  yamt 	bpfjit_func_t code;
    559  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    560  1.1.4.2  yamt 
    561  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    562  1.1.4.2  yamt 
    563  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    564  1.1.4.2  yamt 
    565  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    566  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    567  1.1.4.2  yamt 
    568  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0xdeadbeef);
    569  1.1.4.2  yamt 
    570  1.1.4.2  yamt 	bpfjit_free_code(code);
    571  1.1.4.2  yamt }
    572  1.1.4.2  yamt 
    573  1.1.4.2  yamt ATF_TC(bpfjit_alu_modulo_k);
    574  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_modulo_k, tc)
    575  1.1.4.2  yamt {
    576  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    577  1.1.4.2  yamt 	    "Test JIT compilation of modulo logic of BPF_ALU+BPF_K operations");
    578  1.1.4.2  yamt }
    579  1.1.4.2  yamt 
    580  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_modulo_k, tc)
    581  1.1.4.2  yamt {
    582  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    583  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0x7fffff77)),
    584  1.1.4.2  yamt 
    585  1.1.4.2  yamt 		/* (7FFFFF77 * 0FFFFF77) = 07FFFFB2,F0004951 */
    586  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_K, UINT32_C(0x0fffff77)),
    587  1.1.4.2  yamt 
    588  1.1.4.2  yamt 		/* 07FFFFB2,F0004951 << 1 = 0FFFFF65,E00092A2 */
    589  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 1),
    590  1.1.4.2  yamt 
    591  1.1.4.2  yamt 		/* 0FFFFF65,E00092A2 + DDDDDDDD = 0FFFFF66,BDDE707F */
    592  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xdddddddd)),
    593  1.1.4.2  yamt 
    594  1.1.4.2  yamt 		/* 0FFFFF66,BDDE707F - FFFFFFFF = 0FFFFF65,BDDE7080 */
    595  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_SUB+BPF_K, UINT32_C(0xffffffff)),
    596  1.1.4.2  yamt 
    597  1.1.4.2  yamt 		/* 0FFFFF65,BDDE7080 | 0000030C = 0FFFFF65,BDDE738C */
    598  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_OR+BPF_K, UINT32_C(0x0000030c)),
    599  1.1.4.2  yamt 
    600  1.1.4.2  yamt 		/* -0FFFFF65,BDDE738C mod(2^64) = F000009A,42218C74 */
    601  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_NEG, 0),
    602  1.1.4.2  yamt 
    603  1.1.4.2  yamt 		/* F000009A,42218C74 & FFFFFF0F = F000009A,42218C04 */
    604  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_AND+BPF_K, UINT32_C(0xffffff0f)),
    605  1.1.4.2  yamt 
    606  1.1.4.2  yamt 		/* F000009A,42218C74 >> 3 = 1E000013,48443180 */
    607  1.1.4.2  yamt 		/* 00000000,42218C74 >> 3 = 00000000,08443180 */
    608  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_K, 3),
    609  1.1.4.2  yamt 
    610  1.1.4.2  yamt 		/* 00000000,08443180 * 7FFFFF77 = 042218BB,93818280 */
    611  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_K, UINT32_C(0x7fffff77)),
    612  1.1.4.2  yamt 
    613  1.1.4.2  yamt 		/* 042218BB,93818280 / DEAD = 000004C0,71CBBBC3 */
    614  1.1.4.2  yamt 		/* 00000000,93818280 / DEAD = 00000000,0000A994 */
    615  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_K, UINT32_C(0xdead)),
    616  1.1.4.2  yamt 
    617  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    618  1.1.4.2  yamt 	};
    619  1.1.4.2  yamt 
    620  1.1.4.3  yamt 	bpfjit_func_t code;
    621  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    622  1.1.4.2  yamt 
    623  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    624  1.1.4.2  yamt 
    625  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    626  1.1.4.2  yamt 
    627  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    628  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    629  1.1.4.2  yamt 
    630  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) != UINT32_C(0x71cbbbc3));
    631  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(0x0000a994));
    632  1.1.4.2  yamt 
    633  1.1.4.2  yamt 
    634  1.1.4.2  yamt 	bpfjit_free_code(code);
    635  1.1.4.2  yamt }
    636  1.1.4.2  yamt 
    637  1.1.4.2  yamt ATF_TC(bpfjit_alu_add_x);
    638  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_add_x, tc)
    639  1.1.4.2  yamt {
    640  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    641  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_ADD+BPF_X");
    642  1.1.4.2  yamt }
    643  1.1.4.2  yamt 
    644  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_add_x, tc)
    645  1.1.4.2  yamt {
    646  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    647  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 3),
    648  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
    649  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
    650  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    651  1.1.4.2  yamt 	};
    652  1.1.4.2  yamt 
    653  1.1.4.3  yamt 	bpfjit_func_t code;
    654  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    655  1.1.4.2  yamt 
    656  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    657  1.1.4.2  yamt 
    658  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    659  1.1.4.2  yamt 
    660  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    661  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    662  1.1.4.2  yamt 
    663  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 5);
    664  1.1.4.2  yamt 
    665  1.1.4.2  yamt 	bpfjit_free_code(code);
    666  1.1.4.2  yamt }
    667  1.1.4.2  yamt 
    668  1.1.4.2  yamt ATF_TC(bpfjit_alu_sub_x);
    669  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_sub_x, tc)
    670  1.1.4.2  yamt {
    671  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    672  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_SUB+BPF_X");
    673  1.1.4.2  yamt }
    674  1.1.4.2  yamt 
    675  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_sub_x, tc)
    676  1.1.4.2  yamt {
    677  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    678  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 1),
    679  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
    680  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_SUB+BPF_X, 0),
    681  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    682  1.1.4.2  yamt 	};
    683  1.1.4.2  yamt 
    684  1.1.4.3  yamt 	bpfjit_func_t code;
    685  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    686  1.1.4.2  yamt 
    687  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    688  1.1.4.2  yamt 
    689  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    690  1.1.4.2  yamt 
    691  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    692  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    693  1.1.4.2  yamt 
    694  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_MAX);
    695  1.1.4.2  yamt 
    696  1.1.4.2  yamt 	bpfjit_free_code(code);
    697  1.1.4.2  yamt }
    698  1.1.4.2  yamt 
    699  1.1.4.2  yamt ATF_TC(bpfjit_alu_mul_x);
    700  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_mul_x, tc)
    701  1.1.4.2  yamt {
    702  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    703  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_MUL+BPF_X");
    704  1.1.4.2  yamt }
    705  1.1.4.2  yamt 
    706  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_mul_x, tc)
    707  1.1.4.2  yamt {
    708  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    709  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
    710  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
    711  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0),
    712  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    713  1.1.4.2  yamt 	};
    714  1.1.4.2  yamt 
    715  1.1.4.3  yamt 	bpfjit_func_t code;
    716  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    717  1.1.4.2  yamt 
    718  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    719  1.1.4.2  yamt 
    720  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    721  1.1.4.2  yamt 
    722  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    723  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    724  1.1.4.2  yamt 
    725  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(0xfffffffd));
    726  1.1.4.2  yamt 
    727  1.1.4.2  yamt 	bpfjit_free_code(code);
    728  1.1.4.2  yamt }
    729  1.1.4.2  yamt 
    730  1.1.4.2  yamt ATF_TC(bpfjit_alu_div0_x);
    731  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div0_x, tc)
    732  1.1.4.2  yamt {
    733  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    734  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=0");
    735  1.1.4.2  yamt }
    736  1.1.4.2  yamt 
    737  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div0_x, tc)
    738  1.1.4.2  yamt {
    739  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    740  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
    741  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
    742  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    743  1.1.4.2  yamt 	};
    744  1.1.4.2  yamt 
    745  1.1.4.3  yamt 	bpfjit_func_t code;
    746  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    747  1.1.4.2  yamt 
    748  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    749  1.1.4.2  yamt 
    750  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    751  1.1.4.2  yamt 
    752  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    753  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    754  1.1.4.2  yamt 
    755  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0);
    756  1.1.4.2  yamt 
    757  1.1.4.2  yamt 	bpfjit_free_code(code);
    758  1.1.4.2  yamt }
    759  1.1.4.2  yamt 
    760  1.1.4.2  yamt ATF_TC(bpfjit_alu_div1_x);
    761  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div1_x, tc)
    762  1.1.4.2  yamt {
    763  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    764  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=1");
    765  1.1.4.2  yamt }
    766  1.1.4.2  yamt 
    767  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div1_x, tc)
    768  1.1.4.2  yamt {
    769  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    770  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 7),
    771  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
    772  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
    773  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    774  1.1.4.2  yamt 	};
    775  1.1.4.2  yamt 
    776  1.1.4.3  yamt 	bpfjit_func_t code;
    777  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    778  1.1.4.2  yamt 
    779  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    780  1.1.4.2  yamt 
    781  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    782  1.1.4.2  yamt 
    783  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    784  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    785  1.1.4.2  yamt 
    786  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 7);
    787  1.1.4.2  yamt 
    788  1.1.4.2  yamt 	bpfjit_free_code(code);
    789  1.1.4.2  yamt }
    790  1.1.4.2  yamt 
    791  1.1.4.2  yamt ATF_TC(bpfjit_alu_div2_x);
    792  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div2_x, tc)
    793  1.1.4.2  yamt {
    794  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    795  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=2");
    796  1.1.4.2  yamt }
    797  1.1.4.2  yamt 
    798  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div2_x, tc)
    799  1.1.4.2  yamt {
    800  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    801  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 7),
    802  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
    803  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
    804  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    805  1.1.4.2  yamt 	};
    806  1.1.4.2  yamt 
    807  1.1.4.3  yamt 	bpfjit_func_t code;
    808  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    809  1.1.4.2  yamt 
    810  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    811  1.1.4.2  yamt 
    812  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    813  1.1.4.2  yamt 
    814  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    815  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    816  1.1.4.2  yamt 
    817  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 3);
    818  1.1.4.2  yamt 
    819  1.1.4.2  yamt 	bpfjit_free_code(code);
    820  1.1.4.2  yamt }
    821  1.1.4.2  yamt 
    822  1.1.4.2  yamt ATF_TC(bpfjit_alu_div4_x);
    823  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div4_x, tc)
    824  1.1.4.2  yamt {
    825  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    826  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=4");
    827  1.1.4.2  yamt }
    828  1.1.4.2  yamt 
    829  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div4_x, tc)
    830  1.1.4.2  yamt {
    831  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    832  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
    833  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
    834  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
    835  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    836  1.1.4.2  yamt 	};
    837  1.1.4.2  yamt 
    838  1.1.4.3  yamt 	bpfjit_func_t code;
    839  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    840  1.1.4.2  yamt 
    841  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    842  1.1.4.2  yamt 
    843  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    844  1.1.4.2  yamt 
    845  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    846  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    847  1.1.4.2  yamt 
    848  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(0x3fffffff));
    849  1.1.4.2  yamt 
    850  1.1.4.2  yamt 	bpfjit_free_code(code);
    851  1.1.4.2  yamt }
    852  1.1.4.2  yamt 
    853  1.1.4.2  yamt ATF_TC(bpfjit_alu_div10_x);
    854  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div10_x, tc)
    855  1.1.4.2  yamt {
    856  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    857  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=10");
    858  1.1.4.2  yamt }
    859  1.1.4.2  yamt 
    860  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div10_x, tc)
    861  1.1.4.2  yamt {
    862  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    863  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
    864  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10),
    865  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
    866  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    867  1.1.4.2  yamt 	};
    868  1.1.4.2  yamt 
    869  1.1.4.3  yamt 	bpfjit_func_t code;
    870  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    871  1.1.4.2  yamt 
    872  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    873  1.1.4.2  yamt 
    874  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    875  1.1.4.2  yamt 
    876  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    877  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    878  1.1.4.2  yamt 
    879  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(429484384));
    880  1.1.4.2  yamt 
    881  1.1.4.2  yamt 	bpfjit_free_code(code);
    882  1.1.4.2  yamt }
    883  1.1.4.2  yamt 
    884  1.1.4.2  yamt ATF_TC(bpfjit_alu_div10000_x);
    885  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div10000_x, tc)
    886  1.1.4.2  yamt {
    887  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    888  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=10000");
    889  1.1.4.2  yamt }
    890  1.1.4.2  yamt 
    891  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div10000_x, tc)
    892  1.1.4.2  yamt {
    893  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    894  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
    895  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10000),
    896  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
    897  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    898  1.1.4.2  yamt 	};
    899  1.1.4.2  yamt 
    900  1.1.4.3  yamt 	bpfjit_func_t code;
    901  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    902  1.1.4.2  yamt 
    903  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    904  1.1.4.2  yamt 
    905  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    906  1.1.4.2  yamt 
    907  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    908  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    909  1.1.4.2  yamt 
    910  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(429484));
    911  1.1.4.2  yamt 
    912  1.1.4.2  yamt 	bpfjit_free_code(code);
    913  1.1.4.2  yamt }
    914  1.1.4.2  yamt 
    915  1.1.4.2  yamt ATF_TC(bpfjit_alu_div7609801_x);
    916  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div7609801_x, tc)
    917  1.1.4.2  yamt {
    918  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    919  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=7609801");
    920  1.1.4.2  yamt }
    921  1.1.4.2  yamt 
    922  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div7609801_x, tc)
    923  1.1.4.2  yamt {
    924  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    925  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
    926  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(7609801)),
    927  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
    928  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    929  1.1.4.2  yamt 	};
    930  1.1.4.2  yamt 
    931  1.1.4.3  yamt 	bpfjit_func_t code;
    932  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    933  1.1.4.2  yamt 
    934  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    935  1.1.4.2  yamt 
    936  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    937  1.1.4.2  yamt 
    938  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    939  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    940  1.1.4.2  yamt 
    941  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 564);
    942  1.1.4.2  yamt 
    943  1.1.4.2  yamt 	bpfjit_free_code(code);
    944  1.1.4.2  yamt }
    945  1.1.4.2  yamt 
    946  1.1.4.2  yamt ATF_TC(bpfjit_alu_div80000000_x);
    947  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_div80000000_x, tc)
    948  1.1.4.2  yamt {
    949  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    950  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_DIV+BPF_X with X=0x80000000");
    951  1.1.4.2  yamt }
    952  1.1.4.2  yamt 
    953  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_div80000000_x, tc)
    954  1.1.4.2  yamt {
    955  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    956  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_MAX - 33),
    957  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
    958  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
    959  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    960  1.1.4.2  yamt 	};
    961  1.1.4.2  yamt 
    962  1.1.4.3  yamt 	bpfjit_func_t code;
    963  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    964  1.1.4.2  yamt 
    965  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    966  1.1.4.2  yamt 
    967  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    968  1.1.4.2  yamt 
    969  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
    970  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
    971  1.1.4.2  yamt 
    972  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
    973  1.1.4.2  yamt 
    974  1.1.4.2  yamt 	bpfjit_free_code(code);
    975  1.1.4.2  yamt }
    976  1.1.4.2  yamt 
    977  1.1.4.2  yamt ATF_TC(bpfjit_alu_and_x);
    978  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_and_x, tc)
    979  1.1.4.2  yamt {
    980  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
    981  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_AND+BPF_X");
    982  1.1.4.2  yamt }
    983  1.1.4.2  yamt 
    984  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_and_x, tc)
    985  1.1.4.2  yamt {
    986  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
    987  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead),
    988  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0xbeef),
    989  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_AND+BPF_X, 0),
    990  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
    991  1.1.4.2  yamt 	};
    992  1.1.4.2  yamt 
    993  1.1.4.3  yamt 	bpfjit_func_t code;
    994  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
    995  1.1.4.2  yamt 
    996  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
    997  1.1.4.2  yamt 
    998  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
    999  1.1.4.2  yamt 
   1000  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1001  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1002  1.1.4.2  yamt 
   1003  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == (0xdead&0xbeef));
   1004  1.1.4.2  yamt 
   1005  1.1.4.2  yamt 	bpfjit_free_code(code);
   1006  1.1.4.2  yamt }
   1007  1.1.4.2  yamt 
   1008  1.1.4.2  yamt ATF_TC(bpfjit_alu_or_x);
   1009  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_or_x, tc)
   1010  1.1.4.2  yamt {
   1011  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1012  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_OR+BPF_X");
   1013  1.1.4.2  yamt }
   1014  1.1.4.2  yamt 
   1015  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_or_x, tc)
   1016  1.1.4.2  yamt {
   1017  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1018  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdead0000),
   1019  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0x0000beef),
   1020  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_OR+BPF_X, 0),
   1021  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   1022  1.1.4.2  yamt 	};
   1023  1.1.4.2  yamt 
   1024  1.1.4.3  yamt 	bpfjit_func_t code;
   1025  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1026  1.1.4.2  yamt 
   1027  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1028  1.1.4.2  yamt 
   1029  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1030  1.1.4.2  yamt 
   1031  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1032  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1033  1.1.4.2  yamt 
   1034  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0xdeadbeef);
   1035  1.1.4.2  yamt 
   1036  1.1.4.2  yamt 	bpfjit_free_code(code);
   1037  1.1.4.2  yamt }
   1038  1.1.4.2  yamt 
   1039  1.1.4.2  yamt ATF_TC(bpfjit_alu_lsh_x);
   1040  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_lsh_x, tc)
   1041  1.1.4.2  yamt {
   1042  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1043  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_LSH+BPF_X");
   1044  1.1.4.2  yamt }
   1045  1.1.4.2  yamt 
   1046  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_lsh_x, tc)
   1047  1.1.4.2  yamt {
   1048  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1049  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
   1050  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 16),
   1051  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_X, 0),
   1052  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   1053  1.1.4.2  yamt 	};
   1054  1.1.4.2  yamt 
   1055  1.1.4.3  yamt 	bpfjit_func_t code;
   1056  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1057  1.1.4.2  yamt 
   1058  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1059  1.1.4.2  yamt 
   1060  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1061  1.1.4.2  yamt 
   1062  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1063  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1064  1.1.4.2  yamt 
   1065  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0xbeef0000);
   1066  1.1.4.2  yamt 
   1067  1.1.4.2  yamt 	bpfjit_free_code(code);
   1068  1.1.4.2  yamt }
   1069  1.1.4.2  yamt 
   1070  1.1.4.2  yamt ATF_TC(bpfjit_alu_lsh0_x);
   1071  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_lsh0_x, tc)
   1072  1.1.4.2  yamt {
   1073  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1074  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_LSH+BPF_X with k=0");
   1075  1.1.4.2  yamt }
   1076  1.1.4.2  yamt 
   1077  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_lsh0_x, tc)
   1078  1.1.4.2  yamt {
   1079  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1080  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
   1081  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   1082  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_X, 0),
   1083  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   1084  1.1.4.2  yamt 	};
   1085  1.1.4.2  yamt 
   1086  1.1.4.3  yamt 	bpfjit_func_t code;
   1087  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1088  1.1.4.2  yamt 
   1089  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1090  1.1.4.2  yamt 
   1091  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1092  1.1.4.2  yamt 
   1093  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1094  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1095  1.1.4.2  yamt 
   1096  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0xdeadbeef);
   1097  1.1.4.2  yamt 
   1098  1.1.4.2  yamt 	bpfjit_free_code(code);
   1099  1.1.4.2  yamt }
   1100  1.1.4.2  yamt 
   1101  1.1.4.2  yamt ATF_TC(bpfjit_alu_rsh_x);
   1102  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_rsh_x, tc)
   1103  1.1.4.2  yamt {
   1104  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1105  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_RSH+BPF_X");
   1106  1.1.4.2  yamt }
   1107  1.1.4.2  yamt 
   1108  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_rsh_x, tc)
   1109  1.1.4.2  yamt {
   1110  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1111  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
   1112  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 16),
   1113  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_X, 0),
   1114  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   1115  1.1.4.2  yamt 	};
   1116  1.1.4.2  yamt 
   1117  1.1.4.3  yamt 	bpfjit_func_t code;
   1118  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1119  1.1.4.2  yamt 
   1120  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1121  1.1.4.2  yamt 
   1122  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1123  1.1.4.2  yamt 
   1124  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1125  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1126  1.1.4.2  yamt 
   1127  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0x0000dead);
   1128  1.1.4.2  yamt 
   1129  1.1.4.2  yamt 	bpfjit_free_code(code);
   1130  1.1.4.2  yamt }
   1131  1.1.4.2  yamt 
   1132  1.1.4.2  yamt ATF_TC(bpfjit_alu_rsh0_x);
   1133  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_rsh0_x, tc)
   1134  1.1.4.2  yamt {
   1135  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1136  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_RSH+BPF_X with k=0");
   1137  1.1.4.2  yamt }
   1138  1.1.4.2  yamt 
   1139  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_rsh0_x, tc)
   1140  1.1.4.2  yamt {
   1141  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1142  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 0xdeadbeef),
   1143  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   1144  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_X, 0),
   1145  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   1146  1.1.4.2  yamt 	};
   1147  1.1.4.2  yamt 
   1148  1.1.4.3  yamt 	bpfjit_func_t code;
   1149  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1150  1.1.4.2  yamt 
   1151  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1152  1.1.4.2  yamt 
   1153  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1154  1.1.4.2  yamt 
   1155  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1156  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1157  1.1.4.2  yamt 
   1158  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0xdeadbeef);
   1159  1.1.4.2  yamt 
   1160  1.1.4.2  yamt 	bpfjit_free_code(code);
   1161  1.1.4.2  yamt }
   1162  1.1.4.2  yamt 
   1163  1.1.4.2  yamt ATF_TC(bpfjit_alu_modulo_x);
   1164  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_modulo_x, tc)
   1165  1.1.4.2  yamt {
   1166  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1167  1.1.4.2  yamt 	    "Test JIT compilation of modulo logic of BPF_ALU+BPF_X operations");
   1168  1.1.4.2  yamt }
   1169  1.1.4.2  yamt 
   1170  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_modulo_x, tc)
   1171  1.1.4.2  yamt {
   1172  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1173  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0x7fffff77)),
   1174  1.1.4.2  yamt 
   1175  1.1.4.2  yamt 		/* (7FFFFF77 * 0FFFFF77) = 07FFFFB2,F0004951 */
   1176  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0x0fffff77)),
   1177  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0),
   1178  1.1.4.2  yamt 
   1179  1.1.4.2  yamt 		/* 07FFFFB2,F0004951 << 1 = 0FFFFF65,E00092A2 */
   1180  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, 1),
   1181  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_X, 0),
   1182  1.1.4.2  yamt 
   1183  1.1.4.2  yamt 		/* 0FFFFF65,E00092A2 + DDDDDDDD = 0FFFFF66,BDDE707F */
   1184  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0xdddddddd)),
   1185  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   1186  1.1.4.2  yamt 
   1187  1.1.4.2  yamt 		/* 0FFFFF66,BDDE707F - FFFFFFFF = 0FFFFF65,BDDE7080 */
   1188  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0xffffffff)),
   1189  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_SUB+BPF_X, 0),
   1190  1.1.4.2  yamt 
   1191  1.1.4.2  yamt 		/* 0FFFFF65,BDDE7080 | 0000030C = 0FFFFF65,BDDE738C */
   1192  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0x0000030c)),
   1193  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_OR+BPF_X, 0),
   1194  1.1.4.2  yamt 
   1195  1.1.4.2  yamt 		/* -0FFFFF65,BDDE738C mod(2^64) = F000009A,42218C74 */
   1196  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_NEG, 0),
   1197  1.1.4.2  yamt 
   1198  1.1.4.2  yamt 		/* F000009A,42218C74 & FFFFFF0F = F000009A,42218C04 */
   1199  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0xffffff0f)),
   1200  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_AND+BPF_X, 0),
   1201  1.1.4.2  yamt 
   1202  1.1.4.2  yamt 		/* F000009A,42218C74 >> 3 = 1E000013,48443180 */
   1203  1.1.4.2  yamt 		/* 00000000,42218C74 >> 3 = 00000000,08443180 */
   1204  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, 3),
   1205  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_RSH+BPF_X, 0),
   1206  1.1.4.2  yamt 
   1207  1.1.4.2  yamt 		/* 00000000,08443180 * 7FFFFF77 = 042218BB,93818280 */
   1208  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0x7fffff77)),
   1209  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_MUL+BPF_X, 0),
   1210  1.1.4.2  yamt 
   1211  1.1.4.2  yamt 		/* 042218BB,93818280 / DEAD = 000004C0,71CBBBC3 */
   1212  1.1.4.2  yamt 		/* 00000000,93818280 / DEAD = 00000000,0000A994 */
   1213  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_K, UINT32_C(0xdead)),
   1214  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
   1215  1.1.4.2  yamt 
   1216  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   1217  1.1.4.2  yamt 	};
   1218  1.1.4.2  yamt 
   1219  1.1.4.3  yamt 	bpfjit_func_t code;
   1220  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1221  1.1.4.2  yamt 
   1222  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1223  1.1.4.2  yamt 
   1224  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1225  1.1.4.2  yamt 
   1226  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1227  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1228  1.1.4.2  yamt 
   1229  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) != UINT32_C(0x71cbbbc3));
   1230  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_C(0x0000a994));
   1231  1.1.4.2  yamt 
   1232  1.1.4.2  yamt 
   1233  1.1.4.2  yamt 	bpfjit_free_code(code);
   1234  1.1.4.2  yamt }
   1235  1.1.4.2  yamt 
   1236  1.1.4.2  yamt ATF_TC(bpfjit_alu_neg);
   1237  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_alu_neg, tc)
   1238  1.1.4.2  yamt {
   1239  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1240  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ALU+BPF_NEG");
   1241  1.1.4.2  yamt }
   1242  1.1.4.2  yamt 
   1243  1.1.4.2  yamt ATF_TC_BODY(bpfjit_alu_neg, tc)
   1244  1.1.4.2  yamt {
   1245  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1246  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 777),
   1247  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_NEG, 0),
   1248  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   1249  1.1.4.2  yamt 	};
   1250  1.1.4.2  yamt 
   1251  1.1.4.3  yamt 	bpfjit_func_t code;
   1252  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1253  1.1.4.2  yamt 
   1254  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1255  1.1.4.2  yamt 
   1256  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1257  1.1.4.2  yamt 
   1258  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1259  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1260  1.1.4.2  yamt 
   1261  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0u-777u);
   1262  1.1.4.2  yamt 
   1263  1.1.4.2  yamt 	bpfjit_free_code(code);
   1264  1.1.4.2  yamt }
   1265  1.1.4.2  yamt 
   1266  1.1.4.2  yamt ATF_TC(bpfjit_jmp_ja);
   1267  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_ja, tc)
   1268  1.1.4.2  yamt {
   1269  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1270  1.1.4.2  yamt 	    "Test JIT compilation of BPF_JMP+BPF_JA");
   1271  1.1.4.2  yamt }
   1272  1.1.4.2  yamt 
   1273  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_ja, tc)
   1274  1.1.4.2  yamt {
   1275  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1276  1.1.4.2  yamt 		BPF_STMT(BPF_JMP+BPF_JA, 1),
   1277  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1278  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   1279  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1280  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1281  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1282  1.1.4.2  yamt 	};
   1283  1.1.4.2  yamt 
   1284  1.1.4.3  yamt 	bpfjit_func_t code;
   1285  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1286  1.1.4.2  yamt 
   1287  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1288  1.1.4.2  yamt 
   1289  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1290  1.1.4.2  yamt 
   1291  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1292  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1293  1.1.4.2  yamt 
   1294  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_MAX);
   1295  1.1.4.2  yamt 
   1296  1.1.4.2  yamt 	bpfjit_free_code(code);
   1297  1.1.4.2  yamt }
   1298  1.1.4.2  yamt 
   1299  1.1.4.2  yamt ATF_TC(bpfjit_jmp_jgt_k);
   1300  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_jgt_k, tc)
   1301  1.1.4.2  yamt {
   1302  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1303  1.1.4.2  yamt 	    "Test JIT compilation of BPF_JMP+BPF_JGT+BPF_K");
   1304  1.1.4.2  yamt }
   1305  1.1.4.2  yamt 
   1306  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_jgt_k, tc)
   1307  1.1.4.2  yamt {
   1308  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1309  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1310  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 7, 0, 1),
   1311  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1312  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 2, 2, 0),
   1313  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 9, 0, 0),
   1314  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1315  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 4, 1, 1),
   1316  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1317  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 6, 2, 3),
   1318  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1319  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1320  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1321  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 5, 3, 1),
   1322  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1323  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, 0, 0, 0),
   1324  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   1325  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 8)
   1326  1.1.4.2  yamt 	};
   1327  1.1.4.2  yamt 
   1328  1.1.4.3  yamt 	bpfjit_func_t code;
   1329  1.1.4.2  yamt 	uint8_t pkt[8]; /* the program doesn't read any data */
   1330  1.1.4.2  yamt 
   1331  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1332  1.1.4.2  yamt 
   1333  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1334  1.1.4.2  yamt 
   1335  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1336  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1337  1.1.4.2  yamt 
   1338  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
   1339  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 1);
   1340  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 3, 3) == 7);
   1341  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 4, 4) == 7);
   1342  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 5, 5) == 7);
   1343  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 6, 6) == 8);
   1344  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 7, 7) == 5);
   1345  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 8, 8) == 0);
   1346  1.1.4.2  yamt 
   1347  1.1.4.2  yamt 	bpfjit_free_code(code);
   1348  1.1.4.2  yamt }
   1349  1.1.4.2  yamt 
   1350  1.1.4.2  yamt ATF_TC(bpfjit_jmp_jge_k);
   1351  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_jge_k, tc)
   1352  1.1.4.2  yamt {
   1353  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1354  1.1.4.2  yamt 	    "Test JIT compilation of BPF_JMP+BPF_JGE+BPF_K");
   1355  1.1.4.2  yamt }
   1356  1.1.4.2  yamt 
   1357  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_jge_k, tc)
   1358  1.1.4.2  yamt {
   1359  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1360  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1361  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 8, 0, 1),
   1362  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1363  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 3, 2, 0),
   1364  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 9, 0, 0),
   1365  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1366  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 5, 1, 1),
   1367  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1368  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 7, 2, 3),
   1369  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1370  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1371  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1372  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 6, 3, 1),
   1373  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1374  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 1, 0, 0),
   1375  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   1376  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 8)
   1377  1.1.4.2  yamt 	};
   1378  1.1.4.2  yamt 
   1379  1.1.4.3  yamt 	bpfjit_func_t code;
   1380  1.1.4.2  yamt 	uint8_t pkt[8]; /* the program doesn't read any data */
   1381  1.1.4.2  yamt 
   1382  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1383  1.1.4.2  yamt 
   1384  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1385  1.1.4.2  yamt 
   1386  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1387  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1388  1.1.4.2  yamt 
   1389  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
   1390  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 1);
   1391  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 3, 3) == 7);
   1392  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 4, 4) == 7);
   1393  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 5, 5) == 7);
   1394  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 6, 6) == 8);
   1395  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 7, 7) == 5);
   1396  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 8, 8) == 0);
   1397  1.1.4.2  yamt 
   1398  1.1.4.2  yamt 	bpfjit_free_code(code);
   1399  1.1.4.2  yamt }
   1400  1.1.4.2  yamt 
   1401  1.1.4.2  yamt ATF_TC(bpfjit_jmp_jeq_k);
   1402  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_jeq_k, tc)
   1403  1.1.4.2  yamt {
   1404  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1405  1.1.4.2  yamt 	    "Test JIT compilation of BPF_JMP+BPF_JEQ+BPF_K");
   1406  1.1.4.2  yamt }
   1407  1.1.4.2  yamt 
   1408  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_jeq_k, tc)
   1409  1.1.4.2  yamt {
   1410  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1411  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1412  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 8, 0, 1),
   1413  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1414  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 3, 1, 0),
   1415  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 9, 1, 1),
   1416  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1417  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 5, 1, 1),
   1418  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1419  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 7, 2, 3),
   1420  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1421  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1422  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1423  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 6, 3, 1),
   1424  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1425  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 1, 0, 0),
   1426  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   1427  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 8)
   1428  1.1.4.2  yamt 	};
   1429  1.1.4.2  yamt 
   1430  1.1.4.3  yamt 	bpfjit_func_t code;
   1431  1.1.4.2  yamt 	uint8_t pkt[8]; /* the program doesn't read any data */
   1432  1.1.4.2  yamt 
   1433  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1434  1.1.4.2  yamt 
   1435  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1436  1.1.4.2  yamt 
   1437  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1438  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1439  1.1.4.2  yamt 
   1440  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 7);
   1441  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 7);
   1442  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 3, 3) == 1);
   1443  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 4, 4) == 7);
   1444  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 5, 5) == 7);
   1445  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 6, 6) == 8);
   1446  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 7, 7) == 5);
   1447  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 8, 8) == 0);
   1448  1.1.4.2  yamt 
   1449  1.1.4.2  yamt 	bpfjit_free_code(code);
   1450  1.1.4.2  yamt }
   1451  1.1.4.2  yamt 
   1452  1.1.4.2  yamt ATF_TC(bpfjit_jmp_jset_k);
   1453  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_jset_k, tc)
   1454  1.1.4.2  yamt {
   1455  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1456  1.1.4.2  yamt 	    "Test JIT compilation of BPF_JMP+BPF_JSET+BPF_K");
   1457  1.1.4.2  yamt }
   1458  1.1.4.2  yamt 
   1459  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_jset_k, tc)
   1460  1.1.4.2  yamt {
   1461  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1462  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1463  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 8, 0, 1),
   1464  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1465  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 4, 2, 0),
   1466  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 3, 0, 0),
   1467  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1468  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 2, 1, 1),
   1469  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1470  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 1, 2, 3),
   1471  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1472  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1473  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1474  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 2, 3, 1),
   1475  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1476  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 7, 0, 0),
   1477  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   1478  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 8)
   1479  1.1.4.2  yamt 	};
   1480  1.1.4.2  yamt 
   1481  1.1.4.3  yamt 	bpfjit_func_t code;
   1482  1.1.4.2  yamt 	uint8_t pkt[8]; /* the program doesn't read any data */
   1483  1.1.4.2  yamt 
   1484  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1485  1.1.4.2  yamt 
   1486  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1487  1.1.4.2  yamt 
   1488  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1489  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1490  1.1.4.2  yamt 
   1491  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
   1492  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 1);
   1493  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 3, 3) == 1);
   1494  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 4, 4) == 7);
   1495  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 5, 5) == 5);
   1496  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 6, 6) == 8);
   1497  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 7, 7) == 5);
   1498  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 8, 8) == 0);
   1499  1.1.4.2  yamt 
   1500  1.1.4.2  yamt 	bpfjit_free_code(code);
   1501  1.1.4.2  yamt }
   1502  1.1.4.2  yamt 
   1503  1.1.4.2  yamt ATF_TC(bpfjit_jmp_modulo_k);
   1504  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_modulo_k, tc)
   1505  1.1.4.2  yamt {
   1506  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1507  1.1.4.2  yamt 	    "Test JIT compilation of modulo logic of BPF_JMP+BPF_K operations");
   1508  1.1.4.2  yamt }
   1509  1.1.4.2  yamt 
   1510  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_modulo_k, tc)
   1511  1.1.4.2  yamt {
   1512  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1513  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0x7fffff77)),
   1514  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 4),
   1515  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, UINT32_C(0xfffff770), 1, 0),
   1516  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1517  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, UINT32_C(0xfffff770), 0, 1),
   1518  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1519  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, UINT32_C(0xfffff771), 0, 1),
   1520  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1521  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, UINT32_C(0xfffff770), 0, 3),
   1522  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, UINT32_C(0xfffff770), 2, 0),
   1523  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, UINT32_C(0xfffff771), 1, 0),
   1524  1.1.4.2  yamt 		BPF_STMT(BPF_JMP+BPF_JA, 1),
   1525  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1526  1.1.4.2  yamt 
   1527  1.1.4.2  yamt 		/* FFFFF770+FFFFF770 = 00000001,FFFFEEE0 */
   1528  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xfffff770)),
   1529  1.1.4.2  yamt 
   1530  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, UINT32_C(0xffffeee0), 1, 0),
   1531  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1532  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, UINT32_C(0xffffeee0), 0, 1),
   1533  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1534  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, UINT32_C(0xffffeee1), 0, 1),
   1535  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1536  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, UINT32_C(0xffffeee0), 0, 3),
   1537  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, UINT32_C(0xffffeee0), 2, 0),
   1538  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, UINT32_C(0xffffeee1), 1, 0),
   1539  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   1540  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7)
   1541  1.1.4.2  yamt 	};
   1542  1.1.4.2  yamt 
   1543  1.1.4.3  yamt 	bpfjit_func_t code;
   1544  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1545  1.1.4.2  yamt 
   1546  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1547  1.1.4.2  yamt 
   1548  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1549  1.1.4.2  yamt 
   1550  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1551  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1552  1.1.4.2  yamt 
   1553  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_MAX);
   1554  1.1.4.2  yamt 
   1555  1.1.4.2  yamt 	bpfjit_free_code(code);
   1556  1.1.4.2  yamt }
   1557  1.1.4.2  yamt 
   1558  1.1.4.2  yamt ATF_TC(bpfjit_jmp_jgt_x);
   1559  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_jgt_x, tc)
   1560  1.1.4.2  yamt {
   1561  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1562  1.1.4.2  yamt 	    "Test JIT compilation of BPF_JMP+BPF_JGT+BPF_X");
   1563  1.1.4.2  yamt }
   1564  1.1.4.2  yamt 
   1565  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_jgt_x, tc)
   1566  1.1.4.2  yamt {
   1567  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1568  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1569  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
   1570  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 1),
   1571  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1572  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
   1573  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 3, 0),
   1574  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
   1575  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 0),
   1576  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1577  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
   1578  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 1, 1),
   1579  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1580  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
   1581  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 2, 3),
   1582  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1583  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1584  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1585  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   1586  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 4, 1),
   1587  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1588  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   1589  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 0),
   1590  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   1591  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 8)
   1592  1.1.4.2  yamt 	};
   1593  1.1.4.2  yamt 
   1594  1.1.4.3  yamt 	bpfjit_func_t code;
   1595  1.1.4.2  yamt 	uint8_t pkt[8]; /* the program doesn't read any data */
   1596  1.1.4.2  yamt 
   1597  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1598  1.1.4.2  yamt 
   1599  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1600  1.1.4.2  yamt 
   1601  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1602  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1603  1.1.4.2  yamt 
   1604  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
   1605  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 1);
   1606  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 3, 3) == 7);
   1607  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 4, 4) == 7);
   1608  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 5, 5) == 7);
   1609  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 6, 6) == 8);
   1610  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 7, 7) == 5);
   1611  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 8, 8) == 0);
   1612  1.1.4.2  yamt 
   1613  1.1.4.2  yamt 	bpfjit_free_code(code);
   1614  1.1.4.2  yamt }
   1615  1.1.4.2  yamt 
   1616  1.1.4.2  yamt ATF_TC(bpfjit_jmp_jge_x);
   1617  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_jge_x, tc)
   1618  1.1.4.2  yamt {
   1619  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1620  1.1.4.2  yamt 	    "Test JIT compilation of BPF_JMP+BPF_JGE+BPF_X");
   1621  1.1.4.2  yamt }
   1622  1.1.4.2  yamt 
   1623  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_jge_x, tc)
   1624  1.1.4.2  yamt {
   1625  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1626  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1627  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
   1628  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 1),
   1629  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1630  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   1631  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 3, 0),
   1632  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
   1633  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 0),
   1634  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1635  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   1636  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 1, 1),
   1637  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1638  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
   1639  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 2, 3),
   1640  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1641  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1642  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1643  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
   1644  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 4, 1),
   1645  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1646  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
   1647  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 0),
   1648  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   1649  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 8)
   1650  1.1.4.2  yamt 	};
   1651  1.1.4.2  yamt 
   1652  1.1.4.3  yamt 	bpfjit_func_t code;
   1653  1.1.4.2  yamt 	uint8_t pkt[8]; /* the program doesn't read any data */
   1654  1.1.4.2  yamt 
   1655  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1656  1.1.4.2  yamt 
   1657  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1658  1.1.4.2  yamt 
   1659  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1660  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1661  1.1.4.2  yamt 
   1662  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
   1663  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 1);
   1664  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 3, 3) == 7);
   1665  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 4, 4) == 7);
   1666  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 5, 5) == 7);
   1667  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 6, 6) == 8);
   1668  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 7, 7) == 5);
   1669  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 8, 8) == 0);
   1670  1.1.4.2  yamt 
   1671  1.1.4.2  yamt 	bpfjit_free_code(code);
   1672  1.1.4.2  yamt }
   1673  1.1.4.2  yamt 
   1674  1.1.4.2  yamt ATF_TC(bpfjit_jmp_jeq_x);
   1675  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_jeq_x, tc)
   1676  1.1.4.2  yamt {
   1677  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1678  1.1.4.2  yamt 	    "Test JIT compilation of BPF_JMP+BPF_JEQ+BPF_X");
   1679  1.1.4.2  yamt }
   1680  1.1.4.2  yamt 
   1681  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_jeq_x, tc)
   1682  1.1.4.2  yamt {
   1683  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1684  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1685  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
   1686  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
   1687  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1688  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   1689  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 0),
   1690  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
   1691  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
   1692  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1693  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   1694  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
   1695  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1696  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
   1697  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 3),
   1698  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1699  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1700  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1701  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
   1702  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 3, 1),
   1703  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1704  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 0),
   1705  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   1706  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 8)
   1707  1.1.4.2  yamt 	};
   1708  1.1.4.2  yamt 
   1709  1.1.4.3  yamt 	bpfjit_func_t code;
   1710  1.1.4.2  yamt 	uint8_t pkt[8]; /* the program doesn't read any data */
   1711  1.1.4.2  yamt 
   1712  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1713  1.1.4.2  yamt 
   1714  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1715  1.1.4.2  yamt 
   1716  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1717  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1718  1.1.4.2  yamt 
   1719  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 7);
   1720  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 7);
   1721  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 3, 3) == 1);
   1722  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 4, 4) == 7);
   1723  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 5, 5) == 7);
   1724  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 6, 6) == 8);
   1725  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 7, 7) == 5);
   1726  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 8, 8) == 0);
   1727  1.1.4.2  yamt 
   1728  1.1.4.2  yamt 	bpfjit_free_code(code);
   1729  1.1.4.2  yamt }
   1730  1.1.4.2  yamt 
   1731  1.1.4.2  yamt ATF_TC(bpfjit_jmp_jset_x);
   1732  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_jset_x, tc)
   1733  1.1.4.2  yamt {
   1734  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1735  1.1.4.2  yamt 	    "Test JIT compilation of BPF_JMP+BPF_JSET+BPF_X");
   1736  1.1.4.2  yamt }
   1737  1.1.4.2  yamt 
   1738  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_jset_x, tc)
   1739  1.1.4.2  yamt {
   1740  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1741  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   1742  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
   1743  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 0, 1),
   1744  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1745  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
   1746  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 2, 0),
   1747  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 3, 0, 0),
   1748  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1749  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
   1750  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 1, 1),
   1751  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1752  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
   1753  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 2, 3),
   1754  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1755  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1756  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1757  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
   1758  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 4, 1),
   1759  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1760  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
   1761  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 0, 0),
   1762  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   1763  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 8)
   1764  1.1.4.2  yamt 	};
   1765  1.1.4.2  yamt 
   1766  1.1.4.3  yamt 	bpfjit_func_t code;
   1767  1.1.4.2  yamt 	uint8_t pkt[8]; /* the program doesn't read any data */
   1768  1.1.4.2  yamt 
   1769  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1770  1.1.4.2  yamt 
   1771  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1772  1.1.4.2  yamt 
   1773  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1774  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1775  1.1.4.2  yamt 
   1776  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
   1777  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 1);
   1778  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 3, 3) == 1);
   1779  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 4, 4) == 7);
   1780  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 5, 5) == 5);
   1781  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 6, 6) == 8);
   1782  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 7, 7) == 5);
   1783  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 8, 8) == 0);
   1784  1.1.4.2  yamt 
   1785  1.1.4.2  yamt 	bpfjit_free_code(code);
   1786  1.1.4.2  yamt }
   1787  1.1.4.2  yamt 
   1788  1.1.4.2  yamt ATF_TC(bpfjit_jmp_modulo_x);
   1789  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_jmp_modulo_x, tc)
   1790  1.1.4.2  yamt {
   1791  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1792  1.1.4.2  yamt 	    "Test JIT compilation of modulo logic of BPF_JMP+BPF_X operations");
   1793  1.1.4.2  yamt }
   1794  1.1.4.2  yamt 
   1795  1.1.4.2  yamt ATF_TC_BODY(bpfjit_jmp_modulo_x, tc)
   1796  1.1.4.2  yamt {
   1797  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   1798  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0x7fffff77)),
   1799  1.1.4.2  yamt 		/* FFFFF770 << 4 = FFFFF770 */
   1800  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_LSH+BPF_K, 4),
   1801  1.1.4.2  yamt 
   1802  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xfffff770)),
   1803  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
   1804  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   1805  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 1),
   1806  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 1),
   1807  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xfffff771)),
   1808  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 1),
   1809  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 2),
   1810  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xfffff770)),
   1811  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 4),
   1812  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 3, 0),
   1813  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xfffff771)),
   1814  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 1, 0),
   1815  1.1.4.2  yamt 		BPF_STMT(BPF_JMP+BPF_JA, 1),
   1816  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 3),
   1817  1.1.4.2  yamt 
   1818  1.1.4.2  yamt 		/* FFFFF770+FFFFF770 = 00000001,FFFFEEE0 */
   1819  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xfffff770)),
   1820  1.1.4.2  yamt 
   1821  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xffffeee0)),
   1822  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
   1823  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 4),
   1824  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 0, 1),
   1825  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 5),
   1826  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xffffeee1)),
   1827  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 0, 1),
   1828  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 6),
   1829  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xffffeee0)),
   1830  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 4),
   1831  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGT+BPF_X, 0, 3, 0),
   1832  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0xffffeee1)),
   1833  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JGE+BPF_X, 0, 1, 0),
   1834  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   1835  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7)
   1836  1.1.4.2  yamt 	};
   1837  1.1.4.2  yamt 
   1838  1.1.4.3  yamt 	bpfjit_func_t code;
   1839  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   1840  1.1.4.2  yamt 
   1841  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   1842  1.1.4.2  yamt 
   1843  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   1844  1.1.4.2  yamt 
   1845  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   1846  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   1847  1.1.4.2  yamt 
   1848  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_MAX);
   1849  1.1.4.2  yamt 
   1850  1.1.4.2  yamt 	bpfjit_free_code(code);
   1851  1.1.4.2  yamt }
   1852  1.1.4.2  yamt 
   1853  1.1.4.2  yamt ATF_TC(bpfjit_ld_abs);
   1854  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ld_abs, tc)
   1855  1.1.4.2  yamt {
   1856  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1857  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LD+BPF_ABS");
   1858  1.1.4.2  yamt }
   1859  1.1.4.2  yamt 
   1860  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ld_abs, tc)
   1861  1.1.4.2  yamt {
   1862  1.1.4.2  yamt 	static struct bpf_insn insns[3][2] = {
   1863  1.1.4.2  yamt 		{
   1864  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 5),
   1865  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_A, 0)
   1866  1.1.4.2  yamt 		},
   1867  1.1.4.2  yamt 		{
   1868  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 5),
   1869  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_A, 0)
   1870  1.1.4.2  yamt 		},
   1871  1.1.4.2  yamt 		{
   1872  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 5),
   1873  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_A, 0)
   1874  1.1.4.2  yamt 		}
   1875  1.1.4.2  yamt 	};
   1876  1.1.4.2  yamt 
   1877  1.1.4.2  yamt 	static size_t lengths[3] = { 1, 2, 4 };
   1878  1.1.4.2  yamt 	static unsigned int expected[3] = { 0xde, 0xdead, 0xdeadbeef };
   1879  1.1.4.2  yamt 
   1880  1.1.4.2  yamt 	size_t i, l;
   1881  1.1.4.2  yamt 	uint8_t *pkt = deadbeef_at_5;
   1882  1.1.4.2  yamt 	size_t pktsize = sizeof(deadbeef_at_5);
   1883  1.1.4.2  yamt 
   1884  1.1.4.2  yamt 	size_t insn_count = sizeof(insns[0]) / sizeof(insns[0][0]);
   1885  1.1.4.2  yamt 
   1886  1.1.4.2  yamt 	for (i = 0; i < 3; i++) {
   1887  1.1.4.3  yamt 		bpfjit_func_t code;
   1888  1.1.4.2  yamt 
   1889  1.1.4.2  yamt 		ATF_CHECK(bpf_validate(insns[i], insn_count));
   1890  1.1.4.2  yamt 
   1891  1.1.4.3  yamt 		code = bpfjit_generate_code(bc, insns[i], insn_count);
   1892  1.1.4.2  yamt 		ATF_REQUIRE(code != NULL);
   1893  1.1.4.2  yamt 
   1894  1.1.4.2  yamt 		for (l = 0; l < 5 + lengths[i]; l++) {
   1895  1.1.4.2  yamt 			ATF_CHECK(code(pkt, l, l) == 0);
   1896  1.1.4.2  yamt 			ATF_CHECK(code(pkt, pktsize, l) == 0);
   1897  1.1.4.2  yamt 		}
   1898  1.1.4.2  yamt 
   1899  1.1.4.2  yamt 		l = 5 + lengths[i];
   1900  1.1.4.2  yamt 		ATF_CHECK(code(pkt, l, l) == expected[i]);
   1901  1.1.4.2  yamt 		ATF_CHECK(code(pkt, pktsize, l) == expected[i]);
   1902  1.1.4.2  yamt 
   1903  1.1.4.2  yamt 		l = pktsize;
   1904  1.1.4.2  yamt 		ATF_CHECK(code(pkt, l, l) == expected[i]);
   1905  1.1.4.2  yamt 
   1906  1.1.4.2  yamt 		bpfjit_free_code(code);
   1907  1.1.4.2  yamt 	}
   1908  1.1.4.2  yamt }
   1909  1.1.4.2  yamt 
   1910  1.1.4.2  yamt ATF_TC(bpfjit_ld_abs_k_overflow);
   1911  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ld_abs_k_overflow, tc)
   1912  1.1.4.2  yamt {
   1913  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   1914  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LD+BPF_ABS with overflow in k+4");
   1915  1.1.4.2  yamt }
   1916  1.1.4.2  yamt 
   1917  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ld_abs_k_overflow, tc)
   1918  1.1.4.2  yamt {
   1919  1.1.4.2  yamt 	static struct bpf_insn insns[12][3] = {
   1920  1.1.4.2  yamt 		{
   1921  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, UINT32_MAX),
   1922  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1923  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1924  1.1.4.2  yamt 		},
   1925  1.1.4.2  yamt 		{
   1926  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, UINT32_MAX - 1),
   1927  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1928  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1929  1.1.4.2  yamt 		},
   1930  1.1.4.2  yamt 		{
   1931  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX),
   1932  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1933  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1934  1.1.4.2  yamt 		},
   1935  1.1.4.2  yamt 		{
   1936  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 1),
   1937  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1938  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1939  1.1.4.2  yamt 		},
   1940  1.1.4.2  yamt 		{
   1941  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 2),
   1942  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1943  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1944  1.1.4.2  yamt 		},
   1945  1.1.4.2  yamt 		{
   1946  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 3),
   1947  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1948  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1949  1.1.4.2  yamt 		},
   1950  1.1.4.2  yamt 		{
   1951  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1952  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, UINT32_MAX),
   1953  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1954  1.1.4.2  yamt 		},
   1955  1.1.4.2  yamt 		{
   1956  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1957  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_ABS, UINT32_MAX - 1),
   1958  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1959  1.1.4.2  yamt 		},
   1960  1.1.4.2  yamt 		{
   1961  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1962  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX),
   1963  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1964  1.1.4.2  yamt 		},
   1965  1.1.4.2  yamt 		{
   1966  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1967  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 1),
   1968  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1969  1.1.4.2  yamt 		},
   1970  1.1.4.2  yamt 		{
   1971  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1972  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 2),
   1973  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1974  1.1.4.2  yamt 		},
   1975  1.1.4.2  yamt 		{
   1976  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 7),
   1977  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_ABS, UINT32_MAX - 3),
   1978  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   1979  1.1.4.2  yamt 		}
   1980  1.1.4.2  yamt 	};
   1981  1.1.4.2  yamt 
   1982  1.1.4.2  yamt 	int i;
   1983  1.1.4.2  yamt 	uint8_t pkt[8] = { 0 };
   1984  1.1.4.2  yamt 
   1985  1.1.4.2  yamt 	size_t insn_count = sizeof(insns[0]) / sizeof(insns[0][0]);
   1986  1.1.4.2  yamt 
   1987  1.1.4.2  yamt 	for (i = 0; i < 3; i++) {
   1988  1.1.4.3  yamt 		bpfjit_func_t code;
   1989  1.1.4.2  yamt 
   1990  1.1.4.2  yamt 		ATF_CHECK(bpf_validate(insns[i], insn_count));
   1991  1.1.4.2  yamt 
   1992  1.1.4.3  yamt 		code = bpfjit_generate_code(bc, insns[i], insn_count);
   1993  1.1.4.2  yamt 		ATF_REQUIRE(code != NULL);
   1994  1.1.4.2  yamt 
   1995  1.1.4.2  yamt 		ATF_CHECK(code(pkt, 8, 8) == 0);
   1996  1.1.4.2  yamt 
   1997  1.1.4.2  yamt 		bpfjit_free_code(code);
   1998  1.1.4.2  yamt 	}
   1999  1.1.4.2  yamt }
   2000  1.1.4.2  yamt 
   2001  1.1.4.2  yamt ATF_TC(bpfjit_ld_ind);
   2002  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ld_ind, tc)
   2003  1.1.4.2  yamt {
   2004  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2005  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LD+BPF_IND");
   2006  1.1.4.2  yamt }
   2007  1.1.4.2  yamt 
   2008  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ld_ind, tc)
   2009  1.1.4.2  yamt {
   2010  1.1.4.2  yamt 	static struct bpf_insn insns[6][3] = {
   2011  1.1.4.2  yamt 		{
   2012  1.1.4.2  yamt 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   2013  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_IND, 2),
   2014  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_A, 0)
   2015  1.1.4.2  yamt 		},
   2016  1.1.4.2  yamt 		{
   2017  1.1.4.2  yamt 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   2018  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 2),
   2019  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_A, 0)
   2020  1.1.4.2  yamt 		},
   2021  1.1.4.2  yamt 		{
   2022  1.1.4.2  yamt 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
   2023  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, 2),
   2024  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_A, 0)
   2025  1.1.4.2  yamt 		},
   2026  1.1.4.2  yamt 		{
   2027  1.1.4.2  yamt 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2028  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_B+BPF_IND, 0),
   2029  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_A, 0)
   2030  1.1.4.2  yamt 		},
   2031  1.1.4.2  yamt 		{
   2032  1.1.4.2  yamt 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2033  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 0),
   2034  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_A, 0)
   2035  1.1.4.2  yamt 		},
   2036  1.1.4.2  yamt 		{
   2037  1.1.4.2  yamt 			BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2038  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, 0),
   2039  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_A, 0)
   2040  1.1.4.2  yamt 		}
   2041  1.1.4.2  yamt 	};
   2042  1.1.4.2  yamt 
   2043  1.1.4.2  yamt 	static size_t lengths[6] = { 1, 2, 4, 1, 2, 4 };
   2044  1.1.4.2  yamt 
   2045  1.1.4.2  yamt 	static unsigned int expected[6] = {
   2046  1.1.4.2  yamt 		0xde, 0xdead, 0xdeadbeef,
   2047  1.1.4.2  yamt 		0xde, 0xdead, 0xdeadbeef
   2048  1.1.4.2  yamt 	};
   2049  1.1.4.2  yamt 
   2050  1.1.4.2  yamt 	size_t i, l;
   2051  1.1.4.2  yamt 	uint8_t *pkt = deadbeef_at_5;
   2052  1.1.4.2  yamt 	size_t pktsize = sizeof(deadbeef_at_5);
   2053  1.1.4.2  yamt 
   2054  1.1.4.2  yamt 	size_t insn_count = sizeof(insns[0]) / sizeof(insns[0][0]);
   2055  1.1.4.2  yamt 
   2056  1.1.4.2  yamt 	for (i = 0; i < 3; i++) {
   2057  1.1.4.3  yamt 		bpfjit_func_t code;
   2058  1.1.4.2  yamt 
   2059  1.1.4.2  yamt 		ATF_CHECK(bpf_validate(insns[i], insn_count));
   2060  1.1.4.2  yamt 
   2061  1.1.4.3  yamt 		code = bpfjit_generate_code(bc, insns[i], insn_count);
   2062  1.1.4.2  yamt 		ATF_REQUIRE(code != NULL);
   2063  1.1.4.2  yamt 
   2064  1.1.4.2  yamt 		for (l = 0; l < 5 + lengths[i]; l++) {
   2065  1.1.4.2  yamt 			ATF_CHECK(code(pkt, l, l) == 0);
   2066  1.1.4.2  yamt 			ATF_CHECK(code(pkt, pktsize, l) == 0);
   2067  1.1.4.2  yamt 		}
   2068  1.1.4.2  yamt 
   2069  1.1.4.2  yamt 		l = 5 + lengths[i];
   2070  1.1.4.2  yamt 		ATF_CHECK(code(pkt, l, l) == expected[i]);
   2071  1.1.4.2  yamt 		ATF_CHECK(code(pkt, pktsize, l) == expected[i]);
   2072  1.1.4.2  yamt 
   2073  1.1.4.2  yamt 		l = pktsize;
   2074  1.1.4.2  yamt 		ATF_CHECK(code(pkt, l, l) == expected[i]);
   2075  1.1.4.2  yamt 
   2076  1.1.4.2  yamt 		bpfjit_free_code(code);
   2077  1.1.4.2  yamt 	}
   2078  1.1.4.2  yamt }
   2079  1.1.4.2  yamt 
   2080  1.1.4.2  yamt ATF_TC(bpfjit_ld_ind_k_overflow);
   2081  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ld_ind_k_overflow, tc)
   2082  1.1.4.2  yamt {
   2083  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2084  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LD+BPF_IND with overflow in k+4");
   2085  1.1.4.2  yamt }
   2086  1.1.4.2  yamt 
   2087  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ld_ind_k_overflow, tc)
   2088  1.1.4.2  yamt {
   2089  1.1.4.2  yamt 	static struct bpf_insn insns[12][3] = {
   2090  1.1.4.2  yamt 		{
   2091  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, UINT32_MAX),
   2092  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2093  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2094  1.1.4.2  yamt 		},
   2095  1.1.4.2  yamt 		{
   2096  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, UINT32_MAX - 1),
   2097  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2098  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2099  1.1.4.2  yamt 		},
   2100  1.1.4.2  yamt 		{
   2101  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX),
   2102  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2103  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2104  1.1.4.2  yamt 		},
   2105  1.1.4.2  yamt 		{
   2106  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 1),
   2107  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2108  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2109  1.1.4.2  yamt 		},
   2110  1.1.4.2  yamt 		{
   2111  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 2),
   2112  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2113  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2114  1.1.4.2  yamt 		},
   2115  1.1.4.2  yamt 		{
   2116  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 3),
   2117  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2118  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2119  1.1.4.2  yamt 		},
   2120  1.1.4.2  yamt 		{
   2121  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2122  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, UINT32_MAX),
   2123  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2124  1.1.4.2  yamt 		},
   2125  1.1.4.2  yamt 		{
   2126  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2127  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, UINT32_MAX - 1),
   2128  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2129  1.1.4.2  yamt 		},
   2130  1.1.4.2  yamt 		{
   2131  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2132  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX),
   2133  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2134  1.1.4.2  yamt 		},
   2135  1.1.4.2  yamt 		{
   2136  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2137  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 1),
   2138  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2139  1.1.4.2  yamt 		},
   2140  1.1.4.2  yamt 		{
   2141  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2142  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 2),
   2143  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2144  1.1.4.2  yamt 		},
   2145  1.1.4.2  yamt 		{
   2146  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_H+BPF_IND, 7),
   2147  1.1.4.2  yamt 			BPF_STMT(BPF_LD+BPF_W+BPF_IND, UINT32_MAX - 3),
   2148  1.1.4.2  yamt 			BPF_STMT(BPF_RET+BPF_K, 1)
   2149  1.1.4.2  yamt 		}
   2150  1.1.4.2  yamt 	};
   2151  1.1.4.2  yamt 
   2152  1.1.4.2  yamt 	int i;
   2153  1.1.4.2  yamt 	uint8_t pkt[8] = { 0 };
   2154  1.1.4.2  yamt 
   2155  1.1.4.2  yamt 	size_t insn_count = sizeof(insns[0]) / sizeof(insns[0][0]);
   2156  1.1.4.2  yamt 
   2157  1.1.4.2  yamt 	for (i = 0; i < 3; i++) {
   2158  1.1.4.3  yamt 		bpfjit_func_t code;
   2159  1.1.4.2  yamt 
   2160  1.1.4.2  yamt 		ATF_CHECK(bpf_validate(insns[i], insn_count));
   2161  1.1.4.2  yamt 
   2162  1.1.4.3  yamt 		code = bpfjit_generate_code(bc, insns[i], insn_count);
   2163  1.1.4.2  yamt 		ATF_REQUIRE(code != NULL);
   2164  1.1.4.2  yamt 
   2165  1.1.4.2  yamt 		ATF_CHECK(code(pkt, 8, 8) == 0);
   2166  1.1.4.2  yamt 
   2167  1.1.4.2  yamt 		bpfjit_free_code(code);
   2168  1.1.4.2  yamt 	}
   2169  1.1.4.2  yamt }
   2170  1.1.4.2  yamt 
   2171  1.1.4.2  yamt ATF_TC(bpfjit_ld_ind_x_overflow1);
   2172  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ld_ind_x_overflow1, tc)
   2173  1.1.4.2  yamt {
   2174  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2175  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LD+BPF_IND with overflow in X+4");
   2176  1.1.4.2  yamt }
   2177  1.1.4.2  yamt 
   2178  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ld_ind_x_overflow1, tc)
   2179  1.1.4.2  yamt {
   2180  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2181  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_LEN, 0),
   2182  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xffffffff)),
   2183  1.1.4.2  yamt 		BPF_STMT(BPF_MISC+BPF_TAX, 0),
   2184  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_B+BPF_IND, 0),
   2185  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2186  1.1.4.2  yamt 	};
   2187  1.1.4.2  yamt 
   2188  1.1.4.2  yamt 	size_t i;
   2189  1.1.4.3  yamt 	bpfjit_func_t code;
   2190  1.1.4.2  yamt 	uint8_t pkt[8] = { 10, 20, 30, 40, 50, 60, 70, 80 };
   2191  1.1.4.2  yamt 
   2192  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2193  1.1.4.2  yamt 
   2194  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2195  1.1.4.2  yamt 
   2196  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2197  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2198  1.1.4.2  yamt 
   2199  1.1.4.2  yamt 	for (i = 1; i <= sizeof(pkt); i++) {
   2200  1.1.4.2  yamt 		ATF_CHECK(bpf_filter(insns, pkt, i, i) == 10 * i);
   2201  1.1.4.2  yamt 		ATF_CHECK(code(pkt, i, i) == 10 * i);
   2202  1.1.4.2  yamt 	}
   2203  1.1.4.2  yamt 
   2204  1.1.4.2  yamt 	bpfjit_free_code(code);
   2205  1.1.4.2  yamt }
   2206  1.1.4.2  yamt 
   2207  1.1.4.2  yamt ATF_TC(bpfjit_ld_ind_x_overflow2);
   2208  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ld_ind_x_overflow2, tc)
   2209  1.1.4.2  yamt {
   2210  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2211  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LD+BPF_IND with overflow in X+4");
   2212  1.1.4.2  yamt }
   2213  1.1.4.2  yamt 
   2214  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ld_ind_x_overflow2, tc)
   2215  1.1.4.2  yamt {
   2216  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2217  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_LEN, 0),
   2218  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, UINT32_C(0xffffffff)),
   2219  1.1.4.2  yamt 		BPF_STMT(BPF_ST, 3),
   2220  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 3),
   2221  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_B+BPF_IND, 0),
   2222  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2223  1.1.4.2  yamt 	};
   2224  1.1.4.2  yamt 
   2225  1.1.4.2  yamt 	size_t i;
   2226  1.1.4.3  yamt 	bpfjit_func_t code;
   2227  1.1.4.2  yamt 	uint8_t pkt[8] = { 10, 20, 30, 40, 50, 60, 70, 80 };
   2228  1.1.4.2  yamt 
   2229  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2230  1.1.4.2  yamt 
   2231  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2232  1.1.4.2  yamt 
   2233  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2234  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2235  1.1.4.2  yamt 
   2236  1.1.4.2  yamt 	for (i = 1; i <= sizeof(pkt); i++) {
   2237  1.1.4.2  yamt 		ATF_CHECK(bpf_filter(insns, pkt, i, i) == 10 * i);
   2238  1.1.4.2  yamt 		ATF_CHECK(code(pkt, i, i) == 10 * i);
   2239  1.1.4.2  yamt 	}
   2240  1.1.4.2  yamt 
   2241  1.1.4.2  yamt 	bpfjit_free_code(code);
   2242  1.1.4.2  yamt }
   2243  1.1.4.2  yamt 
   2244  1.1.4.2  yamt ATF_TC(bpfjit_ld_len);
   2245  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ld_len, tc)
   2246  1.1.4.2  yamt {
   2247  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2248  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LD+BPF_W+BPF_LEN");
   2249  1.1.4.2  yamt }
   2250  1.1.4.2  yamt 
   2251  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ld_len, tc)
   2252  1.1.4.2  yamt {
   2253  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2254  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2255  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2256  1.1.4.2  yamt 	};
   2257  1.1.4.2  yamt 
   2258  1.1.4.2  yamt 	size_t i;
   2259  1.1.4.3  yamt 	bpfjit_func_t code;
   2260  1.1.4.2  yamt 	uint8_t pkt[32]; /* the program doesn't read any data */
   2261  1.1.4.2  yamt 
   2262  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2263  1.1.4.2  yamt 
   2264  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2265  1.1.4.2  yamt 
   2266  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2267  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2268  1.1.4.2  yamt 
   2269  1.1.4.2  yamt 	for (i = 0; i < sizeof(pkt); i++)
   2270  1.1.4.2  yamt 		ATF_CHECK(code(pkt, i, 1) == i);
   2271  1.1.4.2  yamt 
   2272  1.1.4.2  yamt 	bpfjit_free_code(code);
   2273  1.1.4.2  yamt }
   2274  1.1.4.2  yamt 
   2275  1.1.4.2  yamt ATF_TC(bpfjit_ld_imm);
   2276  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ld_imm, tc)
   2277  1.1.4.2  yamt {
   2278  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2279  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LD+BPF_IMM");
   2280  1.1.4.2  yamt }
   2281  1.1.4.2  yamt 
   2282  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ld_imm, tc)
   2283  1.1.4.2  yamt {
   2284  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2285  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, UINT32_MAX),
   2286  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2287  1.1.4.2  yamt 	};
   2288  1.1.4.2  yamt 
   2289  1.1.4.3  yamt 	bpfjit_func_t code;
   2290  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   2291  1.1.4.2  yamt 
   2292  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2293  1.1.4.2  yamt 
   2294  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2295  1.1.4.2  yamt 
   2296  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2297  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2298  1.1.4.2  yamt 
   2299  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_MAX);
   2300  1.1.4.2  yamt 
   2301  1.1.4.2  yamt 	bpfjit_free_code(code);
   2302  1.1.4.2  yamt }
   2303  1.1.4.2  yamt 
   2304  1.1.4.2  yamt ATF_TC(bpfjit_ldx_imm1);
   2305  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ldx_imm1, tc)
   2306  1.1.4.2  yamt {
   2307  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2308  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LDX+BPF_IMM");
   2309  1.1.4.2  yamt }
   2310  1.1.4.2  yamt 
   2311  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ldx_imm1, tc)
   2312  1.1.4.2  yamt {
   2313  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2314  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_MAX - 5),
   2315  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2316  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2317  1.1.4.2  yamt 	};
   2318  1.1.4.2  yamt 
   2319  1.1.4.3  yamt 	bpfjit_func_t code;
   2320  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   2321  1.1.4.2  yamt 
   2322  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2323  1.1.4.2  yamt 
   2324  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2325  1.1.4.2  yamt 
   2326  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2327  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2328  1.1.4.2  yamt 
   2329  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_MAX - 5);
   2330  1.1.4.2  yamt 
   2331  1.1.4.2  yamt 	bpfjit_free_code(code);
   2332  1.1.4.2  yamt }
   2333  1.1.4.2  yamt 
   2334  1.1.4.2  yamt ATF_TC(bpfjit_ldx_imm2);
   2335  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ldx_imm2, tc)
   2336  1.1.4.2  yamt {
   2337  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2338  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LDX+BPF_IMM");
   2339  1.1.4.2  yamt }
   2340  1.1.4.2  yamt 
   2341  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ldx_imm2, tc)
   2342  1.1.4.2  yamt {
   2343  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2344  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
   2345  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 5),
   2346  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
   2347  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   2348  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX)
   2349  1.1.4.2  yamt 	};
   2350  1.1.4.2  yamt 
   2351  1.1.4.3  yamt 	bpfjit_func_t code;
   2352  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   2353  1.1.4.2  yamt 
   2354  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2355  1.1.4.2  yamt 
   2356  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2357  1.1.4.2  yamt 
   2358  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2359  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2360  1.1.4.2  yamt 
   2361  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == UINT32_MAX);
   2362  1.1.4.2  yamt 
   2363  1.1.4.2  yamt 	bpfjit_free_code(code);
   2364  1.1.4.2  yamt }
   2365  1.1.4.2  yamt 
   2366  1.1.4.2  yamt ATF_TC(bpfjit_ldx_len1);
   2367  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ldx_len1, tc)
   2368  1.1.4.2  yamt {
   2369  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2370  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LDX+BPF_LEN");
   2371  1.1.4.2  yamt }
   2372  1.1.4.2  yamt 
   2373  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ldx_len1, tc)
   2374  1.1.4.2  yamt {
   2375  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2376  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   2377  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2378  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2379  1.1.4.2  yamt 	};
   2380  1.1.4.2  yamt 
   2381  1.1.4.2  yamt 	size_t i;
   2382  1.1.4.3  yamt 	bpfjit_func_t code;
   2383  1.1.4.2  yamt 	uint8_t pkt[5]; /* the program doesn't read any data */
   2384  1.1.4.2  yamt 
   2385  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2386  1.1.4.2  yamt 
   2387  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2388  1.1.4.2  yamt 
   2389  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2390  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2391  1.1.4.2  yamt 
   2392  1.1.4.2  yamt 	for (i = 1; i < sizeof(pkt); i++) {
   2393  1.1.4.2  yamt 		ATF_CHECK(code(pkt, i, 1) == i);
   2394  1.1.4.2  yamt 		ATF_CHECK(code(pkt, i + 1, i) == i + 1);
   2395  1.1.4.2  yamt 	}
   2396  1.1.4.2  yamt 
   2397  1.1.4.2  yamt 	bpfjit_free_code(code);
   2398  1.1.4.2  yamt }
   2399  1.1.4.2  yamt 
   2400  1.1.4.2  yamt ATF_TC(bpfjit_ldx_len2);
   2401  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ldx_len2, tc)
   2402  1.1.4.2  yamt {
   2403  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2404  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LDX+BPF_LEN");
   2405  1.1.4.2  yamt }
   2406  1.1.4.2  yamt 
   2407  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ldx_len2, tc)
   2408  1.1.4.2  yamt {
   2409  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2410  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   2411  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 5),
   2412  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
   2413  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 7),
   2414  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX)
   2415  1.1.4.2  yamt 	};
   2416  1.1.4.2  yamt 
   2417  1.1.4.3  yamt 	bpfjit_func_t code;
   2418  1.1.4.2  yamt 	uint8_t pkt[5]; /* the program doesn't read any data */
   2419  1.1.4.2  yamt 
   2420  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2421  1.1.4.2  yamt 
   2422  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2423  1.1.4.2  yamt 
   2424  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2425  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2426  1.1.4.2  yamt 
   2427  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 5, 1) == UINT32_MAX);
   2428  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 6, 5) == 7);
   2429  1.1.4.2  yamt 
   2430  1.1.4.2  yamt 	bpfjit_free_code(code);
   2431  1.1.4.2  yamt }
   2432  1.1.4.2  yamt 
   2433  1.1.4.2  yamt ATF_TC(bpfjit_ldx_msh);
   2434  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_ldx_msh, tc)
   2435  1.1.4.2  yamt {
   2436  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2437  1.1.4.2  yamt 	    "Test JIT compilation of BPF_LDX+BPF_MSH");
   2438  1.1.4.2  yamt }
   2439  1.1.4.2  yamt 
   2440  1.1.4.2  yamt ATF_TC_BODY(bpfjit_ldx_msh, tc)
   2441  1.1.4.2  yamt {
   2442  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2443  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_B+BPF_MSH, 1),
   2444  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2445  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2446  1.1.4.2  yamt 	};
   2447  1.1.4.2  yamt 
   2448  1.1.4.3  yamt 	bpfjit_func_t code;
   2449  1.1.4.2  yamt 	uint8_t pkt[2] = { 0, 0x7a };
   2450  1.1.4.2  yamt 
   2451  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2452  1.1.4.2  yamt 
   2453  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2454  1.1.4.2  yamt 
   2455  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2456  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2457  1.1.4.2  yamt 
   2458  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 40);
   2459  1.1.4.2  yamt 
   2460  1.1.4.2  yamt 	bpfjit_free_code(code);
   2461  1.1.4.2  yamt }
   2462  1.1.4.2  yamt 
   2463  1.1.4.2  yamt ATF_TC(bpfjit_misc_tax);
   2464  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_misc_tax, tc)
   2465  1.1.4.2  yamt {
   2466  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2467  1.1.4.2  yamt 	    "Test JIT compilation of BPF_MISC+BPF_TAX");
   2468  1.1.4.2  yamt }
   2469  1.1.4.2  yamt 
   2470  1.1.4.2  yamt ATF_TC_BODY(bpfjit_misc_tax, tc)
   2471  1.1.4.2  yamt {
   2472  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2473  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_IMM, 3),
   2474  1.1.4.2  yamt 		BPF_STMT(BPF_MISC+BPF_TAX, 0),
   2475  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_B+BPF_IND, 2),
   2476  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2477  1.1.4.2  yamt 	};
   2478  1.1.4.2  yamt 
   2479  1.1.4.3  yamt 	bpfjit_func_t code;
   2480  1.1.4.2  yamt 	uint8_t pkt[] = { 0, 11, 22, 33, 44, 55 };
   2481  1.1.4.2  yamt 
   2482  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2483  1.1.4.2  yamt 
   2484  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2485  1.1.4.2  yamt 
   2486  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2487  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2488  1.1.4.2  yamt 
   2489  1.1.4.2  yamt 	ATF_CHECK(code(pkt, sizeof(pkt), sizeof(pkt)) == 55);
   2490  1.1.4.2  yamt 
   2491  1.1.4.2  yamt 	bpfjit_free_code(code);
   2492  1.1.4.2  yamt }
   2493  1.1.4.2  yamt 
   2494  1.1.4.2  yamt ATF_TC(bpfjit_misc_txa);
   2495  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_misc_txa, tc)
   2496  1.1.4.2  yamt {
   2497  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2498  1.1.4.2  yamt 	    "Test JIT compilation of BPF_MISC+BPF_TXA");
   2499  1.1.4.2  yamt }
   2500  1.1.4.2  yamt 
   2501  1.1.4.2  yamt ATF_TC_BODY(bpfjit_misc_txa, tc)
   2502  1.1.4.2  yamt {
   2503  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2504  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 391),
   2505  1.1.4.2  yamt 		BPF_STMT(BPF_MISC+BPF_TXA, 0),
   2506  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2507  1.1.4.2  yamt 	};
   2508  1.1.4.2  yamt 
   2509  1.1.4.3  yamt 	bpfjit_func_t code;
   2510  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   2511  1.1.4.2  yamt 
   2512  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2513  1.1.4.2  yamt 
   2514  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2515  1.1.4.2  yamt 
   2516  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2517  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2518  1.1.4.2  yamt 
   2519  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 391);
   2520  1.1.4.2  yamt 
   2521  1.1.4.2  yamt 	bpfjit_free_code(code);
   2522  1.1.4.2  yamt }
   2523  1.1.4.2  yamt 
   2524  1.1.4.2  yamt ATF_TC(bpfjit_st1);
   2525  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_st1, tc)
   2526  1.1.4.2  yamt {
   2527  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2528  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ST");
   2529  1.1.4.2  yamt }
   2530  1.1.4.2  yamt 
   2531  1.1.4.2  yamt ATF_TC_BODY(bpfjit_st1, tc)
   2532  1.1.4.2  yamt {
   2533  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2534  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2535  1.1.4.2  yamt 		BPF_STMT(BPF_ST, 0),
   2536  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_MEM, 0),
   2537  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2538  1.1.4.2  yamt 	};
   2539  1.1.4.2  yamt 
   2540  1.1.4.2  yamt 	size_t i;
   2541  1.1.4.3  yamt 	bpfjit_func_t code;
   2542  1.1.4.2  yamt 	uint8_t pkt[16]; /* the program doesn't read any data */
   2543  1.1.4.2  yamt 
   2544  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2545  1.1.4.2  yamt 
   2546  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2547  1.1.4.2  yamt 
   2548  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2549  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2550  1.1.4.2  yamt 
   2551  1.1.4.2  yamt 	for (i = 1; i <= sizeof(pkt); i++)
   2552  1.1.4.2  yamt 		ATF_CHECK(code(pkt, i, sizeof(pkt)) == i);
   2553  1.1.4.2  yamt 
   2554  1.1.4.2  yamt 	bpfjit_free_code(code);
   2555  1.1.4.2  yamt }
   2556  1.1.4.2  yamt 
   2557  1.1.4.2  yamt ATF_TC(bpfjit_st2);
   2558  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_st2, tc)
   2559  1.1.4.2  yamt {
   2560  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2561  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ST");
   2562  1.1.4.2  yamt }
   2563  1.1.4.2  yamt 
   2564  1.1.4.2  yamt ATF_TC_BODY(bpfjit_st2, tc)
   2565  1.1.4.2  yamt {
   2566  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2567  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2568  1.1.4.2  yamt 		BPF_STMT(BPF_ST, BPF_MEMWORDS-1),
   2569  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_MEM, 0),
   2570  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2571  1.1.4.2  yamt 	};
   2572  1.1.4.2  yamt 
   2573  1.1.4.3  yamt 	bpfjit_func_t code;
   2574  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   2575  1.1.4.2  yamt 
   2576  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2577  1.1.4.2  yamt 
   2578  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2579  1.1.4.2  yamt 
   2580  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2581  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2582  1.1.4.2  yamt 
   2583  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0);
   2584  1.1.4.2  yamt 
   2585  1.1.4.2  yamt 	bpfjit_free_code(code);
   2586  1.1.4.2  yamt }
   2587  1.1.4.2  yamt 
   2588  1.1.4.2  yamt ATF_TC(bpfjit_st3);
   2589  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_st3, tc)
   2590  1.1.4.2  yamt {
   2591  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2592  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ST");
   2593  1.1.4.2  yamt }
   2594  1.1.4.2  yamt 
   2595  1.1.4.2  yamt ATF_TC_BODY(bpfjit_st3, tc)
   2596  1.1.4.2  yamt {
   2597  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2598  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2599  1.1.4.2  yamt 		BPF_STMT(BPF_ST, 0),
   2600  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 100),
   2601  1.1.4.2  yamt 		BPF_STMT(BPF_ST, BPF_MEMWORDS-1),
   2602  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 200),
   2603  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 301, 2, 0),
   2604  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_MEM, BPF_MEMWORDS-1),
   2605  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0),
   2606  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_MEM, 0),
   2607  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2608  1.1.4.2  yamt 	};
   2609  1.1.4.2  yamt 
   2610  1.1.4.3  yamt 	bpfjit_func_t code;
   2611  1.1.4.2  yamt 	uint8_t pkt[2]; /* the program doesn't read any data */
   2612  1.1.4.2  yamt 
   2613  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2614  1.1.4.2  yamt 
   2615  1.1.4.2  yamt 	ATF_REQUIRE(BPF_MEMWORDS > 1);
   2616  1.1.4.2  yamt 
   2617  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2618  1.1.4.2  yamt 
   2619  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2620  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2621  1.1.4.2  yamt 
   2622  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
   2623  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 102);
   2624  1.1.4.2  yamt 
   2625  1.1.4.2  yamt 	bpfjit_free_code(code);
   2626  1.1.4.2  yamt }
   2627  1.1.4.2  yamt 
   2628  1.1.4.2  yamt ATF_TC(bpfjit_st4);
   2629  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_st4, tc)
   2630  1.1.4.2  yamt {
   2631  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2632  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ST");
   2633  1.1.4.2  yamt }
   2634  1.1.4.2  yamt 
   2635  1.1.4.2  yamt ATF_TC_BODY(bpfjit_st4, tc)
   2636  1.1.4.2  yamt {
   2637  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2638  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
   2639  1.1.4.2  yamt 		BPF_STMT(BPF_ST, 5),
   2640  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 100),
   2641  1.1.4.2  yamt 		BPF_STMT(BPF_ST, BPF_MEMWORDS-1),
   2642  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 200),
   2643  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 301, 2, 0),
   2644  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_MEM, BPF_MEMWORDS-1),
   2645  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0),
   2646  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_MEM, 5),
   2647  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2648  1.1.4.2  yamt 	};
   2649  1.1.4.2  yamt 
   2650  1.1.4.3  yamt 	bpfjit_func_t code;
   2651  1.1.4.2  yamt 	uint8_t pkt[2]; /* the program doesn't read any data */
   2652  1.1.4.2  yamt 
   2653  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2654  1.1.4.2  yamt 
   2655  1.1.4.2  yamt 	ATF_REQUIRE(BPF_MEMWORDS > 6);
   2656  1.1.4.2  yamt 
   2657  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2658  1.1.4.2  yamt 
   2659  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2660  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2661  1.1.4.2  yamt 
   2662  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 1);
   2663  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 2, 2) == 102);
   2664  1.1.4.2  yamt 
   2665  1.1.4.2  yamt 	bpfjit_free_code(code);
   2666  1.1.4.2  yamt }
   2667  1.1.4.2  yamt 
   2668  1.1.4.2  yamt ATF_TC(bpfjit_st5);
   2669  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_st5, tc)
   2670  1.1.4.2  yamt {
   2671  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2672  1.1.4.2  yamt 	    "Test JIT compilation of BPF_ST");
   2673  1.1.4.2  yamt }
   2674  1.1.4.2  yamt 
   2675  1.1.4.2  yamt ATF_TC_BODY(bpfjit_st5, tc)
   2676  1.1.4.2  yamt {
   2677  1.1.4.2  yamt 	struct bpf_insn insns[5*BPF_MEMWORDS+2];
   2678  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2679  1.1.4.2  yamt 
   2680  1.1.4.2  yamt 	size_t k;
   2681  1.1.4.3  yamt 	bpfjit_func_t code;
   2682  1.1.4.2  yamt 	uint8_t pkt[BPF_MEMWORDS]; /* the program doesn't read any data */
   2683  1.1.4.2  yamt 
   2684  1.1.4.2  yamt 	memset(insns, 0, sizeof(insns));
   2685  1.1.4.2  yamt 
   2686  1.1.4.2  yamt 	/* for each k do M[k] = k */
   2687  1.1.4.2  yamt 	for (k = 0; k < BPF_MEMWORDS; k++) {
   2688  1.1.4.2  yamt 		insns[2*k].code   = BPF_LD+BPF_IMM;
   2689  1.1.4.2  yamt 		insns[2*k].k      = 3*k;
   2690  1.1.4.2  yamt 		insns[2*k+1].code = BPF_ST;
   2691  1.1.4.2  yamt 		insns[2*k+1].k    = k;
   2692  1.1.4.2  yamt 	}
   2693  1.1.4.2  yamt 
   2694  1.1.4.2  yamt 	/* load wirelen into A */
   2695  1.1.4.2  yamt 	insns[2*BPF_MEMWORDS].code = BPF_LD+BPF_W+BPF_LEN;
   2696  1.1.4.2  yamt 
   2697  1.1.4.2  yamt 	/* for each k, if (A == k + 1) return M[k] */
   2698  1.1.4.2  yamt 	for (k = 0; k < BPF_MEMWORDS; k++) {
   2699  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+1].code = BPF_JMP+BPF_JEQ+BPF_K;
   2700  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+1].k    = k+1;
   2701  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+1].jt   = 0;
   2702  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+1].jf   = 2;
   2703  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+2].code = BPF_LD+BPF_MEM;
   2704  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+2].k    = k;
   2705  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+3].code = BPF_RET+BPF_A;
   2706  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+3].k    = 0;
   2707  1.1.4.2  yamt 	}
   2708  1.1.4.2  yamt 
   2709  1.1.4.2  yamt 	insns[5*BPF_MEMWORDS+1].code = BPF_RET+BPF_K;
   2710  1.1.4.2  yamt 	insns[5*BPF_MEMWORDS+1].k    = UINT32_MAX;
   2711  1.1.4.2  yamt 
   2712  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2713  1.1.4.2  yamt 
   2714  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2715  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2716  1.1.4.2  yamt 
   2717  1.1.4.2  yamt 	for (k = 1; k <= sizeof(pkt); k++)
   2718  1.1.4.2  yamt 		ATF_CHECK(code(pkt, k, k) == 3*(k-1));
   2719  1.1.4.2  yamt 
   2720  1.1.4.2  yamt 	bpfjit_free_code(code);
   2721  1.1.4.2  yamt }
   2722  1.1.4.2  yamt 
   2723  1.1.4.2  yamt ATF_TC(bpfjit_stx1);
   2724  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_stx1, tc)
   2725  1.1.4.2  yamt {
   2726  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2727  1.1.4.2  yamt 	    "Test JIT compilation of BPF_STX");
   2728  1.1.4.2  yamt }
   2729  1.1.4.2  yamt 
   2730  1.1.4.2  yamt ATF_TC_BODY(bpfjit_stx1, tc)
   2731  1.1.4.2  yamt {
   2732  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2733  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   2734  1.1.4.2  yamt 		BPF_STMT(BPF_STX, 0),
   2735  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 0),
   2736  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2737  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2738  1.1.4.2  yamt 	};
   2739  1.1.4.2  yamt 
   2740  1.1.4.2  yamt 	size_t i;
   2741  1.1.4.3  yamt 	bpfjit_func_t code;
   2742  1.1.4.2  yamt 	uint8_t pkt[16]; /* the program doesn't read any data */
   2743  1.1.4.2  yamt 
   2744  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2745  1.1.4.2  yamt 
   2746  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2747  1.1.4.2  yamt 
   2748  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2749  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2750  1.1.4.2  yamt 
   2751  1.1.4.2  yamt 	for (i = 1; i <= sizeof(pkt); i++)
   2752  1.1.4.2  yamt 		ATF_CHECK(code(pkt, i, sizeof(pkt)) == i);
   2753  1.1.4.2  yamt 
   2754  1.1.4.2  yamt 	bpfjit_free_code(code);
   2755  1.1.4.2  yamt }
   2756  1.1.4.2  yamt 
   2757  1.1.4.2  yamt ATF_TC(bpfjit_stx2);
   2758  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_stx2, tc)
   2759  1.1.4.2  yamt {
   2760  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2761  1.1.4.2  yamt 	    "Test JIT compilation of BPF_STX");
   2762  1.1.4.2  yamt }
   2763  1.1.4.2  yamt 
   2764  1.1.4.2  yamt ATF_TC_BODY(bpfjit_stx2, tc)
   2765  1.1.4.2  yamt {
   2766  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2767  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   2768  1.1.4.2  yamt 		BPF_STMT(BPF_STX, BPF_MEMWORDS-1),
   2769  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 0),
   2770  1.1.4.2  yamt 		BPF_STMT(BPF_MISC+BPF_TXA, 0),
   2771  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2772  1.1.4.2  yamt 	};
   2773  1.1.4.2  yamt 
   2774  1.1.4.3  yamt 	bpfjit_func_t code;
   2775  1.1.4.2  yamt 	uint8_t pkt[1]; /* the program doesn't read any data */
   2776  1.1.4.2  yamt 
   2777  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2778  1.1.4.2  yamt 
   2779  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2780  1.1.4.2  yamt 
   2781  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2782  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2783  1.1.4.2  yamt 
   2784  1.1.4.2  yamt 	ATF_CHECK(code(pkt, 1, 1) == 0);
   2785  1.1.4.2  yamt 
   2786  1.1.4.2  yamt 	bpfjit_free_code(code);
   2787  1.1.4.2  yamt }
   2788  1.1.4.2  yamt 
   2789  1.1.4.2  yamt ATF_TC(bpfjit_stx3);
   2790  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_stx3, tc)
   2791  1.1.4.2  yamt {
   2792  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2793  1.1.4.2  yamt 	    "Test JIT compilation of BPF_STX");
   2794  1.1.4.2  yamt }
   2795  1.1.4.2  yamt 
   2796  1.1.4.2  yamt ATF_TC_BODY(bpfjit_stx3, tc)
   2797  1.1.4.2  yamt {
   2798  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2799  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0),
   2800  1.1.4.2  yamt 		BPF_STMT(BPF_STX, 5),
   2801  1.1.4.2  yamt 		BPF_STMT(BPF_STX, 2),
   2802  1.1.4.2  yamt 		BPF_STMT(BPF_STX, 3),
   2803  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 1),
   2804  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2805  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 2),
   2806  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2807  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 3),
   2808  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2809  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 5),
   2810  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2811  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_MEM, 6),
   2812  1.1.4.2  yamt 		BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),
   2813  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_A, 0)
   2814  1.1.4.2  yamt 	};
   2815  1.1.4.2  yamt 
   2816  1.1.4.2  yamt 	size_t i;
   2817  1.1.4.3  yamt 	bpfjit_func_t code;
   2818  1.1.4.2  yamt 	uint8_t pkt[16]; /* the program doesn't read any data */
   2819  1.1.4.2  yamt 
   2820  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2821  1.1.4.2  yamt 
   2822  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2823  1.1.4.2  yamt 
   2824  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2825  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2826  1.1.4.2  yamt 
   2827  1.1.4.2  yamt 	for (i = 1; i <= sizeof(pkt); i++)
   2828  1.1.4.2  yamt 		ATF_CHECK(code(pkt, i, sizeof(pkt)) == 3 * i);
   2829  1.1.4.2  yamt 
   2830  1.1.4.2  yamt 	bpfjit_free_code(code);
   2831  1.1.4.2  yamt }
   2832  1.1.4.2  yamt 
   2833  1.1.4.2  yamt ATF_TC(bpfjit_stx4);
   2834  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_stx4, tc)
   2835  1.1.4.2  yamt {
   2836  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2837  1.1.4.2  yamt 	    "Test JIT compilation of BPF_STX");
   2838  1.1.4.2  yamt }
   2839  1.1.4.2  yamt 
   2840  1.1.4.2  yamt ATF_TC_BODY(bpfjit_stx4, tc)
   2841  1.1.4.2  yamt {
   2842  1.1.4.2  yamt 	struct bpf_insn insns[5*BPF_MEMWORDS+2];
   2843  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2844  1.1.4.2  yamt 
   2845  1.1.4.2  yamt 	size_t k;
   2846  1.1.4.3  yamt 	bpfjit_func_t code;
   2847  1.1.4.2  yamt 	uint8_t pkt[BPF_MEMWORDS]; /* the program doesn't read any data */
   2848  1.1.4.2  yamt 
   2849  1.1.4.2  yamt 	memset(insns, 0, sizeof(insns));
   2850  1.1.4.2  yamt 
   2851  1.1.4.2  yamt 	/* for each k do M[k] = k */
   2852  1.1.4.2  yamt 	for (k = 0; k < BPF_MEMWORDS; k++) {
   2853  1.1.4.2  yamt 		insns[2*k].code   = BPF_LDX+BPF_W+BPF_IMM;
   2854  1.1.4.2  yamt 		insns[2*k].k      = 3*k;
   2855  1.1.4.2  yamt 		insns[2*k+1].code = BPF_STX;
   2856  1.1.4.2  yamt 		insns[2*k+1].k    = k;
   2857  1.1.4.2  yamt 	}
   2858  1.1.4.2  yamt 
   2859  1.1.4.2  yamt 	/* load wirelen into A */
   2860  1.1.4.2  yamt 	insns[2*BPF_MEMWORDS].code = BPF_LD+BPF_W+BPF_LEN;
   2861  1.1.4.2  yamt 
   2862  1.1.4.2  yamt 	/* for each k, if (A == k + 1) return M[k] */
   2863  1.1.4.2  yamt 	for (k = 0; k < BPF_MEMWORDS; k++) {
   2864  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+1].code = BPF_JMP+BPF_JEQ+BPF_K;
   2865  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+1].k    = k+1;
   2866  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+1].jt   = 0;
   2867  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+1].jf   = 2;
   2868  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+2].code = BPF_LD+BPF_MEM;
   2869  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+2].k    = k;
   2870  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+3].code = BPF_RET+BPF_A;
   2871  1.1.4.2  yamt 		insns[2*BPF_MEMWORDS+3*k+3].k    = 0;
   2872  1.1.4.2  yamt 	}
   2873  1.1.4.2  yamt 
   2874  1.1.4.2  yamt 	insns[5*BPF_MEMWORDS+1].code = BPF_RET+BPF_K;
   2875  1.1.4.2  yamt 	insns[5*BPF_MEMWORDS+1].k    = UINT32_MAX;
   2876  1.1.4.2  yamt 
   2877  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2878  1.1.4.2  yamt 
   2879  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2880  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2881  1.1.4.2  yamt 
   2882  1.1.4.2  yamt 	for (k = 1; k <= sizeof(pkt); k++)
   2883  1.1.4.2  yamt 		ATF_CHECK(code(pkt, k, k) == 3*(k-1));
   2884  1.1.4.2  yamt 
   2885  1.1.4.2  yamt 	bpfjit_free_code(code);
   2886  1.1.4.2  yamt }
   2887  1.1.4.2  yamt 
   2888  1.1.4.2  yamt ATF_TC(bpfjit_opt_ld_abs_1);
   2889  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_opt_ld_abs_1, tc)
   2890  1.1.4.2  yamt {
   2891  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2892  1.1.4.2  yamt 	    "Test JIT compilation with length optimization "
   2893  1.1.4.2  yamt 	    "applied to BPF_LD+BPF_ABS");
   2894  1.1.4.2  yamt }
   2895  1.1.4.2  yamt 
   2896  1.1.4.2  yamt ATF_TC_BODY(bpfjit_opt_ld_abs_1, tc)
   2897  1.1.4.2  yamt {
   2898  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2899  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
   2900  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 8),
   2901  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
   2902  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
   2903  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   2904  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 4),
   2905  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 3),
   2906  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   2907  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 1),
   2908  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   2909  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   2910  1.1.4.2  yamt 	};
   2911  1.1.4.2  yamt 
   2912  1.1.4.2  yamt 	size_t i, j;
   2913  1.1.4.3  yamt 	bpfjit_func_t code;
   2914  1.1.4.2  yamt 	uint8_t pkt[2][34] = {
   2915  1.1.4.2  yamt 		{
   2916  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   2917  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   2918  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f,
   2919  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23
   2920  1.1.4.2  yamt 		},
   2921  1.1.4.2  yamt 		{
   2922  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   2923  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   2924  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23,
   2925  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f
   2926  1.1.4.2  yamt 		}
   2927  1.1.4.2  yamt 	};
   2928  1.1.4.2  yamt 
   2929  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2930  1.1.4.2  yamt 
   2931  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2932  1.1.4.2  yamt 
   2933  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2934  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2935  1.1.4.2  yamt 
   2936  1.1.4.2  yamt 	for (i = 0; i < 2; i++) {
   2937  1.1.4.2  yamt 		for (j = 1; j < sizeof(pkt[i]); j++)
   2938  1.1.4.2  yamt 			ATF_CHECK(code(pkt[i], j, j) == 0);
   2939  1.1.4.2  yamt 		ATF_CHECK(code(pkt[i], j, j) == UINT32_MAX);
   2940  1.1.4.2  yamt 	}
   2941  1.1.4.2  yamt 
   2942  1.1.4.2  yamt 	bpfjit_free_code(code);
   2943  1.1.4.2  yamt }
   2944  1.1.4.2  yamt 
   2945  1.1.4.2  yamt ATF_TC(bpfjit_opt_ld_abs_2);
   2946  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_opt_ld_abs_2, tc)
   2947  1.1.4.2  yamt {
   2948  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   2949  1.1.4.2  yamt 	    "Test JIT compilation with length optimization "
   2950  1.1.4.2  yamt 	    "applied to BPF_LD+BPF_ABS");
   2951  1.1.4.2  yamt }
   2952  1.1.4.2  yamt 
   2953  1.1.4.2  yamt ATF_TC_BODY(bpfjit_opt_ld_abs_2, tc)
   2954  1.1.4.2  yamt {
   2955  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   2956  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
   2957  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
   2958  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   2959  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 6),
   2960  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 5),
   2961  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   2962  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 3),
   2963  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
   2964  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   2965  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   2966  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   2967  1.1.4.2  yamt 	};
   2968  1.1.4.2  yamt 
   2969  1.1.4.2  yamt 	size_t i, j;
   2970  1.1.4.3  yamt 	bpfjit_func_t code;
   2971  1.1.4.2  yamt 	uint8_t pkt[2][34] = {
   2972  1.1.4.2  yamt 		{
   2973  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   2974  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   2975  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f,
   2976  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23
   2977  1.1.4.2  yamt 		},
   2978  1.1.4.2  yamt 		{
   2979  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   2980  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   2981  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23,
   2982  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f
   2983  1.1.4.2  yamt 		}
   2984  1.1.4.2  yamt 	};
   2985  1.1.4.2  yamt 
   2986  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   2987  1.1.4.2  yamt 
   2988  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   2989  1.1.4.2  yamt 
   2990  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   2991  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   2992  1.1.4.2  yamt 
   2993  1.1.4.2  yamt 	for (i = 0; i < 2; i++) {
   2994  1.1.4.2  yamt 		for (j = 1; j < sizeof(pkt[i]); j++)
   2995  1.1.4.2  yamt 			ATF_CHECK(code(pkt[i], j, j) == 0);
   2996  1.1.4.2  yamt 		ATF_CHECK(code(pkt[i], j, j) == UINT32_MAX);
   2997  1.1.4.2  yamt 	}
   2998  1.1.4.2  yamt 
   2999  1.1.4.2  yamt 	bpfjit_free_code(code);
   3000  1.1.4.2  yamt }
   3001  1.1.4.2  yamt 
   3002  1.1.4.2  yamt ATF_TC(bpfjit_opt_ld_abs_3);
   3003  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_opt_ld_abs_3, tc)
   3004  1.1.4.2  yamt {
   3005  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   3006  1.1.4.2  yamt 	    "Test JIT compilation with length optimization "
   3007  1.1.4.2  yamt 	    "applied to BPF_LD+BPF_ABS");
   3008  1.1.4.2  yamt }
   3009  1.1.4.2  yamt 
   3010  1.1.4.2  yamt ATF_TC_BODY(bpfjit_opt_ld_abs_3, tc)
   3011  1.1.4.2  yamt {
   3012  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   3013  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
   3014  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 2),
   3015  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
   3016  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 3, 6),
   3017  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 5),
   3018  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
   3019  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 3),
   3020  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
   3021  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   3022  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3023  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   3024  1.1.4.2  yamt 	};
   3025  1.1.4.2  yamt 
   3026  1.1.4.2  yamt 	size_t i, j;
   3027  1.1.4.3  yamt 	bpfjit_func_t code;
   3028  1.1.4.2  yamt 	uint8_t pkt[2][34] = {
   3029  1.1.4.2  yamt 		{
   3030  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3031  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3032  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f,
   3033  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23
   3034  1.1.4.2  yamt 		},
   3035  1.1.4.2  yamt 		{
   3036  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3037  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3038  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23,
   3039  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f
   3040  1.1.4.2  yamt 		}
   3041  1.1.4.2  yamt 	};
   3042  1.1.4.2  yamt 
   3043  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3044  1.1.4.2  yamt 
   3045  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   3046  1.1.4.2  yamt 
   3047  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   3048  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   3049  1.1.4.2  yamt 
   3050  1.1.4.2  yamt 	for (i = 0; i < 2; i++) {
   3051  1.1.4.2  yamt 		for (j = 1; j < sizeof(pkt[i]); j++)
   3052  1.1.4.2  yamt 			ATF_CHECK(code(pkt[i], j, j) == 0);
   3053  1.1.4.2  yamt 		ATF_CHECK(code(pkt[i], j, j) == UINT32_MAX);
   3054  1.1.4.2  yamt 	}
   3055  1.1.4.2  yamt 
   3056  1.1.4.2  yamt 	bpfjit_free_code(code);
   3057  1.1.4.2  yamt }
   3058  1.1.4.2  yamt 
   3059  1.1.4.2  yamt ATF_TC(bpfjit_opt_ld_ind_1);
   3060  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_opt_ld_ind_1, tc)
   3061  1.1.4.2  yamt {
   3062  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   3063  1.1.4.2  yamt 	    "Test JIT compilation with length optimization "
   3064  1.1.4.2  yamt 	    "applied to BPF_LD+BPF_IND");
   3065  1.1.4.2  yamt }
   3066  1.1.4.2  yamt 
   3067  1.1.4.2  yamt ATF_TC_BODY(bpfjit_opt_ld_ind_1, tc)
   3068  1.1.4.2  yamt {
   3069  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   3070  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 12),
   3071  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 0),
   3072  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 8),
   3073  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 14),
   3074  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
   3075  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 18),
   3076  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 4),
   3077  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 3),
   3078  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 18),
   3079  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 1),
   3080  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3081  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   3082  1.1.4.2  yamt 	};
   3083  1.1.4.2  yamt 
   3084  1.1.4.2  yamt 	size_t i, j;
   3085  1.1.4.3  yamt 	bpfjit_func_t code;
   3086  1.1.4.2  yamt 	uint8_t pkt[2][34] = {
   3087  1.1.4.2  yamt 		{
   3088  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3089  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3090  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f,
   3091  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23
   3092  1.1.4.2  yamt 		},
   3093  1.1.4.2  yamt 		{
   3094  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3095  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3096  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23,
   3097  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f
   3098  1.1.4.2  yamt 		}
   3099  1.1.4.2  yamt 	};
   3100  1.1.4.2  yamt 
   3101  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3102  1.1.4.2  yamt 
   3103  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   3104  1.1.4.2  yamt 
   3105  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   3106  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   3107  1.1.4.2  yamt 
   3108  1.1.4.2  yamt 	for (i = 0; i < 2; i++) {
   3109  1.1.4.2  yamt 		for (j = 1; j < sizeof(pkt[i]); j++)
   3110  1.1.4.2  yamt 			ATF_CHECK(code(pkt[i], j, j) == 0);
   3111  1.1.4.2  yamt 		ATF_CHECK(code(pkt[i], j, j) == UINT32_MAX);
   3112  1.1.4.2  yamt 	}
   3113  1.1.4.2  yamt 
   3114  1.1.4.2  yamt 	bpfjit_free_code(code);
   3115  1.1.4.2  yamt }
   3116  1.1.4.2  yamt 
   3117  1.1.4.2  yamt ATF_TC(bpfjit_opt_ld_ind_2);
   3118  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_opt_ld_ind_2, tc)
   3119  1.1.4.2  yamt {
   3120  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   3121  1.1.4.2  yamt 	    "Test JIT compilation with length optimization "
   3122  1.1.4.2  yamt 	    "applied to BPF_LD+BPF_IND");
   3123  1.1.4.2  yamt }
   3124  1.1.4.2  yamt 
   3125  1.1.4.2  yamt ATF_TC_BODY(bpfjit_opt_ld_ind_2, tc)
   3126  1.1.4.2  yamt {
   3127  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   3128  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   3129  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 26),
   3130  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
   3131  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 30),
   3132  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 6),
   3133  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 5),
   3134  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 30),
   3135  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 3),
   3136  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 12),
   3137  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   3138  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3139  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   3140  1.1.4.2  yamt 	};
   3141  1.1.4.2  yamt 
   3142  1.1.4.2  yamt 	size_t i, j;
   3143  1.1.4.3  yamt 	bpfjit_func_t code;
   3144  1.1.4.2  yamt 	uint8_t pkt[2][34] = {
   3145  1.1.4.2  yamt 		{
   3146  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3147  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3148  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f,
   3149  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23
   3150  1.1.4.2  yamt 		},
   3151  1.1.4.2  yamt 		{
   3152  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3153  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3154  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23,
   3155  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f
   3156  1.1.4.2  yamt 		}
   3157  1.1.4.2  yamt 	};
   3158  1.1.4.2  yamt 
   3159  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3160  1.1.4.2  yamt 
   3161  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   3162  1.1.4.2  yamt 
   3163  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   3164  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   3165  1.1.4.2  yamt 
   3166  1.1.4.2  yamt 	for (i = 0; i < 2; i++) {
   3167  1.1.4.2  yamt 		for (j = 1; j < sizeof(pkt[i]); j++)
   3168  1.1.4.2  yamt 			ATF_CHECK(code(pkt[i], j, j) == 0);
   3169  1.1.4.2  yamt 		ATF_CHECK(code(pkt[i], j, j) == UINT32_MAX);
   3170  1.1.4.2  yamt 	}
   3171  1.1.4.2  yamt 
   3172  1.1.4.2  yamt 	bpfjit_free_code(code);
   3173  1.1.4.2  yamt }
   3174  1.1.4.2  yamt 
   3175  1.1.4.2  yamt ATF_TC(bpfjit_opt_ld_ind_3);
   3176  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_opt_ld_ind_3, tc)
   3177  1.1.4.2  yamt {
   3178  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   3179  1.1.4.2  yamt 	    "Test JIT compilation with length optimization "
   3180  1.1.4.2  yamt 	    "applied to BPF_LD+BPF_IND");
   3181  1.1.4.2  yamt }
   3182  1.1.4.2  yamt 
   3183  1.1.4.2  yamt ATF_TC_BODY(bpfjit_opt_ld_ind_3, tc)
   3184  1.1.4.2  yamt {
   3185  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   3186  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 15),
   3187  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 15),
   3188  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 2),
   3189  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 11),
   3190  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 3, 7),
   3191  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 6),
   3192  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 11),
   3193  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 4),
   3194  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   3195  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 12),
   3196  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   3197  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3198  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   3199  1.1.4.2  yamt 	};
   3200  1.1.4.2  yamt 
   3201  1.1.4.2  yamt 	size_t i, j;
   3202  1.1.4.3  yamt 	bpfjit_func_t code;
   3203  1.1.4.2  yamt 	uint8_t pkt[2][34] = {
   3204  1.1.4.2  yamt 		{
   3205  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3206  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3207  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f,
   3208  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23
   3209  1.1.4.2  yamt 		},
   3210  1.1.4.2  yamt 		{
   3211  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3212  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3213  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23,
   3214  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f
   3215  1.1.4.2  yamt 		}
   3216  1.1.4.2  yamt 	};
   3217  1.1.4.2  yamt 
   3218  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3219  1.1.4.2  yamt 
   3220  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   3221  1.1.4.2  yamt 
   3222  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   3223  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   3224  1.1.4.2  yamt 
   3225  1.1.4.2  yamt 	for (i = 0; i < 2; i++) {
   3226  1.1.4.2  yamt 		for (j = 1; j < sizeof(pkt[i]); j++)
   3227  1.1.4.2  yamt 			ATF_CHECK(code(pkt[i], j, j) == 0);
   3228  1.1.4.2  yamt 		ATF_CHECK(code(pkt[i], j, j) == UINT32_MAX);
   3229  1.1.4.2  yamt 	}
   3230  1.1.4.2  yamt 
   3231  1.1.4.2  yamt 	bpfjit_free_code(code);
   3232  1.1.4.2  yamt }
   3233  1.1.4.2  yamt 
   3234  1.1.4.2  yamt ATF_TC(bpfjit_opt_ld_ind_4);
   3235  1.1.4.2  yamt ATF_TC_HEAD(bpfjit_opt_ld_ind_4, tc)
   3236  1.1.4.2  yamt {
   3237  1.1.4.2  yamt 	atf_tc_set_md_var(tc, "descr",
   3238  1.1.4.2  yamt 	    "Test JIT compilation with length optimization "
   3239  1.1.4.2  yamt 	    "applied to BPF_LD+BPF_IND");
   3240  1.1.4.2  yamt }
   3241  1.1.4.2  yamt 
   3242  1.1.4.2  yamt ATF_TC_BODY(bpfjit_opt_ld_ind_4, tc)
   3243  1.1.4.2  yamt {
   3244  1.1.4.2  yamt 	static struct bpf_insn insns[] = {
   3245  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 11),
   3246  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 19),
   3247  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 2),
   3248  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 15),
   3249  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 3, 7),
   3250  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 6),
   3251  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_W+BPF_IND, 15),
   3252  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 4),
   3253  1.1.4.2  yamt 		BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
   3254  1.1.4.2  yamt 		BPF_STMT(BPF_LD+BPF_H+BPF_IND, 12),
   3255  1.1.4.2  yamt 		BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x800, 0, 1),
   3256  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, UINT32_MAX),
   3257  1.1.4.2  yamt 		BPF_STMT(BPF_RET+BPF_K, 0),
   3258  1.1.4.2  yamt 	};
   3259  1.1.4.2  yamt 
   3260  1.1.4.2  yamt 	size_t i, j;
   3261  1.1.4.3  yamt 	bpfjit_func_t code;
   3262  1.1.4.2  yamt 	uint8_t pkt[2][34] = {
   3263  1.1.4.2  yamt 		{
   3264  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3265  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3266  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f,
   3267  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23
   3268  1.1.4.2  yamt 		},
   3269  1.1.4.2  yamt 		{
   3270  1.1.4.2  yamt 			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0x08, 0x00,
   3271  1.1.4.2  yamt 			14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
   3272  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x23,
   3273  1.1.4.2  yamt 			0x80, 0x03, 0x70, 0x0f
   3274  1.1.4.2  yamt 		}
   3275  1.1.4.2  yamt 	};
   3276  1.1.4.2  yamt 
   3277  1.1.4.2  yamt 	size_t insn_count = sizeof(insns) / sizeof(insns[0]);
   3278  1.1.4.2  yamt 
   3279  1.1.4.2  yamt 	ATF_CHECK(bpf_validate(insns, insn_count));
   3280  1.1.4.2  yamt 
   3281  1.1.4.3  yamt 	code = bpfjit_generate_code(bc, insns, insn_count);
   3282  1.1.4.2  yamt 	ATF_REQUIRE(code != NULL);
   3283  1.1.4.2  yamt 
   3284  1.1.4.2  yamt 	for (i = 0; i < 2; i++) {
   3285  1.1.4.2  yamt 		for (j = 1; j < sizeof(pkt[i]); j++)
   3286  1.1.4.2  yamt 			ATF_CHECK(code(pkt[i], j, j) == 0);
   3287  1.1.4.2  yamt 		ATF_CHECK(code(pkt[i], j, j) == UINT32_MAX);
   3288  1.1.4.2  yamt 	}
   3289  1.1.4.2  yamt 
   3290  1.1.4.2  yamt 	bpfjit_free_code(code);
   3291  1.1.4.2  yamt }
   3292  1.1.4.2  yamt 
   3293  1.1.4.2  yamt ATF_TP_ADD_TCS(tp)
   3294  1.1.4.2  yamt {
   3295  1.1.4.2  yamt 
   3296  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_empty);
   3297  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_add_k);
   3298  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_sub_k);
   3299  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_mul_k);
   3300  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div0_k);
   3301  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div1_k);
   3302  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div2_k);
   3303  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div4_k);
   3304  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div10_k);
   3305  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div10000_k);
   3306  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div7609801_k);
   3307  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div80000000_k);
   3308  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_and_k);
   3309  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_or_k);
   3310  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_lsh_k);
   3311  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_lsh0_k);
   3312  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_rsh_k);
   3313  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_rsh0_k);
   3314  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_modulo_k);
   3315  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_add_x);
   3316  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_sub_x);
   3317  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_mul_x);
   3318  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div0_x);
   3319  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div1_x);
   3320  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div2_x);
   3321  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div4_x);
   3322  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div10_x);
   3323  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div10000_x);
   3324  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div7609801_x);
   3325  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_div80000000_x);
   3326  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_and_x);
   3327  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_or_x);
   3328  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_lsh_x);
   3329  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_lsh0_x);
   3330  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_rsh_x);
   3331  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_rsh0_x);
   3332  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_modulo_x);
   3333  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_alu_neg);
   3334  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_ja);
   3335  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jgt_k);
   3336  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_k);
   3337  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_k);
   3338  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jset_k);
   3339  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_modulo_k);
   3340  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jgt_x);
   3341  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_x);
   3342  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x);
   3343  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_jset_x);
   3344  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_jmp_modulo_x);
   3345  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ld_abs);
   3346  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ld_abs_k_overflow);
   3347  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ld_ind);
   3348  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ld_ind_k_overflow);
   3349  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ld_ind_x_overflow1);
   3350  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ld_ind_x_overflow2);
   3351  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ld_len);
   3352  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ld_imm);
   3353  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ldx_imm1);
   3354  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ldx_imm2);
   3355  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ldx_len1);
   3356  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ldx_len2);
   3357  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_ldx_msh);
   3358  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_misc_tax);
   3359  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_misc_txa);
   3360  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_st1);
   3361  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_st2);
   3362  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_st3);
   3363  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_st4);
   3364  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_st5);
   3365  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_stx1);
   3366  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_stx2);
   3367  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_stx3);
   3368  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_stx4);
   3369  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_opt_ld_abs_1);
   3370  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_opt_ld_abs_2);
   3371  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_opt_ld_abs_3);
   3372  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_opt_ld_ind_1);
   3373  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_opt_ld_ind_2);
   3374  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_opt_ld_ind_3);
   3375  1.1.4.2  yamt 	ATF_TP_ADD_TC(tp, bpfjit_opt_ld_ind_4);
   3376  1.1.4.2  yamt 	/* XXX: bpfjit_opt_ldx_msh */
   3377  1.1.4.2  yamt 
   3378  1.1.4.2  yamt 	return atf_no_error();
   3379  1.1.4.2  yamt }
   3380