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