lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202312031333.ESYgytOb-lkp@intel.com>
Date:   Sun, 3 Dec 2023 14:32:10 +0800
From:   kernel test robot <lkp@...el.com>
To:     Johan Almbladh <johan.almbladh@...finetworks.com>
Cc:     oe-kbuild-all@...ts.linux.dev, linux-kernel@...r.kernel.org,
        Daniel Borkmann <daniel@...earbox.net>
Subject: lib/test_bpf.c:6896:30: sparse: sparse: cast truncates bits from
 constant value (1032547698badcfe becomes 98badcfe)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   968f35f4ab1c0966ceb39af3c89f2e24afedf878
commit: f536a7c80675e4875e50df9182881d7678e27651 bpf/tests: Add more BPF_END byte order conversion tests
date:   2 years, 2 months ago
config: mips-randconfig-r123-20231130 (https://download.01.org/0day-ci/archive/20231203/202312031333.ESYgytOb-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce: (https://download.01.org/0day-ci/archive/20231203/202312031333.ESYgytOb-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202312031333.ESYgytOb-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
   lib/test_bpf.c:3958:25: sparse: sparse: cast truncates bits from constant value (1ffffffff becomes ffffffff)
   lib/test_bpf.c:4035:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:4113:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:4129:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:4254:25: sparse: sparse: cast truncates bits from constant value (100000000 becomes 0)
   lib/test_bpf.c:4432:25: sparse: sparse: cast truncates bits from constant value (100000000 becomes 0)
   lib/test_bpf.c:4742:25: sparse: sparse: cast truncates bits from constant value (fedcba987654321 becomes 87654321)
   lib/test_bpf.c:4743:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef0 becomes 9abcdef0)
   lib/test_bpf.c:4754:25: sparse: sparse: cast truncates bits from constant value (fedcba987654321 becomes 87654321)
   lib/test_bpf.c:4755:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef0 becomes 9abcdef0)
   lib/test_bpf.c:4877:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:4888:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5275:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5313:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:5329:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:5330:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:5361:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5377:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5378:25: sparse: sparse: cast truncates bits from constant value (123456780a0c0e0 becomes 80a0c0e0)
   lib/test_bpf.c:5487:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5525:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:5526:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:5541:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:5573:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5574:25: sparse: sparse: cast truncates bits from constant value (12345678fafcfef becomes 8fafcfef)
   lib/test_bpf.c:5589:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5699:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5737:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:5738:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:5753:25: sparse: sparse: cast truncates bits from constant value (ffffffff0000 becomes ffff0000)
   lib/test_bpf.c:5754:25: sparse: sparse: cast truncates bits from constant value (ffff00000000ffff becomes ffff)
   lib/test_bpf.c:5785:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5786:25: sparse: sparse: cast truncates bits from constant value (123456786a4c2e0 becomes 86a4c2e0)
   lib/test_bpf.c:5801:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5802:25: sparse: sparse: cast truncates bits from constant value (fedcba98795b3d1f becomes 795b3d1f)
   lib/test_bpf.c:5878:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5890:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5903:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5915:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5928:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5940:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5953:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:5965:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6045:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6056:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6068:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6079:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6091:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6102:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6114:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6186:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6198:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6211:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6223:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6236:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6248:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6261:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6273:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6353:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6364:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6376:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6387:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6399:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6410:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6422:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6446:25: sparse: sparse: cast truncates bits from constant value (ff00ff0000000000 becomes 0)
   lib/test_bpf.c:6458:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6470:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6483:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6495:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6508:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6520:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6533:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6545:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6581:25: sparse: sparse: cast truncates bits from constant value (ff00ff0000000000 becomes 0)
   lib/test_bpf.c:6592:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6603:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6615:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6626:25: sparse: sparse: cast truncates bits from constant value (f123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6638:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6649:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6661:25: sparse: sparse: cast truncates bits from constant value (8123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6718:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6729:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6743:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6749:30: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6754:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6767:25: sparse: sparse: cast truncates bits from constant value (fedcba9876543210 becomes 76543210)
   lib/test_bpf.c:6778:25: sparse: sparse: cast truncates bits from constant value (fedcba9876543210 becomes 76543210)
   lib/test_bpf.c:6792:25: sparse: sparse: cast truncates bits from constant value (fedcba9876543210 becomes 76543210)
   lib/test_bpf.c:6798:30: sparse: sparse: cast truncates bits from constant value (fedcba9876543210 becomes 76543210)
   lib/test_bpf.c:6803:25: sparse: sparse: cast truncates bits from constant value (fedcba9876543210 becomes 76543210)
   lib/test_bpf.c:6816:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6827:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6841:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6847:30: sparse: sparse: cast truncates bits from constant value (efcdab8967452301 becomes 67452301)
   lib/test_bpf.c:6852:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:6865:25: sparse: sparse: cast truncates bits from constant value (fedcba9876543210 becomes 76543210)
   lib/test_bpf.c:6876:25: sparse: sparse: cast truncates bits from constant value (fedcba9876543210 becomes 76543210)
   lib/test_bpf.c:6890:25: sparse: sparse: cast truncates bits from constant value (fedcba9876543210 becomes 76543210)
>> lib/test_bpf.c:6896:30: sparse: sparse: cast truncates bits from constant value (1032547698badcfe becomes 98badcfe)
   lib/test_bpf.c:6901:25: sparse: sparse: cast truncates bits from constant value (fedcba9876543210 becomes 76543210)
   lib/test_bpf.c:7047:25: sparse: sparse: cast truncates bits from constant value (ffff00000000ffff becomes ffff)
   lib/test_bpf.c:7093:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:7111:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:7387:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:7388:25: sparse: sparse: cast truncates bits from constant value (fecdba9876543210 becomes 76543210)
   lib/test_bpf.c:7404:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:7405:25: sparse: sparse: cast truncates bits from constant value (fecdba9876543210 becomes 76543210)
   lib/test_bpf.c:7422:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:7423:25: sparse: sparse: cast truncates bits from constant value (fecdba9876543210 becomes 76543210)
   lib/test_bpf.c:7440:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:7441:25: sparse: sparse: cast truncates bits from constant value (fecdba9876543210 becomes 76543210)
   lib/test_bpf.c:7459:25: sparse: sparse: cast truncates bits from constant value (123456789abcdef becomes 89abcdef)
   lib/test_bpf.c:7460:25: sparse: sparse: cast truncates bits from constant value (fecdba9876543210 becomes 76543210)
   lib/test_bpf.c:7464:25: sparse: sparse: cast truncates bits from constant value (fecdba9876543210 becomes 76543210)
   lib/test_bpf.c:8667:25: sparse: sparse: cast truncates bits from constant value (eeeeeeeeeeeeeeee becomes eeeeeeee)
   lib/test_bpf.c:8696:25: sparse: sparse: cast truncates bits from constant value (eeeeeeeeeeeeeeee becomes eeeeeeee)
   lib/test_bpf.c:8711:25: sparse: sparse: cast truncates bits from constant value (eeeeeeeeeeeeeeee becomes eeeeeeee)
   lib/test_bpf.c:8740:25: sparse: sparse: cast truncates bits from constant value (eeeeeeeeeeeeeeee becomes eeeeeeee)

vim +6896 lib/test_bpf.c

  1990	
  1991	
  1992	static struct bpf_test tests[] = {
  1993		{
  1994			"TAX",
  1995			.u.insns = {
  1996				BPF_STMT(BPF_LD | BPF_IMM, 1),
  1997				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  1998				BPF_STMT(BPF_LD | BPF_IMM, 2),
  1999				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  2000				BPF_STMT(BPF_ALU | BPF_NEG, 0), /* A == -3 */
  2001				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2002				BPF_STMT(BPF_LD | BPF_LEN, 0),
  2003				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  2004				BPF_STMT(BPF_MISC | BPF_TAX, 0), /* X == len - 3 */
  2005				BPF_STMT(BPF_LD | BPF_B | BPF_IND, 1),
  2006				BPF_STMT(BPF_RET | BPF_A, 0)
  2007			},
  2008			CLASSIC,
  2009			{ 10, 20, 30, 40, 50 },
  2010			{ { 2, 10 }, { 3, 20 }, { 4, 30 } },
  2011		},
  2012		{
  2013			"TXA",
  2014			.u.insns = {
  2015				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2016				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  2017				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  2018				BPF_STMT(BPF_RET | BPF_A, 0) /* A == len * 2 */
  2019			},
  2020			CLASSIC,
  2021			{ 10, 20, 30, 40, 50 },
  2022			{ { 1, 2 }, { 3, 6 }, { 4, 8 } },
  2023		},
  2024		{
  2025			"ADD_SUB_MUL_K",
  2026			.u.insns = {
  2027				BPF_STMT(BPF_LD | BPF_IMM, 1),
  2028				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 2),
  2029				BPF_STMT(BPF_LDX | BPF_IMM, 3),
  2030				BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0),
  2031				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 0xffffffff),
  2032				BPF_STMT(BPF_ALU | BPF_MUL | BPF_K, 3),
  2033				BPF_STMT(BPF_RET | BPF_A, 0)
  2034			},
  2035			CLASSIC | FLAG_NO_DATA,
  2036			{ },
  2037			{ { 0, 0xfffffffd } }
  2038		},
  2039		{
  2040			"DIV_MOD_KX",
  2041			.u.insns = {
  2042				BPF_STMT(BPF_LD | BPF_IMM, 8),
  2043				BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 2),
  2044				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2045				BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff),
  2046				BPF_STMT(BPF_ALU | BPF_DIV | BPF_X, 0),
  2047				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2048				BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff),
  2049				BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0x70000000),
  2050				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2051				BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff),
  2052				BPF_STMT(BPF_ALU | BPF_MOD | BPF_X, 0),
  2053				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2054				BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff),
  2055				BPF_STMT(BPF_ALU | BPF_MOD | BPF_K, 0x70000000),
  2056				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  2057				BPF_STMT(BPF_RET | BPF_A, 0)
  2058			},
  2059			CLASSIC | FLAG_NO_DATA,
  2060			{ },
  2061			{ { 0, 0x20000000 } }
  2062		},
  2063		{
  2064			"AND_OR_LSH_K",
  2065			.u.insns = {
  2066				BPF_STMT(BPF_LD | BPF_IMM, 0xff),
  2067				BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf0),
  2068				BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 27),
  2069				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2070				BPF_STMT(BPF_LD | BPF_IMM, 0xf),
  2071				BPF_STMT(BPF_ALU | BPF_OR | BPF_K, 0xf0),
  2072				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  2073				BPF_STMT(BPF_RET | BPF_A, 0)
  2074			},
  2075			CLASSIC | FLAG_NO_DATA,
  2076			{ },
  2077			{ { 0, 0x800000ff }, { 1, 0x800000ff } },
  2078		},
  2079		{
  2080			"LD_IMM_0",
  2081			.u.insns = {
  2082				BPF_STMT(BPF_LD | BPF_IMM, 0), /* ld #0 */
  2083				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 1, 0),
  2084				BPF_STMT(BPF_RET | BPF_K, 0),
  2085				BPF_STMT(BPF_RET | BPF_K, 1),
  2086			},
  2087			CLASSIC,
  2088			{ },
  2089			{ { 1, 1 } },
  2090		},
  2091		{
  2092			"LD_IND",
  2093			.u.insns = {
  2094				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2095				BPF_STMT(BPF_LD | BPF_H | BPF_IND, MAX_K),
  2096				BPF_STMT(BPF_RET | BPF_K, 1)
  2097			},
  2098			CLASSIC,
  2099			{ },
  2100			{ { 1, 0 }, { 10, 0 }, { 60, 0 } },
  2101		},
  2102		{
  2103			"LD_ABS",
  2104			.u.insns = {
  2105				BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 1000),
  2106				BPF_STMT(BPF_RET | BPF_K, 1)
  2107			},
  2108			CLASSIC,
  2109			{ },
  2110			{ { 1, 0 }, { 10, 0 }, { 60, 0 } },
  2111		},
  2112		{
  2113			"LD_ABS_LL",
  2114			.u.insns = {
  2115				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_LL_OFF),
  2116				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2117				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_LL_OFF + 1),
  2118				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  2119				BPF_STMT(BPF_RET | BPF_A, 0)
  2120			},
  2121			CLASSIC,
  2122			{ 1, 2, 3 },
  2123			{ { 1, 0 }, { 2, 3 } },
  2124		},
  2125		{
  2126			"LD_IND_LL",
  2127			.u.insns = {
  2128				BPF_STMT(BPF_LD | BPF_IMM, SKF_LL_OFF - 1),
  2129				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2130				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  2131				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2132				BPF_STMT(BPF_LD | BPF_B | BPF_IND, 0),
  2133				BPF_STMT(BPF_RET | BPF_A, 0)
  2134			},
  2135			CLASSIC,
  2136			{ 1, 2, 3, 0xff },
  2137			{ { 1, 1 }, { 3, 3 }, { 4, 0xff } },
  2138		},
  2139		{
  2140			"LD_ABS_NET",
  2141			.u.insns = {
  2142				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_NET_OFF),
  2143				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2144				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_NET_OFF + 1),
  2145				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  2146				BPF_STMT(BPF_RET | BPF_A, 0)
  2147			},
  2148			CLASSIC,
  2149			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 },
  2150			{ { 15, 0 }, { 16, 3 } },
  2151		},
  2152		{
  2153			"LD_IND_NET",
  2154			.u.insns = {
  2155				BPF_STMT(BPF_LD | BPF_IMM, SKF_NET_OFF - 15),
  2156				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2157				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  2158				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2159				BPF_STMT(BPF_LD | BPF_B | BPF_IND, 0),
  2160				BPF_STMT(BPF_RET | BPF_A, 0)
  2161			},
  2162			CLASSIC,
  2163			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 },
  2164			{ { 14, 0 }, { 15, 1 }, { 17, 3 } },
  2165		},
  2166		{
  2167			"LD_PKTTYPE",
  2168			.u.insns = {
  2169				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2170					 SKF_AD_OFF + SKF_AD_PKTTYPE),
  2171				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0),
  2172				BPF_STMT(BPF_RET | BPF_K, 1),
  2173				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2174					 SKF_AD_OFF + SKF_AD_PKTTYPE),
  2175				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0),
  2176				BPF_STMT(BPF_RET | BPF_K, 1),
  2177				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2178					 SKF_AD_OFF + SKF_AD_PKTTYPE),
  2179				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0),
  2180				BPF_STMT(BPF_RET | BPF_K, 1),
  2181				BPF_STMT(BPF_RET | BPF_A, 0)
  2182			},
  2183			CLASSIC,
  2184			{ },
  2185			{ { 1, 3 }, { 10, 3 } },
  2186		},
  2187		{
  2188			"LD_MARK",
  2189			.u.insns = {
  2190				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2191					 SKF_AD_OFF + SKF_AD_MARK),
  2192				BPF_STMT(BPF_RET | BPF_A, 0)
  2193			},
  2194			CLASSIC,
  2195			{ },
  2196			{ { 1, SKB_MARK}, { 10, SKB_MARK} },
  2197		},
  2198		{
  2199			"LD_RXHASH",
  2200			.u.insns = {
  2201				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2202					 SKF_AD_OFF + SKF_AD_RXHASH),
  2203				BPF_STMT(BPF_RET | BPF_A, 0)
  2204			},
  2205			CLASSIC,
  2206			{ },
  2207			{ { 1, SKB_HASH}, { 10, SKB_HASH} },
  2208		},
  2209		{
  2210			"LD_QUEUE",
  2211			.u.insns = {
  2212				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2213					 SKF_AD_OFF + SKF_AD_QUEUE),
  2214				BPF_STMT(BPF_RET | BPF_A, 0)
  2215			},
  2216			CLASSIC,
  2217			{ },
  2218			{ { 1, SKB_QUEUE_MAP }, { 10, SKB_QUEUE_MAP } },
  2219		},
  2220		{
  2221			"LD_PROTOCOL",
  2222			.u.insns = {
  2223				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 1),
  2224				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 20, 1, 0),
  2225				BPF_STMT(BPF_RET | BPF_K, 0),
  2226				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2227					 SKF_AD_OFF + SKF_AD_PROTOCOL),
  2228				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2229				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
  2230				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 30, 1, 0),
  2231				BPF_STMT(BPF_RET | BPF_K, 0),
  2232				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  2233				BPF_STMT(BPF_RET | BPF_A, 0)
  2234			},
  2235			CLASSIC,
  2236			{ 10, 20, 30 },
  2237			{ { 10, ETH_P_IP }, { 100, ETH_P_IP } },
  2238		},
  2239		{
  2240			"LD_VLAN_TAG",
  2241			.u.insns = {
  2242				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2243					 SKF_AD_OFF + SKF_AD_VLAN_TAG),
  2244				BPF_STMT(BPF_RET | BPF_A, 0)
  2245			},
  2246			CLASSIC,
  2247			{ },
  2248			{
  2249				{ 1, SKB_VLAN_TCI },
  2250				{ 10, SKB_VLAN_TCI }
  2251			},
  2252		},
  2253		{
  2254			"LD_VLAN_TAG_PRESENT",
  2255			.u.insns = {
  2256				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2257					 SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT),
  2258				BPF_STMT(BPF_RET | BPF_A, 0)
  2259			},
  2260			CLASSIC,
  2261			{ },
  2262			{
  2263				{ 1, SKB_VLAN_PRESENT },
  2264				{ 10, SKB_VLAN_PRESENT }
  2265			},
  2266		},
  2267		{
  2268			"LD_IFINDEX",
  2269			.u.insns = {
  2270				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2271					 SKF_AD_OFF + SKF_AD_IFINDEX),
  2272				BPF_STMT(BPF_RET | BPF_A, 0)
  2273			},
  2274			CLASSIC,
  2275			{ },
  2276			{ { 1, SKB_DEV_IFINDEX }, { 10, SKB_DEV_IFINDEX } },
  2277		},
  2278		{
  2279			"LD_HATYPE",
  2280			.u.insns = {
  2281				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2282					 SKF_AD_OFF + SKF_AD_HATYPE),
  2283				BPF_STMT(BPF_RET | BPF_A, 0)
  2284			},
  2285			CLASSIC,
  2286			{ },
  2287			{ { 1, SKB_DEV_TYPE }, { 10, SKB_DEV_TYPE } },
  2288		},
  2289		{
  2290			"LD_CPU",
  2291			.u.insns = {
  2292				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2293					 SKF_AD_OFF + SKF_AD_CPU),
  2294				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2295				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2296					 SKF_AD_OFF + SKF_AD_CPU),
  2297				BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0),
  2298				BPF_STMT(BPF_RET | BPF_A, 0)
  2299			},
  2300			CLASSIC,
  2301			{ },
  2302			{ { 1, 0 }, { 10, 0 } },
  2303		},
  2304		{
  2305			"LD_NLATTR",
  2306			.u.insns = {
  2307				BPF_STMT(BPF_LDX | BPF_IMM, 2),
  2308				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  2309				BPF_STMT(BPF_LDX | BPF_IMM, 3),
  2310				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2311					 SKF_AD_OFF + SKF_AD_NLATTR),
  2312				BPF_STMT(BPF_RET | BPF_A, 0)
  2313			},
  2314			CLASSIC,
  2315	#ifdef __BIG_ENDIAN
  2316			{ 0xff, 0xff, 0, 4, 0, 2, 0, 4, 0, 3 },
  2317	#else
  2318			{ 0xff, 0xff, 4, 0, 2, 0, 4, 0, 3, 0 },
  2319	#endif
  2320			{ { 4, 0 }, { 20, 6 } },
  2321		},
  2322		{
  2323			"LD_NLATTR_NEST",
  2324			.u.insns = {
  2325				BPF_STMT(BPF_LD | BPF_IMM, 2),
  2326				BPF_STMT(BPF_LDX | BPF_IMM, 3),
  2327				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2328					 SKF_AD_OFF + SKF_AD_NLATTR_NEST),
  2329				BPF_STMT(BPF_LD | BPF_IMM, 2),
  2330				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2331					 SKF_AD_OFF + SKF_AD_NLATTR_NEST),
  2332				BPF_STMT(BPF_LD | BPF_IMM, 2),
  2333				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2334					 SKF_AD_OFF + SKF_AD_NLATTR_NEST),
  2335				BPF_STMT(BPF_LD | BPF_IMM, 2),
  2336				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2337					 SKF_AD_OFF + SKF_AD_NLATTR_NEST),
  2338				BPF_STMT(BPF_LD | BPF_IMM, 2),
  2339				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2340					 SKF_AD_OFF + SKF_AD_NLATTR_NEST),
  2341				BPF_STMT(BPF_LD | BPF_IMM, 2),
  2342				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2343					 SKF_AD_OFF + SKF_AD_NLATTR_NEST),
  2344				BPF_STMT(BPF_LD | BPF_IMM, 2),
  2345				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2346					 SKF_AD_OFF + SKF_AD_NLATTR_NEST),
  2347				BPF_STMT(BPF_LD | BPF_IMM, 2),
  2348				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2349					 SKF_AD_OFF + SKF_AD_NLATTR_NEST),
  2350				BPF_STMT(BPF_RET | BPF_A, 0)
  2351			},
  2352			CLASSIC,
  2353	#ifdef __BIG_ENDIAN
  2354			{ 0xff, 0xff, 0, 12, 0, 1, 0, 4, 0, 2, 0, 4, 0, 3 },
  2355	#else
  2356			{ 0xff, 0xff, 12, 0, 1, 0, 4, 0, 2, 0, 4, 0, 3, 0 },
  2357	#endif
  2358			{ { 4, 0 }, { 20, 10 } },
  2359		},
  2360		{
  2361			"LD_PAYLOAD_OFF",
  2362			.u.insns = {
  2363				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2364					 SKF_AD_OFF + SKF_AD_PAY_OFFSET),
  2365				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2366					 SKF_AD_OFF + SKF_AD_PAY_OFFSET),
  2367				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2368					 SKF_AD_OFF + SKF_AD_PAY_OFFSET),
  2369				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2370					 SKF_AD_OFF + SKF_AD_PAY_OFFSET),
  2371				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2372					 SKF_AD_OFF + SKF_AD_PAY_OFFSET),
  2373				BPF_STMT(BPF_RET | BPF_A, 0)
  2374			},
  2375			CLASSIC,
  2376			/* 00:00:00:00:00:00 > 00:00:00:00:00:00, ethtype IPv4 (0x0800),
  2377			 * length 98: 127.0.0.1 > 127.0.0.1: ICMP echo request,
  2378			 * id 9737, seq 1, length 64
  2379			 */
  2380			{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  2381			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  2382			  0x08, 0x00,
  2383			  0x45, 0x00, 0x00, 0x54, 0xac, 0x8b, 0x40, 0x00, 0x40,
  2384			  0x01, 0x90, 0x1b, 0x7f, 0x00, 0x00, 0x01 },
  2385			{ { 30, 0 }, { 100, 42 } },
  2386		},
  2387		{
  2388			"LD_ANC_XOR",
  2389			.u.insns = {
  2390				BPF_STMT(BPF_LD | BPF_IMM, 10),
  2391				BPF_STMT(BPF_LDX | BPF_IMM, 300),
  2392				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  2393					 SKF_AD_OFF + SKF_AD_ALU_XOR_X),
  2394				BPF_STMT(BPF_RET | BPF_A, 0)
  2395			},
  2396			CLASSIC,
  2397			{ },
  2398			{ { 4, 0xA ^ 300 }, { 20, 0xA ^ 300 } },
  2399		},
  2400		{
  2401			"SPILL_FILL",
  2402			.u.insns = {
  2403				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2404				BPF_STMT(BPF_LD | BPF_IMM, 2),
  2405				BPF_STMT(BPF_ALU | BPF_RSH, 1),
  2406				BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0),
  2407				BPF_STMT(BPF_ST, 1), /* M1 = 1 ^ len */
  2408				BPF_STMT(BPF_ALU | BPF_XOR | BPF_K, 0x80000000),
  2409				BPF_STMT(BPF_ST, 2), /* M2 = 1 ^ len ^ 0x80000000 */
  2410				BPF_STMT(BPF_STX, 15), /* M3 = len */
  2411				BPF_STMT(BPF_LDX | BPF_MEM, 1),
  2412				BPF_STMT(BPF_LD | BPF_MEM, 2),
  2413				BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0),
  2414				BPF_STMT(BPF_LDX | BPF_MEM, 15),
  2415				BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0),
  2416				BPF_STMT(BPF_RET | BPF_A, 0)
  2417			},
  2418			CLASSIC,
  2419			{ },
  2420			{ { 1, 0x80000001 }, { 2, 0x80000002 }, { 60, 0x80000000 ^ 60 } }
  2421		},
  2422		{
  2423			"JEQ",
  2424			.u.insns = {
  2425				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2426				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
  2427				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0, 0, 1),
  2428				BPF_STMT(BPF_RET | BPF_K, 1),
  2429				BPF_STMT(BPF_RET | BPF_K, MAX_K)
  2430			},
  2431			CLASSIC,
  2432			{ 3, 3, 3, 3, 3 },
  2433			{ { 1, 0 }, { 3, 1 }, { 4, MAX_K } },
  2434		},
  2435		{
  2436			"JGT",
  2437			.u.insns = {
  2438				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2439				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
  2440				BPF_JUMP(BPF_JMP | BPF_JGT | BPF_X, 0, 0, 1),
  2441				BPF_STMT(BPF_RET | BPF_K, 1),
  2442				BPF_STMT(BPF_RET | BPF_K, MAX_K)
  2443			},
  2444			CLASSIC,
  2445			{ 4, 4, 4, 3, 3 },
  2446			{ { 2, 0 }, { 3, 1 }, { 4, MAX_K } },
  2447		},
  2448		{
  2449			"JGE (jt 0), test 1",
  2450			.u.insns = {
  2451				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2452				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
  2453				BPF_JUMP(BPF_JMP | BPF_JGE | BPF_X, 0, 0, 1),
  2454				BPF_STMT(BPF_RET | BPF_K, 1),
  2455				BPF_STMT(BPF_RET | BPF_K, MAX_K)
  2456			},
  2457			CLASSIC,
  2458			{ 4, 4, 4, 3, 3 },
  2459			{ { 2, 0 }, { 3, 1 }, { 4, 1 } },
  2460		},
  2461		{
  2462			"JGE (jt 0), test 2",
  2463			.u.insns = {
  2464				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2465				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
  2466				BPF_JUMP(BPF_JMP | BPF_JGE | BPF_X, 0, 0, 1),
  2467				BPF_STMT(BPF_RET | BPF_K, 1),
  2468				BPF_STMT(BPF_RET | BPF_K, MAX_K)
  2469			},
  2470			CLASSIC,
  2471			{ 4, 4, 5, 3, 3 },
  2472			{ { 4, 1 }, { 5, 1 }, { 6, MAX_K } },
  2473		},
  2474		{
  2475			"JGE",
  2476			.u.insns = {
  2477				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2478				BPF_STMT(BPF_LD | BPF_B | BPF_IND, MAX_K),
  2479				BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 1, 1, 0),
  2480				BPF_STMT(BPF_RET | BPF_K, 10),
  2481				BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 2, 1, 0),
  2482				BPF_STMT(BPF_RET | BPF_K, 20),
  2483				BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 3, 1, 0),
  2484				BPF_STMT(BPF_RET | BPF_K, 30),
  2485				BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 4, 1, 0),
  2486				BPF_STMT(BPF_RET | BPF_K, 40),
  2487				BPF_STMT(BPF_RET | BPF_K, MAX_K)
  2488			},
  2489			CLASSIC,
  2490			{ 1, 2, 3, 4, 5 },
  2491			{ { 1, 20 }, { 3, 40 }, { 5, MAX_K } },
  2492		},
  2493		{
  2494			"JSET",
  2495			.u.insns = {
  2496				BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0),
  2497				BPF_JUMP(BPF_JMP | BPF_JA, 1, 1, 1),
  2498				BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0),
  2499				BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0),
  2500				BPF_STMT(BPF_LDX | BPF_LEN, 0),
  2501				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  2502				BPF_STMT(BPF_ALU | BPF_SUB | BPF_K, 4),
  2503				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  2504				BPF_STMT(BPF_LD | BPF_W | BPF_IND, 0),
  2505				BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 1, 0, 1),
  2506				BPF_STMT(BPF_RET | BPF_K, 10),
  2507				BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x80000000, 0, 1),
  2508				BPF_STMT(BPF_RET | BPF_K, 20),
  2509				BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
  2510				BPF_STMT(BPF_RET | BPF_K, 30),
  2511				BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
  2512				BPF_STMT(BPF_RET | BPF_K, 30),
  2513				BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
  2514				BPF_STMT(BPF_RET | BPF_K, 30),
  2515				BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
  2516				BPF_STMT(BPF_RET | BPF_K, 30),
  2517				BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
  2518				BPF_STMT(BPF_RET | BPF_K, 30),
  2519				BPF_STMT(BPF_RET | BPF_K, MAX_K)
  2520			},
  2521			CLASSIC,
  2522			{ 0, 0xAA, 0x55, 1 },
  2523			{ { 4, 10 }, { 5, 20 }, { 6, MAX_K } },
  2524		},
  2525		{
  2526			"tcpdump port 22",
  2527			.u.insns = {
  2528				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 12),
  2529				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x86dd, 0, 8), /* IPv6 */
  2530				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 20),
  2531				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x84, 2, 0),
  2532				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 1, 0),
  2533				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x11, 0, 17),
  2534				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 54),
  2535				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 14, 0),
  2536				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 56),
  2537				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 12, 13),
  2538				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x0800, 0, 12), /* IPv4 */
  2539				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 23),
  2540				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x84, 2, 0),
  2541				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 1, 0),
  2542				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x11, 0, 8),
  2543				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 20),
  2544				BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x1fff, 6, 0),
  2545				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14),
  2546				BPF_STMT(BPF_LD | BPF_H | BPF_IND, 14),
  2547				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 2, 0),
  2548				BPF_STMT(BPF_LD | BPF_H | BPF_IND, 16),
  2549				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 0, 1),
  2550				BPF_STMT(BPF_RET | BPF_K, 0xffff),
  2551				BPF_STMT(BPF_RET | BPF_K, 0),
  2552			},
  2553			CLASSIC,
  2554			/* 3c:07:54:43:e5:76 > 10:bf:48:d6:43:d6, ethertype IPv4(0x0800)
  2555			 * length 114: 10.1.1.149.49700 > 10.1.2.10.22: Flags [P.],
  2556			 * seq 1305692979:1305693027, ack 3650467037, win 65535,
  2557			 * options [nop,nop,TS val 2502645400 ecr 3971138], length 48
  2558			 */
  2559			{ 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6,
  2560			  0x3c, 0x07, 0x54, 0x43, 0xe5, 0x76,
  2561			  0x08, 0x00,
  2562			  0x45, 0x10, 0x00, 0x64, 0x75, 0xb5,
  2563			  0x40, 0x00, 0x40, 0x06, 0xad, 0x2e, /* IP header */
  2564			  0x0a, 0x01, 0x01, 0x95, /* ip src */
  2565			  0x0a, 0x01, 0x02, 0x0a, /* ip dst */
  2566			  0xc2, 0x24,
  2567			  0x00, 0x16 /* dst port */ },
  2568			{ { 10, 0 }, { 30, 0 }, { 100, 65535 } },
  2569		},
  2570		{
  2571			"tcpdump complex",
  2572			.u.insns = {
  2573				/* tcpdump -nei eth0 'tcp port 22 and (((ip[2:2] -
  2574				 * ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and
  2575				 * (len > 115 or len < 30000000000)' -d
  2576				 */
  2577				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 12),
  2578				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x86dd, 30, 0),
  2579				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x800, 0, 29),
  2580				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 23),
  2581				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 0, 27),
  2582				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 20),
  2583				BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x1fff, 25, 0),
  2584				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14),
  2585				BPF_STMT(BPF_LD | BPF_H | BPF_IND, 14),
  2586				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 2, 0),
  2587				BPF_STMT(BPF_LD | BPF_H | BPF_IND, 16),
  2588				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 0, 20),
  2589				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 16),
  2590				BPF_STMT(BPF_ST, 1),
  2591				BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 14),
  2592				BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf),
  2593				BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 2),
  2594				BPF_STMT(BPF_MISC | BPF_TAX, 0x5), /* libpcap emits K on TAX */
  2595				BPF_STMT(BPF_LD | BPF_MEM, 1),
  2596				BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0),
  2597				BPF_STMT(BPF_ST, 5),
  2598				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14),
  2599				BPF_STMT(BPF_LD | BPF_B | BPF_IND, 26),
  2600				BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf0),
  2601				BPF_STMT(BPF_ALU | BPF_RSH | BPF_K, 2),
  2602				BPF_STMT(BPF_MISC | BPF_TAX, 0x9), /* libpcap emits K on TAX */
  2603				BPF_STMT(BPF_LD | BPF_MEM, 5),
  2604				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0, 4, 0),
  2605				BPF_STMT(BPF_LD | BPF_LEN, 0),
  2606				BPF_JUMP(BPF_JMP | BPF_JGT | BPF_K, 0x73, 1, 0),
  2607				BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 0xfc23ac00, 1, 0),
  2608				BPF_STMT(BPF_RET | BPF_K, 0xffff),
  2609				BPF_STMT(BPF_RET | BPF_K, 0),
  2610			},
  2611			CLASSIC,
  2612			{ 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6,
  2613			  0x3c, 0x07, 0x54, 0x43, 0xe5, 0x76,
  2614			  0x08, 0x00,
  2615			  0x45, 0x10, 0x00, 0x64, 0x75, 0xb5,
  2616			  0x40, 0x00, 0x40, 0x06, 0xad, 0x2e, /* IP header */
  2617			  0x0a, 0x01, 0x01, 0x95, /* ip src */
  2618			  0x0a, 0x01, 0x02, 0x0a, /* ip dst */
  2619			  0xc2, 0x24,
  2620			  0x00, 0x16 /* dst port */ },
  2621			{ { 10, 0 }, { 30, 0 }, { 100, 65535 } },
  2622		},
  2623		{
  2624			"RET_A",
  2625			.u.insns = {
  2626				/* check that uninitialized X and A contain zeros */
  2627				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  2628				BPF_STMT(BPF_RET | BPF_A, 0)
  2629			},
  2630			CLASSIC,
  2631			{ },
  2632			{ {1, 0}, {2, 0} },
  2633		},
  2634		{
  2635			"INT: ADD trivial",
  2636			.u.insns_int = {
  2637				BPF_ALU64_IMM(BPF_MOV, R1, 1),
  2638				BPF_ALU64_IMM(BPF_ADD, R1, 2),
  2639				BPF_ALU64_IMM(BPF_MOV, R2, 3),
  2640				BPF_ALU64_REG(BPF_SUB, R1, R2),
  2641				BPF_ALU64_IMM(BPF_ADD, R1, -1),
  2642				BPF_ALU64_IMM(BPF_MUL, R1, 3),
  2643				BPF_ALU64_REG(BPF_MOV, R0, R1),
  2644				BPF_EXIT_INSN(),
  2645			},
  2646			INTERNAL,
  2647			{ },
  2648			{ { 0, 0xfffffffd } }
  2649		},
  2650		{
  2651			"INT: MUL_X",
  2652			.u.insns_int = {
  2653				BPF_ALU64_IMM(BPF_MOV, R0, -1),
  2654				BPF_ALU64_IMM(BPF_MOV, R1, -1),
  2655				BPF_ALU64_IMM(BPF_MOV, R2, 3),
  2656				BPF_ALU64_REG(BPF_MUL, R1, R2),
  2657				BPF_JMP_IMM(BPF_JEQ, R1, 0xfffffffd, 1),
  2658				BPF_EXIT_INSN(),
  2659				BPF_ALU64_IMM(BPF_MOV, R0, 1),
  2660				BPF_EXIT_INSN(),
  2661			},
  2662			INTERNAL,
  2663			{ },
  2664			{ { 0, 1 } }
  2665		},
  2666		{
  2667			"INT: MUL_X2",
  2668			.u.insns_int = {
  2669				BPF_ALU32_IMM(BPF_MOV, R0, -1),
  2670				BPF_ALU32_IMM(BPF_MOV, R1, -1),
  2671				BPF_ALU32_IMM(BPF_MOV, R2, 3),
  2672				BPF_ALU64_REG(BPF_MUL, R1, R2),
  2673				BPF_ALU64_IMM(BPF_RSH, R1, 8),
  2674				BPF_JMP_IMM(BPF_JEQ, R1, 0x2ffffff, 1),
  2675				BPF_EXIT_INSN(),
  2676				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  2677				BPF_EXIT_INSN(),
  2678			},
  2679			INTERNAL,
  2680			{ },
  2681			{ { 0, 1 } }
  2682		},
  2683		{
  2684			"INT: MUL32_X",
  2685			.u.insns_int = {
  2686				BPF_ALU32_IMM(BPF_MOV, R0, -1),
  2687				BPF_ALU64_IMM(BPF_MOV, R1, -1),
  2688				BPF_ALU32_IMM(BPF_MOV, R2, 3),
  2689				BPF_ALU32_REG(BPF_MUL, R1, R2),
  2690				BPF_ALU64_IMM(BPF_RSH, R1, 8),
  2691				BPF_JMP_IMM(BPF_JEQ, R1, 0xffffff, 1),
  2692				BPF_EXIT_INSN(),
  2693				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  2694				BPF_EXIT_INSN(),
  2695			},
  2696			INTERNAL,
  2697			{ },
  2698			{ { 0, 1 } }
  2699		},
  2700		{
  2701			/* Have to test all register combinations, since
  2702			 * JITing of different registers will produce
  2703			 * different asm code.
  2704			 */
  2705			"INT: ADD 64-bit",
  2706			.u.insns_int = {
  2707				BPF_ALU64_IMM(BPF_MOV, R0, 0),
  2708				BPF_ALU64_IMM(BPF_MOV, R1, 1),
  2709				BPF_ALU64_IMM(BPF_MOV, R2, 2),
  2710				BPF_ALU64_IMM(BPF_MOV, R3, 3),
  2711				BPF_ALU64_IMM(BPF_MOV, R4, 4),
  2712				BPF_ALU64_IMM(BPF_MOV, R5, 5),
  2713				BPF_ALU64_IMM(BPF_MOV, R6, 6),
  2714				BPF_ALU64_IMM(BPF_MOV, R7, 7),
  2715				BPF_ALU64_IMM(BPF_MOV, R8, 8),
  2716				BPF_ALU64_IMM(BPF_MOV, R9, 9),
  2717				BPF_ALU64_IMM(BPF_ADD, R0, 20),
  2718				BPF_ALU64_IMM(BPF_ADD, R1, 20),
  2719				BPF_ALU64_IMM(BPF_ADD, R2, 20),
  2720				BPF_ALU64_IMM(BPF_ADD, R3, 20),
  2721				BPF_ALU64_IMM(BPF_ADD, R4, 20),
  2722				BPF_ALU64_IMM(BPF_ADD, R5, 20),
  2723				BPF_ALU64_IMM(BPF_ADD, R6, 20),
  2724				BPF_ALU64_IMM(BPF_ADD, R7, 20),
  2725				BPF_ALU64_IMM(BPF_ADD, R8, 20),
  2726				BPF_ALU64_IMM(BPF_ADD, R9, 20),
  2727				BPF_ALU64_IMM(BPF_SUB, R0, 10),
  2728				BPF_ALU64_IMM(BPF_SUB, R1, 10),
  2729				BPF_ALU64_IMM(BPF_SUB, R2, 10),
  2730				BPF_ALU64_IMM(BPF_SUB, R3, 10),
  2731				BPF_ALU64_IMM(BPF_SUB, R4, 10),
  2732				BPF_ALU64_IMM(BPF_SUB, R5, 10),
  2733				BPF_ALU64_IMM(BPF_SUB, R6, 10),
  2734				BPF_ALU64_IMM(BPF_SUB, R7, 10),
  2735				BPF_ALU64_IMM(BPF_SUB, R8, 10),
  2736				BPF_ALU64_IMM(BPF_SUB, R9, 10),
  2737				BPF_ALU64_REG(BPF_ADD, R0, R0),
  2738				BPF_ALU64_REG(BPF_ADD, R0, R1),
  2739				BPF_ALU64_REG(BPF_ADD, R0, R2),
  2740				BPF_ALU64_REG(BPF_ADD, R0, R3),
  2741				BPF_ALU64_REG(BPF_ADD, R0, R4),
  2742				BPF_ALU64_REG(BPF_ADD, R0, R5),
  2743				BPF_ALU64_REG(BPF_ADD, R0, R6),
  2744				BPF_ALU64_REG(BPF_ADD, R0, R7),
  2745				BPF_ALU64_REG(BPF_ADD, R0, R8),
  2746				BPF_ALU64_REG(BPF_ADD, R0, R9), /* R0 == 155 */
  2747				BPF_JMP_IMM(BPF_JEQ, R0, 155, 1),
  2748				BPF_EXIT_INSN(),
  2749				BPF_ALU64_REG(BPF_ADD, R1, R0),
  2750				BPF_ALU64_REG(BPF_ADD, R1, R1),
  2751				BPF_ALU64_REG(BPF_ADD, R1, R2),
  2752				BPF_ALU64_REG(BPF_ADD, R1, R3),
  2753				BPF_ALU64_REG(BPF_ADD, R1, R4),
  2754				BPF_ALU64_REG(BPF_ADD, R1, R5),
  2755				BPF_ALU64_REG(BPF_ADD, R1, R6),
  2756				BPF_ALU64_REG(BPF_ADD, R1, R7),
  2757				BPF_ALU64_REG(BPF_ADD, R1, R8),
  2758				BPF_ALU64_REG(BPF_ADD, R1, R9), /* R1 == 456 */
  2759				BPF_JMP_IMM(BPF_JEQ, R1, 456, 1),
  2760				BPF_EXIT_INSN(),
  2761				BPF_ALU64_REG(BPF_ADD, R2, R0),
  2762				BPF_ALU64_REG(BPF_ADD, R2, R1),
  2763				BPF_ALU64_REG(BPF_ADD, R2, R2),
  2764				BPF_ALU64_REG(BPF_ADD, R2, R3),
  2765				BPF_ALU64_REG(BPF_ADD, R2, R4),
  2766				BPF_ALU64_REG(BPF_ADD, R2, R5),
  2767				BPF_ALU64_REG(BPF_ADD, R2, R6),
  2768				BPF_ALU64_REG(BPF_ADD, R2, R7),
  2769				BPF_ALU64_REG(BPF_ADD, R2, R8),
  2770				BPF_ALU64_REG(BPF_ADD, R2, R9), /* R2 == 1358 */
  2771				BPF_JMP_IMM(BPF_JEQ, R2, 1358, 1),
  2772				BPF_EXIT_INSN(),
  2773				BPF_ALU64_REG(BPF_ADD, R3, R0),
  2774				BPF_ALU64_REG(BPF_ADD, R3, R1),
  2775				BPF_ALU64_REG(BPF_ADD, R3, R2),
  2776				BPF_ALU64_REG(BPF_ADD, R3, R3),
  2777				BPF_ALU64_REG(BPF_ADD, R3, R4),
  2778				BPF_ALU64_REG(BPF_ADD, R3, R5),
  2779				BPF_ALU64_REG(BPF_ADD, R3, R6),
  2780				BPF_ALU64_REG(BPF_ADD, R3, R7),
  2781				BPF_ALU64_REG(BPF_ADD, R3, R8),
  2782				BPF_ALU64_REG(BPF_ADD, R3, R9), /* R3 == 4063 */
  2783				BPF_JMP_IMM(BPF_JEQ, R3, 4063, 1),
  2784				BPF_EXIT_INSN(),
  2785				BPF_ALU64_REG(BPF_ADD, R4, R0),
  2786				BPF_ALU64_REG(BPF_ADD, R4, R1),
  2787				BPF_ALU64_REG(BPF_ADD, R4, R2),
  2788				BPF_ALU64_REG(BPF_ADD, R4, R3),
  2789				BPF_ALU64_REG(BPF_ADD, R4, R4),
  2790				BPF_ALU64_REG(BPF_ADD, R4, R5),
  2791				BPF_ALU64_REG(BPF_ADD, R4, R6),
  2792				BPF_ALU64_REG(BPF_ADD, R4, R7),
  2793				BPF_ALU64_REG(BPF_ADD, R4, R8),
  2794				BPF_ALU64_REG(BPF_ADD, R4, R9), /* R4 == 12177 */
  2795				BPF_JMP_IMM(BPF_JEQ, R4, 12177, 1),
  2796				BPF_EXIT_INSN(),
  2797				BPF_ALU64_REG(BPF_ADD, R5, R0),
  2798				BPF_ALU64_REG(BPF_ADD, R5, R1),
  2799				BPF_ALU64_REG(BPF_ADD, R5, R2),
  2800				BPF_ALU64_REG(BPF_ADD, R5, R3),
  2801				BPF_ALU64_REG(BPF_ADD, R5, R4),
  2802				BPF_ALU64_REG(BPF_ADD, R5, R5),
  2803				BPF_ALU64_REG(BPF_ADD, R5, R6),
  2804				BPF_ALU64_REG(BPF_ADD, R5, R7),
  2805				BPF_ALU64_REG(BPF_ADD, R5, R8),
  2806				BPF_ALU64_REG(BPF_ADD, R5, R9), /* R5 == 36518 */
  2807				BPF_JMP_IMM(BPF_JEQ, R5, 36518, 1),
  2808				BPF_EXIT_INSN(),
  2809				BPF_ALU64_REG(BPF_ADD, R6, R0),
  2810				BPF_ALU64_REG(BPF_ADD, R6, R1),
  2811				BPF_ALU64_REG(BPF_ADD, R6, R2),
  2812				BPF_ALU64_REG(BPF_ADD, R6, R3),
  2813				BPF_ALU64_REG(BPF_ADD, R6, R4),
  2814				BPF_ALU64_REG(BPF_ADD, R6, R5),
  2815				BPF_ALU64_REG(BPF_ADD, R6, R6),
  2816				BPF_ALU64_REG(BPF_ADD, R6, R7),
  2817				BPF_ALU64_REG(BPF_ADD, R6, R8),
  2818				BPF_ALU64_REG(BPF_ADD, R6, R9), /* R6 == 109540 */
  2819				BPF_JMP_IMM(BPF_JEQ, R6, 109540, 1),
  2820				BPF_EXIT_INSN(),
  2821				BPF_ALU64_REG(BPF_ADD, R7, R0),
  2822				BPF_ALU64_REG(BPF_ADD, R7, R1),
  2823				BPF_ALU64_REG(BPF_ADD, R7, R2),
  2824				BPF_ALU64_REG(BPF_ADD, R7, R3),
  2825				BPF_ALU64_REG(BPF_ADD, R7, R4),
  2826				BPF_ALU64_REG(BPF_ADD, R7, R5),
  2827				BPF_ALU64_REG(BPF_ADD, R7, R6),
  2828				BPF_ALU64_REG(BPF_ADD, R7, R7),
  2829				BPF_ALU64_REG(BPF_ADD, R7, R8),
  2830				BPF_ALU64_REG(BPF_ADD, R7, R9), /* R7 == 328605 */
  2831				BPF_JMP_IMM(BPF_JEQ, R7, 328605, 1),
  2832				BPF_EXIT_INSN(),
  2833				BPF_ALU64_REG(BPF_ADD, R8, R0),
  2834				BPF_ALU64_REG(BPF_ADD, R8, R1),
  2835				BPF_ALU64_REG(BPF_ADD, R8, R2),
  2836				BPF_ALU64_REG(BPF_ADD, R8, R3),
  2837				BPF_ALU64_REG(BPF_ADD, R8, R4),
  2838				BPF_ALU64_REG(BPF_ADD, R8, R5),
  2839				BPF_ALU64_REG(BPF_ADD, R8, R6),
  2840				BPF_ALU64_REG(BPF_ADD, R8, R7),
  2841				BPF_ALU64_REG(BPF_ADD, R8, R8),
  2842				BPF_ALU64_REG(BPF_ADD, R8, R9), /* R8 == 985799 */
  2843				BPF_JMP_IMM(BPF_JEQ, R8, 985799, 1),
  2844				BPF_EXIT_INSN(),
  2845				BPF_ALU64_REG(BPF_ADD, R9, R0),
  2846				BPF_ALU64_REG(BPF_ADD, R9, R1),
  2847				BPF_ALU64_REG(BPF_ADD, R9, R2),
  2848				BPF_ALU64_REG(BPF_ADD, R9, R3),
  2849				BPF_ALU64_REG(BPF_ADD, R9, R4),
  2850				BPF_ALU64_REG(BPF_ADD, R9, R5),
  2851				BPF_ALU64_REG(BPF_ADD, R9, R6),
  2852				BPF_ALU64_REG(BPF_ADD, R9, R7),
  2853				BPF_ALU64_REG(BPF_ADD, R9, R8),
  2854				BPF_ALU64_REG(BPF_ADD, R9, R9), /* R9 == 2957380 */
  2855				BPF_ALU64_REG(BPF_MOV, R0, R9),
  2856				BPF_EXIT_INSN(),
  2857			},
  2858			INTERNAL,
  2859			{ },
  2860			{ { 0, 2957380 } }
  2861		},
  2862		{
  2863			"INT: ADD 32-bit",
  2864			.u.insns_int = {
  2865				BPF_ALU32_IMM(BPF_MOV, R0, 20),
  2866				BPF_ALU32_IMM(BPF_MOV, R1, 1),
  2867				BPF_ALU32_IMM(BPF_MOV, R2, 2),
  2868				BPF_ALU32_IMM(BPF_MOV, R3, 3),
  2869				BPF_ALU32_IMM(BPF_MOV, R4, 4),
  2870				BPF_ALU32_IMM(BPF_MOV, R5, 5),
  2871				BPF_ALU32_IMM(BPF_MOV, R6, 6),
  2872				BPF_ALU32_IMM(BPF_MOV, R7, 7),
  2873				BPF_ALU32_IMM(BPF_MOV, R8, 8),
  2874				BPF_ALU32_IMM(BPF_MOV, R9, 9),
  2875				BPF_ALU64_IMM(BPF_ADD, R1, 10),
  2876				BPF_ALU64_IMM(BPF_ADD, R2, 10),
  2877				BPF_ALU64_IMM(BPF_ADD, R3, 10),
  2878				BPF_ALU64_IMM(BPF_ADD, R4, 10),
  2879				BPF_ALU64_IMM(BPF_ADD, R5, 10),
  2880				BPF_ALU64_IMM(BPF_ADD, R6, 10),
  2881				BPF_ALU64_IMM(BPF_ADD, R7, 10),
  2882				BPF_ALU64_IMM(BPF_ADD, R8, 10),
  2883				BPF_ALU64_IMM(BPF_ADD, R9, 10),
  2884				BPF_ALU32_REG(BPF_ADD, R0, R1),
  2885				BPF_ALU32_REG(BPF_ADD, R0, R2),
  2886				BPF_ALU32_REG(BPF_ADD, R0, R3),
  2887				BPF_ALU32_REG(BPF_ADD, R0, R4),
  2888				BPF_ALU32_REG(BPF_ADD, R0, R5),
  2889				BPF_ALU32_REG(BPF_ADD, R0, R6),
  2890				BPF_ALU32_REG(BPF_ADD, R0, R7),
  2891				BPF_ALU32_REG(BPF_ADD, R0, R8),
  2892				BPF_ALU32_REG(BPF_ADD, R0, R9), /* R0 == 155 */
  2893				BPF_JMP_IMM(BPF_JEQ, R0, 155, 1),
  2894				BPF_EXIT_INSN(),
  2895				BPF_ALU32_REG(BPF_ADD, R1, R0),
  2896				BPF_ALU32_REG(BPF_ADD, R1, R1),
  2897				BPF_ALU32_REG(BPF_ADD, R1, R2),
  2898				BPF_ALU32_REG(BPF_ADD, R1, R3),
  2899				BPF_ALU32_REG(BPF_ADD, R1, R4),
  2900				BPF_ALU32_REG(BPF_ADD, R1, R5),
  2901				BPF_ALU32_REG(BPF_ADD, R1, R6),
  2902				BPF_ALU32_REG(BPF_ADD, R1, R7),
  2903				BPF_ALU32_REG(BPF_ADD, R1, R8),
  2904				BPF_ALU32_REG(BPF_ADD, R1, R9), /* R1 == 456 */
  2905				BPF_JMP_IMM(BPF_JEQ, R1, 456, 1),
  2906				BPF_EXIT_INSN(),
  2907				BPF_ALU32_REG(BPF_ADD, R2, R0),
  2908				BPF_ALU32_REG(BPF_ADD, R2, R1),
  2909				BPF_ALU32_REG(BPF_ADD, R2, R2),
  2910				BPF_ALU32_REG(BPF_ADD, R2, R3),
  2911				BPF_ALU32_REG(BPF_ADD, R2, R4),
  2912				BPF_ALU32_REG(BPF_ADD, R2, R5),
  2913				BPF_ALU32_REG(BPF_ADD, R2, R6),
  2914				BPF_ALU32_REG(BPF_ADD, R2, R7),
  2915				BPF_ALU32_REG(BPF_ADD, R2, R8),
  2916				BPF_ALU32_REG(BPF_ADD, R2, R9), /* R2 == 1358 */
  2917				BPF_JMP_IMM(BPF_JEQ, R2, 1358, 1),
  2918				BPF_EXIT_INSN(),
  2919				BPF_ALU32_REG(BPF_ADD, R3, R0),
  2920				BPF_ALU32_REG(BPF_ADD, R3, R1),
  2921				BPF_ALU32_REG(BPF_ADD, R3, R2),
  2922				BPF_ALU32_REG(BPF_ADD, R3, R3),
  2923				BPF_ALU32_REG(BPF_ADD, R3, R4),
  2924				BPF_ALU32_REG(BPF_ADD, R3, R5),
  2925				BPF_ALU32_REG(BPF_ADD, R3, R6),
  2926				BPF_ALU32_REG(BPF_ADD, R3, R7),
  2927				BPF_ALU32_REG(BPF_ADD, R3, R8),
  2928				BPF_ALU32_REG(BPF_ADD, R3, R9), /* R3 == 4063 */
  2929				BPF_JMP_IMM(BPF_JEQ, R3, 4063, 1),
  2930				BPF_EXIT_INSN(),
  2931				BPF_ALU32_REG(BPF_ADD, R4, R0),
  2932				BPF_ALU32_REG(BPF_ADD, R4, R1),
  2933				BPF_ALU32_REG(BPF_ADD, R4, R2),
  2934				BPF_ALU32_REG(BPF_ADD, R4, R3),
  2935				BPF_ALU32_REG(BPF_ADD, R4, R4),
  2936				BPF_ALU32_REG(BPF_ADD, R4, R5),
  2937				BPF_ALU32_REG(BPF_ADD, R4, R6),
  2938				BPF_ALU32_REG(BPF_ADD, R4, R7),
  2939				BPF_ALU32_REG(BPF_ADD, R4, R8),
  2940				BPF_ALU32_REG(BPF_ADD, R4, R9), /* R4 == 12177 */
  2941				BPF_JMP_IMM(BPF_JEQ, R4, 12177, 1),
  2942				BPF_EXIT_INSN(),
  2943				BPF_ALU32_REG(BPF_ADD, R5, R0),
  2944				BPF_ALU32_REG(BPF_ADD, R5, R1),
  2945				BPF_ALU32_REG(BPF_ADD, R5, R2),
  2946				BPF_ALU32_REG(BPF_ADD, R5, R3),
  2947				BPF_ALU32_REG(BPF_ADD, R5, R4),
  2948				BPF_ALU32_REG(BPF_ADD, R5, R5),
  2949				BPF_ALU32_REG(BPF_ADD, R5, R6),
  2950				BPF_ALU32_REG(BPF_ADD, R5, R7),
  2951				BPF_ALU32_REG(BPF_ADD, R5, R8),
  2952				BPF_ALU32_REG(BPF_ADD, R5, R9), /* R5 == 36518 */
  2953				BPF_JMP_IMM(BPF_JEQ, R5, 36518, 1),
  2954				BPF_EXIT_INSN(),
  2955				BPF_ALU32_REG(BPF_ADD, R6, R0),
  2956				BPF_ALU32_REG(BPF_ADD, R6, R1),
  2957				BPF_ALU32_REG(BPF_ADD, R6, R2),
  2958				BPF_ALU32_REG(BPF_ADD, R6, R3),
  2959				BPF_ALU32_REG(BPF_ADD, R6, R4),
  2960				BPF_ALU32_REG(BPF_ADD, R6, R5),
  2961				BPF_ALU32_REG(BPF_ADD, R6, R6),
  2962				BPF_ALU32_REG(BPF_ADD, R6, R7),
  2963				BPF_ALU32_REG(BPF_ADD, R6, R8),
  2964				BPF_ALU32_REG(BPF_ADD, R6, R9), /* R6 == 109540 */
  2965				BPF_JMP_IMM(BPF_JEQ, R6, 109540, 1),
  2966				BPF_EXIT_INSN(),
  2967				BPF_ALU32_REG(BPF_ADD, R7, R0),
  2968				BPF_ALU32_REG(BPF_ADD, R7, R1),
  2969				BPF_ALU32_REG(BPF_ADD, R7, R2),
  2970				BPF_ALU32_REG(BPF_ADD, R7, R3),
  2971				BPF_ALU32_REG(BPF_ADD, R7, R4),
  2972				BPF_ALU32_REG(BPF_ADD, R7, R5),
  2973				BPF_ALU32_REG(BPF_ADD, R7, R6),
  2974				BPF_ALU32_REG(BPF_ADD, R7, R7),
  2975				BPF_ALU32_REG(BPF_ADD, R7, R8),
  2976				BPF_ALU32_REG(BPF_ADD, R7, R9), /* R7 == 328605 */
  2977				BPF_JMP_IMM(BPF_JEQ, R7, 328605, 1),
  2978				BPF_EXIT_INSN(),
  2979				BPF_ALU32_REG(BPF_ADD, R8, R0),
  2980				BPF_ALU32_REG(BPF_ADD, R8, R1),
  2981				BPF_ALU32_REG(BPF_ADD, R8, R2),
  2982				BPF_ALU32_REG(BPF_ADD, R8, R3),
  2983				BPF_ALU32_REG(BPF_ADD, R8, R4),
  2984				BPF_ALU32_REG(BPF_ADD, R8, R5),
  2985				BPF_ALU32_REG(BPF_ADD, R8, R6),
  2986				BPF_ALU32_REG(BPF_ADD, R8, R7),
  2987				BPF_ALU32_REG(BPF_ADD, R8, R8),
  2988				BPF_ALU32_REG(BPF_ADD, R8, R9), /* R8 == 985799 */
  2989				BPF_JMP_IMM(BPF_JEQ, R8, 985799, 1),
  2990				BPF_EXIT_INSN(),
  2991				BPF_ALU32_REG(BPF_ADD, R9, R0),
  2992				BPF_ALU32_REG(BPF_ADD, R9, R1),
  2993				BPF_ALU32_REG(BPF_ADD, R9, R2),
  2994				BPF_ALU32_REG(BPF_ADD, R9, R3),
  2995				BPF_ALU32_REG(BPF_ADD, R9, R4),
  2996				BPF_ALU32_REG(BPF_ADD, R9, R5),
  2997				BPF_ALU32_REG(BPF_ADD, R9, R6),
  2998				BPF_ALU32_REG(BPF_ADD, R9, R7),
  2999				BPF_ALU32_REG(BPF_ADD, R9, R8),
  3000				BPF_ALU32_REG(BPF_ADD, R9, R9), /* R9 == 2957380 */
  3001				BPF_ALU32_REG(BPF_MOV, R0, R9),
  3002				BPF_EXIT_INSN(),
  3003			},
  3004			INTERNAL,
  3005			{ },
  3006			{ { 0, 2957380 } }
  3007		},
  3008		{	/* Mainly checking JIT here. */
  3009			"INT: SUB",
  3010			.u.insns_int = {
  3011				BPF_ALU64_IMM(BPF_MOV, R0, 0),
  3012				BPF_ALU64_IMM(BPF_MOV, R1, 1),
  3013				BPF_ALU64_IMM(BPF_MOV, R2, 2),
  3014				BPF_ALU64_IMM(BPF_MOV, R3, 3),
  3015				BPF_ALU64_IMM(BPF_MOV, R4, 4),
  3016				BPF_ALU64_IMM(BPF_MOV, R5, 5),
  3017				BPF_ALU64_IMM(BPF_MOV, R6, 6),
  3018				BPF_ALU64_IMM(BPF_MOV, R7, 7),
  3019				BPF_ALU64_IMM(BPF_MOV, R8, 8),
  3020				BPF_ALU64_IMM(BPF_MOV, R9, 9),
  3021				BPF_ALU64_REG(BPF_SUB, R0, R0),
  3022				BPF_ALU64_REG(BPF_SUB, R0, R1),
  3023				BPF_ALU64_REG(BPF_SUB, R0, R2),
  3024				BPF_ALU64_REG(BPF_SUB, R0, R3),
  3025				BPF_ALU64_REG(BPF_SUB, R0, R4),
  3026				BPF_ALU64_REG(BPF_SUB, R0, R5),
  3027				BPF_ALU64_REG(BPF_SUB, R0, R6),
  3028				BPF_ALU64_REG(BPF_SUB, R0, R7),
  3029				BPF_ALU64_REG(BPF_SUB, R0, R8),
  3030				BPF_ALU64_REG(BPF_SUB, R0, R9),
  3031				BPF_ALU64_IMM(BPF_SUB, R0, 10),
  3032				BPF_JMP_IMM(BPF_JEQ, R0, -55, 1),
  3033				BPF_EXIT_INSN(),
  3034				BPF_ALU64_REG(BPF_SUB, R1, R0),
  3035				BPF_ALU64_REG(BPF_SUB, R1, R2),
  3036				BPF_ALU64_REG(BPF_SUB, R1, R3),
  3037				BPF_ALU64_REG(BPF_SUB, R1, R4),
  3038				BPF_ALU64_REG(BPF_SUB, R1, R5),
  3039				BPF_ALU64_REG(BPF_SUB, R1, R6),
  3040				BPF_ALU64_REG(BPF_SUB, R1, R7),
  3041				BPF_ALU64_REG(BPF_SUB, R1, R8),
  3042				BPF_ALU64_REG(BPF_SUB, R1, R9),
  3043				BPF_ALU64_IMM(BPF_SUB, R1, 10),
  3044				BPF_ALU64_REG(BPF_SUB, R2, R0),
  3045				BPF_ALU64_REG(BPF_SUB, R2, R1),
  3046				BPF_ALU64_REG(BPF_SUB, R2, R3),
  3047				BPF_ALU64_REG(BPF_SUB, R2, R4),
  3048				BPF_ALU64_REG(BPF_SUB, R2, R5),
  3049				BPF_ALU64_REG(BPF_SUB, R2, R6),
  3050				BPF_ALU64_REG(BPF_SUB, R2, R7),
  3051				BPF_ALU64_REG(BPF_SUB, R2, R8),
  3052				BPF_ALU64_REG(BPF_SUB, R2, R9),
  3053				BPF_ALU64_IMM(BPF_SUB, R2, 10),
  3054				BPF_ALU64_REG(BPF_SUB, R3, R0),
  3055				BPF_ALU64_REG(BPF_SUB, R3, R1),
  3056				BPF_ALU64_REG(BPF_SUB, R3, R2),
  3057				BPF_ALU64_REG(BPF_SUB, R3, R4),
  3058				BPF_ALU64_REG(BPF_SUB, R3, R5),
  3059				BPF_ALU64_REG(BPF_SUB, R3, R6),
  3060				BPF_ALU64_REG(BPF_SUB, R3, R7),
  3061				BPF_ALU64_REG(BPF_SUB, R3, R8),
  3062				BPF_ALU64_REG(BPF_SUB, R3, R9),
  3063				BPF_ALU64_IMM(BPF_SUB, R3, 10),
  3064				BPF_ALU64_REG(BPF_SUB, R4, R0),
  3065				BPF_ALU64_REG(BPF_SUB, R4, R1),
  3066				BPF_ALU64_REG(BPF_SUB, R4, R2),
  3067				BPF_ALU64_REG(BPF_SUB, R4, R3),
  3068				BPF_ALU64_REG(BPF_SUB, R4, R5),
  3069				BPF_ALU64_REG(BPF_SUB, R4, R6),
  3070				BPF_ALU64_REG(BPF_SUB, R4, R7),
  3071				BPF_ALU64_REG(BPF_SUB, R4, R8),
  3072				BPF_ALU64_REG(BPF_SUB, R4, R9),
  3073				BPF_ALU64_IMM(BPF_SUB, R4, 10),
  3074				BPF_ALU64_REG(BPF_SUB, R5, R0),
  3075				BPF_ALU64_REG(BPF_SUB, R5, R1),
  3076				BPF_ALU64_REG(BPF_SUB, R5, R2),
  3077				BPF_ALU64_REG(BPF_SUB, R5, R3),
  3078				BPF_ALU64_REG(BPF_SUB, R5, R4),
  3079				BPF_ALU64_REG(BPF_SUB, R5, R6),
  3080				BPF_ALU64_REG(BPF_SUB, R5, R7),
  3081				BPF_ALU64_REG(BPF_SUB, R5, R8),
  3082				BPF_ALU64_REG(BPF_SUB, R5, R9),
  3083				BPF_ALU64_IMM(BPF_SUB, R5, 10),
  3084				BPF_ALU64_REG(BPF_SUB, R6, R0),
  3085				BPF_ALU64_REG(BPF_SUB, R6, R1),
  3086				BPF_ALU64_REG(BPF_SUB, R6, R2),
  3087				BPF_ALU64_REG(BPF_SUB, R6, R3),
  3088				BPF_ALU64_REG(BPF_SUB, R6, R4),
  3089				BPF_ALU64_REG(BPF_SUB, R6, R5),
  3090				BPF_ALU64_REG(BPF_SUB, R6, R7),
  3091				BPF_ALU64_REG(BPF_SUB, R6, R8),
  3092				BPF_ALU64_REG(BPF_SUB, R6, R9),
  3093				BPF_ALU64_IMM(BPF_SUB, R6, 10),
  3094				BPF_ALU64_REG(BPF_SUB, R7, R0),
  3095				BPF_ALU64_REG(BPF_SUB, R7, R1),
  3096				BPF_ALU64_REG(BPF_SUB, R7, R2),
  3097				BPF_ALU64_REG(BPF_SUB, R7, R3),
  3098				BPF_ALU64_REG(BPF_SUB, R7, R4),
  3099				BPF_ALU64_REG(BPF_SUB, R7, R5),
  3100				BPF_ALU64_REG(BPF_SUB, R7, R6),
  3101				BPF_ALU64_REG(BPF_SUB, R7, R8),
  3102				BPF_ALU64_REG(BPF_SUB, R7, R9),
  3103				BPF_ALU64_IMM(BPF_SUB, R7, 10),
  3104				BPF_ALU64_REG(BPF_SUB, R8, R0),
  3105				BPF_ALU64_REG(BPF_SUB, R8, R1),
  3106				BPF_ALU64_REG(BPF_SUB, R8, R2),
  3107				BPF_ALU64_REG(BPF_SUB, R8, R3),
  3108				BPF_ALU64_REG(BPF_SUB, R8, R4),
  3109				BPF_ALU64_REG(BPF_SUB, R8, R5),
  3110				BPF_ALU64_REG(BPF_SUB, R8, R6),
  3111				BPF_ALU64_REG(BPF_SUB, R8, R7),
  3112				BPF_ALU64_REG(BPF_SUB, R8, R9),
  3113				BPF_ALU64_IMM(BPF_SUB, R8, 10),
  3114				BPF_ALU64_REG(BPF_SUB, R9, R0),
  3115				BPF_ALU64_REG(BPF_SUB, R9, R1),
  3116				BPF_ALU64_REG(BPF_SUB, R9, R2),
  3117				BPF_ALU64_REG(BPF_SUB, R9, R3),
  3118				BPF_ALU64_REG(BPF_SUB, R9, R4),
  3119				BPF_ALU64_REG(BPF_SUB, R9, R5),
  3120				BPF_ALU64_REG(BPF_SUB, R9, R6),
  3121				BPF_ALU64_REG(BPF_SUB, R9, R7),
  3122				BPF_ALU64_REG(BPF_SUB, R9, R8),
  3123				BPF_ALU64_IMM(BPF_SUB, R9, 10),
  3124				BPF_ALU64_IMM(BPF_SUB, R0, 10),
  3125				BPF_ALU64_IMM(BPF_NEG, R0, 0),
  3126				BPF_ALU64_REG(BPF_SUB, R0, R1),
  3127				BPF_ALU64_REG(BPF_SUB, R0, R2),
  3128				BPF_ALU64_REG(BPF_SUB, R0, R3),
  3129				BPF_ALU64_REG(BPF_SUB, R0, R4),
  3130				BPF_ALU64_REG(BPF_SUB, R0, R5),
  3131				BPF_ALU64_REG(BPF_SUB, R0, R6),
  3132				BPF_ALU64_REG(BPF_SUB, R0, R7),
  3133				BPF_ALU64_REG(BPF_SUB, R0, R8),
  3134				BPF_ALU64_REG(BPF_SUB, R0, R9),
  3135				BPF_EXIT_INSN(),
  3136			},
  3137			INTERNAL,
  3138			{ },
  3139			{ { 0, 11 } }
  3140		},
  3141		{	/* Mainly checking JIT here. */
  3142			"INT: XOR",
  3143			.u.insns_int = {
  3144				BPF_ALU64_REG(BPF_SUB, R0, R0),
  3145				BPF_ALU64_REG(BPF_XOR, R1, R1),
  3146				BPF_JMP_REG(BPF_JEQ, R0, R1, 1),
  3147				BPF_EXIT_INSN(),
  3148				BPF_ALU64_IMM(BPF_MOV, R0, 10),
  3149				BPF_ALU64_IMM(BPF_MOV, R1, -1),
  3150				BPF_ALU64_REG(BPF_SUB, R1, R1),
  3151				BPF_ALU64_REG(BPF_XOR, R2, R2),
  3152				BPF_JMP_REG(BPF_JEQ, R1, R2, 1),
  3153				BPF_EXIT_INSN(),
  3154				BPF_ALU64_REG(BPF_SUB, R2, R2),
  3155				BPF_ALU64_REG(BPF_XOR, R3, R3),
  3156				BPF_ALU64_IMM(BPF_MOV, R0, 10),
  3157				BPF_ALU64_IMM(BPF_MOV, R1, -1),
  3158				BPF_JMP_REG(BPF_JEQ, R2, R3, 1),
  3159				BPF_EXIT_INSN(),
  3160				BPF_ALU64_REG(BPF_SUB, R3, R3),
  3161				BPF_ALU64_REG(BPF_XOR, R4, R4),
  3162				BPF_ALU64_IMM(BPF_MOV, R2, 1),
  3163				BPF_ALU64_IMM(BPF_MOV, R5, -1),
  3164				BPF_JMP_REG(BPF_JEQ, R3, R4, 1),
  3165				BPF_EXIT_INSN(),
  3166				BPF_ALU64_REG(BPF_SUB, R4, R4),
  3167				BPF_ALU64_REG(BPF_XOR, R5, R5),
  3168				BPF_ALU64_IMM(BPF_MOV, R3, 1),
  3169				BPF_ALU64_IMM(BPF_MOV, R7, -1),
  3170				BPF_JMP_REG(BPF_JEQ, R5, R4, 1),
  3171				BPF_EXIT_INSN(),
  3172				BPF_ALU64_IMM(BPF_MOV, R5, 1),
  3173				BPF_ALU64_REG(BPF_SUB, R5, R5),
  3174				BPF_ALU64_REG(BPF_XOR, R6, R6),
  3175				BPF_ALU64_IMM(BPF_MOV, R1, 1),
  3176				BPF_ALU64_IMM(BPF_MOV, R8, -1),
  3177				BPF_JMP_REG(BPF_JEQ, R5, R6, 1),
  3178				BPF_EXIT_INSN(),
  3179				BPF_ALU64_REG(BPF_SUB, R6, R6),
  3180				BPF_ALU64_REG(BPF_XOR, R7, R7),
  3181				BPF_JMP_REG(BPF_JEQ, R7, R6, 1),
  3182				BPF_EXIT_INSN(),
  3183				BPF_ALU64_REG(BPF_SUB, R7, R7),
  3184				BPF_ALU64_REG(BPF_XOR, R8, R8),
  3185				BPF_JMP_REG(BPF_JEQ, R7, R8, 1),
  3186				BPF_EXIT_INSN(),
  3187				BPF_ALU64_REG(BPF_SUB, R8, R8),
  3188				BPF_ALU64_REG(BPF_XOR, R9, R9),
  3189				BPF_JMP_REG(BPF_JEQ, R9, R8, 1),
  3190				BPF_EXIT_INSN(),
  3191				BPF_ALU64_REG(BPF_SUB, R9, R9),
  3192				BPF_ALU64_REG(BPF_XOR, R0, R0),
  3193				BPF_JMP_REG(BPF_JEQ, R9, R0, 1),
  3194				BPF_EXIT_INSN(),
  3195				BPF_ALU64_REG(BPF_SUB, R1, R1),
  3196				BPF_ALU64_REG(BPF_XOR, R0, R0),
  3197				BPF_JMP_REG(BPF_JEQ, R9, R0, 2),
  3198				BPF_ALU64_IMM(BPF_MOV, R0, 0),
  3199				BPF_EXIT_INSN(),
  3200				BPF_ALU64_IMM(BPF_MOV, R0, 1),
  3201				BPF_EXIT_INSN(),
  3202			},
  3203			INTERNAL,
  3204			{ },
  3205			{ { 0, 1 } }
  3206		},
  3207		{	/* Mainly checking JIT here. */
  3208			"INT: MUL",
  3209			.u.insns_int = {
  3210				BPF_ALU64_IMM(BPF_MOV, R0, 11),
  3211				BPF_ALU64_IMM(BPF_MOV, R1, 1),
  3212				BPF_ALU64_IMM(BPF_MOV, R2, 2),
  3213				BPF_ALU64_IMM(BPF_MOV, R3, 3),
  3214				BPF_ALU64_IMM(BPF_MOV, R4, 4),
  3215				BPF_ALU64_IMM(BPF_MOV, R5, 5),
  3216				BPF_ALU64_IMM(BPF_MOV, R6, 6),
  3217				BPF_ALU64_IMM(BPF_MOV, R7, 7),
  3218				BPF_ALU64_IMM(BPF_MOV, R8, 8),
  3219				BPF_ALU64_IMM(BPF_MOV, R9, 9),
  3220				BPF_ALU64_REG(BPF_MUL, R0, R0),
  3221				BPF_ALU64_REG(BPF_MUL, R0, R1),
  3222				BPF_ALU64_REG(BPF_MUL, R0, R2),
  3223				BPF_ALU64_REG(BPF_MUL, R0, R3),
  3224				BPF_ALU64_REG(BPF_MUL, R0, R4),
  3225				BPF_ALU64_REG(BPF_MUL, R0, R5),
  3226				BPF_ALU64_REG(BPF_MUL, R0, R6),
  3227				BPF_ALU64_REG(BPF_MUL, R0, R7),
  3228				BPF_ALU64_REG(BPF_MUL, R0, R8),
  3229				BPF_ALU64_REG(BPF_MUL, R0, R9),
  3230				BPF_ALU64_IMM(BPF_MUL, R0, 10),
  3231				BPF_JMP_IMM(BPF_JEQ, R0, 439084800, 1),
  3232				BPF_EXIT_INSN(),
  3233				BPF_ALU64_REG(BPF_MUL, R1, R0),
  3234				BPF_ALU64_REG(BPF_MUL, R1, R2),
  3235				BPF_ALU64_REG(BPF_MUL, R1, R3),
  3236				BPF_ALU64_REG(BPF_MUL, R1, R4),
  3237				BPF_ALU64_REG(BPF_MUL, R1, R5),
  3238				BPF_ALU64_REG(BPF_MUL, R1, R6),
  3239				BPF_ALU64_REG(BPF_MUL, R1, R7),
  3240				BPF_ALU64_REG(BPF_MUL, R1, R8),
  3241				BPF_ALU64_REG(BPF_MUL, R1, R9),
  3242				BPF_ALU64_IMM(BPF_MUL, R1, 10),
  3243				BPF_ALU64_REG(BPF_MOV, R2, R1),
  3244				BPF_ALU64_IMM(BPF_RSH, R2, 32),
  3245				BPF_JMP_IMM(BPF_JEQ, R2, 0x5a924, 1),
  3246				BPF_EXIT_INSN(),
  3247				BPF_ALU64_IMM(BPF_LSH, R1, 32),
  3248				BPF_ALU64_IMM(BPF_ARSH, R1, 32),
  3249				BPF_JMP_IMM(BPF_JEQ, R1, 0xebb90000, 1),
  3250				BPF_EXIT_INSN(),
  3251				BPF_ALU64_REG(BPF_MUL, R2, R0),
  3252				BPF_ALU64_REG(BPF_MUL, R2, R1),
  3253				BPF_ALU64_REG(BPF_MUL, R2, R3),
  3254				BPF_ALU64_REG(BPF_MUL, R2, R4),
  3255				BPF_ALU64_REG(BPF_MUL, R2, R5),
  3256				BPF_ALU64_REG(BPF_MUL, R2, R6),
  3257				BPF_ALU64_REG(BPF_MUL, R2, R7),
  3258				BPF_ALU64_REG(BPF_MUL, R2, R8),
  3259				BPF_ALU64_REG(BPF_MUL, R2, R9),
  3260				BPF_ALU64_IMM(BPF_MUL, R2, 10),
  3261				BPF_ALU64_IMM(BPF_RSH, R2, 32),
  3262				BPF_ALU64_REG(BPF_MOV, R0, R2),
  3263				BPF_EXIT_INSN(),
  3264			},
  3265			INTERNAL,
  3266			{ },
  3267			{ { 0, 0x35d97ef2 } }
  3268		},
  3269		{	/* Mainly checking JIT here. */
  3270			"MOV REG64",
  3271			.u.insns_int = {
  3272				BPF_LD_IMM64(R0, 0xffffffffffffffffLL),
  3273				BPF_MOV64_REG(R1, R0),
  3274				BPF_MOV64_REG(R2, R1),
  3275				BPF_MOV64_REG(R3, R2),
  3276				BPF_MOV64_REG(R4, R3),
  3277				BPF_MOV64_REG(R5, R4),
  3278				BPF_MOV64_REG(R6, R5),
  3279				BPF_MOV64_REG(R7, R6),
  3280				BPF_MOV64_REG(R8, R7),
  3281				BPF_MOV64_REG(R9, R8),
  3282				BPF_ALU64_IMM(BPF_MOV, R0, 0),
  3283				BPF_ALU64_IMM(BPF_MOV, R1, 0),
  3284				BPF_ALU64_IMM(BPF_MOV, R2, 0),
  3285				BPF_ALU64_IMM(BPF_MOV, R3, 0),
  3286				BPF_ALU64_IMM(BPF_MOV, R4, 0),
  3287				BPF_ALU64_IMM(BPF_MOV, R5, 0),
  3288				BPF_ALU64_IMM(BPF_MOV, R6, 0),
  3289				BPF_ALU64_IMM(BPF_MOV, R7, 0),
  3290				BPF_ALU64_IMM(BPF_MOV, R8, 0),
  3291				BPF_ALU64_IMM(BPF_MOV, R9, 0),
  3292				BPF_ALU64_REG(BPF_ADD, R0, R0),
  3293				BPF_ALU64_REG(BPF_ADD, R0, R1),
  3294				BPF_ALU64_REG(BPF_ADD, R0, R2),
  3295				BPF_ALU64_REG(BPF_ADD, R0, R3),
  3296				BPF_ALU64_REG(BPF_ADD, R0, R4),
  3297				BPF_ALU64_REG(BPF_ADD, R0, R5),
  3298				BPF_ALU64_REG(BPF_ADD, R0, R6),
  3299				BPF_ALU64_REG(BPF_ADD, R0, R7),
  3300				BPF_ALU64_REG(BPF_ADD, R0, R8),
  3301				BPF_ALU64_REG(BPF_ADD, R0, R9),
  3302				BPF_ALU64_IMM(BPF_ADD, R0, 0xfefe),
  3303				BPF_EXIT_INSN(),
  3304			},
  3305			INTERNAL,
  3306			{ },
  3307			{ { 0, 0xfefe } }
  3308		},
  3309		{	/* Mainly checking JIT here. */
  3310			"MOV REG32",
  3311			.u.insns_int = {
  3312				BPF_LD_IMM64(R0, 0xffffffffffffffffLL),
  3313				BPF_MOV64_REG(R1, R0),
  3314				BPF_MOV64_REG(R2, R1),
  3315				BPF_MOV64_REG(R3, R2),
  3316				BPF_MOV64_REG(R4, R3),
  3317				BPF_MOV64_REG(R5, R4),
  3318				BPF_MOV64_REG(R6, R5),
  3319				BPF_MOV64_REG(R7, R6),
  3320				BPF_MOV64_REG(R8, R7),
  3321				BPF_MOV64_REG(R9, R8),
  3322				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  3323				BPF_ALU32_IMM(BPF_MOV, R1, 0),
  3324				BPF_ALU32_IMM(BPF_MOV, R2, 0),
  3325				BPF_ALU32_IMM(BPF_MOV, R3, 0),
  3326				BPF_ALU32_IMM(BPF_MOV, R4, 0),
  3327				BPF_ALU32_IMM(BPF_MOV, R5, 0),
  3328				BPF_ALU32_IMM(BPF_MOV, R6, 0),
  3329				BPF_ALU32_IMM(BPF_MOV, R7, 0),
  3330				BPF_ALU32_IMM(BPF_MOV, R8, 0),
  3331				BPF_ALU32_IMM(BPF_MOV, R9, 0),
  3332				BPF_ALU64_REG(BPF_ADD, R0, R0),
  3333				BPF_ALU64_REG(BPF_ADD, R0, R1),
  3334				BPF_ALU64_REG(BPF_ADD, R0, R2),
  3335				BPF_ALU64_REG(BPF_ADD, R0, R3),
  3336				BPF_ALU64_REG(BPF_ADD, R0, R4),
  3337				BPF_ALU64_REG(BPF_ADD, R0, R5),
  3338				BPF_ALU64_REG(BPF_ADD, R0, R6),
  3339				BPF_ALU64_REG(BPF_ADD, R0, R7),
  3340				BPF_ALU64_REG(BPF_ADD, R0, R8),
  3341				BPF_ALU64_REG(BPF_ADD, R0, R9),
  3342				BPF_ALU64_IMM(BPF_ADD, R0, 0xfefe),
  3343				BPF_EXIT_INSN(),
  3344			},
  3345			INTERNAL,
  3346			{ },
  3347			{ { 0, 0xfefe } }
  3348		},
  3349		{	/* Mainly checking JIT here. */
  3350			"LD IMM64",
  3351			.u.insns_int = {
  3352				BPF_LD_IMM64(R0, 0xffffffffffffffffLL),
  3353				BPF_MOV64_REG(R1, R0),
  3354				BPF_MOV64_REG(R2, R1),
  3355				BPF_MOV64_REG(R3, R2),
  3356				BPF_MOV64_REG(R4, R3),
  3357				BPF_MOV64_REG(R5, R4),
  3358				BPF_MOV64_REG(R6, R5),
  3359				BPF_MOV64_REG(R7, R6),
  3360				BPF_MOV64_REG(R8, R7),
  3361				BPF_MOV64_REG(R9, R8),
  3362				BPF_LD_IMM64(R0, 0x0LL),
  3363				BPF_LD_IMM64(R1, 0x0LL),
  3364				BPF_LD_IMM64(R2, 0x0LL),
  3365				BPF_LD_IMM64(R3, 0x0LL),
  3366				BPF_LD_IMM64(R4, 0x0LL),
  3367				BPF_LD_IMM64(R5, 0x0LL),
  3368				BPF_LD_IMM64(R6, 0x0LL),
  3369				BPF_LD_IMM64(R7, 0x0LL),
  3370				BPF_LD_IMM64(R8, 0x0LL),
  3371				BPF_LD_IMM64(R9, 0x0LL),
  3372				BPF_ALU64_REG(BPF_ADD, R0, R0),
  3373				BPF_ALU64_REG(BPF_ADD, R0, R1),
  3374				BPF_ALU64_REG(BPF_ADD, R0, R2),
  3375				BPF_ALU64_REG(BPF_ADD, R0, R3),
  3376				BPF_ALU64_REG(BPF_ADD, R0, R4),
  3377				BPF_ALU64_REG(BPF_ADD, R0, R5),
  3378				BPF_ALU64_REG(BPF_ADD, R0, R6),
  3379				BPF_ALU64_REG(BPF_ADD, R0, R7),
  3380				BPF_ALU64_REG(BPF_ADD, R0, R8),
  3381				BPF_ALU64_REG(BPF_ADD, R0, R9),
  3382				BPF_ALU64_IMM(BPF_ADD, R0, 0xfefe),
  3383				BPF_EXIT_INSN(),
  3384			},
  3385			INTERNAL,
  3386			{ },
  3387			{ { 0, 0xfefe } }
  3388		},
  3389		{
  3390			"INT: ALU MIX",
  3391			.u.insns_int = {
  3392				BPF_ALU64_IMM(BPF_MOV, R0, 11),
  3393				BPF_ALU64_IMM(BPF_ADD, R0, -1),
  3394				BPF_ALU64_IMM(BPF_MOV, R2, 2),
  3395				BPF_ALU64_IMM(BPF_XOR, R2, 3),
  3396				BPF_ALU64_REG(BPF_DIV, R0, R2),
  3397				BPF_JMP_IMM(BPF_JEQ, R0, 10, 1),
  3398				BPF_EXIT_INSN(),
  3399				BPF_ALU64_IMM(BPF_MOD, R0, 3),
  3400				BPF_JMP_IMM(BPF_JEQ, R0, 1, 1),
  3401				BPF_EXIT_INSN(),
  3402				BPF_ALU64_IMM(BPF_MOV, R0, -1),
  3403				BPF_EXIT_INSN(),
  3404			},
  3405			INTERNAL,
  3406			{ },
  3407			{ { 0, -1 } }
  3408		},
  3409		{
  3410			"INT: shifts by register",
  3411			.u.insns_int = {
  3412				BPF_MOV64_IMM(R0, -1234),
  3413				BPF_MOV64_IMM(R1, 1),
  3414				BPF_ALU32_REG(BPF_RSH, R0, R1),
  3415				BPF_JMP_IMM(BPF_JEQ, R0, 0x7ffffd97, 1),
  3416				BPF_EXIT_INSN(),
  3417				BPF_MOV64_IMM(R2, 1),
  3418				BPF_ALU64_REG(BPF_LSH, R0, R2),
  3419				BPF_MOV32_IMM(R4, -1234),
  3420				BPF_JMP_REG(BPF_JEQ, R0, R4, 1),
  3421				BPF_EXIT_INSN(),
  3422				BPF_ALU64_IMM(BPF_AND, R4, 63),
  3423				BPF_ALU64_REG(BPF_LSH, R0, R4), /* R0 <= 46 */
  3424				BPF_MOV64_IMM(R3, 47),
  3425				BPF_ALU64_REG(BPF_ARSH, R0, R3),
  3426				BPF_JMP_IMM(BPF_JEQ, R0, -617, 1),
  3427				BPF_EXIT_INSN(),
  3428				BPF_MOV64_IMM(R2, 1),
  3429				BPF_ALU64_REG(BPF_LSH, R4, R2), /* R4 = 46 << 1 */
  3430				BPF_JMP_IMM(BPF_JEQ, R4, 92, 1),
  3431				BPF_EXIT_INSN(),
  3432				BPF_MOV64_IMM(R4, 4),
  3433				BPF_ALU64_REG(BPF_LSH, R4, R4), /* R4 = 4 << 4 */
  3434				BPF_JMP_IMM(BPF_JEQ, R4, 64, 1),
  3435				BPF_EXIT_INSN(),
  3436				BPF_MOV64_IMM(R4, 5),
  3437				BPF_ALU32_REG(BPF_LSH, R4, R4), /* R4 = 5 << 5 */
  3438				BPF_JMP_IMM(BPF_JEQ, R4, 160, 1),
  3439				BPF_EXIT_INSN(),
  3440				BPF_MOV64_IMM(R0, -1),
  3441				BPF_EXIT_INSN(),
  3442			},
  3443			INTERNAL,
  3444			{ },
  3445			{ { 0, -1 } }
  3446		},
  3447		{
  3448			/*
  3449			 * Register (non-)clobbering test, in the case where a 32-bit
  3450			 * JIT implements complex ALU64 operations via function calls.
  3451			 * If so, the function call must be invisible in the eBPF
  3452			 * registers. The JIT must then save and restore relevant
  3453			 * registers during the call. The following tests check that
  3454			 * the eBPF registers retain their values after such a call.
  3455			 */
  3456			"INT: Register clobbering, R1 updated",
  3457			.u.insns_int = {
  3458				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  3459				BPF_ALU32_IMM(BPF_MOV, R1, 123456789),
  3460				BPF_ALU32_IMM(BPF_MOV, R2, 2),
  3461				BPF_ALU32_IMM(BPF_MOV, R3, 3),
  3462				BPF_ALU32_IMM(BPF_MOV, R4, 4),
  3463				BPF_ALU32_IMM(BPF_MOV, R5, 5),
  3464				BPF_ALU32_IMM(BPF_MOV, R6, 6),
  3465				BPF_ALU32_IMM(BPF_MOV, R7, 7),
  3466				BPF_ALU32_IMM(BPF_MOV, R8, 8),
  3467				BPF_ALU32_IMM(BPF_MOV, R9, 9),
  3468				BPF_ALU64_IMM(BPF_DIV, R1, 123456789),
  3469				BPF_JMP_IMM(BPF_JNE, R0, 0, 10),
  3470				BPF_JMP_IMM(BPF_JNE, R1, 1, 9),
  3471				BPF_JMP_IMM(BPF_JNE, R2, 2, 8),
  3472				BPF_JMP_IMM(BPF_JNE, R3, 3, 7),
  3473				BPF_JMP_IMM(BPF_JNE, R4, 4, 6),
  3474				BPF_JMP_IMM(BPF_JNE, R5, 5, 5),
  3475				BPF_JMP_IMM(BPF_JNE, R6, 6, 4),
  3476				BPF_JMP_IMM(BPF_JNE, R7, 7, 3),
  3477				BPF_JMP_IMM(BPF_JNE, R8, 8, 2),
  3478				BPF_JMP_IMM(BPF_JNE, R9, 9, 1),
  3479				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  3480				BPF_EXIT_INSN(),
  3481			},
  3482			INTERNAL,
  3483			{ },
  3484			{ { 0, 1 } }
  3485		},
  3486		{
  3487			"INT: Register clobbering, R2 updated",
  3488			.u.insns_int = {
  3489				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  3490				BPF_ALU32_IMM(BPF_MOV, R1, 1),
  3491				BPF_ALU32_IMM(BPF_MOV, R2, 2 * 123456789),
  3492				BPF_ALU32_IMM(BPF_MOV, R3, 3),
  3493				BPF_ALU32_IMM(BPF_MOV, R4, 4),
  3494				BPF_ALU32_IMM(BPF_MOV, R5, 5),
  3495				BPF_ALU32_IMM(BPF_MOV, R6, 6),
  3496				BPF_ALU32_IMM(BPF_MOV, R7, 7),
  3497				BPF_ALU32_IMM(BPF_MOV, R8, 8),
  3498				BPF_ALU32_IMM(BPF_MOV, R9, 9),
  3499				BPF_ALU64_IMM(BPF_DIV, R2, 123456789),
  3500				BPF_JMP_IMM(BPF_JNE, R0, 0, 10),
  3501				BPF_JMP_IMM(BPF_JNE, R1, 1, 9),
  3502				BPF_JMP_IMM(BPF_JNE, R2, 2, 8),
  3503				BPF_JMP_IMM(BPF_JNE, R3, 3, 7),
  3504				BPF_JMP_IMM(BPF_JNE, R4, 4, 6),
  3505				BPF_JMP_IMM(BPF_JNE, R5, 5, 5),
  3506				BPF_JMP_IMM(BPF_JNE, R6, 6, 4),
  3507				BPF_JMP_IMM(BPF_JNE, R7, 7, 3),
  3508				BPF_JMP_IMM(BPF_JNE, R8, 8, 2),
  3509				BPF_JMP_IMM(BPF_JNE, R9, 9, 1),
  3510				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  3511				BPF_EXIT_INSN(),
  3512			},
  3513			INTERNAL,
  3514			{ },
  3515			{ { 0, 1 } }
  3516		},
  3517		{
  3518			/*
  3519			 * Test 32-bit JITs that implement complex ALU64 operations as
  3520			 * function calls R0 = f(R1, R2), and must re-arrange operands.
  3521			 */
  3522	#define NUMER 0xfedcba9876543210ULL
  3523	#define DENOM 0x0123456789abcdefULL
  3524			"ALU64_DIV X: Operand register permutations",
  3525			.u.insns_int = {
  3526				/* R0 / R2 */
  3527				BPF_LD_IMM64(R0, NUMER),
  3528				BPF_LD_IMM64(R2, DENOM),
  3529				BPF_ALU64_REG(BPF_DIV, R0, R2),
  3530				BPF_JMP_IMM(BPF_JEQ, R0, NUMER / DENOM, 1),
  3531				BPF_EXIT_INSN(),
  3532				/* R1 / R0 */
  3533				BPF_LD_IMM64(R1, NUMER),
  3534				BPF_LD_IMM64(R0, DENOM),
  3535				BPF_ALU64_REG(BPF_DIV, R1, R0),
  3536				BPF_JMP_IMM(BPF_JEQ, R1, NUMER / DENOM, 1),
  3537				BPF_EXIT_INSN(),
  3538				/* R0 / R1 */
  3539				BPF_LD_IMM64(R0, NUMER),
  3540				BPF_LD_IMM64(R1, DENOM),
  3541				BPF_ALU64_REG(BPF_DIV, R0, R1),
  3542				BPF_JMP_IMM(BPF_JEQ, R0, NUMER / DENOM, 1),
  3543				BPF_EXIT_INSN(),
  3544				/* R2 / R0 */
  3545				BPF_LD_IMM64(R2, NUMER),
  3546				BPF_LD_IMM64(R0, DENOM),
  3547				BPF_ALU64_REG(BPF_DIV, R2, R0),
  3548				BPF_JMP_IMM(BPF_JEQ, R2, NUMER / DENOM, 1),
  3549				BPF_EXIT_INSN(),
  3550				/* R2 / R1 */
  3551				BPF_LD_IMM64(R2, NUMER),
  3552				BPF_LD_IMM64(R1, DENOM),
  3553				BPF_ALU64_REG(BPF_DIV, R2, R1),
  3554				BPF_JMP_IMM(BPF_JEQ, R2, NUMER / DENOM, 1),
  3555				BPF_EXIT_INSN(),
  3556				/* R1 / R2 */
  3557				BPF_LD_IMM64(R1, NUMER),
  3558				BPF_LD_IMM64(R2, DENOM),
  3559				BPF_ALU64_REG(BPF_DIV, R1, R2),
  3560				BPF_JMP_IMM(BPF_JEQ, R1, NUMER / DENOM, 1),
  3561				BPF_EXIT_INSN(),
  3562				/* R1 / R1 */
  3563				BPF_LD_IMM64(R1, NUMER),
  3564				BPF_ALU64_REG(BPF_DIV, R1, R1),
  3565				BPF_JMP_IMM(BPF_JEQ, R1, 1, 1),
  3566				BPF_EXIT_INSN(),
  3567				/* R2 / R2 */
  3568				BPF_LD_IMM64(R2, DENOM),
  3569				BPF_ALU64_REG(BPF_DIV, R2, R2),
  3570				BPF_JMP_IMM(BPF_JEQ, R2, 1, 1),
  3571				BPF_EXIT_INSN(),
  3572				/* R3 / R4 */
  3573				BPF_LD_IMM64(R3, NUMER),
  3574				BPF_LD_IMM64(R4, DENOM),
  3575				BPF_ALU64_REG(BPF_DIV, R3, R4),
  3576				BPF_JMP_IMM(BPF_JEQ, R3, NUMER / DENOM, 1),
  3577				BPF_EXIT_INSN(),
  3578				/* Successful return */
  3579				BPF_LD_IMM64(R0, 1),
  3580				BPF_EXIT_INSN(),
  3581			},
  3582			INTERNAL,
  3583			{ },
  3584			{ { 0, 1 } },
  3585	#undef NUMER
  3586	#undef DENOM
  3587		},
  3588	#ifdef CONFIG_32BIT
  3589		{
  3590			"INT: 32-bit context pointer word order and zero-extension",
  3591			.u.insns_int = {
  3592				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  3593				BPF_JMP32_IMM(BPF_JEQ, R1, 0, 3),
  3594				BPF_ALU64_IMM(BPF_RSH, R1, 32),
  3595				BPF_JMP32_IMM(BPF_JNE, R1, 0, 1),
  3596				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  3597				BPF_EXIT_INSN(),
  3598			},
  3599			INTERNAL,
  3600			{ },
  3601			{ { 0, 1 } }
  3602		},
  3603	#endif
  3604		{
  3605			"check: missing ret",
  3606			.u.insns = {
  3607				BPF_STMT(BPF_LD | BPF_IMM, 1),
  3608			},
  3609			CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
  3610			{ },
  3611			{ },
  3612			.fill_helper = NULL,
  3613			.expected_errcode = -EINVAL,
  3614		},
  3615		{
  3616			"check: div_k_0",
  3617			.u.insns = {
  3618				BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0),
  3619				BPF_STMT(BPF_RET | BPF_K, 0)
  3620			},
  3621			CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
  3622			{ },
  3623			{ },
  3624			.fill_helper = NULL,
  3625			.expected_errcode = -EINVAL,
  3626		},
  3627		{
  3628			"check: unknown insn",
  3629			.u.insns = {
  3630				/* seccomp insn, rejected in socket filter */
  3631				BPF_STMT(BPF_LDX | BPF_W | BPF_ABS, 0),
  3632				BPF_STMT(BPF_RET | BPF_K, 0)
  3633			},
  3634			CLASSIC | FLAG_EXPECTED_FAIL,
  3635			{ },
  3636			{ },
  3637			.fill_helper = NULL,
  3638			.expected_errcode = -EINVAL,
  3639		},
  3640		{
  3641			"check: out of range spill/fill",
  3642			.u.insns = {
  3643				BPF_STMT(BPF_STX, 16),
  3644				BPF_STMT(BPF_RET | BPF_K, 0)
  3645			},
  3646			CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
  3647			{ },
  3648			{ },
  3649			.fill_helper = NULL,
  3650			.expected_errcode = -EINVAL,
  3651		},
  3652		{
  3653			"JUMPS + HOLES",
  3654			.u.insns = {
  3655				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3656				BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 15),
  3657				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3658				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3659				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3660				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3661				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3662				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3663				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3664				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3665				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3666				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3667				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3668				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3669				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3670				BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 3, 4),
  3671				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3672				BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 1, 2),
  3673				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3674				BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15),
  3675				BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14),
  3676				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3677				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3678				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3679				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3680				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3681				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3682				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3683				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3684				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3685				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3686				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3687				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3688				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3689				BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 2, 3),
  3690				BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 1, 2),
  3691				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3692				BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15),
  3693				BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14),
  3694				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3695				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3696				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3697				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3698				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3699				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3700				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3701				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3702				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3703				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3704				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3705				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3706				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3707				BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 2, 3),
  3708				BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 1, 2),
  3709				BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
  3710				BPF_STMT(BPF_RET | BPF_A, 0),
  3711				BPF_STMT(BPF_RET | BPF_A, 0),
  3712			},
  3713			CLASSIC,
  3714			{ 0x00, 0x1b, 0x21, 0x3c, 0x9d, 0xf8,
  3715			  0x90, 0xe2, 0xba, 0x0a, 0x56, 0xb4,
  3716			  0x08, 0x00,
  3717			  0x45, 0x00, 0x00, 0x28, 0x00, 0x00,
  3718			  0x20, 0x00, 0x40, 0x11, 0x00, 0x00, /* IP header */
  3719			  0xc0, 0xa8, 0x33, 0x01,
  3720			  0xc0, 0xa8, 0x33, 0x02,
  3721			  0xbb, 0xb6,
  3722			  0xa9, 0xfa,
  3723			  0x00, 0x14, 0x00, 0x00,
  3724			  0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
  3725			  0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
  3726			  0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
  3727			  0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
  3728			  0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
  3729			  0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
  3730			  0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
  3731			  0xcc, 0xcc, 0xcc, 0xcc },
  3732			{ { 88, 0x001b } }
  3733		},
  3734		{
  3735			"check: RET X",
  3736			.u.insns = {
  3737				BPF_STMT(BPF_RET | BPF_X, 0),
  3738			},
  3739			CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
  3740			{ },
  3741			{ },
  3742			.fill_helper = NULL,
  3743			.expected_errcode = -EINVAL,
  3744		},
  3745		{
  3746			"check: LDX + RET X",
  3747			.u.insns = {
  3748				BPF_STMT(BPF_LDX | BPF_IMM, 42),
  3749				BPF_STMT(BPF_RET | BPF_X, 0),
  3750			},
  3751			CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
  3752			{ },
  3753			{ },
  3754			.fill_helper = NULL,
  3755			.expected_errcode = -EINVAL,
  3756		},
  3757		{	/* Mainly checking JIT here. */
  3758			"M[]: alt STX + LDX",
  3759			.u.insns = {
  3760				BPF_STMT(BPF_LDX | BPF_IMM, 100),
  3761				BPF_STMT(BPF_STX, 0),
  3762				BPF_STMT(BPF_LDX | BPF_MEM, 0),
  3763				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3764				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3765				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3766				BPF_STMT(BPF_STX, 1),
  3767				BPF_STMT(BPF_LDX | BPF_MEM, 1),
  3768				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3769				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3770				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3771				BPF_STMT(BPF_STX, 2),
  3772				BPF_STMT(BPF_LDX | BPF_MEM, 2),
  3773				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3774				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3775				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3776				BPF_STMT(BPF_STX, 3),
  3777				BPF_STMT(BPF_LDX | BPF_MEM, 3),
  3778				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3779				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3780				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3781				BPF_STMT(BPF_STX, 4),
  3782				BPF_STMT(BPF_LDX | BPF_MEM, 4),
  3783				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3784				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3785				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3786				BPF_STMT(BPF_STX, 5),
  3787				BPF_STMT(BPF_LDX | BPF_MEM, 5),
  3788				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3789				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3790				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3791				BPF_STMT(BPF_STX, 6),
  3792				BPF_STMT(BPF_LDX | BPF_MEM, 6),
  3793				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3794				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3795				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3796				BPF_STMT(BPF_STX, 7),
  3797				BPF_STMT(BPF_LDX | BPF_MEM, 7),
  3798				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3799				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3800				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3801				BPF_STMT(BPF_STX, 8),
  3802				BPF_STMT(BPF_LDX | BPF_MEM, 8),
  3803				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3804				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3805				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3806				BPF_STMT(BPF_STX, 9),
  3807				BPF_STMT(BPF_LDX | BPF_MEM, 9),
  3808				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3809				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3810				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3811				BPF_STMT(BPF_STX, 10),
  3812				BPF_STMT(BPF_LDX | BPF_MEM, 10),
  3813				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3814				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3815				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3816				BPF_STMT(BPF_STX, 11),
  3817				BPF_STMT(BPF_LDX | BPF_MEM, 11),
  3818				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3819				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3820				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3821				BPF_STMT(BPF_STX, 12),
  3822				BPF_STMT(BPF_LDX | BPF_MEM, 12),
  3823				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3824				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3825				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3826				BPF_STMT(BPF_STX, 13),
  3827				BPF_STMT(BPF_LDX | BPF_MEM, 13),
  3828				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3829				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3830				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3831				BPF_STMT(BPF_STX, 14),
  3832				BPF_STMT(BPF_LDX | BPF_MEM, 14),
  3833				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3834				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3835				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3836				BPF_STMT(BPF_STX, 15),
  3837				BPF_STMT(BPF_LDX | BPF_MEM, 15),
  3838				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3839				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
  3840				BPF_STMT(BPF_MISC | BPF_TAX, 0),
  3841				BPF_STMT(BPF_RET | BPF_A, 0),
  3842			},
  3843			CLASSIC | FLAG_NO_DATA,
  3844			{ },
  3845			{ { 0, 116 } },
  3846		},
  3847		{	/* Mainly checking JIT here. */
  3848			"M[]: full STX + full LDX",
  3849			.u.insns = {
  3850				BPF_STMT(BPF_LDX | BPF_IMM, 0xbadfeedb),
  3851				BPF_STMT(BPF_STX, 0),
  3852				BPF_STMT(BPF_LDX | BPF_IMM, 0xecabedae),
  3853				BPF_STMT(BPF_STX, 1),
  3854				BPF_STMT(BPF_LDX | BPF_IMM, 0xafccfeaf),
  3855				BPF_STMT(BPF_STX, 2),
  3856				BPF_STMT(BPF_LDX | BPF_IMM, 0xbffdcedc),
  3857				BPF_STMT(BPF_STX, 3),
  3858				BPF_STMT(BPF_LDX | BPF_IMM, 0xfbbbdccb),
  3859				BPF_STMT(BPF_STX, 4),
  3860				BPF_STMT(BPF_LDX | BPF_IMM, 0xfbabcbda),
  3861				BPF_STMT(BPF_STX, 5),
  3862				BPF_STMT(BPF_LDX | BPF_IMM, 0xaedecbdb),
  3863				BPF_STMT(BPF_STX, 6),
  3864				BPF_STMT(BPF_LDX | BPF_IMM, 0xadebbade),
  3865				BPF_STMT(BPF_STX, 7),
  3866				BPF_STMT(BPF_LDX | BPF_IMM, 0xfcfcfaec),
  3867				BPF_STMT(BPF_STX, 8),
  3868				BPF_STMT(BPF_LDX | BPF_IMM, 0xbcdddbdc),
  3869				BPF_STMT(BPF_STX, 9),
  3870				BPF_STMT(BPF_LDX | BPF_IMM, 0xfeefdfac),
  3871				BPF_STMT(BPF_STX, 10),
  3872				BPF_STMT(BPF_LDX | BPF_IMM, 0xcddcdeea),
  3873				BPF_STMT(BPF_STX, 11),
  3874				BPF_STMT(BPF_LDX | BPF_IMM, 0xaccfaebb),
  3875				BPF_STMT(BPF_STX, 12),
  3876				BPF_STMT(BPF_LDX | BPF_IMM, 0xbdcccdcf),
  3877				BPF_STMT(BPF_STX, 13),
  3878				BPF_STMT(BPF_LDX | BPF_IMM, 0xaaedecde),
  3879				BPF_STMT(BPF_STX, 14),
  3880				BPF_STMT(BPF_LDX | BPF_IMM, 0xfaeacdad),
  3881				BPF_STMT(BPF_STX, 15),
  3882				BPF_STMT(BPF_LDX | BPF_MEM, 0),
  3883				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  3884				BPF_STMT(BPF_LDX | BPF_MEM, 1),
  3885				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3886				BPF_STMT(BPF_LDX | BPF_MEM, 2),
  3887				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3888				BPF_STMT(BPF_LDX | BPF_MEM, 3),
  3889				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3890				BPF_STMT(BPF_LDX | BPF_MEM, 4),
  3891				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3892				BPF_STMT(BPF_LDX | BPF_MEM, 5),
  3893				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3894				BPF_STMT(BPF_LDX | BPF_MEM, 6),
  3895				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3896				BPF_STMT(BPF_LDX | BPF_MEM, 7),
  3897				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3898				BPF_STMT(BPF_LDX | BPF_MEM, 8),
  3899				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3900				BPF_STMT(BPF_LDX | BPF_MEM, 9),
  3901				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3902				BPF_STMT(BPF_LDX | BPF_MEM, 10),
  3903				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3904				BPF_STMT(BPF_LDX | BPF_MEM, 11),
  3905				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3906				BPF_STMT(BPF_LDX | BPF_MEM, 12),
  3907				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3908				BPF_STMT(BPF_LDX | BPF_MEM, 13),
  3909				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3910				BPF_STMT(BPF_LDX | BPF_MEM, 14),
  3911				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3912				BPF_STMT(BPF_LDX | BPF_MEM, 15),
  3913				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  3914				BPF_STMT(BPF_RET | BPF_A, 0),
  3915			},
  3916			CLASSIC | FLAG_NO_DATA,
  3917			{ },
  3918			{ { 0, 0x2a5a5e5 } },
  3919		},
  3920		{
  3921			"check: SKF_AD_MAX",
  3922			.u.insns = {
  3923				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  3924					 SKF_AD_OFF + SKF_AD_MAX),
  3925				BPF_STMT(BPF_RET | BPF_A, 0),
  3926			},
  3927			CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
  3928			{ },
  3929			{ },
  3930			.fill_helper = NULL,
  3931			.expected_errcode = -EINVAL,
  3932		},
  3933		{	/* Passes checker but fails during runtime. */
  3934			"LD [SKF_AD_OFF-1]",
  3935			.u.insns = {
  3936				BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
  3937					 SKF_AD_OFF - 1),
  3938				BPF_STMT(BPF_RET | BPF_K, 1),
  3939			},
  3940			CLASSIC,
  3941			{ },
  3942			{ { 1, 0 } },
  3943		},
  3944		{
  3945			"load 64-bit immediate",
  3946			.u.insns_int = {
  3947				BPF_LD_IMM64(R1, 0x567800001234LL),
  3948				BPF_MOV64_REG(R2, R1),
  3949				BPF_MOV64_REG(R3, R2),
  3950				BPF_ALU64_IMM(BPF_RSH, R2, 32),
  3951				BPF_ALU64_IMM(BPF_LSH, R3, 32),
  3952				BPF_ALU64_IMM(BPF_RSH, R3, 32),
  3953				BPF_ALU64_IMM(BPF_MOV, R0, 0),
  3954				BPF_JMP_IMM(BPF_JEQ, R2, 0x5678, 1),
  3955				BPF_EXIT_INSN(),
  3956				BPF_JMP_IMM(BPF_JEQ, R3, 0x1234, 1),
  3957				BPF_EXIT_INSN(),
  3958				BPF_LD_IMM64(R0, 0x1ffffffffLL),
  3959				BPF_ALU64_IMM(BPF_RSH, R0, 32), /* R0 = 1 */
  3960				BPF_EXIT_INSN(),
  3961			},
  3962			INTERNAL,
  3963			{ },
  3964			{ { 0, 1 } }
  3965		},
  3966		/* BPF_ALU | BPF_MOV | BPF_X */
  3967		{
  3968			"ALU_MOV_X: dst = 2",
  3969			.u.insns_int = {
  3970				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  3971				BPF_ALU32_REG(BPF_MOV, R0, R1),
  3972				BPF_EXIT_INSN(),
  3973			},
  3974			INTERNAL,
  3975			{ },
  3976			{ { 0, 2 } },
  3977		},
  3978		{
  3979			"ALU_MOV_X: dst = 4294967295",
  3980			.u.insns_int = {
  3981				BPF_ALU32_IMM(BPF_MOV, R1, 4294967295U),
  3982				BPF_ALU32_REG(BPF_MOV, R0, R1),
  3983				BPF_EXIT_INSN(),
  3984			},
  3985			INTERNAL,
  3986			{ },
  3987			{ { 0, 4294967295U } },
  3988		},
  3989		{
  3990			"ALU64_MOV_X: dst = 2",
  3991			.u.insns_int = {
  3992				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  3993				BPF_ALU64_REG(BPF_MOV, R0, R1),
  3994				BPF_EXIT_INSN(),
  3995			},
  3996			INTERNAL,
  3997			{ },
  3998			{ { 0, 2 } },
  3999		},
  4000		{
  4001			"ALU64_MOV_X: dst = 4294967295",
  4002			.u.insns_int = {
  4003				BPF_ALU32_IMM(BPF_MOV, R1, 4294967295U),
  4004				BPF_ALU64_REG(BPF_MOV, R0, R1),
  4005				BPF_EXIT_INSN(),
  4006			},
  4007			INTERNAL,
  4008			{ },
  4009			{ { 0, 4294967295U } },
  4010		},
  4011		/* BPF_ALU | BPF_MOV | BPF_K */
  4012		{
  4013			"ALU_MOV_K: dst = 2",
  4014			.u.insns_int = {
  4015				BPF_ALU32_IMM(BPF_MOV, R0, 2),
  4016				BPF_EXIT_INSN(),
  4017			},
  4018			INTERNAL,
  4019			{ },
  4020			{ { 0, 2 } },
  4021		},
  4022		{
  4023			"ALU_MOV_K: dst = 4294967295",
  4024			.u.insns_int = {
  4025				BPF_ALU32_IMM(BPF_MOV, R0, 4294967295U),
  4026				BPF_EXIT_INSN(),
  4027			},
  4028			INTERNAL,
  4029			{ },
  4030			{ { 0, 4294967295U } },
  4031		},
  4032		{
  4033			"ALU_MOV_K: 0x0000ffffffff0000 = 0x00000000ffffffff",
  4034			.u.insns_int = {
  4035				BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
  4036				BPF_LD_IMM64(R3, 0x00000000ffffffffLL),
  4037				BPF_ALU32_IMM(BPF_MOV, R2, 0xffffffff),
  4038				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4039				BPF_MOV32_IMM(R0, 2),
  4040				BPF_EXIT_INSN(),
  4041				BPF_MOV32_IMM(R0, 1),
  4042				BPF_EXIT_INSN(),
  4043			},
  4044			INTERNAL,
  4045			{ },
  4046			{ { 0, 0x1 } },
  4047		},
  4048		{
  4049			"ALU_MOV_K: small negative",
  4050			.u.insns_int = {
  4051				BPF_ALU32_IMM(BPF_MOV, R0, -123),
  4052				BPF_EXIT_INSN(),
  4053			},
  4054			INTERNAL,
  4055			{ },
  4056			{ { 0, -123 } }
  4057		},
  4058		{
  4059			"ALU_MOV_K: small negative zero extension",
  4060			.u.insns_int = {
  4061				BPF_ALU32_IMM(BPF_MOV, R0, -123),
  4062				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  4063				BPF_EXIT_INSN(),
  4064			},
  4065			INTERNAL,
  4066			{ },
  4067			{ { 0, 0 } }
  4068		},
  4069		{
  4070			"ALU_MOV_K: large negative",
  4071			.u.insns_int = {
  4072				BPF_ALU32_IMM(BPF_MOV, R0, -123456789),
  4073				BPF_EXIT_INSN(),
  4074			},
  4075			INTERNAL,
  4076			{ },
  4077			{ { 0, -123456789 } }
  4078		},
  4079		{
  4080			"ALU_MOV_K: large negative zero extension",
  4081			.u.insns_int = {
  4082				BPF_ALU32_IMM(BPF_MOV, R0, -123456789),
  4083				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  4084				BPF_EXIT_INSN(),
  4085			},
  4086			INTERNAL,
  4087			{ },
  4088			{ { 0, 0 } }
  4089		},
  4090		{
  4091			"ALU64_MOV_K: dst = 2",
  4092			.u.insns_int = {
  4093				BPF_ALU64_IMM(BPF_MOV, R0, 2),
  4094				BPF_EXIT_INSN(),
  4095			},
  4096			INTERNAL,
  4097			{ },
  4098			{ { 0, 2 } },
  4099		},
  4100		{
  4101			"ALU64_MOV_K: dst = 2147483647",
  4102			.u.insns_int = {
  4103				BPF_ALU64_IMM(BPF_MOV, R0, 2147483647),
  4104				BPF_EXIT_INSN(),
  4105			},
  4106			INTERNAL,
  4107			{ },
  4108			{ { 0, 2147483647 } },
  4109		},
  4110		{
  4111			"ALU64_OR_K: dst = 0x0",
  4112			.u.insns_int = {
  4113				BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
  4114				BPF_LD_IMM64(R3, 0x0),
  4115				BPF_ALU64_IMM(BPF_MOV, R2, 0x0),
  4116				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4117				BPF_MOV32_IMM(R0, 2),
  4118				BPF_EXIT_INSN(),
  4119				BPF_MOV32_IMM(R0, 1),
  4120				BPF_EXIT_INSN(),
  4121			},
  4122			INTERNAL,
  4123			{ },
  4124			{ { 0, 0x1 } },
  4125		},
  4126		{
  4127			"ALU64_MOV_K: dst = -1",
  4128			.u.insns_int = {
  4129				BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
  4130				BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
  4131				BPF_ALU64_IMM(BPF_MOV, R2, 0xffffffff),
  4132				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4133				BPF_MOV32_IMM(R0, 2),
  4134				BPF_EXIT_INSN(),
  4135				BPF_MOV32_IMM(R0, 1),
  4136				BPF_EXIT_INSN(),
  4137			},
  4138			INTERNAL,
  4139			{ },
  4140			{ { 0, 0x1 } },
  4141		},
  4142		{
  4143			"ALU64_MOV_K: small negative",
  4144			.u.insns_int = {
  4145				BPF_ALU64_IMM(BPF_MOV, R0, -123),
  4146				BPF_EXIT_INSN(),
  4147			},
  4148			INTERNAL,
  4149			{ },
  4150			{ { 0, -123 } }
  4151		},
  4152		{
  4153			"ALU64_MOV_K: small negative sign extension",
  4154			.u.insns_int = {
  4155				BPF_ALU64_IMM(BPF_MOV, R0, -123),
  4156				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  4157				BPF_EXIT_INSN(),
  4158			},
  4159			INTERNAL,
  4160			{ },
  4161			{ { 0, 0xffffffff } }
  4162		},
  4163		{
  4164			"ALU64_MOV_K: large negative",
  4165			.u.insns_int = {
  4166				BPF_ALU64_IMM(BPF_MOV, R0, -123456789),
  4167				BPF_EXIT_INSN(),
  4168			},
  4169			INTERNAL,
  4170			{ },
  4171			{ { 0, -123456789 } }
  4172		},
  4173		{
  4174			"ALU64_MOV_K: large negative sign extension",
  4175			.u.insns_int = {
  4176				BPF_ALU64_IMM(BPF_MOV, R0, -123456789),
  4177				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  4178				BPF_EXIT_INSN(),
  4179			},
  4180			INTERNAL,
  4181			{ },
  4182			{ { 0, 0xffffffff } }
  4183		},
  4184		/* BPF_ALU | BPF_ADD | BPF_X */
  4185		{
  4186			"ALU_ADD_X: 1 + 2 = 3",
  4187			.u.insns_int = {
  4188				BPF_LD_IMM64(R0, 1),
  4189				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  4190				BPF_ALU32_REG(BPF_ADD, R0, R1),
  4191				BPF_EXIT_INSN(),
  4192			},
  4193			INTERNAL,
  4194			{ },
  4195			{ { 0, 3 } },
  4196		},
  4197		{
  4198			"ALU_ADD_X: 1 + 4294967294 = 4294967295",
  4199			.u.insns_int = {
  4200				BPF_LD_IMM64(R0, 1),
  4201				BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U),
  4202				BPF_ALU32_REG(BPF_ADD, R0, R1),
  4203				BPF_EXIT_INSN(),
  4204			},
  4205			INTERNAL,
  4206			{ },
  4207			{ { 0, 4294967295U } },
  4208		},
  4209		{
  4210			"ALU_ADD_X: 2 + 4294967294 = 0",
  4211			.u.insns_int = {
  4212				BPF_LD_IMM64(R0, 2),
  4213				BPF_LD_IMM64(R1, 4294967294U),
  4214				BPF_ALU32_REG(BPF_ADD, R0, R1),
  4215				BPF_JMP_IMM(BPF_JEQ, R0, 0, 2),
  4216				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  4217				BPF_EXIT_INSN(),
  4218				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  4219				BPF_EXIT_INSN(),
  4220			},
  4221			INTERNAL,
  4222			{ },
  4223			{ { 0, 1 } },
  4224		},
  4225		{
  4226			"ALU64_ADD_X: 1 + 2 = 3",
  4227			.u.insns_int = {
  4228				BPF_LD_IMM64(R0, 1),
  4229				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  4230				BPF_ALU64_REG(BPF_ADD, R0, R1),
  4231				BPF_EXIT_INSN(),
  4232			},
  4233			INTERNAL,
  4234			{ },
  4235			{ { 0, 3 } },
  4236		},
  4237		{
  4238			"ALU64_ADD_X: 1 + 4294967294 = 4294967295",
  4239			.u.insns_int = {
  4240				BPF_LD_IMM64(R0, 1),
  4241				BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U),
  4242				BPF_ALU64_REG(BPF_ADD, R0, R1),
  4243				BPF_EXIT_INSN(),
  4244			},
  4245			INTERNAL,
  4246			{ },
  4247			{ { 0, 4294967295U } },
  4248		},
  4249		{
  4250			"ALU64_ADD_X: 2 + 4294967294 = 4294967296",
  4251			.u.insns_int = {
  4252				BPF_LD_IMM64(R0, 2),
  4253				BPF_LD_IMM64(R1, 4294967294U),
  4254				BPF_LD_IMM64(R2, 4294967296ULL),
  4255				BPF_ALU64_REG(BPF_ADD, R0, R1),
  4256				BPF_JMP_REG(BPF_JEQ, R0, R2, 2),
  4257				BPF_MOV32_IMM(R0, 0),
  4258				BPF_EXIT_INSN(),
  4259				BPF_MOV32_IMM(R0, 1),
  4260				BPF_EXIT_INSN(),
  4261			},
  4262			INTERNAL,
  4263			{ },
  4264			{ { 0, 1 } },
  4265		},
  4266		/* BPF_ALU | BPF_ADD | BPF_K */
  4267		{
  4268			"ALU_ADD_K: 1 + 2 = 3",
  4269			.u.insns_int = {
  4270				BPF_LD_IMM64(R0, 1),
  4271				BPF_ALU32_IMM(BPF_ADD, R0, 2),
  4272				BPF_EXIT_INSN(),
  4273			},
  4274			INTERNAL,
  4275			{ },
  4276			{ { 0, 3 } },
  4277		},
  4278		{
  4279			"ALU_ADD_K: 3 + 0 = 3",
  4280			.u.insns_int = {
  4281				BPF_LD_IMM64(R0, 3),
  4282				BPF_ALU32_IMM(BPF_ADD, R0, 0),
  4283				BPF_EXIT_INSN(),
  4284			},
  4285			INTERNAL,
  4286			{ },
  4287			{ { 0, 3 } },
  4288		},
  4289		{
  4290			"ALU_ADD_K: 1 + 4294967294 = 4294967295",
  4291			.u.insns_int = {
  4292				BPF_LD_IMM64(R0, 1),
  4293				BPF_ALU32_IMM(BPF_ADD, R0, 4294967294U),
  4294				BPF_EXIT_INSN(),
  4295			},
  4296			INTERNAL,
  4297			{ },
  4298			{ { 0, 4294967295U } },
  4299		},
  4300		{
  4301			"ALU_ADD_K: 4294967294 + 2 = 0",
  4302			.u.insns_int = {
  4303				BPF_LD_IMM64(R0, 4294967294U),
  4304				BPF_ALU32_IMM(BPF_ADD, R0, 2),
  4305				BPF_JMP_IMM(BPF_JEQ, R0, 0, 2),
  4306				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  4307				BPF_EXIT_INSN(),
  4308				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  4309				BPF_EXIT_INSN(),
  4310			},
  4311			INTERNAL,
  4312			{ },
  4313			{ { 0, 1 } },
  4314		},
  4315		{
  4316			"ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff",
  4317			.u.insns_int = {
  4318				BPF_LD_IMM64(R2, 0x0),
  4319				BPF_LD_IMM64(R3, 0x00000000ffffffff),
  4320				BPF_ALU32_IMM(BPF_ADD, R2, 0xffffffff),
  4321				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4322				BPF_MOV32_IMM(R0, 2),
  4323				BPF_EXIT_INSN(),
  4324				BPF_MOV32_IMM(R0, 1),
  4325				BPF_EXIT_INSN(),
  4326			},
  4327			INTERNAL,
  4328			{ },
  4329			{ { 0, 0x1 } },
  4330		},
  4331		{
  4332			"ALU_ADD_K: 0 + 0xffff = 0xffff",
  4333			.u.insns_int = {
  4334				BPF_LD_IMM64(R2, 0x0),
  4335				BPF_LD_IMM64(R3, 0xffff),
  4336				BPF_ALU32_IMM(BPF_ADD, R2, 0xffff),
  4337				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4338				BPF_MOV32_IMM(R0, 2),
  4339				BPF_EXIT_INSN(),
  4340				BPF_MOV32_IMM(R0, 1),
  4341				BPF_EXIT_INSN(),
  4342			},
  4343			INTERNAL,
  4344			{ },
  4345			{ { 0, 0x1 } },
  4346		},
  4347		{
  4348			"ALU_ADD_K: 0 + 0x7fffffff = 0x7fffffff",
  4349			.u.insns_int = {
  4350				BPF_LD_IMM64(R2, 0x0),
  4351				BPF_LD_IMM64(R3, 0x7fffffff),
  4352				BPF_ALU32_IMM(BPF_ADD, R2, 0x7fffffff),
  4353				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4354				BPF_MOV32_IMM(R0, 2),
  4355				BPF_EXIT_INSN(),
  4356				BPF_MOV32_IMM(R0, 1),
  4357				BPF_EXIT_INSN(),
  4358			},
  4359			INTERNAL,
  4360			{ },
  4361			{ { 0, 0x1 } },
  4362		},
  4363		{
  4364			"ALU_ADD_K: 0 + 0x80000000 = 0x80000000",
  4365			.u.insns_int = {
  4366				BPF_LD_IMM64(R2, 0x0),
  4367				BPF_LD_IMM64(R3, 0x80000000),
  4368				BPF_ALU32_IMM(BPF_ADD, R2, 0x80000000),
  4369				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4370				BPF_MOV32_IMM(R0, 2),
  4371				BPF_EXIT_INSN(),
  4372				BPF_MOV32_IMM(R0, 1),
  4373				BPF_EXIT_INSN(),
  4374			},
  4375			INTERNAL,
  4376			{ },
  4377			{ { 0, 0x1 } },
  4378		},
  4379		{
  4380			"ALU_ADD_K: 0 + 0x80008000 = 0x80008000",
  4381			.u.insns_int = {
  4382				BPF_LD_IMM64(R2, 0x0),
  4383				BPF_LD_IMM64(R3, 0x80008000),
  4384				BPF_ALU32_IMM(BPF_ADD, R2, 0x80008000),
  4385				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4386				BPF_MOV32_IMM(R0, 2),
  4387				BPF_EXIT_INSN(),
  4388				BPF_MOV32_IMM(R0, 1),
  4389				BPF_EXIT_INSN(),
  4390			},
  4391			INTERNAL,
  4392			{ },
  4393			{ { 0, 0x1 } },
  4394		},
  4395		{
  4396			"ALU64_ADD_K: 1 + 2 = 3",
  4397			.u.insns_int = {
  4398				BPF_LD_IMM64(R0, 1),
  4399				BPF_ALU64_IMM(BPF_ADD, R0, 2),
  4400				BPF_EXIT_INSN(),
  4401			},
  4402			INTERNAL,
  4403			{ },
  4404			{ { 0, 3 } },
  4405		},
  4406		{
  4407			"ALU64_ADD_K: 3 + 0 = 3",
  4408			.u.insns_int = {
  4409				BPF_LD_IMM64(R0, 3),
  4410				BPF_ALU64_IMM(BPF_ADD, R0, 0),
  4411				BPF_EXIT_INSN(),
  4412			},
  4413			INTERNAL,
  4414			{ },
  4415			{ { 0, 3 } },
  4416		},
  4417		{
  4418			"ALU64_ADD_K: 1 + 2147483646 = 2147483647",
  4419			.u.insns_int = {
  4420				BPF_LD_IMM64(R0, 1),
  4421				BPF_ALU64_IMM(BPF_ADD, R0, 2147483646),
  4422				BPF_EXIT_INSN(),
  4423			},
  4424			INTERNAL,
  4425			{ },
  4426			{ { 0, 2147483647 } },
  4427		},
  4428		{
  4429			"ALU64_ADD_K: 4294967294 + 2 = 4294967296",
  4430			.u.insns_int = {
  4431				BPF_LD_IMM64(R0, 4294967294U),
  4432				BPF_LD_IMM64(R1, 4294967296ULL),
  4433				BPF_ALU64_IMM(BPF_ADD, R0, 2),
  4434				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  4435				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  4436				BPF_EXIT_INSN(),
  4437				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  4438				BPF_EXIT_INSN(),
  4439			},
  4440			INTERNAL,
  4441			{ },
  4442			{ { 0, 1 } },
  4443		},
  4444		{
  4445			"ALU64_ADD_K: 2147483646 + -2147483647 = -1",
  4446			.u.insns_int = {
  4447				BPF_LD_IMM64(R0, 2147483646),
  4448				BPF_ALU64_IMM(BPF_ADD, R0, -2147483647),
  4449				BPF_EXIT_INSN(),
  4450			},
  4451			INTERNAL,
  4452			{ },
  4453			{ { 0, -1 } },
  4454		},
  4455		{
  4456			"ALU64_ADD_K: 1 + 0 = 1",
  4457			.u.insns_int = {
  4458				BPF_LD_IMM64(R2, 0x1),
  4459				BPF_LD_IMM64(R3, 0x1),
  4460				BPF_ALU64_IMM(BPF_ADD, R2, 0x0),
  4461				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4462				BPF_MOV32_IMM(R0, 2),
  4463				BPF_EXIT_INSN(),
  4464				BPF_MOV32_IMM(R0, 1),
  4465				BPF_EXIT_INSN(),
  4466			},
  4467			INTERNAL,
  4468			{ },
  4469			{ { 0, 0x1 } },
  4470		},
  4471		{
  4472			"ALU64_ADD_K: 0 + (-1) = 0xffffffffffffffff",
  4473			.u.insns_int = {
  4474				BPF_LD_IMM64(R2, 0x0),
  4475				BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
  4476				BPF_ALU64_IMM(BPF_ADD, R2, 0xffffffff),
  4477				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4478				BPF_MOV32_IMM(R0, 2),
  4479				BPF_EXIT_INSN(),
  4480				BPF_MOV32_IMM(R0, 1),
  4481				BPF_EXIT_INSN(),
  4482			},
  4483			INTERNAL,
  4484			{ },
  4485			{ { 0, 0x1 } },
  4486		},
  4487		{
  4488			"ALU64_ADD_K: 0 + 0xffff = 0xffff",
  4489			.u.insns_int = {
  4490				BPF_LD_IMM64(R2, 0x0),
  4491				BPF_LD_IMM64(R3, 0xffff),
  4492				BPF_ALU64_IMM(BPF_ADD, R2, 0xffff),
  4493				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4494				BPF_MOV32_IMM(R0, 2),
  4495				BPF_EXIT_INSN(),
  4496				BPF_MOV32_IMM(R0, 1),
  4497				BPF_EXIT_INSN(),
  4498			},
  4499			INTERNAL,
  4500			{ },
  4501			{ { 0, 0x1 } },
  4502		},
  4503		{
  4504			"ALU64_ADD_K: 0 + 0x7fffffff = 0x7fffffff",
  4505			.u.insns_int = {
  4506				BPF_LD_IMM64(R2, 0x0),
  4507				BPF_LD_IMM64(R3, 0x7fffffff),
  4508				BPF_ALU64_IMM(BPF_ADD, R2, 0x7fffffff),
  4509				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4510				BPF_MOV32_IMM(R0, 2),
  4511				BPF_EXIT_INSN(),
  4512				BPF_MOV32_IMM(R0, 1),
  4513				BPF_EXIT_INSN(),
  4514			},
  4515			INTERNAL,
  4516			{ },
  4517			{ { 0, 0x1 } },
  4518		},
  4519		{
  4520			"ALU64_ADD_K: 0 + 0x80000000 = 0xffffffff80000000",
  4521			.u.insns_int = {
  4522				BPF_LD_IMM64(R2, 0x0),
  4523				BPF_LD_IMM64(R3, 0xffffffff80000000LL),
  4524				BPF_ALU64_IMM(BPF_ADD, R2, 0x80000000),
  4525				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4526				BPF_MOV32_IMM(R0, 2),
  4527				BPF_EXIT_INSN(),
  4528				BPF_MOV32_IMM(R0, 1),
  4529				BPF_EXIT_INSN(),
  4530			},
  4531			INTERNAL,
  4532			{ },
  4533			{ { 0, 0x1 } },
  4534		},
  4535		{
  4536			"ALU_ADD_K: 0 + 0x80008000 = 0xffffffff80008000",
  4537			.u.insns_int = {
  4538				BPF_LD_IMM64(R2, 0x0),
  4539				BPF_LD_IMM64(R3, 0xffffffff80008000LL),
  4540				BPF_ALU64_IMM(BPF_ADD, R2, 0x80008000),
  4541				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4542				BPF_MOV32_IMM(R0, 2),
  4543				BPF_EXIT_INSN(),
  4544				BPF_MOV32_IMM(R0, 1),
  4545				BPF_EXIT_INSN(),
  4546			},
  4547			INTERNAL,
  4548			{ },
  4549			{ { 0, 0x1 } },
  4550		},
  4551		/* BPF_ALU | BPF_SUB | BPF_X */
  4552		{
  4553			"ALU_SUB_X: 3 - 1 = 2",
  4554			.u.insns_int = {
  4555				BPF_LD_IMM64(R0, 3),
  4556				BPF_ALU32_IMM(BPF_MOV, R1, 1),
  4557				BPF_ALU32_REG(BPF_SUB, R0, R1),
  4558				BPF_EXIT_INSN(),
  4559			},
  4560			INTERNAL,
  4561			{ },
  4562			{ { 0, 2 } },
  4563		},
  4564		{
  4565			"ALU_SUB_X: 4294967295 - 4294967294 = 1",
  4566			.u.insns_int = {
  4567				BPF_LD_IMM64(R0, 4294967295U),
  4568				BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U),
  4569				BPF_ALU32_REG(BPF_SUB, R0, R1),
  4570				BPF_EXIT_INSN(),
  4571			},
  4572			INTERNAL,
  4573			{ },
  4574			{ { 0, 1 } },
  4575		},
  4576		{
  4577			"ALU64_SUB_X: 3 - 1 = 2",
  4578			.u.insns_int = {
  4579				BPF_LD_IMM64(R0, 3),
  4580				BPF_ALU32_IMM(BPF_MOV, R1, 1),
  4581				BPF_ALU64_REG(BPF_SUB, R0, R1),
  4582				BPF_EXIT_INSN(),
  4583			},
  4584			INTERNAL,
  4585			{ },
  4586			{ { 0, 2 } },
  4587		},
  4588		{
  4589			"ALU64_SUB_X: 4294967295 - 4294967294 = 1",
  4590			.u.insns_int = {
  4591				BPF_LD_IMM64(R0, 4294967295U),
  4592				BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U),
  4593				BPF_ALU64_REG(BPF_SUB, R0, R1),
  4594				BPF_EXIT_INSN(),
  4595			},
  4596			INTERNAL,
  4597			{ },
  4598			{ { 0, 1 } },
  4599		},
  4600		/* BPF_ALU | BPF_SUB | BPF_K */
  4601		{
  4602			"ALU_SUB_K: 3 - 1 = 2",
  4603			.u.insns_int = {
  4604				BPF_LD_IMM64(R0, 3),
  4605				BPF_ALU32_IMM(BPF_SUB, R0, 1),
  4606				BPF_EXIT_INSN(),
  4607			},
  4608			INTERNAL,
  4609			{ },
  4610			{ { 0, 2 } },
  4611		},
  4612		{
  4613			"ALU_SUB_K: 3 - 0 = 3",
  4614			.u.insns_int = {
  4615				BPF_LD_IMM64(R0, 3),
  4616				BPF_ALU32_IMM(BPF_SUB, R0, 0),
  4617				BPF_EXIT_INSN(),
  4618			},
  4619			INTERNAL,
  4620			{ },
  4621			{ { 0, 3 } },
  4622		},
  4623		{
  4624			"ALU_SUB_K: 4294967295 - 4294967294 = 1",
  4625			.u.insns_int = {
  4626				BPF_LD_IMM64(R0, 4294967295U),
  4627				BPF_ALU32_IMM(BPF_SUB, R0, 4294967294U),
  4628				BPF_EXIT_INSN(),
  4629			},
  4630			INTERNAL,
  4631			{ },
  4632			{ { 0, 1 } },
  4633		},
  4634		{
  4635			"ALU64_SUB_K: 3 - 1 = 2",
  4636			.u.insns_int = {
  4637				BPF_LD_IMM64(R0, 3),
  4638				BPF_ALU64_IMM(BPF_SUB, R0, 1),
  4639				BPF_EXIT_INSN(),
  4640			},
  4641			INTERNAL,
  4642			{ },
  4643			{ { 0, 2 } },
  4644		},
  4645		{
  4646			"ALU64_SUB_K: 3 - 0 = 3",
  4647			.u.insns_int = {
  4648				BPF_LD_IMM64(R0, 3),
  4649				BPF_ALU64_IMM(BPF_SUB, R0, 0),
  4650				BPF_EXIT_INSN(),
  4651			},
  4652			INTERNAL,
  4653			{ },
  4654			{ { 0, 3 } },
  4655		},
  4656		{
  4657			"ALU64_SUB_K: 4294967294 - 4294967295 = -1",
  4658			.u.insns_int = {
  4659				BPF_LD_IMM64(R0, 4294967294U),
  4660				BPF_ALU64_IMM(BPF_SUB, R0, 4294967295U),
  4661				BPF_EXIT_INSN(),
  4662			},
  4663			INTERNAL,
  4664			{ },
  4665			{ { 0, -1 } },
  4666		},
  4667		{
  4668			"ALU64_ADD_K: 2147483646 - 2147483647 = -1",
  4669			.u.insns_int = {
  4670				BPF_LD_IMM64(R0, 2147483646),
  4671				BPF_ALU64_IMM(BPF_SUB, R0, 2147483647),
  4672				BPF_EXIT_INSN(),
  4673			},
  4674			INTERNAL,
  4675			{ },
  4676			{ { 0, -1 } },
  4677		},
  4678		/* BPF_ALU | BPF_MUL | BPF_X */
  4679		{
  4680			"ALU_MUL_X: 2 * 3 = 6",
  4681			.u.insns_int = {
  4682				BPF_LD_IMM64(R0, 2),
  4683				BPF_ALU32_IMM(BPF_MOV, R1, 3),
  4684				BPF_ALU32_REG(BPF_MUL, R0, R1),
  4685				BPF_EXIT_INSN(),
  4686			},
  4687			INTERNAL,
  4688			{ },
  4689			{ { 0, 6 } },
  4690		},
  4691		{
  4692			"ALU_MUL_X: 2 * 0x7FFFFFF8 = 0xFFFFFFF0",
  4693			.u.insns_int = {
  4694				BPF_LD_IMM64(R0, 2),
  4695				BPF_ALU32_IMM(BPF_MOV, R1, 0x7FFFFFF8),
  4696				BPF_ALU32_REG(BPF_MUL, R0, R1),
  4697				BPF_EXIT_INSN(),
  4698			},
  4699			INTERNAL,
  4700			{ },
  4701			{ { 0, 0xFFFFFFF0 } },
  4702		},
  4703		{
  4704			"ALU_MUL_X: -1 * -1 = 1",
  4705			.u.insns_int = {
  4706				BPF_LD_IMM64(R0, -1),
  4707				BPF_ALU32_IMM(BPF_MOV, R1, -1),
  4708				BPF_ALU32_REG(BPF_MUL, R0, R1),
  4709				BPF_EXIT_INSN(),
  4710			},
  4711			INTERNAL,
  4712			{ },
  4713			{ { 0, 1 } },
  4714		},
  4715		{
  4716			"ALU64_MUL_X: 2 * 3 = 6",
  4717			.u.insns_int = {
  4718				BPF_LD_IMM64(R0, 2),
  4719				BPF_ALU32_IMM(BPF_MOV, R1, 3),
  4720				BPF_ALU64_REG(BPF_MUL, R0, R1),
  4721				BPF_EXIT_INSN(),
  4722			},
  4723			INTERNAL,
  4724			{ },
  4725			{ { 0, 6 } },
  4726		},
  4727		{
  4728			"ALU64_MUL_X: 1 * 2147483647 = 2147483647",
  4729			.u.insns_int = {
  4730				BPF_LD_IMM64(R0, 1),
  4731				BPF_ALU32_IMM(BPF_MOV, R1, 2147483647),
  4732				BPF_ALU64_REG(BPF_MUL, R0, R1),
  4733				BPF_EXIT_INSN(),
  4734			},
  4735			INTERNAL,
  4736			{ },
  4737			{ { 0, 2147483647 } },
  4738		},
  4739		{
  4740			"ALU64_MUL_X: 64x64 multiply, low word",
  4741			.u.insns_int = {
  4742				BPF_LD_IMM64(R0, 0x0fedcba987654321LL),
  4743				BPF_LD_IMM64(R1, 0x123456789abcdef0LL),
  4744				BPF_ALU64_REG(BPF_MUL, R0, R1),
  4745				BPF_EXIT_INSN(),
  4746			},
  4747			INTERNAL,
  4748			{ },
  4749			{ { 0, 0xe5618cf0 } }
  4750		},
  4751		{
  4752			"ALU64_MUL_X: 64x64 multiply, high word",
  4753			.u.insns_int = {
  4754				BPF_LD_IMM64(R0, 0x0fedcba987654321LL),
  4755				BPF_LD_IMM64(R1, 0x123456789abcdef0LL),
  4756				BPF_ALU64_REG(BPF_MUL, R0, R1),
  4757				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  4758				BPF_EXIT_INSN(),
  4759			},
  4760			INTERNAL,
  4761			{ },
  4762			{ { 0, 0x2236d88f } }
  4763		},
  4764		/* BPF_ALU | BPF_MUL | BPF_K */
  4765		{
  4766			"ALU_MUL_K: 2 * 3 = 6",
  4767			.u.insns_int = {
  4768				BPF_LD_IMM64(R0, 2),
  4769				BPF_ALU32_IMM(BPF_MUL, R0, 3),
  4770				BPF_EXIT_INSN(),
  4771			},
  4772			INTERNAL,
  4773			{ },
  4774			{ { 0, 6 } },
  4775		},
  4776		{
  4777			"ALU_MUL_K: 3 * 1 = 3",
  4778			.u.insns_int = {
  4779				BPF_LD_IMM64(R0, 3),
  4780				BPF_ALU32_IMM(BPF_MUL, R0, 1),
  4781				BPF_EXIT_INSN(),
  4782			},
  4783			INTERNAL,
  4784			{ },
  4785			{ { 0, 3 } },
  4786		},
  4787		{
  4788			"ALU_MUL_K: 2 * 0x7FFFFFF8 = 0xFFFFFFF0",
  4789			.u.insns_int = {
  4790				BPF_LD_IMM64(R0, 2),
  4791				BPF_ALU32_IMM(BPF_MUL, R0, 0x7FFFFFF8),
  4792				BPF_EXIT_INSN(),
  4793			},
  4794			INTERNAL,
  4795			{ },
  4796			{ { 0, 0xFFFFFFF0 } },
  4797		},
  4798		{
  4799			"ALU_MUL_K: 1 * (-1) = 0x00000000ffffffff",
  4800			.u.insns_int = {
  4801				BPF_LD_IMM64(R2, 0x1),
  4802				BPF_LD_IMM64(R3, 0x00000000ffffffff),
  4803				BPF_ALU32_IMM(BPF_MUL, R2, 0xffffffff),
  4804				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4805				BPF_MOV32_IMM(R0, 2),
  4806				BPF_EXIT_INSN(),
  4807				BPF_MOV32_IMM(R0, 1),
  4808				BPF_EXIT_INSN(),
  4809			},
  4810			INTERNAL,
  4811			{ },
  4812			{ { 0, 0x1 } },
  4813		},
  4814		{
  4815			"ALU64_MUL_K: 2 * 3 = 6",
  4816			.u.insns_int = {
  4817				BPF_LD_IMM64(R0, 2),
  4818				BPF_ALU64_IMM(BPF_MUL, R0, 3),
  4819				BPF_EXIT_INSN(),
  4820			},
  4821			INTERNAL,
  4822			{ },
  4823			{ { 0, 6 } },
  4824		},
  4825		{
  4826			"ALU64_MUL_K: 3 * 1 = 3",
  4827			.u.insns_int = {
  4828				BPF_LD_IMM64(R0, 3),
  4829				BPF_ALU64_IMM(BPF_MUL, R0, 1),
  4830				BPF_EXIT_INSN(),
  4831			},
  4832			INTERNAL,
  4833			{ },
  4834			{ { 0, 3 } },
  4835		},
  4836		{
  4837			"ALU64_MUL_K: 1 * 2147483647 = 2147483647",
  4838			.u.insns_int = {
  4839				BPF_LD_IMM64(R0, 1),
  4840				BPF_ALU64_IMM(BPF_MUL, R0, 2147483647),
  4841				BPF_EXIT_INSN(),
  4842			},
  4843			INTERNAL,
  4844			{ },
  4845			{ { 0, 2147483647 } },
  4846		},
  4847		{
  4848			"ALU64_MUL_K: 1 * -2147483647 = -2147483647",
  4849			.u.insns_int = {
  4850				BPF_LD_IMM64(R0, 1),
  4851				BPF_ALU64_IMM(BPF_MUL, R0, -2147483647),
  4852				BPF_EXIT_INSN(),
  4853			},
  4854			INTERNAL,
  4855			{ },
  4856			{ { 0, -2147483647 } },
  4857		},
  4858		{
  4859			"ALU64_MUL_K: 1 * (-1) = 0xffffffffffffffff",
  4860			.u.insns_int = {
  4861				BPF_LD_IMM64(R2, 0x1),
  4862				BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
  4863				BPF_ALU64_IMM(BPF_MUL, R2, 0xffffffff),
  4864				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4865				BPF_MOV32_IMM(R0, 2),
  4866				BPF_EXIT_INSN(),
  4867				BPF_MOV32_IMM(R0, 1),
  4868				BPF_EXIT_INSN(),
  4869			},
  4870			INTERNAL,
  4871			{ },
  4872			{ { 0, 0x1 } },
  4873		},
  4874		{
  4875			"ALU64_MUL_K: 64x32 multiply, low word",
  4876			.u.insns_int = {
  4877				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  4878				BPF_ALU64_IMM(BPF_MUL, R0, 0x12345678),
  4879				BPF_EXIT_INSN(),
  4880			},
  4881			INTERNAL,
  4882			{ },
  4883			{ { 0, 0xe242d208 } }
  4884		},
  4885		{
  4886			"ALU64_MUL_K: 64x32 multiply, high word",
  4887			.u.insns_int = {
  4888				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  4889				BPF_ALU64_IMM(BPF_MUL, R0, 0x12345678),
  4890				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  4891				BPF_EXIT_INSN(),
  4892			},
  4893			INTERNAL,
  4894			{ },
  4895			{ { 0, 0xc28f5c28 } }
  4896		},
  4897		/* BPF_ALU | BPF_DIV | BPF_X */
  4898		{
  4899			"ALU_DIV_X: 6 / 2 = 3",
  4900			.u.insns_int = {
  4901				BPF_LD_IMM64(R0, 6),
  4902				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  4903				BPF_ALU32_REG(BPF_DIV, R0, R1),
  4904				BPF_EXIT_INSN(),
  4905			},
  4906			INTERNAL,
  4907			{ },
  4908			{ { 0, 3 } },
  4909		},
  4910		{
  4911			"ALU_DIV_X: 4294967295 / 4294967295 = 1",
  4912			.u.insns_int = {
  4913				BPF_LD_IMM64(R0, 4294967295U),
  4914				BPF_ALU32_IMM(BPF_MOV, R1, 4294967295U),
  4915				BPF_ALU32_REG(BPF_DIV, R0, R1),
  4916				BPF_EXIT_INSN(),
  4917			},
  4918			INTERNAL,
  4919			{ },
  4920			{ { 0, 1 } },
  4921		},
  4922		{
  4923			"ALU64_DIV_X: 6 / 2 = 3",
  4924			.u.insns_int = {
  4925				BPF_LD_IMM64(R0, 6),
  4926				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  4927				BPF_ALU64_REG(BPF_DIV, R0, R1),
  4928				BPF_EXIT_INSN(),
  4929			},
  4930			INTERNAL,
  4931			{ },
  4932			{ { 0, 3 } },
  4933		},
  4934		{
  4935			"ALU64_DIV_X: 2147483647 / 2147483647 = 1",
  4936			.u.insns_int = {
  4937				BPF_LD_IMM64(R0, 2147483647),
  4938				BPF_ALU32_IMM(BPF_MOV, R1, 2147483647),
  4939				BPF_ALU64_REG(BPF_DIV, R0, R1),
  4940				BPF_EXIT_INSN(),
  4941			},
  4942			INTERNAL,
  4943			{ },
  4944			{ { 0, 1 } },
  4945		},
  4946		{
  4947			"ALU64_DIV_X: 0xffffffffffffffff / (-1) = 0x0000000000000001",
  4948			.u.insns_int = {
  4949				BPF_LD_IMM64(R2, 0xffffffffffffffffLL),
  4950				BPF_LD_IMM64(R4, 0xffffffffffffffffLL),
  4951				BPF_LD_IMM64(R3, 0x0000000000000001LL),
  4952				BPF_ALU64_REG(BPF_DIV, R2, R4),
  4953				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  4954				BPF_MOV32_IMM(R0, 2),
  4955				BPF_EXIT_INSN(),
  4956				BPF_MOV32_IMM(R0, 1),
  4957				BPF_EXIT_INSN(),
  4958			},
  4959			INTERNAL,
  4960			{ },
  4961			{ { 0, 0x1 } },
  4962		},
  4963		/* BPF_ALU | BPF_DIV | BPF_K */
  4964		{
  4965			"ALU_DIV_K: 6 / 2 = 3",
  4966			.u.insns_int = {
  4967				BPF_LD_IMM64(R0, 6),
  4968				BPF_ALU32_IMM(BPF_DIV, R0, 2),
  4969				BPF_EXIT_INSN(),
  4970			},
  4971			INTERNAL,
  4972			{ },
  4973			{ { 0, 3 } },
  4974		},
  4975		{
  4976			"ALU_DIV_K: 3 / 1 = 3",
  4977			.u.insns_int = {
  4978				BPF_LD_IMM64(R0, 3),
  4979				BPF_ALU32_IMM(BPF_DIV, R0, 1),
  4980				BPF_EXIT_INSN(),
  4981			},
  4982			INTERNAL,
  4983			{ },
  4984			{ { 0, 3 } },
  4985		},
  4986		{
  4987			"ALU_DIV_K: 4294967295 / 4294967295 = 1",
  4988			.u.insns_int = {
  4989				BPF_LD_IMM64(R0, 4294967295U),
  4990				BPF_ALU32_IMM(BPF_DIV, R0, 4294967295U),
  4991				BPF_EXIT_INSN(),
  4992			},
  4993			INTERNAL,
  4994			{ },
  4995			{ { 0, 1 } },
  4996		},
  4997		{
  4998			"ALU_DIV_K: 0xffffffffffffffff / (-1) = 0x1",
  4999			.u.insns_int = {
  5000				BPF_LD_IMM64(R2, 0xffffffffffffffffLL),
  5001				BPF_LD_IMM64(R3, 0x1UL),
  5002				BPF_ALU32_IMM(BPF_DIV, R2, 0xffffffff),
  5003				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5004				BPF_MOV32_IMM(R0, 2),
  5005				BPF_EXIT_INSN(),
  5006				BPF_MOV32_IMM(R0, 1),
  5007				BPF_EXIT_INSN(),
  5008			},
  5009			INTERNAL,
  5010			{ },
  5011			{ { 0, 0x1 } },
  5012		},
  5013		{
  5014			"ALU64_DIV_K: 6 / 2 = 3",
  5015			.u.insns_int = {
  5016				BPF_LD_IMM64(R0, 6),
  5017				BPF_ALU64_IMM(BPF_DIV, R0, 2),
  5018				BPF_EXIT_INSN(),
  5019			},
  5020			INTERNAL,
  5021			{ },
  5022			{ { 0, 3 } },
  5023		},
  5024		{
  5025			"ALU64_DIV_K: 3 / 1 = 3",
  5026			.u.insns_int = {
  5027				BPF_LD_IMM64(R0, 3),
  5028				BPF_ALU64_IMM(BPF_DIV, R0, 1),
  5029				BPF_EXIT_INSN(),
  5030			},
  5031			INTERNAL,
  5032			{ },
  5033			{ { 0, 3 } },
  5034		},
  5035		{
  5036			"ALU64_DIV_K: 2147483647 / 2147483647 = 1",
  5037			.u.insns_int = {
  5038				BPF_LD_IMM64(R0, 2147483647),
  5039				BPF_ALU64_IMM(BPF_DIV, R0, 2147483647),
  5040				BPF_EXIT_INSN(),
  5041			},
  5042			INTERNAL,
  5043			{ },
  5044			{ { 0, 1 } },
  5045		},
  5046		{
  5047			"ALU64_DIV_K: 0xffffffffffffffff / (-1) = 0x0000000000000001",
  5048			.u.insns_int = {
  5049				BPF_LD_IMM64(R2, 0xffffffffffffffffLL),
  5050				BPF_LD_IMM64(R3, 0x0000000000000001LL),
  5051				BPF_ALU64_IMM(BPF_DIV, R2, 0xffffffff),
  5052				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5053				BPF_MOV32_IMM(R0, 2),
  5054				BPF_EXIT_INSN(),
  5055				BPF_MOV32_IMM(R0, 1),
  5056				BPF_EXIT_INSN(),
  5057			},
  5058			INTERNAL,
  5059			{ },
  5060			{ { 0, 0x1 } },
  5061		},
  5062		/* BPF_ALU | BPF_MOD | BPF_X */
  5063		{
  5064			"ALU_MOD_X: 3 % 2 = 1",
  5065			.u.insns_int = {
  5066				BPF_LD_IMM64(R0, 3),
  5067				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  5068				BPF_ALU32_REG(BPF_MOD, R0, R1),
  5069				BPF_EXIT_INSN(),
  5070			},
  5071			INTERNAL,
  5072			{ },
  5073			{ { 0, 1 } },
  5074		},
  5075		{
  5076			"ALU_MOD_X: 4294967295 % 4294967293 = 2",
  5077			.u.insns_int = {
  5078				BPF_LD_IMM64(R0, 4294967295U),
  5079				BPF_ALU32_IMM(BPF_MOV, R1, 4294967293U),
  5080				BPF_ALU32_REG(BPF_MOD, R0, R1),
  5081				BPF_EXIT_INSN(),
  5082			},
  5083			INTERNAL,
  5084			{ },
  5085			{ { 0, 2 } },
  5086		},
  5087		{
  5088			"ALU64_MOD_X: 3 % 2 = 1",
  5089			.u.insns_int = {
  5090				BPF_LD_IMM64(R0, 3),
  5091				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  5092				BPF_ALU64_REG(BPF_MOD, R0, R1),
  5093				BPF_EXIT_INSN(),
  5094			},
  5095			INTERNAL,
  5096			{ },
  5097			{ { 0, 1 } },
  5098		},
  5099		{
  5100			"ALU64_MOD_X: 2147483647 % 2147483645 = 2",
  5101			.u.insns_int = {
  5102				BPF_LD_IMM64(R0, 2147483647),
  5103				BPF_ALU32_IMM(BPF_MOV, R1, 2147483645),
  5104				BPF_ALU64_REG(BPF_MOD, R0, R1),
  5105				BPF_EXIT_INSN(),
  5106			},
  5107			INTERNAL,
  5108			{ },
  5109			{ { 0, 2 } },
  5110		},
  5111		/* BPF_ALU | BPF_MOD | BPF_K */
  5112		{
  5113			"ALU_MOD_K: 3 % 2 = 1",
  5114			.u.insns_int = {
  5115				BPF_LD_IMM64(R0, 3),
  5116				BPF_ALU32_IMM(BPF_MOD, R0, 2),
  5117				BPF_EXIT_INSN(),
  5118			},
  5119			INTERNAL,
  5120			{ },
  5121			{ { 0, 1 } },
  5122		},
  5123		{
  5124			"ALU_MOD_K: 3 % 1 = 0",
  5125			.u.insns_int = {
  5126				BPF_LD_IMM64(R0, 3),
  5127				BPF_ALU32_IMM(BPF_MOD, R0, 1),
  5128				BPF_EXIT_INSN(),
  5129			},
  5130			INTERNAL,
  5131			{ },
  5132			{ { 0, 0 } },
  5133		},
  5134		{
  5135			"ALU_MOD_K: 4294967295 % 4294967293 = 2",
  5136			.u.insns_int = {
  5137				BPF_LD_IMM64(R0, 4294967295U),
  5138				BPF_ALU32_IMM(BPF_MOD, R0, 4294967293U),
  5139				BPF_EXIT_INSN(),
  5140			},
  5141			INTERNAL,
  5142			{ },
  5143			{ { 0, 2 } },
  5144		},
  5145		{
  5146			"ALU64_MOD_K: 3 % 2 = 1",
  5147			.u.insns_int = {
  5148				BPF_LD_IMM64(R0, 3),
  5149				BPF_ALU64_IMM(BPF_MOD, R0, 2),
  5150				BPF_EXIT_INSN(),
  5151			},
  5152			INTERNAL,
  5153			{ },
  5154			{ { 0, 1 } },
  5155		},
  5156		{
  5157			"ALU64_MOD_K: 3 % 1 = 0",
  5158			.u.insns_int = {
  5159				BPF_LD_IMM64(R0, 3),
  5160				BPF_ALU64_IMM(BPF_MOD, R0, 1),
  5161				BPF_EXIT_INSN(),
  5162			},
  5163			INTERNAL,
  5164			{ },
  5165			{ { 0, 0 } },
  5166		},
  5167		{
  5168			"ALU64_MOD_K: 2147483647 % 2147483645 = 2",
  5169			.u.insns_int = {
  5170				BPF_LD_IMM64(R0, 2147483647),
  5171				BPF_ALU64_IMM(BPF_MOD, R0, 2147483645),
  5172				BPF_EXIT_INSN(),
  5173			},
  5174			INTERNAL,
  5175			{ },
  5176			{ { 0, 2 } },
  5177		},
  5178		/* BPF_ALU | BPF_AND | BPF_X */
  5179		{
  5180			"ALU_AND_X: 3 & 2 = 2",
  5181			.u.insns_int = {
  5182				BPF_LD_IMM64(R0, 3),
  5183				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  5184				BPF_ALU32_REG(BPF_AND, R0, R1),
  5185				BPF_EXIT_INSN(),
  5186			},
  5187			INTERNAL,
  5188			{ },
  5189			{ { 0, 2 } },
  5190		},
  5191		{
  5192			"ALU_AND_X: 0xffffffff & 0xffffffff = 0xffffffff",
  5193			.u.insns_int = {
  5194				BPF_LD_IMM64(R0, 0xffffffff),
  5195				BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
  5196				BPF_ALU32_REG(BPF_AND, R0, R1),
  5197				BPF_EXIT_INSN(),
  5198			},
  5199			INTERNAL,
  5200			{ },
  5201			{ { 0, 0xffffffff } },
  5202		},
  5203		{
  5204			"ALU64_AND_X: 3 & 2 = 2",
  5205			.u.insns_int = {
  5206				BPF_LD_IMM64(R0, 3),
  5207				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  5208				BPF_ALU64_REG(BPF_AND, R0, R1),
  5209				BPF_EXIT_INSN(),
  5210			},
  5211			INTERNAL,
  5212			{ },
  5213			{ { 0, 2 } },
  5214		},
  5215		{
  5216			"ALU64_AND_X: 0xffffffff & 0xffffffff = 0xffffffff",
  5217			.u.insns_int = {
  5218				BPF_LD_IMM64(R0, 0xffffffff),
  5219				BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
  5220				BPF_ALU64_REG(BPF_AND, R0, R1),
  5221				BPF_EXIT_INSN(),
  5222			},
  5223			INTERNAL,
  5224			{ },
  5225			{ { 0, 0xffffffff } },
  5226		},
  5227		/* BPF_ALU | BPF_AND | BPF_K */
  5228		{
  5229			"ALU_AND_K: 3 & 2 = 2",
  5230			.u.insns_int = {
  5231				BPF_LD_IMM64(R0, 3),
  5232				BPF_ALU32_IMM(BPF_AND, R0, 2),
  5233				BPF_EXIT_INSN(),
  5234			},
  5235			INTERNAL,
  5236			{ },
  5237			{ { 0, 2 } },
  5238		},
  5239		{
  5240			"ALU_AND_K: 0xffffffff & 0xffffffff = 0xffffffff",
  5241			.u.insns_int = {
  5242				BPF_LD_IMM64(R0, 0xffffffff),
  5243				BPF_ALU32_IMM(BPF_AND, R0, 0xffffffff),
  5244				BPF_EXIT_INSN(),
  5245			},
  5246			INTERNAL,
  5247			{ },
  5248			{ { 0, 0xffffffff } },
  5249		},
  5250		{
  5251			"ALU_AND_K: Small immediate",
  5252			.u.insns_int = {
  5253				BPF_ALU32_IMM(BPF_MOV, R0, 0x01020304),
  5254				BPF_ALU32_IMM(BPF_AND, R0, 15),
  5255				BPF_EXIT_INSN(),
  5256			},
  5257			INTERNAL,
  5258			{ },
  5259			{ { 0, 4 } }
  5260		},
  5261		{
  5262			"ALU_AND_K: Large immediate",
  5263			.u.insns_int = {
  5264				BPF_ALU32_IMM(BPF_MOV, R0, 0xf1f2f3f4),
  5265				BPF_ALU32_IMM(BPF_AND, R0, 0xafbfcfdf),
  5266				BPF_EXIT_INSN(),
  5267			},
  5268			INTERNAL,
  5269			{ },
  5270			{ { 0, 0xa1b2c3d4 } }
  5271		},
  5272		{
  5273			"ALU_AND_K: Zero extension",
  5274			.u.insns_int = {
  5275				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5276				BPF_LD_IMM64(R1, 0x0000000080a0c0e0LL),
  5277				BPF_ALU32_IMM(BPF_AND, R0, 0xf0f0f0f0),
  5278				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  5279				BPF_MOV32_IMM(R0, 2),
  5280				BPF_EXIT_INSN(),
  5281				BPF_MOV32_IMM(R0, 1),
  5282				BPF_EXIT_INSN(),
  5283			},
  5284			INTERNAL,
  5285			{ },
  5286			{ { 0, 1 } }
  5287		},
  5288		{
  5289			"ALU64_AND_K: 3 & 2 = 2",
  5290			.u.insns_int = {
  5291				BPF_LD_IMM64(R0, 3),
  5292				BPF_ALU64_IMM(BPF_AND, R0, 2),
  5293				BPF_EXIT_INSN(),
  5294			},
  5295			INTERNAL,
  5296			{ },
  5297			{ { 0, 2 } },
  5298		},
  5299		{
  5300			"ALU64_AND_K: 0xffffffff & 0xffffffff = 0xffffffff",
  5301			.u.insns_int = {
  5302				BPF_LD_IMM64(R0, 0xffffffff),
  5303				BPF_ALU64_IMM(BPF_AND, R0, 0xffffffff),
  5304				BPF_EXIT_INSN(),
  5305			},
  5306			INTERNAL,
  5307			{ },
  5308			{ { 0, 0xffffffff } },
  5309		},
  5310		{
  5311			"ALU64_AND_K: 0x0000ffffffff0000 & 0x0 = 0x0000000000000000",
  5312			.u.insns_int = {
  5313				BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
  5314				BPF_LD_IMM64(R3, 0x0000000000000000LL),
  5315				BPF_ALU64_IMM(BPF_AND, R2, 0x0),
  5316				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5317				BPF_MOV32_IMM(R0, 2),
  5318				BPF_EXIT_INSN(),
  5319				BPF_MOV32_IMM(R0, 1),
  5320				BPF_EXIT_INSN(),
  5321			},
  5322			INTERNAL,
  5323			{ },
  5324			{ { 0, 0x1 } },
  5325		},
  5326		{
  5327			"ALU64_AND_K: 0x0000ffffffff0000 & -1 = 0x0000ffffffff0000",
  5328			.u.insns_int = {
  5329				BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
  5330				BPF_LD_IMM64(R3, 0x0000ffffffff0000LL),
  5331				BPF_ALU64_IMM(BPF_AND, R2, 0xffffffff),
  5332				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5333				BPF_MOV32_IMM(R0, 2),
  5334				BPF_EXIT_INSN(),
  5335				BPF_MOV32_IMM(R0, 1),
  5336				BPF_EXIT_INSN(),
  5337			},
  5338			INTERNAL,
  5339			{ },
  5340			{ { 0, 0x1 } },
  5341		},
  5342		{
  5343			"ALU64_AND_K: 0xffffffffffffffff & -1 = 0xffffffffffffffff",
  5344			.u.insns_int = {
  5345				BPF_LD_IMM64(R2, 0xffffffffffffffffLL),
  5346				BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
  5347				BPF_ALU64_IMM(BPF_AND, R2, 0xffffffff),
  5348				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5349				BPF_MOV32_IMM(R0, 2),
  5350				BPF_EXIT_INSN(),
  5351				BPF_MOV32_IMM(R0, 1),
  5352				BPF_EXIT_INSN(),
  5353			},
  5354			INTERNAL,
  5355			{ },
  5356			{ { 0, 0x1 } },
  5357		},
  5358		{
  5359			"ALU64_AND_K: Sign extension 1",
  5360			.u.insns_int = {
  5361				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5362				BPF_LD_IMM64(R1, 0x00000000090b0d0fLL),
  5363				BPF_ALU64_IMM(BPF_AND, R0, 0x0f0f0f0f),
  5364				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  5365				BPF_MOV32_IMM(R0, 2),
  5366				BPF_EXIT_INSN(),
  5367				BPF_MOV32_IMM(R0, 1),
  5368				BPF_EXIT_INSN(),
  5369			},
  5370			INTERNAL,
  5371			{ },
  5372			{ { 0, 1 } }
  5373		},
  5374		{
  5375			"ALU64_AND_K: Sign extension 2",
  5376			.u.insns_int = {
  5377				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5378				BPF_LD_IMM64(R1, 0x0123456780a0c0e0LL),
  5379				BPF_ALU64_IMM(BPF_AND, R0, 0xf0f0f0f0),
  5380				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  5381				BPF_MOV32_IMM(R0, 2),
  5382				BPF_EXIT_INSN(),
  5383				BPF_MOV32_IMM(R0, 1),
  5384				BPF_EXIT_INSN(),
  5385			},
  5386			INTERNAL,
  5387			{ },
  5388			{ { 0, 1 } }
  5389		},
  5390		/* BPF_ALU | BPF_OR | BPF_X */
  5391		{
  5392			"ALU_OR_X: 1 | 2 = 3",
  5393			.u.insns_int = {
  5394				BPF_LD_IMM64(R0, 1),
  5395				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  5396				BPF_ALU32_REG(BPF_OR, R0, R1),
  5397				BPF_EXIT_INSN(),
  5398			},
  5399			INTERNAL,
  5400			{ },
  5401			{ { 0, 3 } },
  5402		},
  5403		{
  5404			"ALU_OR_X: 0x0 | 0xffffffff = 0xffffffff",
  5405			.u.insns_int = {
  5406				BPF_LD_IMM64(R0, 0),
  5407				BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
  5408				BPF_ALU32_REG(BPF_OR, R0, R1),
  5409				BPF_EXIT_INSN(),
  5410			},
  5411			INTERNAL,
  5412			{ },
  5413			{ { 0, 0xffffffff } },
  5414		},
  5415		{
  5416			"ALU64_OR_X: 1 | 2 = 3",
  5417			.u.insns_int = {
  5418				BPF_LD_IMM64(R0, 1),
  5419				BPF_ALU32_IMM(BPF_MOV, R1, 2),
  5420				BPF_ALU64_REG(BPF_OR, R0, R1),
  5421				BPF_EXIT_INSN(),
  5422			},
  5423			INTERNAL,
  5424			{ },
  5425			{ { 0, 3 } },
  5426		},
  5427		{
  5428			"ALU64_OR_X: 0 | 0xffffffff = 0xffffffff",
  5429			.u.insns_int = {
  5430				BPF_LD_IMM64(R0, 0),
  5431				BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
  5432				BPF_ALU64_REG(BPF_OR, R0, R1),
  5433				BPF_EXIT_INSN(),
  5434			},
  5435			INTERNAL,
  5436			{ },
  5437			{ { 0, 0xffffffff } },
  5438		},
  5439		/* BPF_ALU | BPF_OR | BPF_K */
  5440		{
  5441			"ALU_OR_K: 1 | 2 = 3",
  5442			.u.insns_int = {
  5443				BPF_LD_IMM64(R0, 1),
  5444				BPF_ALU32_IMM(BPF_OR, R0, 2),
  5445				BPF_EXIT_INSN(),
  5446			},
  5447			INTERNAL,
  5448			{ },
  5449			{ { 0, 3 } },
  5450		},
  5451		{
  5452			"ALU_OR_K: 0 & 0xffffffff = 0xffffffff",
  5453			.u.insns_int = {
  5454				BPF_LD_IMM64(R0, 0),
  5455				BPF_ALU32_IMM(BPF_OR, R0, 0xffffffff),
  5456				BPF_EXIT_INSN(),
  5457			},
  5458			INTERNAL,
  5459			{ },
  5460			{ { 0, 0xffffffff } },
  5461		},
  5462		{
  5463			"ALU_OR_K: Small immediate",
  5464			.u.insns_int = {
  5465				BPF_ALU32_IMM(BPF_MOV, R0, 0x01020304),
  5466				BPF_ALU32_IMM(BPF_OR, R0, 1),
  5467				BPF_EXIT_INSN(),
  5468			},
  5469			INTERNAL,
  5470			{ },
  5471			{ { 0, 0x01020305 } }
  5472		},
  5473		{
  5474			"ALU_OR_K: Large immediate",
  5475			.u.insns_int = {
  5476				BPF_ALU32_IMM(BPF_MOV, R0, 0x01020304),
  5477				BPF_ALU32_IMM(BPF_OR, R0, 0xa0b0c0d0),
  5478				BPF_EXIT_INSN(),
  5479			},
  5480			INTERNAL,
  5481			{ },
  5482			{ { 0, 0xa1b2c3d4 } }
  5483		},
  5484		{
  5485			"ALU_OR_K: Zero extension",
  5486			.u.insns_int = {
  5487				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5488				BPF_LD_IMM64(R1, 0x00000000f9fbfdffLL),
  5489				BPF_ALU32_IMM(BPF_OR, R0, 0xf0f0f0f0),
  5490				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  5491				BPF_MOV32_IMM(R0, 2),
  5492				BPF_EXIT_INSN(),
  5493				BPF_MOV32_IMM(R0, 1),
  5494				BPF_EXIT_INSN(),
  5495			},
  5496			INTERNAL,
  5497			{ },
  5498			{ { 0, 1 } }
  5499		},
  5500		{
  5501			"ALU64_OR_K: 1 | 2 = 3",
  5502			.u.insns_int = {
  5503				BPF_LD_IMM64(R0, 1),
  5504				BPF_ALU64_IMM(BPF_OR, R0, 2),
  5505				BPF_EXIT_INSN(),
  5506			},
  5507			INTERNAL,
  5508			{ },
  5509			{ { 0, 3 } },
  5510		},
  5511		{
  5512			"ALU64_OR_K: 0 & 0xffffffff = 0xffffffff",
  5513			.u.insns_int = {
  5514				BPF_LD_IMM64(R0, 0),
  5515				BPF_ALU64_IMM(BPF_OR, R0, 0xffffffff),
  5516				BPF_EXIT_INSN(),
  5517			},
  5518			INTERNAL,
  5519			{ },
  5520			{ { 0, 0xffffffff } },
  5521		},
  5522		{
  5523			"ALU64_OR_K: 0x0000ffffffff0000 | 0x0 = 0x0000ffffffff0000",
  5524			.u.insns_int = {
  5525				BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
  5526				BPF_LD_IMM64(R3, 0x0000ffffffff0000LL),
  5527				BPF_ALU64_IMM(BPF_OR, R2, 0x0),
  5528				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5529				BPF_MOV32_IMM(R0, 2),
  5530				BPF_EXIT_INSN(),
  5531				BPF_MOV32_IMM(R0, 1),
  5532				BPF_EXIT_INSN(),
  5533			},
  5534			INTERNAL,
  5535			{ },
  5536			{ { 0, 0x1 } },
  5537		},
  5538		{
  5539			"ALU64_OR_K: 0x0000ffffffff0000 | -1 = 0xffffffffffffffff",
  5540			.u.insns_int = {
  5541				BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
  5542				BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
  5543				BPF_ALU64_IMM(BPF_OR, R2, 0xffffffff),
  5544				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5545				BPF_MOV32_IMM(R0, 2),
  5546				BPF_EXIT_INSN(),
  5547				BPF_MOV32_IMM(R0, 1),
  5548				BPF_EXIT_INSN(),
  5549			},
  5550			INTERNAL,
  5551			{ },
  5552			{ { 0, 0x1 } },
  5553		},
  5554		{
  5555			"ALU64_OR_K: 0x000000000000000 | -1 = 0xffffffffffffffff",
  5556			.u.insns_int = {
  5557				BPF_LD_IMM64(R2, 0x0000000000000000LL),
  5558				BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
  5559				BPF_ALU64_IMM(BPF_OR, R2, 0xffffffff),
  5560				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5561				BPF_MOV32_IMM(R0, 2),
  5562				BPF_EXIT_INSN(),
  5563				BPF_MOV32_IMM(R0, 1),
  5564				BPF_EXIT_INSN(),
  5565			},
  5566			INTERNAL,
  5567			{ },
  5568			{ { 0, 0x1 } },
  5569		},
  5570		{
  5571			"ALU64_OR_K: Sign extension 1",
  5572			.u.insns_int = {
  5573				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5574				BPF_LD_IMM64(R1, 0x012345678fafcfefLL),
  5575				BPF_ALU64_IMM(BPF_OR, R0, 0x0f0f0f0f),
  5576				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  5577				BPF_MOV32_IMM(R0, 2),
  5578				BPF_EXIT_INSN(),
  5579				BPF_MOV32_IMM(R0, 1),
  5580				BPF_EXIT_INSN(),
  5581			},
  5582			INTERNAL,
  5583			{ },
  5584			{ { 0, 1 } }
  5585		},
  5586		{
  5587			"ALU64_OR_K: Sign extension 2",
  5588			.u.insns_int = {
  5589				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5590				BPF_LD_IMM64(R1, 0xfffffffff9fbfdffLL),
  5591				BPF_ALU64_IMM(BPF_OR, R0, 0xf0f0f0f0),
  5592				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  5593				BPF_MOV32_IMM(R0, 2),
  5594				BPF_EXIT_INSN(),
  5595				BPF_MOV32_IMM(R0, 1),
  5596				BPF_EXIT_INSN(),
  5597			},
  5598			INTERNAL,
  5599			{ },
  5600			{ { 0, 1 } }
  5601		},
  5602		/* BPF_ALU | BPF_XOR | BPF_X */
  5603		{
  5604			"ALU_XOR_X: 5 ^ 6 = 3",
  5605			.u.insns_int = {
  5606				BPF_LD_IMM64(R0, 5),
  5607				BPF_ALU32_IMM(BPF_MOV, R1, 6),
  5608				BPF_ALU32_REG(BPF_XOR, R0, R1),
  5609				BPF_EXIT_INSN(),
  5610			},
  5611			INTERNAL,
  5612			{ },
  5613			{ { 0, 3 } },
  5614		},
  5615		{
  5616			"ALU_XOR_X: 0x1 ^ 0xffffffff = 0xfffffffe",
  5617			.u.insns_int = {
  5618				BPF_LD_IMM64(R0, 1),
  5619				BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
  5620				BPF_ALU32_REG(BPF_XOR, R0, R1),
  5621				BPF_EXIT_INSN(),
  5622			},
  5623			INTERNAL,
  5624			{ },
  5625			{ { 0, 0xfffffffe } },
  5626		},
  5627		{
  5628			"ALU64_XOR_X: 5 ^ 6 = 3",
  5629			.u.insns_int = {
  5630				BPF_LD_IMM64(R0, 5),
  5631				BPF_ALU32_IMM(BPF_MOV, R1, 6),
  5632				BPF_ALU64_REG(BPF_XOR, R0, R1),
  5633				BPF_EXIT_INSN(),
  5634			},
  5635			INTERNAL,
  5636			{ },
  5637			{ { 0, 3 } },
  5638		},
  5639		{
  5640			"ALU64_XOR_X: 1 ^ 0xffffffff = 0xfffffffe",
  5641			.u.insns_int = {
  5642				BPF_LD_IMM64(R0, 1),
  5643				BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
  5644				BPF_ALU64_REG(BPF_XOR, R0, R1),
  5645				BPF_EXIT_INSN(),
  5646			},
  5647			INTERNAL,
  5648			{ },
  5649			{ { 0, 0xfffffffe } },
  5650		},
  5651		/* BPF_ALU | BPF_XOR | BPF_K */
  5652		{
  5653			"ALU_XOR_K: 5 ^ 6 = 3",
  5654			.u.insns_int = {
  5655				BPF_LD_IMM64(R0, 5),
  5656				BPF_ALU32_IMM(BPF_XOR, R0, 6),
  5657				BPF_EXIT_INSN(),
  5658			},
  5659			INTERNAL,
  5660			{ },
  5661			{ { 0, 3 } },
  5662		},
  5663		{
  5664			"ALU_XOR_K: 1 ^ 0xffffffff = 0xfffffffe",
  5665			.u.insns_int = {
  5666				BPF_LD_IMM64(R0, 1),
  5667				BPF_ALU32_IMM(BPF_XOR, R0, 0xffffffff),
  5668				BPF_EXIT_INSN(),
  5669			},
  5670			INTERNAL,
  5671			{ },
  5672			{ { 0, 0xfffffffe } },
  5673		},
  5674		{
  5675			"ALU_XOR_K: Small immediate",
  5676			.u.insns_int = {
  5677				BPF_ALU32_IMM(BPF_MOV, R0, 0x01020304),
  5678				BPF_ALU32_IMM(BPF_XOR, R0, 15),
  5679				BPF_EXIT_INSN(),
  5680			},
  5681			INTERNAL,
  5682			{ },
  5683			{ { 0, 0x0102030b } }
  5684		},
  5685		{
  5686			"ALU_XOR_K: Large immediate",
  5687			.u.insns_int = {
  5688				BPF_ALU32_IMM(BPF_MOV, R0, 0xf1f2f3f4),
  5689				BPF_ALU32_IMM(BPF_XOR, R0, 0xafbfcfdf),
  5690				BPF_EXIT_INSN(),
  5691			},
  5692			INTERNAL,
  5693			{ },
  5694			{ { 0, 0x5e4d3c2b } }
  5695		},
  5696		{
  5697			"ALU_XOR_K: Zero extension",
  5698			.u.insns_int = {
  5699				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5700				BPF_LD_IMM64(R1, 0x00000000795b3d1fLL),
  5701				BPF_ALU32_IMM(BPF_XOR, R0, 0xf0f0f0f0),
  5702				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  5703				BPF_MOV32_IMM(R0, 2),
  5704				BPF_EXIT_INSN(),
  5705				BPF_MOV32_IMM(R0, 1),
  5706				BPF_EXIT_INSN(),
  5707			},
  5708			INTERNAL,
  5709			{ },
  5710			{ { 0, 1 } }
  5711		},
  5712		{
  5713			"ALU64_XOR_K: 5 ^ 6 = 3",
  5714			.u.insns_int = {
  5715				BPF_LD_IMM64(R0, 5),
  5716				BPF_ALU64_IMM(BPF_XOR, R0, 6),
  5717				BPF_EXIT_INSN(),
  5718			},
  5719			INTERNAL,
  5720			{ },
  5721			{ { 0, 3 } },
  5722		},
  5723		{
  5724			"ALU64_XOR_K: 1 ^ 0xffffffff = 0xfffffffe",
  5725			.u.insns_int = {
  5726				BPF_LD_IMM64(R0, 1),
  5727				BPF_ALU64_IMM(BPF_XOR, R0, 0xffffffff),
  5728				BPF_EXIT_INSN(),
  5729			},
  5730			INTERNAL,
  5731			{ },
  5732			{ { 0, 0xfffffffe } },
  5733		},
  5734		{
  5735			"ALU64_XOR_K: 0x0000ffffffff0000 ^ 0x0 = 0x0000ffffffff0000",
  5736			.u.insns_int = {
  5737				BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
  5738				BPF_LD_IMM64(R3, 0x0000ffffffff0000LL),
  5739				BPF_ALU64_IMM(BPF_XOR, R2, 0x0),
  5740				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5741				BPF_MOV32_IMM(R0, 2),
  5742				BPF_EXIT_INSN(),
  5743				BPF_MOV32_IMM(R0, 1),
  5744				BPF_EXIT_INSN(),
  5745			},
  5746			INTERNAL,
  5747			{ },
  5748			{ { 0, 0x1 } },
  5749		},
  5750		{
  5751			"ALU64_XOR_K: 0x0000ffffffff0000 ^ -1 = 0xffff00000000ffff",
  5752			.u.insns_int = {
  5753				BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
  5754				BPF_LD_IMM64(R3, 0xffff00000000ffffLL),
  5755				BPF_ALU64_IMM(BPF_XOR, R2, 0xffffffff),
  5756				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5757				BPF_MOV32_IMM(R0, 2),
  5758				BPF_EXIT_INSN(),
  5759				BPF_MOV32_IMM(R0, 1),
  5760				BPF_EXIT_INSN(),
  5761			},
  5762			INTERNAL,
  5763			{ },
  5764			{ { 0, 0x1 } },
  5765		},
  5766		{
  5767			"ALU64_XOR_K: 0x000000000000000 ^ -1 = 0xffffffffffffffff",
  5768			.u.insns_int = {
  5769				BPF_LD_IMM64(R2, 0x0000000000000000LL),
  5770				BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
  5771				BPF_ALU64_IMM(BPF_XOR, R2, 0xffffffff),
  5772				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  5773				BPF_MOV32_IMM(R0, 2),
  5774				BPF_EXIT_INSN(),
  5775				BPF_MOV32_IMM(R0, 1),
  5776				BPF_EXIT_INSN(),
  5777			},
  5778			INTERNAL,
  5779			{ },
  5780			{ { 0, 0x1 } },
  5781		},
  5782		{
  5783			"ALU64_XOR_K: Sign extension 1",
  5784			.u.insns_int = {
  5785				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5786				BPF_LD_IMM64(R1, 0x0123456786a4c2e0LL),
  5787				BPF_ALU64_IMM(BPF_XOR, R0, 0x0f0f0f0f),
  5788				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  5789				BPF_MOV32_IMM(R0, 2),
  5790				BPF_EXIT_INSN(),
  5791				BPF_MOV32_IMM(R0, 1),
  5792				BPF_EXIT_INSN(),
  5793			},
  5794			INTERNAL,
  5795			{ },
  5796			{ { 0, 1 } }
  5797		},
  5798		{
  5799			"ALU64_XOR_K: Sign extension 2",
  5800			.u.insns_int = {
  5801				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5802				BPF_LD_IMM64(R1, 0xfedcba98795b3d1fLL),
  5803				BPF_ALU64_IMM(BPF_XOR, R0, 0xf0f0f0f0),
  5804				BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
  5805				BPF_MOV32_IMM(R0, 2),
  5806				BPF_EXIT_INSN(),
  5807				BPF_MOV32_IMM(R0, 1),
  5808				BPF_EXIT_INSN(),
  5809			},
  5810			INTERNAL,
  5811			{ },
  5812			{ { 0, 1 } }
  5813		},
  5814		/* BPF_ALU | BPF_LSH | BPF_X */
  5815		{
  5816			"ALU_LSH_X: 1 << 1 = 2",
  5817			.u.insns_int = {
  5818				BPF_LD_IMM64(R0, 1),
  5819				BPF_ALU32_IMM(BPF_MOV, R1, 1),
  5820				BPF_ALU32_REG(BPF_LSH, R0, R1),
  5821				BPF_EXIT_INSN(),
  5822			},
  5823			INTERNAL,
  5824			{ },
  5825			{ { 0, 2 } },
  5826		},
  5827		{
  5828			"ALU_LSH_X: 1 << 31 = 0x80000000",
  5829			.u.insns_int = {
  5830				BPF_LD_IMM64(R0, 1),
  5831				BPF_ALU32_IMM(BPF_MOV, R1, 31),
  5832				BPF_ALU32_REG(BPF_LSH, R0, R1),
  5833				BPF_EXIT_INSN(),
  5834			},
  5835			INTERNAL,
  5836			{ },
  5837			{ { 0, 0x80000000 } },
  5838		},
  5839		{
  5840			"ALU_LSH_X: 0x12345678 << 12 = 0x45678000",
  5841			.u.insns_int = {
  5842				BPF_ALU32_IMM(BPF_MOV, R0, 0x12345678),
  5843				BPF_ALU32_IMM(BPF_MOV, R1, 12),
  5844				BPF_ALU32_REG(BPF_LSH, R0, R1),
  5845				BPF_EXIT_INSN(),
  5846			},
  5847			INTERNAL,
  5848			{ },
  5849			{ { 0, 0x45678000 } }
  5850		},
  5851		{
  5852			"ALU64_LSH_X: 1 << 1 = 2",
  5853			.u.insns_int = {
  5854				BPF_LD_IMM64(R0, 1),
  5855				BPF_ALU32_IMM(BPF_MOV, R1, 1),
  5856				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5857				BPF_EXIT_INSN(),
  5858			},
  5859			INTERNAL,
  5860			{ },
  5861			{ { 0, 2 } },
  5862		},
  5863		{
  5864			"ALU64_LSH_X: 1 << 31 = 0x80000000",
  5865			.u.insns_int = {
  5866				BPF_LD_IMM64(R0, 1),
  5867				BPF_ALU32_IMM(BPF_MOV, R1, 31),
  5868				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5869				BPF_EXIT_INSN(),
  5870			},
  5871			INTERNAL,
  5872			{ },
  5873			{ { 0, 0x80000000 } },
  5874		},
  5875		{
  5876			"ALU64_LSH_X: Shift < 32, low word",
  5877			.u.insns_int = {
  5878				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5879				BPF_ALU32_IMM(BPF_MOV, R1, 12),
  5880				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5881				BPF_EXIT_INSN(),
  5882			},
  5883			INTERNAL,
  5884			{ },
  5885			{ { 0, 0xbcdef000 } }
  5886		},
  5887		{
  5888			"ALU64_LSH_X: Shift < 32, high word",
  5889			.u.insns_int = {
  5890				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5891				BPF_ALU32_IMM(BPF_MOV, R1, 12),
  5892				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5893				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  5894				BPF_EXIT_INSN(),
  5895			},
  5896			INTERNAL,
  5897			{ },
  5898			{ { 0, 0x3456789a } }
  5899		},
  5900		{
  5901			"ALU64_LSH_X: Shift > 32, low word",
  5902			.u.insns_int = {
  5903				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5904				BPF_ALU32_IMM(BPF_MOV, R1, 36),
  5905				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5906				BPF_EXIT_INSN(),
  5907			},
  5908			INTERNAL,
  5909			{ },
  5910			{ { 0, 0 } }
  5911		},
  5912		{
  5913			"ALU64_LSH_X: Shift > 32, high word",
  5914			.u.insns_int = {
  5915				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5916				BPF_ALU32_IMM(BPF_MOV, R1, 36),
  5917				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5918				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  5919				BPF_EXIT_INSN(),
  5920			},
  5921			INTERNAL,
  5922			{ },
  5923			{ { 0, 0x9abcdef0 } }
  5924		},
  5925		{
  5926			"ALU64_LSH_X: Shift == 32, low word",
  5927			.u.insns_int = {
  5928				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5929				BPF_ALU32_IMM(BPF_MOV, R1, 32),
  5930				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5931				BPF_EXIT_INSN(),
  5932			},
  5933			INTERNAL,
  5934			{ },
  5935			{ { 0, 0 } }
  5936		},
  5937		{
  5938			"ALU64_LSH_X: Shift == 32, high word",
  5939			.u.insns_int = {
  5940				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5941				BPF_ALU32_IMM(BPF_MOV, R1, 32),
  5942				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5943				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  5944				BPF_EXIT_INSN(),
  5945			},
  5946			INTERNAL,
  5947			{ },
  5948			{ { 0, 0x89abcdef } }
  5949		},
  5950		{
  5951			"ALU64_LSH_X: Zero shift, low word",
  5952			.u.insns_int = {
  5953				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5954				BPF_ALU32_IMM(BPF_MOV, R1, 0),
  5955				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5956				BPF_EXIT_INSN(),
  5957			},
  5958			INTERNAL,
  5959			{ },
  5960			{ { 0, 0x89abcdef } }
  5961		},
  5962		{
  5963			"ALU64_LSH_X: Zero shift, high word",
  5964			.u.insns_int = {
  5965				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  5966				BPF_ALU32_IMM(BPF_MOV, R1, 0),
  5967				BPF_ALU64_REG(BPF_LSH, R0, R1),
  5968				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  5969				BPF_EXIT_INSN(),
  5970			},
  5971			INTERNAL,
  5972			{ },
  5973			{ { 0, 0x01234567 } }
  5974		},
  5975		/* BPF_ALU | BPF_LSH | BPF_K */
  5976		{
  5977			"ALU_LSH_K: 1 << 1 = 2",
  5978			.u.insns_int = {
  5979				BPF_LD_IMM64(R0, 1),
  5980				BPF_ALU32_IMM(BPF_LSH, R0, 1),
  5981				BPF_EXIT_INSN(),
  5982			},
  5983			INTERNAL,
  5984			{ },
  5985			{ { 0, 2 } },
  5986		},
  5987		{
  5988			"ALU_LSH_K: 1 << 31 = 0x80000000",
  5989			.u.insns_int = {
  5990				BPF_LD_IMM64(R0, 1),
  5991				BPF_ALU32_IMM(BPF_LSH, R0, 31),
  5992				BPF_EXIT_INSN(),
  5993			},
  5994			INTERNAL,
  5995			{ },
  5996			{ { 0, 0x80000000 } },
  5997		},
  5998		{
  5999			"ALU_LSH_K: 0x12345678 << 12 = 0x45678000",
  6000			.u.insns_int = {
  6001				BPF_ALU32_IMM(BPF_MOV, R0, 0x12345678),
  6002				BPF_ALU32_IMM(BPF_LSH, R0, 12),
  6003				BPF_EXIT_INSN(),
  6004			},
  6005			INTERNAL,
  6006			{ },
  6007			{ { 0, 0x45678000 } }
  6008		},
  6009		{
  6010			"ALU_LSH_K: 0x12345678 << 0 = 0x12345678",
  6011			.u.insns_int = {
  6012				BPF_ALU32_IMM(BPF_MOV, R0, 0x12345678),
  6013				BPF_ALU32_IMM(BPF_LSH, R0, 0),
  6014				BPF_EXIT_INSN(),
  6015			},
  6016			INTERNAL,
  6017			{ },
  6018			{ { 0, 0x12345678 } }
  6019		},
  6020		{
  6021			"ALU64_LSH_K: 1 << 1 = 2",
  6022			.u.insns_int = {
  6023				BPF_LD_IMM64(R0, 1),
  6024				BPF_ALU64_IMM(BPF_LSH, R0, 1),
  6025				BPF_EXIT_INSN(),
  6026			},
  6027			INTERNAL,
  6028			{ },
  6029			{ { 0, 2 } },
  6030		},
  6031		{
  6032			"ALU64_LSH_K: 1 << 31 = 0x80000000",
  6033			.u.insns_int = {
  6034				BPF_LD_IMM64(R0, 1),
  6035				BPF_ALU64_IMM(BPF_LSH, R0, 31),
  6036				BPF_EXIT_INSN(),
  6037			},
  6038			INTERNAL,
  6039			{ },
  6040			{ { 0, 0x80000000 } },
  6041		},
  6042		{
  6043			"ALU64_LSH_K: Shift < 32, low word",
  6044			.u.insns_int = {
  6045				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6046				BPF_ALU64_IMM(BPF_LSH, R0, 12),
  6047				BPF_EXIT_INSN(),
  6048			},
  6049			INTERNAL,
  6050			{ },
  6051			{ { 0, 0xbcdef000 } }
  6052		},
  6053		{
  6054			"ALU64_LSH_K: Shift < 32, high word",
  6055			.u.insns_int = {
  6056				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6057				BPF_ALU64_IMM(BPF_LSH, R0, 12),
  6058				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6059				BPF_EXIT_INSN(),
  6060			},
  6061			INTERNAL,
  6062			{ },
  6063			{ { 0, 0x3456789a } }
  6064		},
  6065		{
  6066			"ALU64_LSH_K: Shift > 32, low word",
  6067			.u.insns_int = {
  6068				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6069				BPF_ALU64_IMM(BPF_LSH, R0, 36),
  6070				BPF_EXIT_INSN(),
  6071			},
  6072			INTERNAL,
  6073			{ },
  6074			{ { 0, 0 } }
  6075		},
  6076		{
  6077			"ALU64_LSH_K: Shift > 32, high word",
  6078			.u.insns_int = {
  6079				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6080				BPF_ALU64_IMM(BPF_LSH, R0, 36),
  6081				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6082				BPF_EXIT_INSN(),
  6083			},
  6084			INTERNAL,
  6085			{ },
  6086			{ { 0, 0x9abcdef0 } }
  6087		},
  6088		{
  6089			"ALU64_LSH_K: Shift == 32, low word",
  6090			.u.insns_int = {
  6091				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6092				BPF_ALU64_IMM(BPF_LSH, R0, 32),
  6093				BPF_EXIT_INSN(),
  6094			},
  6095			INTERNAL,
  6096			{ },
  6097			{ { 0, 0 } }
  6098		},
  6099		{
  6100			"ALU64_LSH_K: Shift == 32, high word",
  6101			.u.insns_int = {
  6102				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6103				BPF_ALU64_IMM(BPF_LSH, R0, 32),
  6104				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6105				BPF_EXIT_INSN(),
  6106			},
  6107			INTERNAL,
  6108			{ },
  6109			{ { 0, 0x89abcdef } }
  6110		},
  6111		{
  6112			"ALU64_LSH_K: Zero shift",
  6113			.u.insns_int = {
  6114				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6115				BPF_ALU64_IMM(BPF_LSH, R0, 0),
  6116				BPF_EXIT_INSN(),
  6117			},
  6118			INTERNAL,
  6119			{ },
  6120			{ { 0, 0x89abcdef } }
  6121		},
  6122		/* BPF_ALU | BPF_RSH | BPF_X */
  6123		{
  6124			"ALU_RSH_X: 2 >> 1 = 1",
  6125			.u.insns_int = {
  6126				BPF_LD_IMM64(R0, 2),
  6127				BPF_ALU32_IMM(BPF_MOV, R1, 1),
  6128				BPF_ALU32_REG(BPF_RSH, R0, R1),
  6129				BPF_EXIT_INSN(),
  6130			},
  6131			INTERNAL,
  6132			{ },
  6133			{ { 0, 1 } },
  6134		},
  6135		{
  6136			"ALU_RSH_X: 0x80000000 >> 31 = 1",
  6137			.u.insns_int = {
  6138				BPF_LD_IMM64(R0, 0x80000000),
  6139				BPF_ALU32_IMM(BPF_MOV, R1, 31),
  6140				BPF_ALU32_REG(BPF_RSH, R0, R1),
  6141				BPF_EXIT_INSN(),
  6142			},
  6143			INTERNAL,
  6144			{ },
  6145			{ { 0, 1 } },
  6146		},
  6147		{
  6148			"ALU_RSH_X: 0x12345678 >> 20 = 0x123",
  6149			.u.insns_int = {
  6150				BPF_ALU32_IMM(BPF_MOV, R0, 0x12345678),
  6151				BPF_ALU32_IMM(BPF_MOV, R1, 20),
  6152				BPF_ALU32_REG(BPF_RSH, R0, R1),
  6153				BPF_EXIT_INSN(),
  6154			},
  6155			INTERNAL,
  6156			{ },
  6157			{ { 0, 0x123 } }
  6158		},
  6159		{
  6160			"ALU64_RSH_X: 2 >> 1 = 1",
  6161			.u.insns_int = {
  6162				BPF_LD_IMM64(R0, 2),
  6163				BPF_ALU32_IMM(BPF_MOV, R1, 1),
  6164				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6165				BPF_EXIT_INSN(),
  6166			},
  6167			INTERNAL,
  6168			{ },
  6169			{ { 0, 1 } },
  6170		},
  6171		{
  6172			"ALU64_RSH_X: 0x80000000 >> 31 = 1",
  6173			.u.insns_int = {
  6174				BPF_LD_IMM64(R0, 0x80000000),
  6175				BPF_ALU32_IMM(BPF_MOV, R1, 31),
  6176				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6177				BPF_EXIT_INSN(),
  6178			},
  6179			INTERNAL,
  6180			{ },
  6181			{ { 0, 1 } },
  6182		},
  6183		{
  6184			"ALU64_RSH_X: Shift < 32, low word",
  6185			.u.insns_int = {
  6186				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6187				BPF_ALU32_IMM(BPF_MOV, R1, 12),
  6188				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6189				BPF_EXIT_INSN(),
  6190			},
  6191			INTERNAL,
  6192			{ },
  6193			{ { 0, 0x56789abc } }
  6194		},
  6195		{
  6196			"ALU64_RSH_X: Shift < 32, high word",
  6197			.u.insns_int = {
  6198				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6199				BPF_ALU32_IMM(BPF_MOV, R1, 12),
  6200				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6201				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6202				BPF_EXIT_INSN(),
  6203			},
  6204			INTERNAL,
  6205			{ },
  6206			{ { 0, 0x00081234 } }
  6207		},
  6208		{
  6209			"ALU64_RSH_X: Shift > 32, low word",
  6210			.u.insns_int = {
  6211				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6212				BPF_ALU32_IMM(BPF_MOV, R1, 36),
  6213				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6214				BPF_EXIT_INSN(),
  6215			},
  6216			INTERNAL,
  6217			{ },
  6218			{ { 0, 0x08123456 } }
  6219		},
  6220		{
  6221			"ALU64_RSH_X: Shift > 32, high word",
  6222			.u.insns_int = {
  6223				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6224				BPF_ALU32_IMM(BPF_MOV, R1, 36),
  6225				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6226				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6227				BPF_EXIT_INSN(),
  6228			},
  6229			INTERNAL,
  6230			{ },
  6231			{ { 0, 0 } }
  6232		},
  6233		{
  6234			"ALU64_RSH_X: Shift == 32, low word",
  6235			.u.insns_int = {
  6236				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6237				BPF_ALU32_IMM(BPF_MOV, R1, 32),
  6238				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6239				BPF_EXIT_INSN(),
  6240			},
  6241			INTERNAL,
  6242			{ },
  6243			{ { 0, 0x81234567 } }
  6244		},
  6245		{
  6246			"ALU64_RSH_X: Shift == 32, high word",
  6247			.u.insns_int = {
  6248				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6249				BPF_ALU32_IMM(BPF_MOV, R1, 32),
  6250				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6251				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6252				BPF_EXIT_INSN(),
  6253			},
  6254			INTERNAL,
  6255			{ },
  6256			{ { 0, 0 } }
  6257		},
  6258		{
  6259			"ALU64_RSH_X: Zero shift, low word",
  6260			.u.insns_int = {
  6261				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6262				BPF_ALU32_IMM(BPF_MOV, R1, 0),
  6263				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6264				BPF_EXIT_INSN(),
  6265			},
  6266			INTERNAL,
  6267			{ },
  6268			{ { 0, 0x89abcdef } }
  6269		},
  6270		{
  6271			"ALU64_RSH_X: Zero shift, high word",
  6272			.u.insns_int = {
  6273				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6274				BPF_ALU32_IMM(BPF_MOV, R1, 0),
  6275				BPF_ALU64_REG(BPF_RSH, R0, R1),
  6276				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6277				BPF_EXIT_INSN(),
  6278			},
  6279			INTERNAL,
  6280			{ },
  6281			{ { 0, 0x81234567 } }
  6282		},
  6283		/* BPF_ALU | BPF_RSH | BPF_K */
  6284		{
  6285			"ALU_RSH_K: 2 >> 1 = 1",
  6286			.u.insns_int = {
  6287				BPF_LD_IMM64(R0, 2),
  6288				BPF_ALU32_IMM(BPF_RSH, R0, 1),
  6289				BPF_EXIT_INSN(),
  6290			},
  6291			INTERNAL,
  6292			{ },
  6293			{ { 0, 1 } },
  6294		},
  6295		{
  6296			"ALU_RSH_K: 0x80000000 >> 31 = 1",
  6297			.u.insns_int = {
  6298				BPF_LD_IMM64(R0, 0x80000000),
  6299				BPF_ALU32_IMM(BPF_RSH, R0, 31),
  6300				BPF_EXIT_INSN(),
  6301			},
  6302			INTERNAL,
  6303			{ },
  6304			{ { 0, 1 } },
  6305		},
  6306		{
  6307			"ALU_RSH_K: 0x12345678 >> 20 = 0x123",
  6308			.u.insns_int = {
  6309				BPF_ALU32_IMM(BPF_MOV, R0, 0x12345678),
  6310				BPF_ALU32_IMM(BPF_RSH, R0, 20),
  6311				BPF_EXIT_INSN(),
  6312			},
  6313			INTERNAL,
  6314			{ },
  6315			{ { 0, 0x123 } }
  6316		},
  6317		{
  6318			"ALU_RSH_K: 0x12345678 >> 0 = 0x12345678",
  6319			.u.insns_int = {
  6320				BPF_ALU32_IMM(BPF_MOV, R0, 0x12345678),
  6321				BPF_ALU32_IMM(BPF_RSH, R0, 0),
  6322				BPF_EXIT_INSN(),
  6323			},
  6324			INTERNAL,
  6325			{ },
  6326			{ { 0, 0x12345678 } }
  6327		},
  6328		{
  6329			"ALU64_RSH_K: 2 >> 1 = 1",
  6330			.u.insns_int = {
  6331				BPF_LD_IMM64(R0, 2),
  6332				BPF_ALU64_IMM(BPF_RSH, R0, 1),
  6333				BPF_EXIT_INSN(),
  6334			},
  6335			INTERNAL,
  6336			{ },
  6337			{ { 0, 1 } },
  6338		},
  6339		{
  6340			"ALU64_RSH_K: 0x80000000 >> 31 = 1",
  6341			.u.insns_int = {
  6342				BPF_LD_IMM64(R0, 0x80000000),
  6343				BPF_ALU64_IMM(BPF_RSH, R0, 31),
  6344				BPF_EXIT_INSN(),
  6345			},
  6346			INTERNAL,
  6347			{ },
  6348			{ { 0, 1 } },
  6349		},
  6350		{
  6351			"ALU64_RSH_K: Shift < 32, low word",
  6352			.u.insns_int = {
  6353				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6354				BPF_ALU64_IMM(BPF_RSH, R0, 12),
  6355				BPF_EXIT_INSN(),
  6356			},
  6357			INTERNAL,
  6358			{ },
  6359			{ { 0, 0x56789abc } }
  6360		},
  6361		{
  6362			"ALU64_RSH_K: Shift < 32, high word",
  6363			.u.insns_int = {
  6364				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6365				BPF_ALU64_IMM(BPF_RSH, R0, 12),
  6366				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6367				BPF_EXIT_INSN(),
  6368			},
  6369			INTERNAL,
  6370			{ },
  6371			{ { 0, 0x00081234 } }
  6372		},
  6373		{
  6374			"ALU64_RSH_K: Shift > 32, low word",
  6375			.u.insns_int = {
  6376				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6377				BPF_ALU64_IMM(BPF_RSH, R0, 36),
  6378				BPF_EXIT_INSN(),
  6379			},
  6380			INTERNAL,
  6381			{ },
  6382			{ { 0, 0x08123456 } }
  6383		},
  6384		{
  6385			"ALU64_RSH_K: Shift > 32, high word",
  6386			.u.insns_int = {
  6387				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6388				BPF_ALU64_IMM(BPF_RSH, R0, 36),
  6389				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6390				BPF_EXIT_INSN(),
  6391			},
  6392			INTERNAL,
  6393			{ },
  6394			{ { 0, 0 } }
  6395		},
  6396		{
  6397			"ALU64_RSH_K: Shift == 32, low word",
  6398			.u.insns_int = {
  6399				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6400				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6401				BPF_EXIT_INSN(),
  6402			},
  6403			INTERNAL,
  6404			{ },
  6405			{ { 0, 0x81234567 } }
  6406		},
  6407		{
  6408			"ALU64_RSH_K: Shift == 32, high word",
  6409			.u.insns_int = {
  6410				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6411				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6412				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6413				BPF_EXIT_INSN(),
  6414			},
  6415			INTERNAL,
  6416			{ },
  6417			{ { 0, 0 } }
  6418		},
  6419		{
  6420			"ALU64_RSH_K: Zero shift",
  6421			.u.insns_int = {
  6422				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6423				BPF_ALU64_IMM(BPF_RSH, R0, 0),
  6424				BPF_EXIT_INSN(),
  6425			},
  6426			INTERNAL,
  6427			{ },
  6428			{ { 0, 0x89abcdef } }
  6429		},
  6430		/* BPF_ALU | BPF_ARSH | BPF_X */
  6431		{
  6432			"ALU32_ARSH_X: -1234 >> 7 = -10",
  6433			.u.insns_int = {
  6434				BPF_ALU32_IMM(BPF_MOV, R0, -1234),
  6435				BPF_ALU32_IMM(BPF_MOV, R1, 7),
  6436				BPF_ALU32_REG(BPF_ARSH, R0, R1),
  6437				BPF_EXIT_INSN(),
  6438			},
  6439			INTERNAL,
  6440			{ },
  6441			{ { 0, -10 } }
  6442		},
  6443		{
  6444			"ALU64_ARSH_X: 0xff00ff0000000000 >> 40 = 0xffffffffffff00ff",
  6445			.u.insns_int = {
  6446				BPF_LD_IMM64(R0, 0xff00ff0000000000LL),
  6447				BPF_ALU32_IMM(BPF_MOV, R1, 40),
  6448				BPF_ALU64_REG(BPF_ARSH, R0, R1),
  6449				BPF_EXIT_INSN(),
  6450			},
  6451			INTERNAL,
  6452			{ },
  6453			{ { 0, 0xffff00ff } },
  6454		},
  6455		{
  6456			"ALU64_ARSH_X: Shift < 32, low word",
  6457			.u.insns_int = {
  6458				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6459				BPF_ALU32_IMM(BPF_MOV, R1, 12),
  6460				BPF_ALU64_REG(BPF_ARSH, R0, R1),
  6461				BPF_EXIT_INSN(),
  6462			},
  6463			INTERNAL,
  6464			{ },
  6465			{ { 0, 0x56789abc } }
  6466		},
  6467		{
  6468			"ALU64_ARSH_X: Shift < 32, high word",
  6469			.u.insns_int = {
  6470				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6471				BPF_ALU32_IMM(BPF_MOV, R1, 12),
  6472				BPF_ALU64_REG(BPF_ARSH, R0, R1),
  6473				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6474				BPF_EXIT_INSN(),
  6475			},
  6476			INTERNAL,
  6477			{ },
  6478			{ { 0, 0xfff81234 } }
  6479		},
  6480		{
  6481			"ALU64_ARSH_X: Shift > 32, low word",
  6482			.u.insns_int = {
  6483				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6484				BPF_ALU32_IMM(BPF_MOV, R1, 36),
  6485				BPF_ALU64_REG(BPF_ARSH, R0, R1),
  6486				BPF_EXIT_INSN(),
  6487			},
  6488			INTERNAL,
  6489			{ },
  6490			{ { 0, 0xf8123456 } }
  6491		},
  6492		{
  6493			"ALU64_ARSH_X: Shift > 32, high word",
  6494			.u.insns_int = {
  6495				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6496				BPF_ALU32_IMM(BPF_MOV, R1, 36),
  6497				BPF_ALU64_REG(BPF_ARSH, R0, R1),
  6498				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6499				BPF_EXIT_INSN(),
  6500			},
  6501			INTERNAL,
  6502			{ },
  6503			{ { 0, -1 } }
  6504		},
  6505		{
  6506			"ALU64_ARSH_X: Shift == 32, low word",
  6507			.u.insns_int = {
  6508				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6509				BPF_ALU32_IMM(BPF_MOV, R1, 32),
  6510				BPF_ALU64_REG(BPF_ARSH, R0, R1),
  6511				BPF_EXIT_INSN(),
  6512			},
  6513			INTERNAL,
  6514			{ },
  6515			{ { 0, 0x81234567 } }
  6516		},
  6517		{
  6518			"ALU64_ARSH_X: Shift == 32, high word",
  6519			.u.insns_int = {
  6520				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6521				BPF_ALU32_IMM(BPF_MOV, R1, 32),
  6522				BPF_ALU64_REG(BPF_ARSH, R0, R1),
  6523				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6524				BPF_EXIT_INSN(),
  6525			},
  6526			INTERNAL,
  6527			{ },
  6528			{ { 0, -1 } }
  6529		},
  6530		{
  6531			"ALU64_ARSH_X: Zero shift, low word",
  6532			.u.insns_int = {
  6533				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6534				BPF_ALU32_IMM(BPF_MOV, R1, 0),
  6535				BPF_ALU64_REG(BPF_ARSH, R0, R1),
  6536				BPF_EXIT_INSN(),
  6537			},
  6538			INTERNAL,
  6539			{ },
  6540			{ { 0, 0x89abcdef } }
  6541		},
  6542		{
  6543			"ALU64_ARSH_X: Zero shift, high word",
  6544			.u.insns_int = {
  6545				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6546				BPF_ALU32_IMM(BPF_MOV, R1, 0),
  6547				BPF_ALU64_REG(BPF_ARSH, R0, R1),
  6548				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6549				BPF_EXIT_INSN(),
  6550			},
  6551			INTERNAL,
  6552			{ },
  6553			{ { 0, 0x81234567 } }
  6554		},
  6555		/* BPF_ALU | BPF_ARSH | BPF_K */
  6556		{
  6557			"ALU32_ARSH_K: -1234 >> 7 = -10",
  6558			.u.insns_int = {
  6559				BPF_ALU32_IMM(BPF_MOV, R0, -1234),
  6560				BPF_ALU32_IMM(BPF_ARSH, R0, 7),
  6561				BPF_EXIT_INSN(),
  6562			},
  6563			INTERNAL,
  6564			{ },
  6565			{ { 0, -10 } }
  6566		},
  6567		{
  6568			"ALU32_ARSH_K: -1234 >> 0 = -1234",
  6569			.u.insns_int = {
  6570				BPF_ALU32_IMM(BPF_MOV, R0, -1234),
  6571				BPF_ALU32_IMM(BPF_ARSH, R0, 0),
  6572				BPF_EXIT_INSN(),
  6573			},
  6574			INTERNAL,
  6575			{ },
  6576			{ { 0, -1234 } }
  6577		},
  6578		{
  6579			"ALU64_ARSH_K: 0xff00ff0000000000 >> 40 = 0xffffffffffff00ff",
  6580			.u.insns_int = {
  6581				BPF_LD_IMM64(R0, 0xff00ff0000000000LL),
  6582				BPF_ALU64_IMM(BPF_ARSH, R0, 40),
  6583				BPF_EXIT_INSN(),
  6584			},
  6585			INTERNAL,
  6586			{ },
  6587			{ { 0, 0xffff00ff } },
  6588		},
  6589		{
  6590			"ALU64_ARSH_K: Shift < 32, low word",
  6591			.u.insns_int = {
  6592				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6593				BPF_ALU64_IMM(BPF_RSH, R0, 12),
  6594				BPF_EXIT_INSN(),
  6595			},
  6596			INTERNAL,
  6597			{ },
  6598			{ { 0, 0x56789abc } }
  6599		},
  6600		{
  6601			"ALU64_ARSH_K: Shift < 32, high word",
  6602			.u.insns_int = {
  6603				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6604				BPF_ALU64_IMM(BPF_ARSH, R0, 12),
  6605				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6606				BPF_EXIT_INSN(),
  6607			},
  6608			INTERNAL,
  6609			{ },
  6610			{ { 0, 0xfff81234 } }
  6611		},
  6612		{
  6613			"ALU64_ARSH_K: Shift > 32, low word",
  6614			.u.insns_int = {
  6615				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6616				BPF_ALU64_IMM(BPF_ARSH, R0, 36),
  6617				BPF_EXIT_INSN(),
  6618			},
  6619			INTERNAL,
  6620			{ },
  6621			{ { 0, 0xf8123456 } }
  6622		},
  6623		{
  6624			"ALU64_ARSH_K: Shift > 32, high word",
  6625			.u.insns_int = {
  6626				BPF_LD_IMM64(R0, 0xf123456789abcdefLL),
  6627				BPF_ALU64_IMM(BPF_ARSH, R0, 36),
  6628				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6629				BPF_EXIT_INSN(),
  6630			},
  6631			INTERNAL,
  6632			{ },
  6633			{ { 0, -1 } }
  6634		},
  6635		{
  6636			"ALU64_ARSH_K: Shift == 32, low word",
  6637			.u.insns_int = {
  6638				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6639				BPF_ALU64_IMM(BPF_ARSH, R0, 32),
  6640				BPF_EXIT_INSN(),
  6641			},
  6642			INTERNAL,
  6643			{ },
  6644			{ { 0, 0x81234567 } }
  6645		},
  6646		{
  6647			"ALU64_ARSH_K: Shift == 32, high word",
  6648			.u.insns_int = {
  6649				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6650				BPF_ALU64_IMM(BPF_ARSH, R0, 32),
  6651				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6652				BPF_EXIT_INSN(),
  6653			},
  6654			INTERNAL,
  6655			{ },
  6656			{ { 0, -1 } }
  6657		},
  6658		{
  6659			"ALU64_ARSH_K: Zero shift",
  6660			.u.insns_int = {
  6661				BPF_LD_IMM64(R0, 0x8123456789abcdefLL),
  6662				BPF_ALU64_IMM(BPF_ARSH, R0, 0),
  6663				BPF_EXIT_INSN(),
  6664			},
  6665			INTERNAL,
  6666			{ },
  6667			{ { 0, 0x89abcdef } }
  6668		},
  6669		/* BPF_ALU | BPF_NEG */
  6670		{
  6671			"ALU_NEG: -(3) = -3",
  6672			.u.insns_int = {
  6673				BPF_ALU32_IMM(BPF_MOV, R0, 3),
  6674				BPF_ALU32_IMM(BPF_NEG, R0, 0),
  6675				BPF_EXIT_INSN(),
  6676			},
  6677			INTERNAL,
  6678			{ },
  6679			{ { 0, -3 } },
  6680		},
  6681		{
  6682			"ALU_NEG: -(-3) = 3",
  6683			.u.insns_int = {
  6684				BPF_ALU32_IMM(BPF_MOV, R0, -3),
  6685				BPF_ALU32_IMM(BPF_NEG, R0, 0),
  6686				BPF_EXIT_INSN(),
  6687			},
  6688			INTERNAL,
  6689			{ },
  6690			{ { 0, 3 } },
  6691		},
  6692		{
  6693			"ALU64_NEG: -(3) = -3",
  6694			.u.insns_int = {
  6695				BPF_LD_IMM64(R0, 3),
  6696				BPF_ALU64_IMM(BPF_NEG, R0, 0),
  6697				BPF_EXIT_INSN(),
  6698			},
  6699			INTERNAL,
  6700			{ },
  6701			{ { 0, -3 } },
  6702		},
  6703		{
  6704			"ALU64_NEG: -(-3) = 3",
  6705			.u.insns_int = {
  6706				BPF_LD_IMM64(R0, -3),
  6707				BPF_ALU64_IMM(BPF_NEG, R0, 0),
  6708				BPF_EXIT_INSN(),
  6709			},
  6710			INTERNAL,
  6711			{ },
  6712			{ { 0, 3 } },
  6713		},
  6714		/* BPF_ALU | BPF_END | BPF_FROM_BE */
  6715		{
  6716			"ALU_END_FROM_BE 16: 0x0123456789abcdef -> 0xcdef",
  6717			.u.insns_int = {
  6718				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6719				BPF_ENDIAN(BPF_FROM_BE, R0, 16),
  6720				BPF_EXIT_INSN(),
  6721			},
  6722			INTERNAL,
  6723			{ },
  6724			{ { 0,  cpu_to_be16(0xcdef) } },
  6725		},
  6726		{
  6727			"ALU_END_FROM_BE 32: 0x0123456789abcdef -> 0x89abcdef",
  6728			.u.insns_int = {
  6729				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6730				BPF_ENDIAN(BPF_FROM_BE, R0, 32),
  6731				BPF_ALU64_REG(BPF_MOV, R1, R0),
  6732				BPF_ALU64_IMM(BPF_RSH, R1, 32),
  6733				BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */
  6734				BPF_EXIT_INSN(),
  6735			},
  6736			INTERNAL,
  6737			{ },
  6738			{ { 0, cpu_to_be32(0x89abcdef) } },
  6739		},
  6740		{
  6741			"ALU_END_FROM_BE 64: 0x0123456789abcdef -> 0x89abcdef",
  6742			.u.insns_int = {
  6743				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6744				BPF_ENDIAN(BPF_FROM_BE, R0, 64),
  6745				BPF_EXIT_INSN(),
  6746			},
  6747			INTERNAL,
  6748			{ },
  6749			{ { 0, (u32) cpu_to_be64(0x0123456789abcdefLL) } },
  6750		},
  6751		{
  6752			"ALU_END_FROM_BE 64: 0x0123456789abcdef >> 32 -> 0x01234567",
  6753			.u.insns_int = {
  6754				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6755				BPF_ENDIAN(BPF_FROM_BE, R0, 64),
  6756				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6757				BPF_EXIT_INSN(),
  6758			},
  6759			INTERNAL,
  6760			{ },
  6761			{ { 0, (u32) (cpu_to_be64(0x0123456789abcdefLL) >> 32) } },
  6762		},
  6763		/* BPF_ALU | BPF_END | BPF_FROM_BE, reversed */
  6764		{
  6765			"ALU_END_FROM_BE 16: 0xfedcba9876543210 -> 0x3210",
  6766			.u.insns_int = {
  6767				BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
  6768				BPF_ENDIAN(BPF_FROM_BE, R0, 16),
  6769				BPF_EXIT_INSN(),
  6770			},
  6771			INTERNAL,
  6772			{ },
  6773			{ { 0,  cpu_to_be16(0x3210) } },
  6774		},
  6775		{
  6776			"ALU_END_FROM_BE 32: 0xfedcba9876543210 -> 0x76543210",
  6777			.u.insns_int = {
  6778				BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
  6779				BPF_ENDIAN(BPF_FROM_BE, R0, 32),
  6780				BPF_ALU64_REG(BPF_MOV, R1, R0),
  6781				BPF_ALU64_IMM(BPF_RSH, R1, 32),
  6782				BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */
  6783				BPF_EXIT_INSN(),
  6784			},
  6785			INTERNAL,
  6786			{ },
  6787			{ { 0, cpu_to_be32(0x76543210) } },
  6788		},
  6789		{
  6790			"ALU_END_FROM_BE 64: 0xfedcba9876543210 -> 0x76543210",
  6791			.u.insns_int = {
  6792				BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
  6793				BPF_ENDIAN(BPF_FROM_BE, R0, 64),
  6794				BPF_EXIT_INSN(),
  6795			},
  6796			INTERNAL,
  6797			{ },
  6798			{ { 0, (u32) cpu_to_be64(0xfedcba9876543210ULL) } },
  6799		},
  6800		{
  6801			"ALU_END_FROM_BE 64: 0xfedcba9876543210 >> 32 -> 0xfedcba98",
  6802			.u.insns_int = {
  6803				BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
  6804				BPF_ENDIAN(BPF_FROM_BE, R0, 64),
  6805				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6806				BPF_EXIT_INSN(),
  6807			},
  6808			INTERNAL,
  6809			{ },
  6810			{ { 0, (u32) (cpu_to_be64(0xfedcba9876543210ULL) >> 32) } },
  6811		},
  6812		/* BPF_ALU | BPF_END | BPF_FROM_LE */
  6813		{
  6814			"ALU_END_FROM_LE 16: 0x0123456789abcdef -> 0xefcd",
  6815			.u.insns_int = {
  6816				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6817				BPF_ENDIAN(BPF_FROM_LE, R0, 16),
  6818				BPF_EXIT_INSN(),
  6819			},
  6820			INTERNAL,
  6821			{ },
  6822			{ { 0, cpu_to_le16(0xcdef) } },
  6823		},
  6824		{
  6825			"ALU_END_FROM_LE 32: 0x0123456789abcdef -> 0xefcdab89",
  6826			.u.insns_int = {
  6827				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6828				BPF_ENDIAN(BPF_FROM_LE, R0, 32),
  6829				BPF_ALU64_REG(BPF_MOV, R1, R0),
  6830				BPF_ALU64_IMM(BPF_RSH, R1, 32),
  6831				BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */
  6832				BPF_EXIT_INSN(),
  6833			},
  6834			INTERNAL,
  6835			{ },
  6836			{ { 0, cpu_to_le32(0x89abcdef) } },
  6837		},
  6838		{
  6839			"ALU_END_FROM_LE 64: 0x0123456789abcdef -> 0x67452301",
  6840			.u.insns_int = {
  6841				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6842				BPF_ENDIAN(BPF_FROM_LE, R0, 64),
  6843				BPF_EXIT_INSN(),
  6844			},
  6845			INTERNAL,
  6846			{ },
  6847			{ { 0, (u32) cpu_to_le64(0x0123456789abcdefLL) } },
  6848		},
  6849		{
  6850			"ALU_END_FROM_LE 64: 0x0123456789abcdef >> 32 -> 0xefcdab89",
  6851			.u.insns_int = {
  6852				BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
  6853				BPF_ENDIAN(BPF_FROM_LE, R0, 64),
  6854				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6855				BPF_EXIT_INSN(),
  6856			},
  6857			INTERNAL,
  6858			{ },
  6859			{ { 0, (u32) (cpu_to_le64(0x0123456789abcdefLL) >> 32) } },
  6860		},
  6861		/* BPF_ALU | BPF_END | BPF_FROM_LE, reversed */
  6862		{
  6863			"ALU_END_FROM_LE 16: 0xfedcba9876543210 -> 0x1032",
  6864			.u.insns_int = {
  6865				BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
  6866				BPF_ENDIAN(BPF_FROM_LE, R0, 16),
  6867				BPF_EXIT_INSN(),
  6868			},
  6869			INTERNAL,
  6870			{ },
  6871			{ { 0,  cpu_to_le16(0x3210) } },
  6872		},
  6873		{
  6874			"ALU_END_FROM_LE 32: 0xfedcba9876543210 -> 0x10325476",
  6875			.u.insns_int = {
  6876				BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
  6877				BPF_ENDIAN(BPF_FROM_LE, R0, 32),
  6878				BPF_ALU64_REG(BPF_MOV, R1, R0),
  6879				BPF_ALU64_IMM(BPF_RSH, R1, 32),
  6880				BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */
  6881				BPF_EXIT_INSN(),
  6882			},
  6883			INTERNAL,
  6884			{ },
  6885			{ { 0, cpu_to_le32(0x76543210) } },
  6886		},
  6887		{
  6888			"ALU_END_FROM_LE 64: 0xfedcba9876543210 -> 0x10325476",
  6889			.u.insns_int = {
  6890				BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
  6891				BPF_ENDIAN(BPF_FROM_LE, R0, 64),
  6892				BPF_EXIT_INSN(),
  6893			},
  6894			INTERNAL,
  6895			{ },
> 6896			{ { 0, (u32) cpu_to_le64(0xfedcba9876543210ULL) } },
  6897		},
  6898		{
  6899			"ALU_END_FROM_LE 64: 0xfedcba9876543210 >> 32 -> 0x98badcfe",
  6900			.u.insns_int = {
  6901				BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
  6902				BPF_ENDIAN(BPF_FROM_LE, R0, 64),
  6903				BPF_ALU64_IMM(BPF_RSH, R0, 32),
  6904				BPF_EXIT_INSN(),
  6905			},
  6906			INTERNAL,
  6907			{ },
  6908			{ { 0, (u32) (cpu_to_le64(0xfedcba9876543210ULL) >> 32) } },
  6909		},
  6910		/* BPF_ST(X) | BPF_MEM | BPF_B/H/W/DW */
  6911		{
  6912			"ST_MEM_B: Store/Load byte: max negative",
  6913			.u.insns_int = {
  6914				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  6915				BPF_ST_MEM(BPF_B, R10, -40, 0xff),
  6916				BPF_LDX_MEM(BPF_B, R0, R10, -40),
  6917				BPF_EXIT_INSN(),
  6918			},
  6919			INTERNAL,
  6920			{ },
  6921			{ { 0, 0xff } },
  6922			.stack_depth = 40,
  6923		},
  6924		{
  6925			"ST_MEM_B: Store/Load byte: max positive",
  6926			.u.insns_int = {
  6927				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  6928				BPF_ST_MEM(BPF_H, R10, -40, 0x7f),
  6929				BPF_LDX_MEM(BPF_H, R0, R10, -40),
  6930				BPF_EXIT_INSN(),
  6931			},
  6932			INTERNAL,
  6933			{ },
  6934			{ { 0, 0x7f } },
  6935			.stack_depth = 40,
  6936		},
  6937		{
  6938			"STX_MEM_B: Store/Load byte: max negative",
  6939			.u.insns_int = {
  6940				BPF_LD_IMM64(R0, 0),
  6941				BPF_LD_IMM64(R1, 0xffLL),
  6942				BPF_STX_MEM(BPF_B, R10, R1, -40),
  6943				BPF_LDX_MEM(BPF_B, R0, R10, -40),
  6944				BPF_EXIT_INSN(),
  6945			},
  6946			INTERNAL,
  6947			{ },
  6948			{ { 0, 0xff } },
  6949			.stack_depth = 40,
  6950		},
  6951		{
  6952			"ST_MEM_H: Store/Load half word: max negative",
  6953			.u.insns_int = {
  6954				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  6955				BPF_ST_MEM(BPF_H, R10, -40, 0xffff),
  6956				BPF_LDX_MEM(BPF_H, R0, R10, -40),
  6957				BPF_EXIT_INSN(),
  6958			},
  6959			INTERNAL,
  6960			{ },
  6961			{ { 0, 0xffff } },
  6962			.stack_depth = 40,
  6963		},
  6964		{
  6965			"ST_MEM_H: Store/Load half word: max positive",
  6966			.u.insns_int = {
  6967				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  6968				BPF_ST_MEM(BPF_H, R10, -40, 0x7fff),
  6969				BPF_LDX_MEM(BPF_H, R0, R10, -40),
  6970				BPF_EXIT_INSN(),
  6971			},
  6972			INTERNAL,
  6973			{ },
  6974			{ { 0, 0x7fff } },
  6975			.stack_depth = 40,
  6976		},
  6977		{
  6978			"STX_MEM_H: Store/Load half word: max negative",
  6979			.u.insns_int = {
  6980				BPF_LD_IMM64(R0, 0),
  6981				BPF_LD_IMM64(R1, 0xffffLL),
  6982				BPF_STX_MEM(BPF_H, R10, R1, -40),
  6983				BPF_LDX_MEM(BPF_H, R0, R10, -40),
  6984				BPF_EXIT_INSN(),
  6985			},
  6986			INTERNAL,
  6987			{ },
  6988			{ { 0, 0xffff } },
  6989			.stack_depth = 40,
  6990		},
  6991		{
  6992			"ST_MEM_W: Store/Load word: max negative",
  6993			.u.insns_int = {
  6994				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  6995				BPF_ST_MEM(BPF_W, R10, -40, 0xffffffff),
  6996				BPF_LDX_MEM(BPF_W, R0, R10, -40),
  6997				BPF_EXIT_INSN(),
  6998			},
  6999			INTERNAL,
  7000			{ },
  7001			{ { 0, 0xffffffff } },
  7002			.stack_depth = 40,
  7003		},
  7004		{
  7005			"ST_MEM_W: Store/Load word: max positive",
  7006			.u.insns_int = {
  7007				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  7008				BPF_ST_MEM(BPF_W, R10, -40, 0x7fffffff),
  7009				BPF_LDX_MEM(BPF_W, R0, R10, -40),
  7010				BPF_EXIT_INSN(),
  7011			},
  7012			INTERNAL,
  7013			{ },
  7014			{ { 0, 0x7fffffff } },
  7015			.stack_depth = 40,
  7016		},
  7017		{
  7018			"STX_MEM_W: Store/Load word: max negative",
  7019			.u.insns_int = {
  7020				BPF_LD_IMM64(R0, 0),
  7021				BPF_LD_IMM64(R1, 0xffffffffLL),
  7022				BPF_STX_MEM(BPF_W, R10, R1, -40),
  7023				BPF_LDX_MEM(BPF_W, R0, R10, -40),
  7024				BPF_EXIT_INSN(),
  7025			},
  7026			INTERNAL,
  7027			{ },
  7028			{ { 0, 0xffffffff } },
  7029			.stack_depth = 40,
  7030		},
  7031		{
  7032			"ST_MEM_DW: Store/Load double word: max negative",
  7033			.u.insns_int = {
  7034				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  7035				BPF_ST_MEM(BPF_DW, R10, -40, 0xffffffff),
  7036				BPF_LDX_MEM(BPF_DW, R0, R10, -40),
  7037				BPF_EXIT_INSN(),
  7038			},
  7039			INTERNAL,
  7040			{ },
  7041			{ { 0, 0xffffffff } },
  7042			.stack_depth = 40,
  7043		},
  7044		{
  7045			"ST_MEM_DW: Store/Load double word: max negative 2",
  7046			.u.insns_int = {
  7047				BPF_LD_IMM64(R2, 0xffff00000000ffffLL),
  7048				BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
  7049				BPF_ST_MEM(BPF_DW, R10, -40, 0xffffffff),
  7050				BPF_LDX_MEM(BPF_DW, R2, R10, -40),
  7051				BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
  7052				BPF_MOV32_IMM(R0, 2),
  7053				BPF_EXIT_INSN(),
  7054				BPF_MOV32_IMM(R0, 1),
  7055				BPF_EXIT_INSN(),
  7056			},
  7057			INTERNAL,
  7058			{ },
  7059			{ { 0, 0x1 } },
  7060			.stack_depth = 40,
  7061		},
  7062		{
  7063			"ST_MEM_DW: Store/Load double word: max positive",
  7064			.u.insns_int = {
  7065				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  7066				BPF_ST_MEM(BPF_DW, R10, -40, 0x7fffffff),
  7067				BPF_LDX_MEM(BPF_DW, R0, R10, -40),
  7068				BPF_EXIT_INSN(),
  7069			},
  7070			INTERNAL,
  7071			{ },
  7072			{ { 0, 0x7fffffff } },
  7073			.stack_depth = 40,
  7074		},
  7075		{
  7076			"STX_MEM_DW: Store/Load double word: max negative",
  7077			.u.insns_int = {
  7078				BPF_LD_IMM64(R0, 0),
  7079				BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
  7080				BPF_STX_MEM(BPF_DW, R10, R1, -40),
  7081				BPF_LDX_MEM(BPF_DW, R0, R10, -40),
  7082				BPF_EXIT_INSN(),
  7083			},
  7084			INTERNAL,
  7085			{ },
  7086			{ { 0, 0xffffffff } },
  7087			.stack_depth = 40,
  7088		},
  7089		{
  7090			"STX_MEM_DW: Store double word: first word in memory",
  7091			.u.insns_int = {
  7092				BPF_LD_IMM64(R0, 0),
  7093				BPF_LD_IMM64(R1, 0x0123456789abcdefLL),
  7094				BPF_STX_MEM(BPF_DW, R10, R1, -40),
  7095				BPF_LDX_MEM(BPF_W, R0, R10, -40),
  7096				BPF_EXIT_INSN(),
  7097			},
  7098			INTERNAL,
  7099			{ },
  7100	#ifdef __BIG_ENDIAN
  7101			{ { 0, 0x01234567 } },
  7102	#else
  7103			{ { 0, 0x89abcdef } },
  7104	#endif
  7105			.stack_depth = 40,
  7106		},
  7107		{
  7108			"STX_MEM_DW: Store double word: second word in memory",
  7109			.u.insns_int = {
  7110				BPF_LD_IMM64(R0, 0),
  7111				BPF_LD_IMM64(R1, 0x0123456789abcdefLL),
  7112				BPF_STX_MEM(BPF_DW, R10, R1, -40),
  7113				BPF_LDX_MEM(BPF_W, R0, R10, -36),
  7114				BPF_EXIT_INSN(),
  7115			},
  7116			INTERNAL,
  7117			{ },
  7118	#ifdef __BIG_ENDIAN
  7119			{ { 0, 0x89abcdef } },
  7120	#else
  7121			{ { 0, 0x01234567 } },
  7122	#endif
  7123			.stack_depth = 40,
  7124		},
  7125		/* BPF_STX | BPF_ATOMIC | BPF_W/DW */
  7126		{
  7127			"STX_XADD_W: X + 1 + 1 + 1 + ...",
  7128			{ },
  7129			INTERNAL,
  7130			{ },
  7131			{ { 0, 4134 } },
  7132			.fill_helper = bpf_fill_stxw,
  7133		},
  7134		{
  7135			"STX_XADD_DW: X + 1 + 1 + 1 + ...",
  7136			{ },
  7137			INTERNAL,
  7138			{ },
  7139			{ { 0, 4134 } },
  7140			.fill_helper = bpf_fill_stxdw,
  7141		},
  7142		/*
  7143		 * Exhaustive tests of atomic operation variants.
  7144		 * Individual tests are expanded from template macros for all
  7145		 * combinations of ALU operation, word size and fetching.
  7146		 */
  7147	#define BPF_ATOMIC_OP_TEST1(width, op, logic, old, update, result)	\
  7148	{									\
  7149		"BPF_ATOMIC | " #width ", " #op ": Test: "			\
  7150			#old " " #logic " " #update " = " #result,		\
  7151		.u.insns_int = {						\
  7152			BPF_ALU32_IMM(BPF_MOV, R5, update),			\
  7153			BPF_ST_MEM(width, R10, -40, old),			\
  7154			BPF_ATOMIC_OP(width, op, R10, R5, -40),			\
  7155			BPF_LDX_MEM(width, R0, R10, -40),			\
  7156			BPF_EXIT_INSN(),					\
  7157		},								\
  7158		INTERNAL,							\
  7159		{ },								\
  7160		{ { 0, result } },						\
  7161		.stack_depth = 40,						\
  7162	}
  7163	#define BPF_ATOMIC_OP_TEST2(width, op, logic, old, update, result)	\
  7164	{									\
  7165		"BPF_ATOMIC | " #width ", " #op ": Test side effects, r10: "	\
  7166			#old " " #logic " " #update " = " #result,		\
  7167		.u.insns_int = {						\
  7168			BPF_ALU64_REG(BPF_MOV, R1, R10),			\
  7169			BPF_ALU32_IMM(BPF_MOV, R0, update),			\
  7170			BPF_ST_MEM(BPF_W, R10, -40, old),			\
  7171			BPF_ATOMIC_OP(width, op, R10, R0, -40),			\
  7172			BPF_ALU64_REG(BPF_MOV, R0, R10),			\
  7173			BPF_ALU64_REG(BPF_SUB, R0, R1),				\
  7174			BPF_EXIT_INSN(),					\
  7175		},								\
  7176		INTERNAL,							\
  7177		{ },								\
  7178		{ { 0, 0 } },							\
  7179		.stack_depth = 40,						\
  7180	}
  7181	#define BPF_ATOMIC_OP_TEST3(width, op, logic, old, update, result)	\
  7182	{									\
  7183		"BPF_ATOMIC | " #width ", " #op ": Test side effects, r0: "	\
  7184			#old " " #logic " " #update " = " #result,		\
  7185		.u.insns_int = {						\
  7186			BPF_ALU64_REG(BPF_MOV, R0, R10),			\
  7187			BPF_ALU32_IMM(BPF_MOV, R1, update),			\
  7188			BPF_ST_MEM(width, R10, -40, old),			\
  7189			BPF_ATOMIC_OP(width, op, R10, R1, -40),			\
  7190			BPF_ALU64_REG(BPF_SUB, R0, R10),			\
  7191			BPF_EXIT_INSN(),					\
  7192		},								\
  7193		INTERNAL,                                                       \
  7194		{ },                                                            \
  7195		{ { 0, 0 } },                                                   \
  7196		.stack_depth = 40,                                              \
  7197	}
  7198	#define BPF_ATOMIC_OP_TEST4(width, op, logic, old, update, result)	\
  7199	{									\
  7200		"BPF_ATOMIC | " #width ", " #op ": Test fetch: "		\
  7201			#old " " #logic " " #update " = " #result,		\
  7202		.u.insns_int = {						\
  7203			BPF_ALU32_IMM(BPF_MOV, R3, update),			\
  7204			BPF_ST_MEM(width, R10, -40, old),			\
  7205			BPF_ATOMIC_OP(width, op, R10, R3, -40),			\
  7206			BPF_ALU64_REG(BPF_MOV, R0, R3),                         \
  7207			BPF_EXIT_INSN(),					\
  7208		},								\
  7209		INTERNAL,                                                       \
  7210		{ },                                                            \
  7211		{ { 0, (op) & BPF_FETCH ? old : update } },			\
  7212		.stack_depth = 40,                                              \
  7213	}
  7214		/* BPF_ATOMIC | BPF_W: BPF_ADD */
  7215		BPF_ATOMIC_OP_TEST1(BPF_W, BPF_ADD, +, 0x12, 0xab, 0xbd),
  7216		BPF_ATOMIC_OP_TEST2(BPF_W, BPF_ADD, +, 0x12, 0xab, 0xbd),
  7217		BPF_ATOMIC_OP_TEST3(BPF_W, BPF_ADD, +, 0x12, 0xab, 0xbd),
  7218		BPF_ATOMIC_OP_TEST4(BPF_W, BPF_ADD, +, 0x12, 0xab, 0xbd),
  7219		/* BPF_ATOMIC | BPF_W: BPF_ADD | BPF_FETCH */
  7220		BPF_ATOMIC_OP_TEST1(BPF_W, BPF_ADD | BPF_FETCH, +, 0x12, 0xab, 0xbd),
  7221		BPF_ATOMIC_OP_TEST2(BPF_W, BPF_ADD | BPF_FETCH, +, 0x12, 0xab, 0xbd),
  7222		BPF_ATOMIC_OP_TEST3(BPF_W, BPF_ADD | BPF_FETCH, +, 0x12, 0xab, 0xbd),
  7223		BPF_ATOMIC_OP_TEST4(BPF_W, BPF_ADD | BPF_FETCH, +, 0x12, 0xab, 0xbd),
  7224		/* BPF_ATOMIC | BPF_DW: BPF_ADD */
  7225		BPF_ATOMIC_OP_TEST1(BPF_DW, BPF_ADD, +, 0x12, 0xab, 0xbd),
  7226		BPF_ATOMIC_OP_TEST2(BPF_DW, BPF_ADD, +, 0x12, 0xab, 0xbd),
  7227		BPF_ATOMIC_OP_TEST3(BPF_DW, BPF_ADD, +, 0x12, 0xab, 0xbd),
  7228		BPF_ATOMIC_OP_TEST4(BPF_DW, BPF_ADD, +, 0x12, 0xab, 0xbd),
  7229		/* BPF_ATOMIC | BPF_DW: BPF_ADD | BPF_FETCH */
  7230		BPF_ATOMIC_OP_TEST1(BPF_DW, BPF_ADD | BPF_FETCH, +, 0x12, 0xab, 0xbd),
  7231		BPF_ATOMIC_OP_TEST2(BPF_DW, BPF_ADD | BPF_FETCH, +, 0x12, 0xab, 0xbd),
  7232		BPF_ATOMIC_OP_TEST3(BPF_DW, BPF_ADD | BPF_FETCH, +, 0x12, 0xab, 0xbd),
  7233		BPF_ATOMIC_OP_TEST4(BPF_DW, BPF_ADD | BPF_FETCH, +, 0x12, 0xab, 0xbd),
  7234		/* BPF_ATOMIC | BPF_W: BPF_AND */
  7235		BPF_ATOMIC_OP_TEST1(BPF_W, BPF_AND, &, 0x12, 0xab, 0x02),
  7236		BPF_ATOMIC_OP_TEST2(BPF_W, BPF_AND, &, 0x12, 0xab, 0x02),
  7237		BPF_ATOMIC_OP_TEST3(BPF_W, BPF_AND, &, 0x12, 0xab, 0x02),
  7238		BPF_ATOMIC_OP_TEST4(BPF_W, BPF_AND, &, 0x12, 0xab, 0x02),
  7239		/* BPF_ATOMIC | BPF_W: BPF_AND | BPF_FETCH */
  7240		BPF_ATOMIC_OP_TEST1(BPF_W, BPF_AND | BPF_FETCH, &, 0x12, 0xab, 0x02),
  7241		BPF_ATOMIC_OP_TEST2(BPF_W, BPF_AND | BPF_FETCH, &, 0x12, 0xab, 0x02),
  7242		BPF_ATOMIC_OP_TEST3(BPF_W, BPF_AND | BPF_FETCH, &, 0x12, 0xab, 0x02),
  7243		BPF_ATOMIC_OP_TEST4(BPF_W, BPF_AND | BPF_FETCH, &, 0x12, 0xab, 0x02),
  7244		/* BPF_ATOMIC | BPF_DW: BPF_AND */
  7245		BPF_ATOMIC_OP_TEST1(BPF_DW, BPF_AND, &, 0x12, 0xab, 0x02),
  7246		BPF_ATOMIC_OP_TEST2(BPF_DW, BPF_AND, &, 0x12, 0xab, 0x02),
  7247		BPF_ATOMIC_OP_TEST3(BPF_DW, BPF_AND, &, 0x12, 0xab, 0x02),
  7248		BPF_ATOMIC_OP_TEST4(BPF_DW, BPF_AND, &, 0x12, 0xab, 0x02),
  7249		/* BPF_ATOMIC | BPF_DW: BPF_AND | BPF_FETCH */
  7250		BPF_ATOMIC_OP_TEST1(BPF_DW, BPF_AND | BPF_FETCH, &, 0x12, 0xab, 0x02),
  7251		BPF_ATOMIC_OP_TEST2(BPF_DW, BPF_AND | BPF_FETCH, &, 0x12, 0xab, 0x02),
  7252		BPF_ATOMIC_OP_TEST3(BPF_DW, BPF_AND | BPF_FETCH, &, 0x12, 0xab, 0x02),
  7253		BPF_ATOMIC_OP_TEST4(BPF_DW, BPF_AND | BPF_FETCH, &, 0x12, 0xab, 0x02),
  7254		/* BPF_ATOMIC | BPF_W: BPF_OR */
  7255		BPF_ATOMIC_OP_TEST1(BPF_W, BPF_OR, |, 0x12, 0xab, 0xbb),
  7256		BPF_ATOMIC_OP_TEST2(BPF_W, BPF_OR, |, 0x12, 0xab, 0xbb),
  7257		BPF_ATOMIC_OP_TEST3(BPF_W, BPF_OR, |, 0x12, 0xab, 0xbb),
  7258		BPF_ATOMIC_OP_TEST4(BPF_W, BPF_OR, |, 0x12, 0xab, 0xbb),
  7259		/* BPF_ATOMIC | BPF_W: BPF_OR | BPF_FETCH */
  7260		BPF_ATOMIC_OP_TEST1(BPF_W, BPF_OR | BPF_FETCH, |, 0x12, 0xab, 0xbb),
  7261		BPF_ATOMIC_OP_TEST2(BPF_W, BPF_OR | BPF_FETCH, |, 0x12, 0xab, 0xbb),
  7262		BPF_ATOMIC_OP_TEST3(BPF_W, BPF_OR | BPF_FETCH, |, 0x12, 0xab, 0xbb),
  7263		BPF_ATOMIC_OP_TEST4(BPF_W, BPF_OR | BPF_FETCH, |, 0x12, 0xab, 0xbb),
  7264		/* BPF_ATOMIC | BPF_DW: BPF_OR */
  7265		BPF_ATOMIC_OP_TEST1(BPF_DW, BPF_OR, |, 0x12, 0xab, 0xbb),
  7266		BPF_ATOMIC_OP_TEST2(BPF_DW, BPF_OR, |, 0x12, 0xab, 0xbb),
  7267		BPF_ATOMIC_OP_TEST3(BPF_DW, BPF_OR, |, 0x12, 0xab, 0xbb),
  7268		BPF_ATOMIC_OP_TEST4(BPF_DW, BPF_OR, |, 0x12, 0xab, 0xbb),
  7269		/* BPF_ATOMIC | BPF_DW: BPF_OR | BPF_FETCH */
  7270		BPF_ATOMIC_OP_TEST1(BPF_DW, BPF_OR | BPF_FETCH, |, 0x12, 0xab, 0xbb),
  7271		BPF_ATOMIC_OP_TEST2(BPF_DW, BPF_OR | BPF_FETCH, |, 0x12, 0xab, 0xbb),
  7272		BPF_ATOMIC_OP_TEST3(BPF_DW, BPF_OR | BPF_FETCH, |, 0x12, 0xab, 0xbb),
  7273		BPF_ATOMIC_OP_TEST4(BPF_DW, BPF_OR | BPF_FETCH, |, 0x12, 0xab, 0xbb),
  7274		/* BPF_ATOMIC | BPF_W: BPF_XOR */
  7275		BPF_ATOMIC_OP_TEST1(BPF_W, BPF_XOR, ^, 0x12, 0xab, 0xb9),
  7276		BPF_ATOMIC_OP_TEST2(BPF_W, BPF_XOR, ^, 0x12, 0xab, 0xb9),
  7277		BPF_ATOMIC_OP_TEST3(BPF_W, BPF_XOR, ^, 0x12, 0xab, 0xb9),
  7278		BPF_ATOMIC_OP_TEST4(BPF_W, BPF_XOR, ^, 0x12, 0xab, 0xb9),
  7279		/* BPF_ATOMIC | BPF_W: BPF_XOR | BPF_FETCH */
  7280		BPF_ATOMIC_OP_TEST1(BPF_W, BPF_XOR | BPF_FETCH, ^, 0x12, 0xab, 0xb9),
  7281		BPF_ATOMIC_OP_TEST2(BPF_W, BPF_XOR | BPF_FETCH, ^, 0x12, 0xab, 0xb9),
  7282		BPF_ATOMIC_OP_TEST3(BPF_W, BPF_XOR | BPF_FETCH, ^, 0x12, 0xab, 0xb9),
  7283		BPF_ATOMIC_OP_TEST4(BPF_W, BPF_XOR | BPF_FETCH, ^, 0x12, 0xab, 0xb9),
  7284		/* BPF_ATOMIC | BPF_DW: BPF_XOR */
  7285		BPF_ATOMIC_OP_TEST1(BPF_DW, BPF_XOR, ^, 0x12, 0xab, 0xb9),
  7286		BPF_ATOMIC_OP_TEST2(BPF_DW, BPF_XOR, ^, 0x12, 0xab, 0xb9),
  7287		BPF_ATOMIC_OP_TEST3(BPF_DW, BPF_XOR, ^, 0x12, 0xab, 0xb9),
  7288		BPF_ATOMIC_OP_TEST4(BPF_DW, BPF_XOR, ^, 0x12, 0xab, 0xb9),
  7289		/* BPF_ATOMIC | BPF_DW: BPF_XOR | BPF_FETCH */
  7290		BPF_ATOMIC_OP_TEST1(BPF_DW, BPF_XOR | BPF_FETCH, ^, 0x12, 0xab, 0xb9),
  7291		BPF_ATOMIC_OP_TEST2(BPF_DW, BPF_XOR | BPF_FETCH, ^, 0x12, 0xab, 0xb9),
  7292		BPF_ATOMIC_OP_TEST3(BPF_DW, BPF_XOR | BPF_FETCH, ^, 0x12, 0xab, 0xb9),
  7293		BPF_ATOMIC_OP_TEST4(BPF_DW, BPF_XOR | BPF_FETCH, ^, 0x12, 0xab, 0xb9),
  7294		/* BPF_ATOMIC | BPF_W: BPF_XCHG */
  7295		BPF_ATOMIC_OP_TEST1(BPF_W, BPF_XCHG, xchg, 0x12, 0xab, 0xab),
  7296		BPF_ATOMIC_OP_TEST2(BPF_W, BPF_XCHG, xchg, 0x12, 0xab, 0xab),
  7297		BPF_ATOMIC_OP_TEST3(BPF_W, BPF_XCHG, xchg, 0x12, 0xab, 0xab),
  7298		BPF_ATOMIC_OP_TEST4(BPF_W, BPF_XCHG, xchg, 0x12, 0xab, 0xab),
  7299		/* BPF_ATOMIC | BPF_DW: BPF_XCHG */
  7300		BPF_ATOMIC_OP_TEST1(BPF_DW, BPF_XCHG, xchg, 0x12, 0xab, 0xab),
  7301		BPF_ATOMIC_OP_TEST2(BPF_DW, BPF_XCHG, xchg, 0x12, 0xab, 0xab),
  7302		BPF_ATOMIC_OP_TEST3(BPF_DW, BPF_XCHG, xchg, 0x12, 0xab, 0xab),
  7303		BPF_ATOMIC_OP_TEST4(BPF_DW, BPF_XCHG, xchg, 0x12, 0xab, 0xab),
  7304	#undef BPF_ATOMIC_OP_TEST1
  7305	#undef BPF_ATOMIC_OP_TEST2
  7306	#undef BPF_ATOMIC_OP_TEST3
  7307	#undef BPF_ATOMIC_OP_TEST4
  7308		/* BPF_ATOMIC | BPF_W, BPF_CMPXCHG */
  7309		{
  7310			"BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test successful return",
  7311			.u.insns_int = {
  7312				BPF_ST_MEM(BPF_W, R10, -40, 0x01234567),
  7313				BPF_ALU32_IMM(BPF_MOV, R0, 0x01234567),
  7314				BPF_ALU32_IMM(BPF_MOV, R3, 0x89abcdef),
  7315				BPF_ATOMIC_OP(BPF_W, BPF_CMPXCHG, R10, R3, -40),
  7316				BPF_EXIT_INSN(),
  7317			},
  7318			INTERNAL,
  7319			{ },
  7320			{ { 0, 0x01234567 } },
  7321			.stack_depth = 40,
  7322		},
  7323		{
  7324			"BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test successful store",
  7325			.u.insns_int = {
  7326				BPF_ST_MEM(BPF_W, R10, -40, 0x01234567),
  7327				BPF_ALU32_IMM(BPF_MOV, R0, 0x01234567),
  7328				BPF_ALU32_IMM(BPF_MOV, R3, 0x89abcdef),
  7329				BPF_ATOMIC_OP(BPF_W, BPF_CMPXCHG, R10, R3, -40),
  7330				BPF_LDX_MEM(BPF_W, R0, R10, -40),
  7331				BPF_EXIT_INSN(),
  7332			},
  7333			INTERNAL,
  7334			{ },
  7335			{ { 0, 0x89abcdef } },
  7336			.stack_depth = 40,
  7337		},
  7338		{
  7339			"BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test failure return",
  7340			.u.insns_int = {
  7341				BPF_ST_MEM(BPF_W, R10, -40, 0x01234567),
  7342				BPF_ALU32_IMM(BPF_MOV, R0, 0x76543210),
  7343				BPF_ALU32_IMM(BPF_MOV, R3, 0x89abcdef),
  7344				BPF_ATOMIC_OP(BPF_W, BPF_CMPXCHG, R10, R3, -40),
  7345				BPF_EXIT_INSN(),
  7346			},
  7347			INTERNAL,
  7348			{ },
  7349			{ { 0, 0x01234567 } },
  7350			.stack_depth = 40,
  7351		},
  7352		{
  7353			"BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test failure store",
  7354			.u.insns_int = {
  7355				BPF_ST_MEM(BPF_W, R10, -40, 0x01234567),
  7356				BPF_ALU32_IMM(BPF_MOV, R0, 0x76543210),
  7357				BPF_ALU32_IMM(BPF_MOV, R3, 0x89abcdef),
  7358				BPF_ATOMIC_OP(BPF_W, BPF_CMPXCHG, R10, R3, -40),
  7359				BPF_LDX_MEM(BPF_W, R0, R10, -40),
  7360				BPF_EXIT_INSN(),
  7361			},
  7362			INTERNAL,
  7363			{ },
  7364			{ { 0, 0x01234567 } },
  7365			.stack_depth = 40,
  7366		},
  7367		{
  7368			"BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test side effects",
  7369			.u.insns_int = {
  7370				BPF_ST_MEM(BPF_W, R10, -40, 0x01234567),
  7371				BPF_ALU32_IMM(BPF_MOV, R0, 0x01234567),
  7372				BPF_ALU32_IMM(BPF_MOV, R3, 0x89abcdef),
  7373				BPF_ATOMIC_OP(BPF_W, BPF_CMPXCHG, R10, R3, -40),
  7374				BPF_ATOMIC_OP(BPF_W, BPF_CMPXCHG, R10, R3, -40),
  7375				BPF_ALU32_REG(BPF_MOV, R0, R3),
  7376				BPF_EXIT_INSN(),
  7377			},
  7378			INTERNAL,
  7379			{ },
  7380			{ { 0, 0x89abcdef } },
  7381			.stack_depth = 40,
  7382		},
  7383		/* BPF_ATOMIC | BPF_DW, BPF_CMPXCHG */
  7384		{
  7385			"BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test successful return",
  7386			.u.insns_int = {
  7387				BPF_LD_IMM64(R1, 0x0123456789abcdefULL),
  7388				BPF_LD_IMM64(R2, 0xfecdba9876543210ULL),
  7389				BPF_ALU64_REG(BPF_MOV, R0, R1),
  7390				BPF_STX_MEM(BPF_DW, R10, R1, -40),
  7391				BPF_ATOMIC_OP(BPF_DW, BPF_CMPXCHG, R10, R2, -40),
  7392				BPF_JMP_REG(BPF_JNE, R0, R1, 1),
  7393				BPF_ALU64_REG(BPF_SUB, R0, R1),
  7394				BPF_EXIT_INSN(),
  7395			},
  7396			INTERNAL,
  7397			{ },
  7398			{ { 0, 0 } },
  7399			.stack_depth = 40,
  7400		},
  7401		{
  7402			"BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test successful store",
  7403			.u.insns_int = {
  7404				BPF_LD_IMM64(R1, 0x0123456789abcdefULL),
  7405				BPF_LD_IMM64(R2, 0xfecdba9876543210ULL),
  7406				BPF_ALU64_REG(BPF_MOV, R0, R1),
  7407				BPF_STX_MEM(BPF_DW, R10, R0, -40),
  7408				BPF_ATOMIC_OP(BPF_DW, BPF_CMPXCHG, R10, R2, -40),
  7409				BPF_LDX_MEM(BPF_DW, R0, R10, -40),
  7410				BPF_JMP_REG(BPF_JNE, R0, R2, 1),
  7411				BPF_ALU64_REG(BPF_SUB, R0, R2),
  7412				BPF_EXIT_INSN(),
  7413			},
  7414			INTERNAL,
  7415			{ },
  7416			{ { 0, 0 } },
  7417			.stack_depth = 40,
  7418		},
  7419		{
  7420			"BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test failure return",
  7421			.u.insns_int = {
  7422				BPF_LD_IMM64(R1, 0x0123456789abcdefULL),
  7423				BPF_LD_IMM64(R2, 0xfecdba9876543210ULL),
  7424				BPF_ALU64_REG(BPF_MOV, R0, R1),
  7425				BPF_ALU64_IMM(BPF_ADD, R0, 1),
  7426				BPF_STX_MEM(BPF_DW, R10, R1, -40),
  7427				BPF_ATOMIC_OP(BPF_DW, BPF_CMPXCHG, R10, R2, -40),
  7428				BPF_JMP_REG(BPF_JNE, R0, R1, 1),
  7429				BPF_ALU64_REG(BPF_SUB, R0, R1),
  7430				BPF_EXIT_INSN(),
  7431			},
  7432			INTERNAL,
  7433			{ },
  7434			{ { 0, 0 } },
  7435			.stack_depth = 40,
  7436		},
  7437		{
  7438			"BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test failure store",
  7439			.u.insns_int = {
  7440				BPF_LD_IMM64(R1, 0x0123456789abcdefULL),
  7441				BPF_LD_IMM64(R2, 0xfecdba9876543210ULL),
  7442				BPF_ALU64_REG(BPF_MOV, R0, R1),
  7443				BPF_ALU64_IMM(BPF_ADD, R0, 1),
  7444				BPF_STX_MEM(BPF_DW, R10, R1, -40),
  7445				BPF_ATOMIC_OP(BPF_DW, BPF_CMPXCHG, R10, R2, -40),
  7446				BPF_LDX_MEM(BPF_DW, R0, R10, -40),
  7447				BPF_JMP_REG(BPF_JNE, R0, R1, 1),
  7448				BPF_ALU64_REG(BPF_SUB, R0, R1),
  7449				BPF_EXIT_INSN(),
  7450			},
  7451			INTERNAL,
  7452			{ },
  7453			{ { 0, 0 } },
  7454			.stack_depth = 40,
  7455		},
  7456		{
  7457			"BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test side effects",
  7458			.u.insns_int = {
  7459				BPF_LD_IMM64(R1, 0x0123456789abcdefULL),
  7460				BPF_LD_IMM64(R2, 0xfecdba9876543210ULL),
  7461				BPF_ALU64_REG(BPF_MOV, R0, R1),
  7462				BPF_STX_MEM(BPF_DW, R10, R1, -40),
  7463				BPF_ATOMIC_OP(BPF_DW, BPF_CMPXCHG, R10, R2, -40),
  7464				BPF_LD_IMM64(R0, 0xfecdba9876543210ULL),
  7465				BPF_JMP_REG(BPF_JNE, R0, R2, 1),
  7466				BPF_ALU64_REG(BPF_SUB, R0, R2),
  7467				BPF_EXIT_INSN(),
  7468			},
  7469			INTERNAL,
  7470			{ },
  7471			{ { 0, 0 } },
  7472			.stack_depth = 40,
  7473		},
  7474		/* BPF_JMP32 | BPF_JEQ | BPF_K */
  7475		{
  7476			"JMP32_JEQ_K: Small immediate",
  7477			.u.insns_int = {
  7478				BPF_ALU32_IMM(BPF_MOV, R0, 123),
  7479				BPF_JMP32_IMM(BPF_JEQ, R0, 321, 1),
  7480				BPF_JMP32_IMM(BPF_JEQ, R0, 123, 1),
  7481				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7482				BPF_EXIT_INSN(),
  7483			},
  7484			INTERNAL,
  7485			{ },
  7486			{ { 0, 123 } }
  7487		},
  7488		{
  7489			"JMP32_JEQ_K: Large immediate",
  7490			.u.insns_int = {
  7491				BPF_ALU32_IMM(BPF_MOV, R0, 12345678),
  7492				BPF_JMP32_IMM(BPF_JEQ, R0, 12345678 & 0xffff, 1),
  7493				BPF_JMP32_IMM(BPF_JEQ, R0, 12345678, 1),
  7494				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7495				BPF_EXIT_INSN(),
  7496			},
  7497			INTERNAL,
  7498			{ },
  7499			{ { 0, 12345678 } }
  7500		},
  7501		{
  7502			"JMP32_JEQ_K: negative immediate",
  7503			.u.insns_int = {
  7504				BPF_ALU32_IMM(BPF_MOV, R0, -123),
  7505				BPF_JMP32_IMM(BPF_JEQ, R0,  123, 1),
  7506				BPF_JMP32_IMM(BPF_JEQ, R0, -123, 1),
  7507				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7508				BPF_EXIT_INSN(),
  7509			},
  7510			INTERNAL,
  7511			{ },
  7512			{ { 0, -123 } }
  7513		},
  7514		/* BPF_JMP32 | BPF_JEQ | BPF_X */
  7515		{
  7516			"JMP32_JEQ_X",
  7517			.u.insns_int = {
  7518				BPF_ALU32_IMM(BPF_MOV, R0, 1234),
  7519				BPF_ALU32_IMM(BPF_MOV, R1, 4321),
  7520				BPF_JMP32_REG(BPF_JEQ, R0, R1, 2),
  7521				BPF_ALU32_IMM(BPF_MOV, R1, 1234),
  7522				BPF_JMP32_REG(BPF_JEQ, R0, R1, 1),
  7523				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7524				BPF_EXIT_INSN(),
  7525			},
  7526			INTERNAL,
  7527			{ },
  7528			{ { 0, 1234 } }
  7529		},
  7530		/* BPF_JMP32 | BPF_JNE | BPF_K */
  7531		{
  7532			"JMP32_JNE_K: Small immediate",
  7533			.u.insns_int = {
  7534				BPF_ALU32_IMM(BPF_MOV, R0, 123),
  7535				BPF_JMP32_IMM(BPF_JNE, R0, 123, 1),
  7536				BPF_JMP32_IMM(BPF_JNE, R0, 321, 1),
  7537				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7538				BPF_EXIT_INSN(),
  7539			},
  7540			INTERNAL,
  7541			{ },
  7542			{ { 0, 123 } }
  7543		},
  7544		{
  7545			"JMP32_JNE_K: Large immediate",
  7546			.u.insns_int = {
  7547				BPF_ALU32_IMM(BPF_MOV, R0, 12345678),
  7548				BPF_JMP32_IMM(BPF_JNE, R0, 12345678, 1),
  7549				BPF_JMP32_IMM(BPF_JNE, R0, 12345678 & 0xffff, 1),
  7550				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7551				BPF_EXIT_INSN(),
  7552			},
  7553			INTERNAL,
  7554			{ },
  7555			{ { 0, 12345678 } }
  7556		},
  7557		{
  7558			"JMP32_JNE_K: negative immediate",
  7559			.u.insns_int = {
  7560				BPF_ALU32_IMM(BPF_MOV, R0, -123),
  7561				BPF_JMP32_IMM(BPF_JNE, R0, -123, 1),
  7562				BPF_JMP32_IMM(BPF_JNE, R0,  123, 1),
  7563				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7564				BPF_EXIT_INSN(),
  7565			},
  7566			INTERNAL,
  7567			{ },
  7568			{ { 0, -123 } }
  7569		},
  7570		/* BPF_JMP32 | BPF_JNE | BPF_X */
  7571		{
  7572			"JMP32_JNE_X",
  7573			.u.insns_int = {
  7574				BPF_ALU32_IMM(BPF_MOV, R0, 1234),
  7575				BPF_ALU32_IMM(BPF_MOV, R1, 1234),
  7576				BPF_JMP32_REG(BPF_JNE, R0, R1, 2),
  7577				BPF_ALU32_IMM(BPF_MOV, R1, 4321),
  7578				BPF_JMP32_REG(BPF_JNE, R0, R1, 1),
  7579				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7580				BPF_EXIT_INSN(),
  7581			},
  7582			INTERNAL,
  7583			{ },
  7584			{ { 0, 1234 } }
  7585		},
  7586		/* BPF_JMP32 | BPF_JSET | BPF_K */
  7587		{
  7588			"JMP32_JSET_K: Small immediate",
  7589			.u.insns_int = {
  7590				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  7591				BPF_JMP32_IMM(BPF_JSET, R0, 2, 1),
  7592				BPF_JMP32_IMM(BPF_JSET, R0, 3, 1),
  7593				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7594				BPF_EXIT_INSN(),
  7595			},
  7596			INTERNAL,
  7597			{ },
  7598			{ { 0, 1 } }
  7599		},
  7600		{
  7601			"JMP32_JSET_K: Large immediate",
  7602			.u.insns_int = {
  7603				BPF_ALU32_IMM(BPF_MOV, R0, 0x40000000),
  7604				BPF_JMP32_IMM(BPF_JSET, R0, 0x3fffffff, 1),
  7605				BPF_JMP32_IMM(BPF_JSET, R0, 0x60000000, 1),
  7606				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7607				BPF_EXIT_INSN(),
  7608			},
  7609			INTERNAL,
  7610			{ },
  7611			{ { 0, 0x40000000 } }
  7612		},
  7613		{
  7614			"JMP32_JSET_K: negative immediate",
  7615			.u.insns_int = {
  7616				BPF_ALU32_IMM(BPF_MOV, R0, -123),
  7617				BPF_JMP32_IMM(BPF_JSET, R0, -1, 1),
  7618				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7619				BPF_EXIT_INSN(),
  7620			},
  7621			INTERNAL,
  7622			{ },
  7623			{ { 0, -123 } }
  7624		},
  7625		/* BPF_JMP32 | BPF_JSET | BPF_X */
  7626		{
  7627			"JMP32_JSET_X",
  7628			.u.insns_int = {
  7629				BPF_ALU32_IMM(BPF_MOV, R0, 8),
  7630				BPF_ALU32_IMM(BPF_MOV, R1, 7),
  7631				BPF_JMP32_REG(BPF_JSET, R0, R1, 2),
  7632				BPF_ALU32_IMM(BPF_MOV, R1, 8 | 2),
  7633				BPF_JMP32_REG(BPF_JNE, R0, R1, 1),
  7634				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7635				BPF_EXIT_INSN(),
  7636			},
  7637			INTERNAL,
  7638			{ },
  7639			{ { 0, 8 } }
  7640		},
  7641		/* BPF_JMP32 | BPF_JGT | BPF_K */
  7642		{
  7643			"JMP32_JGT_K: Small immediate",
  7644			.u.insns_int = {
  7645				BPF_ALU32_IMM(BPF_MOV, R0, 123),
  7646				BPF_JMP32_IMM(BPF_JGT, R0, 123, 1),
  7647				BPF_JMP32_IMM(BPF_JGT, R0, 122, 1),
  7648				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7649				BPF_EXIT_INSN(),
  7650			},
  7651			INTERNAL,
  7652			{ },
  7653			{ { 0, 123 } }
  7654		},
  7655		{
  7656			"JMP32_JGT_K: Large immediate",
  7657			.u.insns_int = {
  7658				BPF_ALU32_IMM(BPF_MOV, R0, 0xfffffffe),
  7659				BPF_JMP32_IMM(BPF_JGT, R0, 0xffffffff, 1),
  7660				BPF_JMP32_IMM(BPF_JGT, R0, 0xfffffffd, 1),
  7661				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7662				BPF_EXIT_INSN(),
  7663			},
  7664			INTERNAL,
  7665			{ },
  7666			{ { 0, 0xfffffffe } }
  7667		},
  7668		/* BPF_JMP32 | BPF_JGT | BPF_X */
  7669		{
  7670			"JMP32_JGT_X",
  7671			.u.insns_int = {
  7672				BPF_ALU32_IMM(BPF_MOV, R0, 0xfffffffe),
  7673				BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
  7674				BPF_JMP32_REG(BPF_JGT, R0, R1, 2),
  7675				BPF_ALU32_IMM(BPF_MOV, R1, 0xfffffffd),
  7676				BPF_JMP32_REG(BPF_JGT, R0, R1, 1),
  7677				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7678				BPF_EXIT_INSN(),
  7679			},
  7680			INTERNAL,
  7681			{ },
  7682			{ { 0, 0xfffffffe } }
  7683		},
  7684		/* BPF_JMP32 | BPF_JGE | BPF_K */
  7685		{
  7686			"JMP32_JGE_K: Small immediate",
  7687			.u.insns_int = {
  7688				BPF_ALU32_IMM(BPF_MOV, R0, 123),
  7689				BPF_JMP32_IMM(BPF_JGE, R0, 124, 1),
  7690				BPF_JMP32_IMM(BPF_JGE, R0, 123, 1),
  7691				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7692				BPF_EXIT_INSN(),
  7693			},
  7694			INTERNAL,
  7695			{ },
  7696			{ { 0, 123 } }
  7697		},
  7698		{
  7699			"JMP32_JGE_K: Large immediate",
  7700			.u.insns_int = {
  7701				BPF_ALU32_IMM(BPF_MOV, R0, 0xfffffffe),
  7702				BPF_JMP32_IMM(BPF_JGE, R0, 0xffffffff, 1),
  7703				BPF_JMP32_IMM(BPF_JGE, R0, 0xfffffffe, 1),
  7704				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7705				BPF_EXIT_INSN(),
  7706			},
  7707			INTERNAL,
  7708			{ },
  7709			{ { 0, 0xfffffffe } }
  7710		},
  7711		/* BPF_JMP32 | BPF_JGE | BPF_X */
  7712		{
  7713			"JMP32_JGE_X",
  7714			.u.insns_int = {
  7715				BPF_ALU32_IMM(BPF_MOV, R0, 0xfffffffe),
  7716				BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
  7717				BPF_JMP32_REG(BPF_JGE, R0, R1, 2),
  7718				BPF_ALU32_IMM(BPF_MOV, R1, 0xfffffffe),
  7719				BPF_JMP32_REG(BPF_JGE, R0, R1, 1),
  7720				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7721				BPF_EXIT_INSN(),
  7722			},
  7723			INTERNAL,
  7724			{ },
  7725			{ { 0, 0xfffffffe } }
  7726		},
  7727		/* BPF_JMP32 | BPF_JLT | BPF_K */
  7728		{
  7729			"JMP32_JLT_K: Small immediate",
  7730			.u.insns_int = {
  7731				BPF_ALU32_IMM(BPF_MOV, R0, 123),
  7732				BPF_JMP32_IMM(BPF_JLT, R0, 123, 1),
  7733				BPF_JMP32_IMM(BPF_JLT, R0, 124, 1),
  7734				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7735				BPF_EXIT_INSN(),
  7736			},
  7737			INTERNAL,
  7738			{ },
  7739			{ { 0, 123 } }
  7740		},
  7741		{
  7742			"JMP32_JLT_K: Large immediate",
  7743			.u.insns_int = {
  7744				BPF_ALU32_IMM(BPF_MOV, R0, 0xfffffffe),
  7745				BPF_JMP32_IMM(BPF_JLT, R0, 0xfffffffd, 1),
  7746				BPF_JMP32_IMM(BPF_JLT, R0, 0xffffffff, 1),
  7747				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7748				BPF_EXIT_INSN(),
  7749			},
  7750			INTERNAL,
  7751			{ },
  7752			{ { 0, 0xfffffffe } }
  7753		},
  7754		/* BPF_JMP32 | BPF_JLT | BPF_X */
  7755		{
  7756			"JMP32_JLT_X",
  7757			.u.insns_int = {
  7758				BPF_ALU32_IMM(BPF_MOV, R0, 0xfffffffe),
  7759				BPF_ALU32_IMM(BPF_MOV, R1, 0xfffffffd),
  7760				BPF_JMP32_REG(BPF_JLT, R0, R1, 2),
  7761				BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
  7762				BPF_JMP32_REG(BPF_JLT, R0, R1, 1),
  7763				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7764				BPF_EXIT_INSN(),
  7765			},
  7766			INTERNAL,
  7767			{ },
  7768			{ { 0, 0xfffffffe } }
  7769		},
  7770		/* BPF_JMP32 | BPF_JLE | BPF_K */
  7771		{
  7772			"JMP32_JLE_K: Small immediate",
  7773			.u.insns_int = {
  7774				BPF_ALU32_IMM(BPF_MOV, R0, 123),
  7775				BPF_JMP32_IMM(BPF_JLE, R0, 122, 1),
  7776				BPF_JMP32_IMM(BPF_JLE, R0, 123, 1),
  7777				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7778				BPF_EXIT_INSN(),
  7779			},
  7780			INTERNAL,
  7781			{ },
  7782			{ { 0, 123 } }
  7783		},
  7784		{
  7785			"JMP32_JLE_K: Large immediate",
  7786			.u.insns_int = {
  7787				BPF_ALU32_IMM(BPF_MOV, R0, 0xfffffffe),
  7788				BPF_JMP32_IMM(BPF_JLE, R0, 0xfffffffd, 1),
  7789				BPF_JMP32_IMM(BPF_JLE, R0, 0xfffffffe, 1),
  7790				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7791				BPF_EXIT_INSN(),
  7792			},
  7793			INTERNAL,
  7794			{ },
  7795			{ { 0, 0xfffffffe } }
  7796		},
  7797		/* BPF_JMP32 | BPF_JLE | BPF_X */
  7798		{
  7799			"JMP32_JLE_X",
  7800			.u.insns_int = {
  7801				BPF_ALU32_IMM(BPF_MOV, R0, 0xfffffffe),
  7802				BPF_ALU32_IMM(BPF_MOV, R1, 0xfffffffd),
  7803				BPF_JMP32_REG(BPF_JLE, R0, R1, 2),
  7804				BPF_ALU32_IMM(BPF_MOV, R1, 0xfffffffe),
  7805				BPF_JMP32_REG(BPF_JLE, R0, R1, 1),
  7806				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7807				BPF_EXIT_INSN(),
  7808			},
  7809			INTERNAL,
  7810			{ },
  7811			{ { 0, 0xfffffffe } }
  7812		},
  7813		/* BPF_JMP32 | BPF_JSGT | BPF_K */
  7814		{
  7815			"JMP32_JSGT_K: Small immediate",
  7816			.u.insns_int = {
  7817				BPF_ALU32_IMM(BPF_MOV, R0, -123),
  7818				BPF_JMP32_IMM(BPF_JSGT, R0, -123, 1),
  7819				BPF_JMP32_IMM(BPF_JSGT, R0, -124, 1),
  7820				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7821				BPF_EXIT_INSN(),
  7822			},
  7823			INTERNAL,
  7824			{ },
  7825			{ { 0, -123 } }
  7826		},
  7827		{
  7828			"JMP32_JSGT_K: Large immediate",
  7829			.u.insns_int = {
  7830				BPF_ALU32_IMM(BPF_MOV, R0, -12345678),
  7831				BPF_JMP32_IMM(BPF_JSGT, R0, -12345678, 1),
  7832				BPF_JMP32_IMM(BPF_JSGT, R0, -12345679, 1),
  7833				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7834				BPF_EXIT_INSN(),
  7835			},
  7836			INTERNAL,
  7837			{ },
  7838			{ { 0, -12345678 } }
  7839		},
  7840		/* BPF_JMP32 | BPF_JSGT | BPF_X */
  7841		{
  7842			"JMP32_JSGT_X",
  7843			.u.insns_int = {
  7844				BPF_ALU32_IMM(BPF_MOV, R0, -12345678),
  7845				BPF_ALU32_IMM(BPF_MOV, R1, -12345678),
  7846				BPF_JMP32_REG(BPF_JSGT, R0, R1, 2),
  7847				BPF_ALU32_IMM(BPF_MOV, R1, -12345679),
  7848				BPF_JMP32_REG(BPF_JSGT, R0, R1, 1),
  7849				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7850				BPF_EXIT_INSN(),
  7851			},
  7852			INTERNAL,
  7853			{ },
  7854			{ { 0, -12345678 } }
  7855		},
  7856		/* BPF_JMP32 | BPF_JSGE | BPF_K */
  7857		{
  7858			"JMP32_JSGE_K: Small immediate",
  7859			.u.insns_int = {
  7860				BPF_ALU32_IMM(BPF_MOV, R0, -123),
  7861				BPF_JMP32_IMM(BPF_JSGE, R0, -122, 1),
  7862				BPF_JMP32_IMM(BPF_JSGE, R0, -123, 1),
  7863				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7864				BPF_EXIT_INSN(),
  7865			},
  7866			INTERNAL,
  7867			{ },
  7868			{ { 0, -123 } }
  7869		},
  7870		{
  7871			"JMP32_JSGE_K: Large immediate",
  7872			.u.insns_int = {
  7873				BPF_ALU32_IMM(BPF_MOV, R0, -12345678),
  7874				BPF_JMP32_IMM(BPF_JSGE, R0, -12345677, 1),
  7875				BPF_JMP32_IMM(BPF_JSGE, R0, -12345678, 1),
  7876				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7877				BPF_EXIT_INSN(),
  7878			},
  7879			INTERNAL,
  7880			{ },
  7881			{ { 0, -12345678 } }
  7882		},
  7883		/* BPF_JMP32 | BPF_JSGE | BPF_X */
  7884		{
  7885			"JMP32_JSGE_X",
  7886			.u.insns_int = {
  7887				BPF_ALU32_IMM(BPF_MOV, R0, -12345678),
  7888				BPF_ALU32_IMM(BPF_MOV, R1, -12345677),
  7889				BPF_JMP32_REG(BPF_JSGE, R0, R1, 2),
  7890				BPF_ALU32_IMM(BPF_MOV, R1, -12345678),
  7891				BPF_JMP32_REG(BPF_JSGE, R0, R1, 1),
  7892				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7893				BPF_EXIT_INSN(),
  7894			},
  7895			INTERNAL,
  7896			{ },
  7897			{ { 0, -12345678 } }
  7898		},
  7899		/* BPF_JMP32 | BPF_JSLT | BPF_K */
  7900		{
  7901			"JMP32_JSLT_K: Small immediate",
  7902			.u.insns_int = {
  7903				BPF_ALU32_IMM(BPF_MOV, R0, -123),
  7904				BPF_JMP32_IMM(BPF_JSLT, R0, -123, 1),
  7905				BPF_JMP32_IMM(BPF_JSLT, R0, -122, 1),
  7906				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7907				BPF_EXIT_INSN(),
  7908			},
  7909			INTERNAL,
  7910			{ },
  7911			{ { 0, -123 } }
  7912		},
  7913		{
  7914			"JMP32_JSLT_K: Large immediate",
  7915			.u.insns_int = {
  7916				BPF_ALU32_IMM(BPF_MOV, R0, -12345678),
  7917				BPF_JMP32_IMM(BPF_JSLT, R0, -12345678, 1),
  7918				BPF_JMP32_IMM(BPF_JSLT, R0, -12345677, 1),
  7919				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7920				BPF_EXIT_INSN(),
  7921			},
  7922			INTERNAL,
  7923			{ },
  7924			{ { 0, -12345678 } }
  7925		},
  7926		/* BPF_JMP32 | BPF_JSLT | BPF_X */
  7927		{
  7928			"JMP32_JSLT_X",
  7929			.u.insns_int = {
  7930				BPF_ALU32_IMM(BPF_MOV, R0, -12345678),
  7931				BPF_ALU32_IMM(BPF_MOV, R1, -12345678),
  7932				BPF_JMP32_REG(BPF_JSLT, R0, R1, 2),
  7933				BPF_ALU32_IMM(BPF_MOV, R1, -12345677),
  7934				BPF_JMP32_REG(BPF_JSLT, R0, R1, 1),
  7935				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7936				BPF_EXIT_INSN(),
  7937			},
  7938			INTERNAL,
  7939			{ },
  7940			{ { 0, -12345678 } }
  7941		},
  7942		/* BPF_JMP32 | BPF_JSLE | BPF_K */
  7943		{
  7944			"JMP32_JSLE_K: Small immediate",
  7945			.u.insns_int = {
  7946				BPF_ALU32_IMM(BPF_MOV, R0, -123),
  7947				BPF_JMP32_IMM(BPF_JSLE, R0, -124, 1),
  7948				BPF_JMP32_IMM(BPF_JSLE, R0, -123, 1),
  7949				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7950				BPF_EXIT_INSN(),
  7951			},
  7952			INTERNAL,
  7953			{ },
  7954			{ { 0, -123 } }
  7955		},
  7956		{
  7957			"JMP32_JSLE_K: Large immediate",
  7958			.u.insns_int = {
  7959				BPF_ALU32_IMM(BPF_MOV, R0, -12345678),
  7960				BPF_JMP32_IMM(BPF_JSLE, R0, -12345679, 1),
  7961				BPF_JMP32_IMM(BPF_JSLE, R0, -12345678, 1),
  7962				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7963				BPF_EXIT_INSN(),
  7964			},
  7965			INTERNAL,
  7966			{ },
  7967			{ { 0, -12345678 } }
  7968		},
  7969		/* BPF_JMP32 | BPF_JSLE | BPF_K */
  7970		{
  7971			"JMP32_JSLE_X",
  7972			.u.insns_int = {
  7973				BPF_ALU32_IMM(BPF_MOV, R0, -12345678),
  7974				BPF_ALU32_IMM(BPF_MOV, R1, -12345679),
  7975				BPF_JMP32_REG(BPF_JSLE, R0, R1, 2),
  7976				BPF_ALU32_IMM(BPF_MOV, R1, -12345678),
  7977				BPF_JMP32_REG(BPF_JSLE, R0, R1, 1),
  7978				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  7979				BPF_EXIT_INSN(),
  7980			},
  7981			INTERNAL,
  7982			{ },
  7983			{ { 0, -12345678 } }
  7984		},
  7985		/* BPF_JMP | BPF_EXIT */
  7986		{
  7987			"JMP_EXIT",
  7988			.u.insns_int = {
  7989				BPF_ALU32_IMM(BPF_MOV, R0, 0x4711),
  7990				BPF_EXIT_INSN(),
  7991				BPF_ALU32_IMM(BPF_MOV, R0, 0x4712),
  7992			},
  7993			INTERNAL,
  7994			{ },
  7995			{ { 0, 0x4711 } },
  7996		},
  7997		/* BPF_JMP | BPF_JA */
  7998		{
  7999			"JMP_JA: Unconditional jump: if (true) return 1",
  8000			.u.insns_int = {
  8001				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8002				BPF_JMP_IMM(BPF_JA, 0, 0, 1),
  8003				BPF_EXIT_INSN(),
  8004				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8005				BPF_EXIT_INSN(),
  8006			},
  8007			INTERNAL,
  8008			{ },
  8009			{ { 0, 1 } },
  8010		},
  8011		/* BPF_JMP | BPF_JSLT | BPF_K */
  8012		{
  8013			"JMP_JSLT_K: Signed jump: if (-2 < -1) return 1",
  8014			.u.insns_int = {
  8015				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8016				BPF_LD_IMM64(R1, 0xfffffffffffffffeLL),
  8017				BPF_JMP_IMM(BPF_JSLT, R1, -1, 1),
  8018				BPF_EXIT_INSN(),
  8019				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8020				BPF_EXIT_INSN(),
  8021			},
  8022			INTERNAL,
  8023			{ },
  8024			{ { 0, 1 } },
  8025		},
  8026		{
  8027			"JMP_JSLT_K: Signed jump: if (-1 < -1) return 0",
  8028			.u.insns_int = {
  8029				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8030				BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
  8031				BPF_JMP_IMM(BPF_JSLT, R1, -1, 1),
  8032				BPF_EXIT_INSN(),
  8033				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8034				BPF_EXIT_INSN(),
  8035			},
  8036			INTERNAL,
  8037			{ },
  8038			{ { 0, 1 } },
  8039		},
  8040		/* BPF_JMP | BPF_JSGT | BPF_K */
  8041		{
  8042			"JMP_JSGT_K: Signed jump: if (-1 > -2) return 1",
  8043			.u.insns_int = {
  8044				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8045				BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
  8046				BPF_JMP_IMM(BPF_JSGT, R1, -2, 1),
  8047				BPF_EXIT_INSN(),
  8048				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8049				BPF_EXIT_INSN(),
  8050			},
  8051			INTERNAL,
  8052			{ },
  8053			{ { 0, 1 } },
  8054		},
  8055		{
  8056			"JMP_JSGT_K: Signed jump: if (-1 > -1) return 0",
  8057			.u.insns_int = {
  8058				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8059				BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
  8060				BPF_JMP_IMM(BPF_JSGT, R1, -1, 1),
  8061				BPF_EXIT_INSN(),
  8062				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8063				BPF_EXIT_INSN(),
  8064			},
  8065			INTERNAL,
  8066			{ },
  8067			{ { 0, 1 } },
  8068		},
  8069		/* BPF_JMP | BPF_JSLE | BPF_K */
  8070		{
  8071			"JMP_JSLE_K: Signed jump: if (-2 <= -1) return 1",
  8072			.u.insns_int = {
  8073				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8074				BPF_LD_IMM64(R1, 0xfffffffffffffffeLL),
  8075				BPF_JMP_IMM(BPF_JSLE, R1, -1, 1),
  8076				BPF_EXIT_INSN(),
  8077				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8078				BPF_EXIT_INSN(),
  8079			},
  8080			INTERNAL,
  8081			{ },
  8082			{ { 0, 1 } },
  8083		},
  8084		{
  8085			"JMP_JSLE_K: Signed jump: if (-1 <= -1) return 1",
  8086			.u.insns_int = {
  8087				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8088				BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
  8089				BPF_JMP_IMM(BPF_JSLE, R1, -1, 1),
  8090				BPF_EXIT_INSN(),
  8091				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8092				BPF_EXIT_INSN(),
  8093			},
  8094			INTERNAL,
  8095			{ },
  8096			{ { 0, 1 } },
  8097		},
  8098		{
  8099			"JMP_JSLE_K: Signed jump: value walk 1",
  8100			.u.insns_int = {
  8101				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8102				BPF_LD_IMM64(R1, 3),
  8103				BPF_JMP_IMM(BPF_JSLE, R1, 0, 6),
  8104				BPF_ALU64_IMM(BPF_SUB, R1, 1),
  8105				BPF_JMP_IMM(BPF_JSLE, R1, 0, 4),
  8106				BPF_ALU64_IMM(BPF_SUB, R1, 1),
  8107				BPF_JMP_IMM(BPF_JSLE, R1, 0, 2),
  8108				BPF_ALU64_IMM(BPF_SUB, R1, 1),
  8109				BPF_JMP_IMM(BPF_JSLE, R1, 0, 1),
  8110				BPF_EXIT_INSN(),		/* bad exit */
  8111				BPF_ALU32_IMM(BPF_MOV, R0, 1),	/* good exit */
  8112				BPF_EXIT_INSN(),
  8113			},
  8114			INTERNAL,
  8115			{ },
  8116			{ { 0, 1 } },
  8117		},
  8118		{
  8119			"JMP_JSLE_K: Signed jump: value walk 2",
  8120			.u.insns_int = {
  8121				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8122				BPF_LD_IMM64(R1, 3),
  8123				BPF_JMP_IMM(BPF_JSLE, R1, 0, 4),
  8124				BPF_ALU64_IMM(BPF_SUB, R1, 2),
  8125				BPF_JMP_IMM(BPF_JSLE, R1, 0, 2),
  8126				BPF_ALU64_IMM(BPF_SUB, R1, 2),
  8127				BPF_JMP_IMM(BPF_JSLE, R1, 0, 1),
  8128				BPF_EXIT_INSN(),		/* bad exit */
  8129				BPF_ALU32_IMM(BPF_MOV, R0, 1),	/* good exit */
  8130				BPF_EXIT_INSN(),
  8131			},
  8132			INTERNAL,
  8133			{ },
  8134			{ { 0, 1 } },
  8135		},
  8136		/* BPF_JMP | BPF_JSGE | BPF_K */
  8137		{
  8138			"JMP_JSGE_K: Signed jump: if (-1 >= -2) return 1",
  8139			.u.insns_int = {
  8140				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8141				BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
  8142				BPF_JMP_IMM(BPF_JSGE, R1, -2, 1),
  8143				BPF_EXIT_INSN(),
  8144				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8145				BPF_EXIT_INSN(),
  8146			},
  8147			INTERNAL,
  8148			{ },
  8149			{ { 0, 1 } },
  8150		},
  8151		{
  8152			"JMP_JSGE_K: Signed jump: if (-1 >= -1) return 1",
  8153			.u.insns_int = {
  8154				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8155				BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
  8156				BPF_JMP_IMM(BPF_JSGE, R1, -1, 1),
  8157				BPF_EXIT_INSN(),
  8158				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8159				BPF_EXIT_INSN(),
  8160			},
  8161			INTERNAL,
  8162			{ },
  8163			{ { 0, 1 } },
  8164		},
  8165		{
  8166			"JMP_JSGE_K: Signed jump: value walk 1",
  8167			.u.insns_int = {
  8168				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8169				BPF_LD_IMM64(R1, -3),
  8170				BPF_JMP_IMM(BPF_JSGE, R1, 0, 6),
  8171				BPF_ALU64_IMM(BPF_ADD, R1, 1),
  8172				BPF_JMP_IMM(BPF_JSGE, R1, 0, 4),
  8173				BPF_ALU64_IMM(BPF_ADD, R1, 1),
  8174				BPF_JMP_IMM(BPF_JSGE, R1, 0, 2),
  8175				BPF_ALU64_IMM(BPF_ADD, R1, 1),
  8176				BPF_JMP_IMM(BPF_JSGE, R1, 0, 1),
  8177				BPF_EXIT_INSN(),		/* bad exit */
  8178				BPF_ALU32_IMM(BPF_MOV, R0, 1),	/* good exit */
  8179				BPF_EXIT_INSN(),
  8180			},
  8181			INTERNAL,
  8182			{ },
  8183			{ { 0, 1 } },
  8184		},
  8185		{
  8186			"JMP_JSGE_K: Signed jump: value walk 2",
  8187			.u.insns_int = {
  8188				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8189				BPF_LD_IMM64(R1, -3),
  8190				BPF_JMP_IMM(BPF_JSGE, R1, 0, 4),
  8191				BPF_ALU64_IMM(BPF_ADD, R1, 2),
  8192				BPF_JMP_IMM(BPF_JSGE, R1, 0, 2),
  8193				BPF_ALU64_IMM(BPF_ADD, R1, 2),
  8194				BPF_JMP_IMM(BPF_JSGE, R1, 0, 1),
  8195				BPF_EXIT_INSN(),		/* bad exit */
  8196				BPF_ALU32_IMM(BPF_MOV, R0, 1),	/* good exit */
  8197				BPF_EXIT_INSN(),
  8198			},
  8199			INTERNAL,
  8200			{ },
  8201			{ { 0, 1 } },
  8202		},
  8203		/* BPF_JMP | BPF_JGT | BPF_K */
  8204		{
  8205			"JMP_JGT_K: if (3 > 2) return 1",
  8206			.u.insns_int = {
  8207				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8208				BPF_LD_IMM64(R1, 3),
  8209				BPF_JMP_IMM(BPF_JGT, R1, 2, 1),
  8210				BPF_EXIT_INSN(),
  8211				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8212				BPF_EXIT_INSN(),
  8213			},
  8214			INTERNAL,
  8215			{ },
  8216			{ { 0, 1 } },
  8217		},
  8218		{
  8219			"JMP_JGT_K: Unsigned jump: if (-1 > 1) return 1",
  8220			.u.insns_int = {
  8221				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8222				BPF_LD_IMM64(R1, -1),
  8223				BPF_JMP_IMM(BPF_JGT, R1, 1, 1),
  8224				BPF_EXIT_INSN(),
  8225				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8226				BPF_EXIT_INSN(),
  8227			},
  8228			INTERNAL,
  8229			{ },
  8230			{ { 0, 1 } },
  8231		},
  8232		/* BPF_JMP | BPF_JLT | BPF_K */
  8233		{
  8234			"JMP_JLT_K: if (2 < 3) return 1",
  8235			.u.insns_int = {
  8236				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8237				BPF_LD_IMM64(R1, 2),
  8238				BPF_JMP_IMM(BPF_JLT, R1, 3, 1),
  8239				BPF_EXIT_INSN(),
  8240				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8241				BPF_EXIT_INSN(),
  8242			},
  8243			INTERNAL,
  8244			{ },
  8245			{ { 0, 1 } },
  8246		},
  8247		{
  8248			"JMP_JGT_K: Unsigned jump: if (1 < -1) return 1",
  8249			.u.insns_int = {
  8250				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8251				BPF_LD_IMM64(R1, 1),
  8252				BPF_JMP_IMM(BPF_JLT, R1, -1, 1),
  8253				BPF_EXIT_INSN(),
  8254				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8255				BPF_EXIT_INSN(),
  8256			},
  8257			INTERNAL,
  8258			{ },
  8259			{ { 0, 1 } },
  8260		},
  8261		/* BPF_JMP | BPF_JGE | BPF_K */
  8262		{
  8263			"JMP_JGE_K: if (3 >= 2) return 1",
  8264			.u.insns_int = {
  8265				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8266				BPF_LD_IMM64(R1, 3),
  8267				BPF_JMP_IMM(BPF_JGE, R1, 2, 1),
  8268				BPF_EXIT_INSN(),
  8269				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8270				BPF_EXIT_INSN(),
  8271			},
  8272			INTERNAL,
  8273			{ },
  8274			{ { 0, 1 } },
  8275		},
  8276		/* BPF_JMP | BPF_JLE | BPF_K */
  8277		{
  8278			"JMP_JLE_K: if (2 <= 3) return 1",
  8279			.u.insns_int = {
  8280				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8281				BPF_LD_IMM64(R1, 2),
  8282				BPF_JMP_IMM(BPF_JLE, R1, 3, 1),
  8283				BPF_EXIT_INSN(),
  8284				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8285				BPF_EXIT_INSN(),
  8286			},
  8287			INTERNAL,
  8288			{ },
  8289			{ { 0, 1 } },
  8290		},
  8291		/* BPF_JMP | BPF_JGT | BPF_K jump backwards */
  8292		{
  8293			"JMP_JGT_K: if (3 > 2) return 1 (jump backwards)",
  8294			.u.insns_int = {
  8295				BPF_JMP_IMM(BPF_JA, 0, 0, 2), /* goto start */
  8296				BPF_ALU32_IMM(BPF_MOV, R0, 1), /* out: */
  8297				BPF_EXIT_INSN(),
  8298				BPF_ALU32_IMM(BPF_MOV, R0, 0), /* start: */
  8299				BPF_LD_IMM64(R1, 3), /* note: this takes 2 insns */
  8300				BPF_JMP_IMM(BPF_JGT, R1, 2, -6), /* goto out */
  8301				BPF_EXIT_INSN(),
  8302			},
  8303			INTERNAL,
  8304			{ },
  8305			{ { 0, 1 } },
  8306		},
  8307		{
  8308			"JMP_JGE_K: if (3 >= 3) return 1",
  8309			.u.insns_int = {
  8310				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8311				BPF_LD_IMM64(R1, 3),
  8312				BPF_JMP_IMM(BPF_JGE, R1, 3, 1),
  8313				BPF_EXIT_INSN(),
  8314				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8315				BPF_EXIT_INSN(),
  8316			},
  8317			INTERNAL,
  8318			{ },
  8319			{ { 0, 1 } },
  8320		},
  8321		/* BPF_JMP | BPF_JLT | BPF_K jump backwards */
  8322		{
  8323			"JMP_JGT_K: if (2 < 3) return 1 (jump backwards)",
  8324			.u.insns_int = {
  8325				BPF_JMP_IMM(BPF_JA, 0, 0, 2), /* goto start */
  8326				BPF_ALU32_IMM(BPF_MOV, R0, 1), /* out: */
  8327				BPF_EXIT_INSN(),
  8328				BPF_ALU32_IMM(BPF_MOV, R0, 0), /* start: */
  8329				BPF_LD_IMM64(R1, 2), /* note: this takes 2 insns */
  8330				BPF_JMP_IMM(BPF_JLT, R1, 3, -6), /* goto out */
  8331				BPF_EXIT_INSN(),
  8332			},
  8333			INTERNAL,
  8334			{ },
  8335			{ { 0, 1 } },
  8336		},
  8337		{
  8338			"JMP_JLE_K: if (3 <= 3) return 1",
  8339			.u.insns_int = {
  8340				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8341				BPF_LD_IMM64(R1, 3),
  8342				BPF_JMP_IMM(BPF_JLE, R1, 3, 1),
  8343				BPF_EXIT_INSN(),
  8344				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8345				BPF_EXIT_INSN(),
  8346			},
  8347			INTERNAL,
  8348			{ },
  8349			{ { 0, 1 } },
  8350		},
  8351		/* BPF_JMP | BPF_JNE | BPF_K */
  8352		{
  8353			"JMP_JNE_K: if (3 != 2) return 1",
  8354			.u.insns_int = {
  8355				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8356				BPF_LD_IMM64(R1, 3),
  8357				BPF_JMP_IMM(BPF_JNE, R1, 2, 1),
  8358				BPF_EXIT_INSN(),
  8359				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8360				BPF_EXIT_INSN(),
  8361			},
  8362			INTERNAL,
  8363			{ },
  8364			{ { 0, 1 } },
  8365		},
  8366		/* BPF_JMP | BPF_JEQ | BPF_K */
  8367		{
  8368			"JMP_JEQ_K: if (3 == 3) return 1",
  8369			.u.insns_int = {
  8370				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8371				BPF_LD_IMM64(R1, 3),
  8372				BPF_JMP_IMM(BPF_JEQ, R1, 3, 1),
  8373				BPF_EXIT_INSN(),
  8374				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8375				BPF_EXIT_INSN(),
  8376			},
  8377			INTERNAL,
  8378			{ },
  8379			{ { 0, 1 } },
  8380		},
  8381		/* BPF_JMP | BPF_JSET | BPF_K */
  8382		{
  8383			"JMP_JSET_K: if (0x3 & 0x2) return 1",
  8384			.u.insns_int = {
  8385				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8386				BPF_LD_IMM64(R1, 3),
  8387				BPF_JMP_IMM(BPF_JSET, R1, 2, 1),
  8388				BPF_EXIT_INSN(),
  8389				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8390				BPF_EXIT_INSN(),
  8391			},
  8392			INTERNAL,
  8393			{ },
  8394			{ { 0, 1 } },
  8395		},
  8396		{
  8397			"JMP_JSET_K: if (0x3 & 0xffffffff) return 1",
  8398			.u.insns_int = {
  8399				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8400				BPF_LD_IMM64(R1, 3),
  8401				BPF_JMP_IMM(BPF_JSET, R1, 0xffffffff, 1),
  8402				BPF_EXIT_INSN(),
  8403				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8404				BPF_EXIT_INSN(),
  8405			},
  8406			INTERNAL,
  8407			{ },
  8408			{ { 0, 1 } },
  8409		},
  8410		/* BPF_JMP | BPF_JSGT | BPF_X */
  8411		{
  8412			"JMP_JSGT_X: Signed jump: if (-1 > -2) return 1",
  8413			.u.insns_int = {
  8414				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8415				BPF_LD_IMM64(R1, -1),
  8416				BPF_LD_IMM64(R2, -2),
  8417				BPF_JMP_REG(BPF_JSGT, R1, R2, 1),
  8418				BPF_EXIT_INSN(),
  8419				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8420				BPF_EXIT_INSN(),
  8421			},
  8422			INTERNAL,
  8423			{ },
  8424			{ { 0, 1 } },
  8425		},
  8426		{
  8427			"JMP_JSGT_X: Signed jump: if (-1 > -1) return 0",
  8428			.u.insns_int = {
  8429				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8430				BPF_LD_IMM64(R1, -1),
  8431				BPF_LD_IMM64(R2, -1),
  8432				BPF_JMP_REG(BPF_JSGT, R1, R2, 1),
  8433				BPF_EXIT_INSN(),
  8434				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8435				BPF_EXIT_INSN(),
  8436			},
  8437			INTERNAL,
  8438			{ },
  8439			{ { 0, 1 } },
  8440		},
  8441		/* BPF_JMP | BPF_JSLT | BPF_X */
  8442		{
  8443			"JMP_JSLT_X: Signed jump: if (-2 < -1) return 1",
  8444			.u.insns_int = {
  8445				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8446				BPF_LD_IMM64(R1, -1),
  8447				BPF_LD_IMM64(R2, -2),
  8448				BPF_JMP_REG(BPF_JSLT, R2, R1, 1),
  8449				BPF_EXIT_INSN(),
  8450				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8451				BPF_EXIT_INSN(),
  8452			},
  8453			INTERNAL,
  8454			{ },
  8455			{ { 0, 1 } },
  8456		},
  8457		{
  8458			"JMP_JSLT_X: Signed jump: if (-1 < -1) return 0",
  8459			.u.insns_int = {
  8460				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8461				BPF_LD_IMM64(R1, -1),
  8462				BPF_LD_IMM64(R2, -1),
  8463				BPF_JMP_REG(BPF_JSLT, R1, R2, 1),
  8464				BPF_EXIT_INSN(),
  8465				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8466				BPF_EXIT_INSN(),
  8467			},
  8468			INTERNAL,
  8469			{ },
  8470			{ { 0, 1 } },
  8471		},
  8472		/* BPF_JMP | BPF_JSGE | BPF_X */
  8473		{
  8474			"JMP_JSGE_X: Signed jump: if (-1 >= -2) return 1",
  8475			.u.insns_int = {
  8476				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8477				BPF_LD_IMM64(R1, -1),
  8478				BPF_LD_IMM64(R2, -2),
  8479				BPF_JMP_REG(BPF_JSGE, R1, R2, 1),
  8480				BPF_EXIT_INSN(),
  8481				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8482				BPF_EXIT_INSN(),
  8483			},
  8484			INTERNAL,
  8485			{ },
  8486			{ { 0, 1 } },
  8487		},
  8488		{
  8489			"JMP_JSGE_X: Signed jump: if (-1 >= -1) return 1",
  8490			.u.insns_int = {
  8491				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8492				BPF_LD_IMM64(R1, -1),
  8493				BPF_LD_IMM64(R2, -1),
  8494				BPF_JMP_REG(BPF_JSGE, R1, R2, 1),
  8495				BPF_EXIT_INSN(),
  8496				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8497				BPF_EXIT_INSN(),
  8498			},
  8499			INTERNAL,
  8500			{ },
  8501			{ { 0, 1 } },
  8502		},
  8503		/* BPF_JMP | BPF_JSLE | BPF_X */
  8504		{
  8505			"JMP_JSLE_X: Signed jump: if (-2 <= -1) return 1",
  8506			.u.insns_int = {
  8507				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8508				BPF_LD_IMM64(R1, -1),
  8509				BPF_LD_IMM64(R2, -2),
  8510				BPF_JMP_REG(BPF_JSLE, R2, R1, 1),
  8511				BPF_EXIT_INSN(),
  8512				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8513				BPF_EXIT_INSN(),
  8514			},
  8515			INTERNAL,
  8516			{ },
  8517			{ { 0, 1 } },
  8518		},
  8519		{
  8520			"JMP_JSLE_X: Signed jump: if (-1 <= -1) return 1",
  8521			.u.insns_int = {
  8522				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8523				BPF_LD_IMM64(R1, -1),
  8524				BPF_LD_IMM64(R2, -1),
  8525				BPF_JMP_REG(BPF_JSLE, R1, R2, 1),
  8526				BPF_EXIT_INSN(),
  8527				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8528				BPF_EXIT_INSN(),
  8529			},
  8530			INTERNAL,
  8531			{ },
  8532			{ { 0, 1 } },
  8533		},
  8534		/* BPF_JMP | BPF_JGT | BPF_X */
  8535		{
  8536			"JMP_JGT_X: if (3 > 2) return 1",
  8537			.u.insns_int = {
  8538				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8539				BPF_LD_IMM64(R1, 3),
  8540				BPF_LD_IMM64(R2, 2),
  8541				BPF_JMP_REG(BPF_JGT, R1, R2, 1),
  8542				BPF_EXIT_INSN(),
  8543				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8544				BPF_EXIT_INSN(),
  8545			},
  8546			INTERNAL,
  8547			{ },
  8548			{ { 0, 1 } },
  8549		},
  8550		{
  8551			"JMP_JGT_X: Unsigned jump: if (-1 > 1) return 1",
  8552			.u.insns_int = {
  8553				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8554				BPF_LD_IMM64(R1, -1),
  8555				BPF_LD_IMM64(R2, 1),
  8556				BPF_JMP_REG(BPF_JGT, R1, R2, 1),
  8557				BPF_EXIT_INSN(),
  8558				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8559				BPF_EXIT_INSN(),
  8560			},
  8561			INTERNAL,
  8562			{ },
  8563			{ { 0, 1 } },
  8564		},
  8565		/* BPF_JMP | BPF_JLT | BPF_X */
  8566		{
  8567			"JMP_JLT_X: if (2 < 3) return 1",
  8568			.u.insns_int = {
  8569				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8570				BPF_LD_IMM64(R1, 3),
  8571				BPF_LD_IMM64(R2, 2),
  8572				BPF_JMP_REG(BPF_JLT, R2, R1, 1),
  8573				BPF_EXIT_INSN(),
  8574				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8575				BPF_EXIT_INSN(),
  8576			},
  8577			INTERNAL,
  8578			{ },
  8579			{ { 0, 1 } },
  8580		},
  8581		{
  8582			"JMP_JLT_X: Unsigned jump: if (1 < -1) return 1",
  8583			.u.insns_int = {
  8584				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8585				BPF_LD_IMM64(R1, -1),
  8586				BPF_LD_IMM64(R2, 1),
  8587				BPF_JMP_REG(BPF_JLT, R2, R1, 1),
  8588				BPF_EXIT_INSN(),
  8589				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8590				BPF_EXIT_INSN(),
  8591			},
  8592			INTERNAL,
  8593			{ },
  8594			{ { 0, 1 } },
  8595		},
  8596		/* BPF_JMP | BPF_JGE | BPF_X */
  8597		{
  8598			"JMP_JGE_X: if (3 >= 2) return 1",
  8599			.u.insns_int = {
  8600				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8601				BPF_LD_IMM64(R1, 3),
  8602				BPF_LD_IMM64(R2, 2),
  8603				BPF_JMP_REG(BPF_JGE, R1, R2, 1),
  8604				BPF_EXIT_INSN(),
  8605				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8606				BPF_EXIT_INSN(),
  8607			},
  8608			INTERNAL,
  8609			{ },
  8610			{ { 0, 1 } },
  8611		},
  8612		{
  8613			"JMP_JGE_X: if (3 >= 3) return 1",
  8614			.u.insns_int = {
  8615				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8616				BPF_LD_IMM64(R1, 3),
  8617				BPF_LD_IMM64(R2, 3),
  8618				BPF_JMP_REG(BPF_JGE, R1, R2, 1),
  8619				BPF_EXIT_INSN(),
  8620				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8621				BPF_EXIT_INSN(),
  8622			},
  8623			INTERNAL,
  8624			{ },
  8625			{ { 0, 1 } },
  8626		},
  8627		/* BPF_JMP | BPF_JLE | BPF_X */
  8628		{
  8629			"JMP_JLE_X: if (2 <= 3) return 1",
  8630			.u.insns_int = {
  8631				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8632				BPF_LD_IMM64(R1, 3),
  8633				BPF_LD_IMM64(R2, 2),
  8634				BPF_JMP_REG(BPF_JLE, R2, R1, 1),
  8635				BPF_EXIT_INSN(),
  8636				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8637				BPF_EXIT_INSN(),
  8638			},
  8639			INTERNAL,
  8640			{ },
  8641			{ { 0, 1 } },
  8642		},
  8643		{
  8644			"JMP_JLE_X: if (3 <= 3) return 1",
  8645			.u.insns_int = {
  8646				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8647				BPF_LD_IMM64(R1, 3),
  8648				BPF_LD_IMM64(R2, 3),
  8649				BPF_JMP_REG(BPF_JLE, R1, R2, 1),
  8650				BPF_EXIT_INSN(),
  8651				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8652				BPF_EXIT_INSN(),
  8653			},
  8654			INTERNAL,
  8655			{ },
  8656			{ { 0, 1 } },
  8657		},
  8658		{
  8659			/* Mainly testing JIT + imm64 here. */
  8660			"JMP_JGE_X: ldimm64 test 1",
  8661			.u.insns_int = {
  8662				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8663				BPF_LD_IMM64(R1, 3),
  8664				BPF_LD_IMM64(R2, 2),
  8665				BPF_JMP_REG(BPF_JGE, R1, R2, 2),
  8666				BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
  8667				BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
  8668				BPF_EXIT_INSN(),
  8669			},
  8670			INTERNAL,
  8671			{ },
  8672			{ { 0, 0xeeeeeeeeU } },
  8673		},
  8674		{
  8675			"JMP_JGE_X: ldimm64 test 2",
  8676			.u.insns_int = {
  8677				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8678				BPF_LD_IMM64(R1, 3),
  8679				BPF_LD_IMM64(R2, 2),
  8680				BPF_JMP_REG(BPF_JGE, R1, R2, 0),
  8681				BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
  8682				BPF_EXIT_INSN(),
  8683			},
  8684			INTERNAL,
  8685			{ },
  8686			{ { 0, 0xffffffffU } },
  8687		},
  8688		{
  8689			"JMP_JGE_X: ldimm64 test 3",
  8690			.u.insns_int = {
  8691				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8692				BPF_LD_IMM64(R1, 3),
  8693				BPF_LD_IMM64(R2, 2),
  8694				BPF_JMP_REG(BPF_JGE, R1, R2, 4),
  8695				BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
  8696				BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
  8697				BPF_EXIT_INSN(),
  8698			},
  8699			INTERNAL,
  8700			{ },
  8701			{ { 0, 1 } },
  8702		},
  8703		{
  8704			"JMP_JLE_X: ldimm64 test 1",
  8705			.u.insns_int = {
  8706				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8707				BPF_LD_IMM64(R1, 3),
  8708				BPF_LD_IMM64(R2, 2),
  8709				BPF_JMP_REG(BPF_JLE, R2, R1, 2),
  8710				BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
  8711				BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
  8712				BPF_EXIT_INSN(),
  8713			},
  8714			INTERNAL,
  8715			{ },
  8716			{ { 0, 0xeeeeeeeeU } },
  8717		},
  8718		{
  8719			"JMP_JLE_X: ldimm64 test 2",
  8720			.u.insns_int = {
  8721				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8722				BPF_LD_IMM64(R1, 3),
  8723				BPF_LD_IMM64(R2, 2),
  8724				BPF_JMP_REG(BPF_JLE, R2, R1, 0),
  8725				BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
  8726				BPF_EXIT_INSN(),
  8727			},
  8728			INTERNAL,
  8729			{ },
  8730			{ { 0, 0xffffffffU } },
  8731		},
  8732		{
  8733			"JMP_JLE_X: ldimm64 test 3",
  8734			.u.insns_int = {
  8735				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8736				BPF_LD_IMM64(R1, 3),
  8737				BPF_LD_IMM64(R2, 2),
  8738				BPF_JMP_REG(BPF_JLE, R2, R1, 4),
  8739				BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
  8740				BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
  8741				BPF_EXIT_INSN(),
  8742			},
  8743			INTERNAL,
  8744			{ },
  8745			{ { 0, 1 } },
  8746		},
  8747		/* BPF_JMP | BPF_JNE | BPF_X */
  8748		{
  8749			"JMP_JNE_X: if (3 != 2) return 1",
  8750			.u.insns_int = {
  8751				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8752				BPF_LD_IMM64(R1, 3),
  8753				BPF_LD_IMM64(R2, 2),
  8754				BPF_JMP_REG(BPF_JNE, R1, R2, 1),
  8755				BPF_EXIT_INSN(),
  8756				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8757				BPF_EXIT_INSN(),
  8758			},
  8759			INTERNAL,
  8760			{ },
  8761			{ { 0, 1 } },
  8762		},
  8763		/* BPF_JMP | BPF_JEQ | BPF_X */
  8764		{
  8765			"JMP_JEQ_X: if (3 == 3) return 1",
  8766			.u.insns_int = {
  8767				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8768				BPF_LD_IMM64(R1, 3),
  8769				BPF_LD_IMM64(R2, 3),
  8770				BPF_JMP_REG(BPF_JEQ, R1, R2, 1),
  8771				BPF_EXIT_INSN(),
  8772				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8773				BPF_EXIT_INSN(),
  8774			},
  8775			INTERNAL,
  8776			{ },
  8777			{ { 0, 1 } },
  8778		},
  8779		/* BPF_JMP | BPF_JSET | BPF_X */
  8780		{
  8781			"JMP_JSET_X: if (0x3 & 0x2) return 1",
  8782			.u.insns_int = {
  8783				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8784				BPF_LD_IMM64(R1, 3),
  8785				BPF_LD_IMM64(R2, 2),
  8786				BPF_JMP_REG(BPF_JSET, R1, R2, 1),
  8787				BPF_EXIT_INSN(),
  8788				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8789				BPF_EXIT_INSN(),
  8790			},
  8791			INTERNAL,
  8792			{ },
  8793			{ { 0, 1 } },
  8794		},
  8795		{
  8796			"JMP_JSET_X: if (0x3 & 0xffffffff) return 1",
  8797			.u.insns_int = {
  8798				BPF_ALU32_IMM(BPF_MOV, R0, 0),
  8799				BPF_LD_IMM64(R1, 3),
  8800				BPF_LD_IMM64(R2, 0xffffffff),
  8801				BPF_JMP_REG(BPF_JSET, R1, R2, 1),
  8802				BPF_EXIT_INSN(),
  8803				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  8804				BPF_EXIT_INSN(),
  8805			},
  8806			INTERNAL,
  8807			{ },
  8808			{ { 0, 1 } },
  8809		},
  8810		{
  8811			"JMP_JA: Jump, gap, jump, ...",
  8812			{ },
  8813			CLASSIC | FLAG_NO_DATA,
  8814			{ },
  8815			{ { 0, 0xababcbac } },
  8816			.fill_helper = bpf_fill_ja,
  8817		},
  8818		{	/* Mainly checking JIT here. */
  8819			"BPF_MAXINSNS: Maximum possible literals",
  8820			{ },
  8821			CLASSIC | FLAG_NO_DATA,
  8822			{ },
  8823			{ { 0, 0xffffffff } },
  8824			.fill_helper = bpf_fill_maxinsns1,
  8825		},
  8826		{	/* Mainly checking JIT here. */
  8827			"BPF_MAXINSNS: Single literal",
  8828			{ },
  8829			CLASSIC | FLAG_NO_DATA,
  8830			{ },
  8831			{ { 0, 0xfefefefe } },
  8832			.fill_helper = bpf_fill_maxinsns2,
  8833		},
  8834		{	/* Mainly checking JIT here. */
  8835			"BPF_MAXINSNS: Run/add until end",
  8836			{ },
  8837			CLASSIC | FLAG_NO_DATA,
  8838			{ },
  8839			{ { 0, 0x947bf368 } },
  8840			.fill_helper = bpf_fill_maxinsns3,
  8841		},
  8842		{
  8843			"BPF_MAXINSNS: Too many instructions",
  8844			{ },
  8845			CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
  8846			{ },
  8847			{ },
  8848			.fill_helper = bpf_fill_maxinsns4,
  8849			.expected_errcode = -EINVAL,
  8850		},
  8851		{	/* Mainly checking JIT here. */
  8852			"BPF_MAXINSNS: Very long jump",
  8853			{ },
  8854			CLASSIC | FLAG_NO_DATA,
  8855			{ },
  8856			{ { 0, 0xabababab } },
  8857			.fill_helper = bpf_fill_maxinsns5,
  8858		},
  8859		{	/* Mainly checking JIT here. */
  8860			"BPF_MAXINSNS: Ctx heavy transformations",
  8861			{ },
  8862			CLASSIC,
  8863			{ },
  8864			{
  8865				{  1, SKB_VLAN_PRESENT },
  8866				{ 10, SKB_VLAN_PRESENT }
  8867			},
  8868			.fill_helper = bpf_fill_maxinsns6,
  8869		},
  8870		{	/* Mainly checking JIT here. */
  8871			"BPF_MAXINSNS: Call heavy transformations",
  8872			{ },
  8873			CLASSIC | FLAG_NO_DATA,
  8874			{ },
  8875			{ { 1, 0 }, { 10, 0 } },
  8876			.fill_helper = bpf_fill_maxinsns7,
  8877		},
  8878		{	/* Mainly checking JIT here. */
  8879			"BPF_MAXINSNS: Jump heavy test",
  8880			{ },
  8881			CLASSIC | FLAG_NO_DATA,
  8882			{ },
  8883			{ { 0, 0xffffffff } },
  8884			.fill_helper = bpf_fill_maxinsns8,
  8885		},
  8886		{	/* Mainly checking JIT here. */
  8887			"BPF_MAXINSNS: Very long jump backwards",
  8888			{ },
  8889			INTERNAL | FLAG_NO_DATA,
  8890			{ },
  8891			{ { 0, 0xcbababab } },
  8892			.fill_helper = bpf_fill_maxinsns9,
  8893		},
  8894		{	/* Mainly checking JIT here. */
  8895			"BPF_MAXINSNS: Edge hopping nuthouse",
  8896			{ },
  8897			INTERNAL | FLAG_NO_DATA,
  8898			{ },
  8899			{ { 0, 0xabababac } },
  8900			.fill_helper = bpf_fill_maxinsns10,
  8901		},
  8902		{
  8903			"BPF_MAXINSNS: Jump, gap, jump, ...",
  8904			{ },
  8905			CLASSIC | FLAG_NO_DATA,
  8906			{ },
  8907			{ { 0, 0xababcbac } },
  8908			.fill_helper = bpf_fill_maxinsns11,
  8909		},
  8910		{
  8911			"BPF_MAXINSNS: jump over MSH",
  8912			{ },
  8913			CLASSIC | FLAG_EXPECTED_FAIL,
  8914			{ 0xfa, 0xfb, 0xfc, 0xfd, },
  8915			{ { 4, 0xabababab } },
  8916			.fill_helper = bpf_fill_maxinsns12,
  8917			.expected_errcode = -EINVAL,
  8918		},
  8919		{
  8920			"BPF_MAXINSNS: exec all MSH",
  8921			{ },
  8922			CLASSIC,
  8923			{ 0xfa, 0xfb, 0xfc, 0xfd, },
  8924			{ { 4, 0xababab83 } },
  8925			.fill_helper = bpf_fill_maxinsns13,
  8926		},
  8927		{
  8928			"BPF_MAXINSNS: ld_abs+get_processor_id",
  8929			{ },
  8930			CLASSIC,
  8931			{ },
  8932			{ { 1, 0xbee } },
  8933			.fill_helper = bpf_fill_ld_abs_get_processor_id,
  8934		},
  8935		/*
  8936		 * LD_IND / LD_ABS on fragmented SKBs
  8937		 */
  8938		{
  8939			"LD_IND byte frag",
  8940			.u.insns = {
  8941				BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
  8942				BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x0),
  8943				BPF_STMT(BPF_RET | BPF_A, 0x0),
  8944			},
  8945			CLASSIC | FLAG_SKB_FRAG,
  8946			{ },
  8947			{ {0x40, 0x42} },
  8948			.frag_data = {
  8949				0x42, 0x00, 0x00, 0x00,
  8950				0x43, 0x44, 0x00, 0x00,
  8951				0x21, 0x07, 0x19, 0x83,
  8952			},
  8953		},
  8954		{
  8955			"LD_IND halfword frag",
  8956			.u.insns = {
  8957				BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
  8958				BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x4),
  8959				BPF_STMT(BPF_RET | BPF_A, 0x0),
  8960			},
  8961			CLASSIC | FLAG_SKB_FRAG,
  8962			{ },
  8963			{ {0x40, 0x4344} },
  8964			.frag_data = {
  8965				0x42, 0x00, 0x00, 0x00,
  8966				0x43, 0x44, 0x00, 0x00,
  8967				0x21, 0x07, 0x19, 0x83,
  8968			},
  8969		},
  8970		{
  8971			"LD_IND word frag",
  8972			.u.insns = {
  8973				BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
  8974				BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x8),
  8975				BPF_STMT(BPF_RET | BPF_A, 0x0),
  8976			},
  8977			CLASSIC | FLAG_SKB_FRAG,
  8978			{ },
  8979			{ {0x40, 0x21071983} },
  8980			.frag_data = {
  8981				0x42, 0x00, 0x00, 0x00,
  8982				0x43, 0x44, 0x00, 0x00,
  8983				0x21, 0x07, 0x19, 0x83,
  8984			},
  8985		},
  8986		{
  8987			"LD_IND halfword mixed head/frag",
  8988			.u.insns = {
  8989				BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
  8990				BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x1),
  8991				BPF_STMT(BPF_RET | BPF_A, 0x0),
  8992			},
  8993			CLASSIC | FLAG_SKB_FRAG,
  8994			{ [0x3e] = 0x25, [0x3f] = 0x05, },
  8995			{ {0x40, 0x0519} },
  8996			.frag_data = { 0x19, 0x82 },
  8997		},
  8998		{
  8999			"LD_IND word mixed head/frag",
  9000			.u.insns = {
  9001				BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
  9002				BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x2),
  9003				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9004			},
  9005			CLASSIC | FLAG_SKB_FRAG,
  9006			{ [0x3e] = 0x25, [0x3f] = 0x05, },
  9007			{ {0x40, 0x25051982} },
  9008			.frag_data = { 0x19, 0x82 },
  9009		},
  9010		{
  9011			"LD_ABS byte frag",
  9012			.u.insns = {
  9013				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x40),
  9014				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9015			},
  9016			CLASSIC | FLAG_SKB_FRAG,
  9017			{ },
  9018			{ {0x40, 0x42} },
  9019			.frag_data = {
  9020				0x42, 0x00, 0x00, 0x00,
  9021				0x43, 0x44, 0x00, 0x00,
  9022				0x21, 0x07, 0x19, 0x83,
  9023			},
  9024		},
  9025		{
  9026			"LD_ABS halfword frag",
  9027			.u.insns = {
  9028				BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x44),
  9029				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9030			},
  9031			CLASSIC | FLAG_SKB_FRAG,
  9032			{ },
  9033			{ {0x40, 0x4344} },
  9034			.frag_data = {
  9035				0x42, 0x00, 0x00, 0x00,
  9036				0x43, 0x44, 0x00, 0x00,
  9037				0x21, 0x07, 0x19, 0x83,
  9038			},
  9039		},
  9040		{
  9041			"LD_ABS word frag",
  9042			.u.insns = {
  9043				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x48),
  9044				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9045			},
  9046			CLASSIC | FLAG_SKB_FRAG,
  9047			{ },
  9048			{ {0x40, 0x21071983} },
  9049			.frag_data = {
  9050				0x42, 0x00, 0x00, 0x00,
  9051				0x43, 0x44, 0x00, 0x00,
  9052				0x21, 0x07, 0x19, 0x83,
  9053			},
  9054		},
  9055		{
  9056			"LD_ABS halfword mixed head/frag",
  9057			.u.insns = {
  9058				BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x3f),
  9059				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9060			},
  9061			CLASSIC | FLAG_SKB_FRAG,
  9062			{ [0x3e] = 0x25, [0x3f] = 0x05, },
  9063			{ {0x40, 0x0519} },
  9064			.frag_data = { 0x19, 0x82 },
  9065		},
  9066		{
  9067			"LD_ABS word mixed head/frag",
  9068			.u.insns = {
  9069				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x3e),
  9070				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9071			},
  9072			CLASSIC | FLAG_SKB_FRAG,
  9073			{ [0x3e] = 0x25, [0x3f] = 0x05, },
  9074			{ {0x40, 0x25051982} },
  9075			.frag_data = { 0x19, 0x82 },
  9076		},
  9077		/*
  9078		 * LD_IND / LD_ABS on non fragmented SKBs
  9079		 */
  9080		{
  9081			/*
  9082			 * this tests that the JIT/interpreter correctly resets X
  9083			 * before using it in an LD_IND instruction.
  9084			 */
  9085			"LD_IND byte default X",
  9086			.u.insns = {
  9087				BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1),
  9088				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9089			},
  9090			CLASSIC,
  9091			{ [0x1] = 0x42 },
  9092			{ {0x40, 0x42 } },
  9093		},
  9094		{
  9095			"LD_IND byte positive offset",
  9096			.u.insns = {
  9097				BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
  9098				BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1),
  9099				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9100			},
  9101			CLASSIC,
  9102			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9103			{ {0x40, 0x82 } },
  9104		},
  9105		{
  9106			"LD_IND byte negative offset",
  9107			.u.insns = {
  9108				BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
  9109				BPF_STMT(BPF_LD | BPF_IND | BPF_B, -0x1),
  9110				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9111			},
  9112			CLASSIC,
  9113			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9114			{ {0x40, 0x05 } },
  9115		},
  9116		{
  9117			"LD_IND byte positive offset, all ff",
  9118			.u.insns = {
  9119				BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
  9120				BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1),
  9121				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9122			},
  9123			CLASSIC,
  9124			{ [0x3c] = 0xff, [0x3d] = 0xff,  [0x3e] = 0xff, [0x3f] = 0xff },
  9125			{ {0x40, 0xff } },
  9126		},
  9127		{
  9128			"LD_IND byte positive offset, out of bounds",
  9129			.u.insns = {
  9130				BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
  9131				BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1),
  9132				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9133			},
  9134			CLASSIC,
  9135			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9136			{ {0x3f, 0 }, },
  9137		},
  9138		{
  9139			"LD_IND byte negative offset, out of bounds",
  9140			.u.insns = {
  9141				BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
  9142				BPF_STMT(BPF_LD | BPF_IND | BPF_B, -0x3f),
  9143				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9144			},
  9145			CLASSIC,
  9146			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9147			{ {0x3f, 0 } },
  9148		},
  9149		{
  9150			"LD_IND byte negative offset, multiple calls",
  9151			.u.insns = {
  9152				BPF_STMT(BPF_LDX | BPF_IMM, 0x3b),
  9153				BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 1),
  9154				BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 2),
  9155				BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 3),
  9156				BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 4),
  9157				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9158			},
  9159			CLASSIC,
  9160			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9161			{ {0x40, 0x82 }, },
  9162		},
  9163		{
  9164			"LD_IND halfword positive offset",
  9165			.u.insns = {
  9166				BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
  9167				BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x2),
  9168				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9169			},
  9170			CLASSIC,
  9171			{
  9172				[0x1c] = 0xaa, [0x1d] = 0x55,
  9173				[0x1e] = 0xbb, [0x1f] = 0x66,
  9174				[0x20] = 0xcc, [0x21] = 0x77,
  9175				[0x22] = 0xdd, [0x23] = 0x88,
  9176			},
  9177			{ {0x40, 0xdd88 } },
  9178		},
  9179		{
  9180			"LD_IND halfword negative offset",
  9181			.u.insns = {
  9182				BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
  9183				BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x2),
  9184				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9185			},
  9186			CLASSIC,
  9187			{
  9188				[0x1c] = 0xaa, [0x1d] = 0x55,
  9189				[0x1e] = 0xbb, [0x1f] = 0x66,
  9190				[0x20] = 0xcc, [0x21] = 0x77,
  9191				[0x22] = 0xdd, [0x23] = 0x88,
  9192			},
  9193			{ {0x40, 0xbb66 } },
  9194		},
  9195		{
  9196			"LD_IND halfword unaligned",
  9197			.u.insns = {
  9198				BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
  9199				BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x1),
  9200				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9201			},
  9202			CLASSIC,
  9203			{
  9204				[0x1c] = 0xaa, [0x1d] = 0x55,
  9205				[0x1e] = 0xbb, [0x1f] = 0x66,
  9206				[0x20] = 0xcc, [0x21] = 0x77,
  9207				[0x22] = 0xdd, [0x23] = 0x88,
  9208			},
  9209			{ {0x40, 0x66cc } },
  9210		},
  9211		{
  9212			"LD_IND halfword positive offset, all ff",
  9213			.u.insns = {
  9214				BPF_STMT(BPF_LDX | BPF_IMM, 0x3d),
  9215				BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x1),
  9216				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9217			},
  9218			CLASSIC,
  9219			{ [0x3c] = 0xff, [0x3d] = 0xff,  [0x3e] = 0xff, [0x3f] = 0xff },
  9220			{ {0x40, 0xffff } },
  9221		},
  9222		{
  9223			"LD_IND halfword positive offset, out of bounds",
  9224			.u.insns = {
  9225				BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
  9226				BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x1),
  9227				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9228			},
  9229			CLASSIC,
  9230			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9231			{ {0x3f, 0 }, },
  9232		},
  9233		{
  9234			"LD_IND halfword negative offset, out of bounds",
  9235			.u.insns = {
  9236				BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
  9237				BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x3f),
  9238				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9239			},
  9240			CLASSIC,
  9241			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9242			{ {0x3f, 0 } },
  9243		},
  9244		{
  9245			"LD_IND word positive offset",
  9246			.u.insns = {
  9247				BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
  9248				BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x4),
  9249				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9250			},
  9251			CLASSIC,
  9252			{
  9253				[0x1c] = 0xaa, [0x1d] = 0x55,
  9254				[0x1e] = 0xbb, [0x1f] = 0x66,
  9255				[0x20] = 0xcc, [0x21] = 0x77,
  9256				[0x22] = 0xdd, [0x23] = 0x88,
  9257				[0x24] = 0xee, [0x25] = 0x99,
  9258				[0x26] = 0xff, [0x27] = 0xaa,
  9259			},
  9260			{ {0x40, 0xee99ffaa } },
  9261		},
  9262		{
  9263			"LD_IND word negative offset",
  9264			.u.insns = {
  9265				BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
  9266				BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x4),
  9267				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9268			},
  9269			CLASSIC,
  9270			{
  9271				[0x1c] = 0xaa, [0x1d] = 0x55,
  9272				[0x1e] = 0xbb, [0x1f] = 0x66,
  9273				[0x20] = 0xcc, [0x21] = 0x77,
  9274				[0x22] = 0xdd, [0x23] = 0x88,
  9275				[0x24] = 0xee, [0x25] = 0x99,
  9276				[0x26] = 0xff, [0x27] = 0xaa,
  9277			},
  9278			{ {0x40, 0xaa55bb66 } },
  9279		},
  9280		{
  9281			"LD_IND word unaligned (addr & 3 == 2)",
  9282			.u.insns = {
  9283				BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
  9284				BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x2),
  9285				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9286			},
  9287			CLASSIC,
  9288			{
  9289				[0x1c] = 0xaa, [0x1d] = 0x55,
  9290				[0x1e] = 0xbb, [0x1f] = 0x66,
  9291				[0x20] = 0xcc, [0x21] = 0x77,
  9292				[0x22] = 0xdd, [0x23] = 0x88,
  9293				[0x24] = 0xee, [0x25] = 0x99,
  9294				[0x26] = 0xff, [0x27] = 0xaa,
  9295			},
  9296			{ {0x40, 0xbb66cc77 } },
  9297		},
  9298		{
  9299			"LD_IND word unaligned (addr & 3 == 1)",
  9300			.u.insns = {
  9301				BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
  9302				BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x3),
  9303				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9304			},
  9305			CLASSIC,
  9306			{
  9307				[0x1c] = 0xaa, [0x1d] = 0x55,
  9308				[0x1e] = 0xbb, [0x1f] = 0x66,
  9309				[0x20] = 0xcc, [0x21] = 0x77,
  9310				[0x22] = 0xdd, [0x23] = 0x88,
  9311				[0x24] = 0xee, [0x25] = 0x99,
  9312				[0x26] = 0xff, [0x27] = 0xaa,
  9313			},
  9314			{ {0x40, 0x55bb66cc } },
  9315		},
  9316		{
  9317			"LD_IND word unaligned (addr & 3 == 3)",
  9318			.u.insns = {
  9319				BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
  9320				BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x1),
  9321				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9322			},
  9323			CLASSIC,
  9324			{
  9325				[0x1c] = 0xaa, [0x1d] = 0x55,
  9326				[0x1e] = 0xbb, [0x1f] = 0x66,
  9327				[0x20] = 0xcc, [0x21] = 0x77,
  9328				[0x22] = 0xdd, [0x23] = 0x88,
  9329				[0x24] = 0xee, [0x25] = 0x99,
  9330				[0x26] = 0xff, [0x27] = 0xaa,
  9331			},
  9332			{ {0x40, 0x66cc77dd } },
  9333		},
  9334		{
  9335			"LD_IND word positive offset, all ff",
  9336			.u.insns = {
  9337				BPF_STMT(BPF_LDX | BPF_IMM, 0x3b),
  9338				BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x1),
  9339				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9340			},
  9341			CLASSIC,
  9342			{ [0x3c] = 0xff, [0x3d] = 0xff,  [0x3e] = 0xff, [0x3f] = 0xff },
  9343			{ {0x40, 0xffffffff } },
  9344		},
  9345		{
  9346			"LD_IND word positive offset, out of bounds",
  9347			.u.insns = {
  9348				BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
  9349				BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x1),
  9350				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9351			},
  9352			CLASSIC,
  9353			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9354			{ {0x3f, 0 }, },
  9355		},
  9356		{
  9357			"LD_IND word negative offset, out of bounds",
  9358			.u.insns = {
  9359				BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
  9360				BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x3f),
  9361				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9362			},
  9363			CLASSIC,
  9364			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9365			{ {0x3f, 0 } },
  9366		},
  9367		{
  9368			"LD_ABS byte",
  9369			.u.insns = {
  9370				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x20),
  9371				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9372			},
  9373			CLASSIC,
  9374			{
  9375				[0x1c] = 0xaa, [0x1d] = 0x55,
  9376				[0x1e] = 0xbb, [0x1f] = 0x66,
  9377				[0x20] = 0xcc, [0x21] = 0x77,
  9378				[0x22] = 0xdd, [0x23] = 0x88,
  9379				[0x24] = 0xee, [0x25] = 0x99,
  9380				[0x26] = 0xff, [0x27] = 0xaa,
  9381			},
  9382			{ {0x40, 0xcc } },
  9383		},
  9384		{
  9385			"LD_ABS byte positive offset, all ff",
  9386			.u.insns = {
  9387				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x3f),
  9388				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9389			},
  9390			CLASSIC,
  9391			{ [0x3c] = 0xff, [0x3d] = 0xff,  [0x3e] = 0xff, [0x3f] = 0xff },
  9392			{ {0x40, 0xff } },
  9393		},
  9394		{
  9395			"LD_ABS byte positive offset, out of bounds",
  9396			.u.insns = {
  9397				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x3f),
  9398				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9399			},
  9400			CLASSIC,
  9401			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9402			{ {0x3f, 0 }, },
  9403		},
  9404		{
  9405			"LD_ABS byte negative offset, out of bounds load",
  9406			.u.insns = {
  9407				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, -1),
  9408				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9409			},
  9410			CLASSIC | FLAG_EXPECTED_FAIL,
  9411			.expected_errcode = -EINVAL,
  9412		},
  9413		{
  9414			"LD_ABS byte negative offset, in bounds",
  9415			.u.insns = {
  9416				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3f),
  9417				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9418			},
  9419			CLASSIC,
  9420			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9421			{ {0x40, 0x82 }, },
  9422		},
  9423		{
  9424			"LD_ABS byte negative offset, out of bounds",
  9425			.u.insns = {
  9426				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3f),
  9427				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9428			},
  9429			CLASSIC,
  9430			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9431			{ {0x3f, 0 }, },
  9432		},
  9433		{
  9434			"LD_ABS byte negative offset, multiple calls",
  9435			.u.insns = {
  9436				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3c),
  9437				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3d),
  9438				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3e),
  9439				BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3f),
  9440				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9441			},
  9442			CLASSIC,
  9443			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9444			{ {0x40, 0x82 }, },
  9445		},
  9446		{
  9447			"LD_ABS halfword",
  9448			.u.insns = {
  9449				BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x22),
  9450				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9451			},
  9452			CLASSIC,
  9453			{
  9454				[0x1c] = 0xaa, [0x1d] = 0x55,
  9455				[0x1e] = 0xbb, [0x1f] = 0x66,
  9456				[0x20] = 0xcc, [0x21] = 0x77,
  9457				[0x22] = 0xdd, [0x23] = 0x88,
  9458				[0x24] = 0xee, [0x25] = 0x99,
  9459				[0x26] = 0xff, [0x27] = 0xaa,
  9460			},
  9461			{ {0x40, 0xdd88 } },
  9462		},
  9463		{
  9464			"LD_ABS halfword unaligned",
  9465			.u.insns = {
  9466				BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x25),
  9467				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9468			},
  9469			CLASSIC,
  9470			{
  9471				[0x1c] = 0xaa, [0x1d] = 0x55,
  9472				[0x1e] = 0xbb, [0x1f] = 0x66,
  9473				[0x20] = 0xcc, [0x21] = 0x77,
  9474				[0x22] = 0xdd, [0x23] = 0x88,
  9475				[0x24] = 0xee, [0x25] = 0x99,
  9476				[0x26] = 0xff, [0x27] = 0xaa,
  9477			},
  9478			{ {0x40, 0x99ff } },
  9479		},
  9480		{
  9481			"LD_ABS halfword positive offset, all ff",
  9482			.u.insns = {
  9483				BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x3e),
  9484				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9485			},
  9486			CLASSIC,
  9487			{ [0x3c] = 0xff, [0x3d] = 0xff,  [0x3e] = 0xff, [0x3f] = 0xff },
  9488			{ {0x40, 0xffff } },
  9489		},
  9490		{
  9491			"LD_ABS halfword positive offset, out of bounds",
  9492			.u.insns = {
  9493				BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x3f),
  9494				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9495			},
  9496			CLASSIC,
  9497			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9498			{ {0x3f, 0 }, },
  9499		},
  9500		{
  9501			"LD_ABS halfword negative offset, out of bounds load",
  9502			.u.insns = {
  9503				BPF_STMT(BPF_LD | BPF_ABS | BPF_H, -1),
  9504				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9505			},
  9506			CLASSIC | FLAG_EXPECTED_FAIL,
  9507			.expected_errcode = -EINVAL,
  9508		},
  9509		{
  9510			"LD_ABS halfword negative offset, in bounds",
  9511			.u.insns = {
  9512				BPF_STMT(BPF_LD | BPF_ABS | BPF_H, SKF_LL_OFF + 0x3e),
  9513				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9514			},
  9515			CLASSIC,
  9516			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9517			{ {0x40, 0x1982 }, },
  9518		},
  9519		{
  9520			"LD_ABS halfword negative offset, out of bounds",
  9521			.u.insns = {
  9522				BPF_STMT(BPF_LD | BPF_ABS | BPF_H, SKF_LL_OFF + 0x3e),
  9523				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9524			},
  9525			CLASSIC,
  9526			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9527			{ {0x3f, 0 }, },
  9528		},
  9529		{
  9530			"LD_ABS word",
  9531			.u.insns = {
  9532				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x1c),
  9533				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9534			},
  9535			CLASSIC,
  9536			{
  9537				[0x1c] = 0xaa, [0x1d] = 0x55,
  9538				[0x1e] = 0xbb, [0x1f] = 0x66,
  9539				[0x20] = 0xcc, [0x21] = 0x77,
  9540				[0x22] = 0xdd, [0x23] = 0x88,
  9541				[0x24] = 0xee, [0x25] = 0x99,
  9542				[0x26] = 0xff, [0x27] = 0xaa,
  9543			},
  9544			{ {0x40, 0xaa55bb66 } },
  9545		},
  9546		{
  9547			"LD_ABS word unaligned (addr & 3 == 2)",
  9548			.u.insns = {
  9549				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x22),
  9550				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9551			},
  9552			CLASSIC,
  9553			{
  9554				[0x1c] = 0xaa, [0x1d] = 0x55,
  9555				[0x1e] = 0xbb, [0x1f] = 0x66,
  9556				[0x20] = 0xcc, [0x21] = 0x77,
  9557				[0x22] = 0xdd, [0x23] = 0x88,
  9558				[0x24] = 0xee, [0x25] = 0x99,
  9559				[0x26] = 0xff, [0x27] = 0xaa,
  9560			},
  9561			{ {0x40, 0xdd88ee99 } },
  9562		},
  9563		{
  9564			"LD_ABS word unaligned (addr & 3 == 1)",
  9565			.u.insns = {
  9566				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x21),
  9567				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9568			},
  9569			CLASSIC,
  9570			{
  9571				[0x1c] = 0xaa, [0x1d] = 0x55,
  9572				[0x1e] = 0xbb, [0x1f] = 0x66,
  9573				[0x20] = 0xcc, [0x21] = 0x77,
  9574				[0x22] = 0xdd, [0x23] = 0x88,
  9575				[0x24] = 0xee, [0x25] = 0x99,
  9576				[0x26] = 0xff, [0x27] = 0xaa,
  9577			},
  9578			{ {0x40, 0x77dd88ee } },
  9579		},
  9580		{
  9581			"LD_ABS word unaligned (addr & 3 == 3)",
  9582			.u.insns = {
  9583				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x23),
  9584				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9585			},
  9586			CLASSIC,
  9587			{
  9588				[0x1c] = 0xaa, [0x1d] = 0x55,
  9589				[0x1e] = 0xbb, [0x1f] = 0x66,
  9590				[0x20] = 0xcc, [0x21] = 0x77,
  9591				[0x22] = 0xdd, [0x23] = 0x88,
  9592				[0x24] = 0xee, [0x25] = 0x99,
  9593				[0x26] = 0xff, [0x27] = 0xaa,
  9594			},
  9595			{ {0x40, 0x88ee99ff } },
  9596		},
  9597		{
  9598			"LD_ABS word positive offset, all ff",
  9599			.u.insns = {
  9600				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x3c),
  9601				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9602			},
  9603			CLASSIC,
  9604			{ [0x3c] = 0xff, [0x3d] = 0xff,  [0x3e] = 0xff, [0x3f] = 0xff },
  9605			{ {0x40, 0xffffffff } },
  9606		},
  9607		{
  9608			"LD_ABS word positive offset, out of bounds",
  9609			.u.insns = {
  9610				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x3f),
  9611				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9612			},
  9613			CLASSIC,
  9614			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9615			{ {0x3f, 0 }, },
  9616		},
  9617		{
  9618			"LD_ABS word negative offset, out of bounds load",
  9619			.u.insns = {
  9620				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, -1),
  9621				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9622			},
  9623			CLASSIC | FLAG_EXPECTED_FAIL,
  9624			.expected_errcode = -EINVAL,
  9625		},
  9626		{
  9627			"LD_ABS word negative offset, in bounds",
  9628			.u.insns = {
  9629				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, SKF_LL_OFF + 0x3c),
  9630				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9631			},
  9632			CLASSIC,
  9633			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9634			{ {0x40, 0x25051982 }, },
  9635		},
  9636		{
  9637			"LD_ABS word negative offset, out of bounds",
  9638			.u.insns = {
  9639				BPF_STMT(BPF_LD | BPF_ABS | BPF_W, SKF_LL_OFF + 0x3c),
  9640				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9641			},
  9642			CLASSIC,
  9643			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9644			{ {0x3f, 0 }, },
  9645		},
  9646		{
  9647			"LDX_MSH standalone, preserved A",
  9648			.u.insns = {
  9649				BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
  9650				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3c),
  9651				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9652			},
  9653			CLASSIC,
  9654			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9655			{ {0x40, 0xffeebbaa }, },
  9656		},
  9657		{
  9658			"LDX_MSH standalone, preserved A 2",
  9659			.u.insns = {
  9660				BPF_STMT(BPF_LD | BPF_IMM, 0x175e9d63),
  9661				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3c),
  9662				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3d),
  9663				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3e),
  9664				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3f),
  9665				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9666			},
  9667			CLASSIC,
  9668			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9669			{ {0x40, 0x175e9d63 }, },
  9670		},
  9671		{
  9672			"LDX_MSH standalone, test result 1",
  9673			.u.insns = {
  9674				BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
  9675				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3c),
  9676				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  9677				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9678			},
  9679			CLASSIC,
  9680			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9681			{ {0x40, 0x14 }, },
  9682		},
  9683		{
  9684			"LDX_MSH standalone, test result 2",
  9685			.u.insns = {
  9686				BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
  9687				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3e),
  9688				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  9689				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9690			},
  9691			CLASSIC,
  9692			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9693			{ {0x40, 0x24 }, },
  9694		},
  9695		{
  9696			"LDX_MSH standalone, negative offset",
  9697			.u.insns = {
  9698				BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
  9699				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, -1),
  9700				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  9701				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9702			},
  9703			CLASSIC,
  9704			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9705			{ {0x40, 0 }, },
  9706		},
  9707		{
  9708			"LDX_MSH standalone, negative offset 2",
  9709			.u.insns = {
  9710				BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
  9711				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, SKF_LL_OFF + 0x3e),
  9712				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  9713				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9714			},
  9715			CLASSIC,
  9716			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9717			{ {0x40, 0x24 }, },
  9718		},
  9719		{
  9720			"LDX_MSH standalone, out of bounds",
  9721			.u.insns = {
  9722				BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
  9723				BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x40),
  9724				BPF_STMT(BPF_MISC | BPF_TXA, 0),
  9725				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9726			},
  9727			CLASSIC,
  9728			{ [0x3c] = 0x25, [0x3d] = 0x05,  [0x3e] = 0x19, [0x3f] = 0x82 },
  9729			{ {0x40, 0 }, },
  9730		},
  9731		/*
  9732		 * verify that the interpreter or JIT correctly sets A and X
  9733		 * to 0.
  9734		 */
  9735		{
  9736			"ADD default X",
  9737			.u.insns = {
  9738				/*
  9739				 * A = 0x42
  9740				 * A = A + X
  9741				 * ret A
  9742				 */
  9743				BPF_STMT(BPF_LD | BPF_IMM, 0x42),
  9744				BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
  9745				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9746			},
  9747			CLASSIC | FLAG_NO_DATA,
  9748			{},
  9749			{ {0x1, 0x42 } },
  9750		},
  9751		{
  9752			"ADD default A",
  9753			.u.insns = {
  9754				/*
  9755				 * A = A + 0x42
  9756				 * ret A
  9757				 */
  9758				BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 0x42),
  9759				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9760			},
  9761			CLASSIC | FLAG_NO_DATA,
  9762			{},
  9763			{ {0x1, 0x42 } },
  9764		},
  9765		{
  9766			"SUB default X",
  9767			.u.insns = {
  9768				/*
  9769				 * A = 0x66
  9770				 * A = A - X
  9771				 * ret A
  9772				 */
  9773				BPF_STMT(BPF_LD | BPF_IMM, 0x66),
  9774				BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0),
  9775				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9776			},
  9777			CLASSIC | FLAG_NO_DATA,
  9778			{},
  9779			{ {0x1, 0x66 } },
  9780		},
  9781		{
  9782			"SUB default A",
  9783			.u.insns = {
  9784				/*
  9785				 * A = A - -0x66
  9786				 * ret A
  9787				 */
  9788				BPF_STMT(BPF_ALU | BPF_SUB | BPF_K, -0x66),
  9789				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9790			},
  9791			CLASSIC | FLAG_NO_DATA,
  9792			{},
  9793			{ {0x1, 0x66 } },
  9794		},
  9795		{
  9796			"MUL default X",
  9797			.u.insns = {
  9798				/*
  9799				 * A = 0x42
  9800				 * A = A * X
  9801				 * ret A
  9802				 */
  9803				BPF_STMT(BPF_LD | BPF_IMM, 0x42),
  9804				BPF_STMT(BPF_ALU | BPF_MUL | BPF_X, 0),
  9805				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9806			},
  9807			CLASSIC | FLAG_NO_DATA,
  9808			{},
  9809			{ {0x1, 0x0 } },
  9810		},
  9811		{
  9812			"MUL default A",
  9813			.u.insns = {
  9814				/*
  9815				 * A = A * 0x66
  9816				 * ret A
  9817				 */
  9818				BPF_STMT(BPF_ALU | BPF_MUL | BPF_K, 0x66),
  9819				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9820			},
  9821			CLASSIC | FLAG_NO_DATA,
  9822			{},
  9823			{ {0x1, 0x0 } },
  9824		},
  9825		{
  9826			"DIV default X",
  9827			.u.insns = {
  9828				/*
  9829				 * A = 0x42
  9830				 * A = A / X ; this halt the filter execution if X is 0
  9831				 * ret 0x42
  9832				 */
  9833				BPF_STMT(BPF_LD | BPF_IMM, 0x42),
  9834				BPF_STMT(BPF_ALU | BPF_DIV | BPF_X, 0),
  9835				BPF_STMT(BPF_RET | BPF_K, 0x42),
  9836			},
  9837			CLASSIC | FLAG_NO_DATA,
  9838			{},
  9839			{ {0x1, 0x0 } },
  9840		},
  9841		{
  9842			"DIV default A",
  9843			.u.insns = {
  9844				/*
  9845				 * A = A / 1
  9846				 * ret A
  9847				 */
  9848				BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0x1),
  9849				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9850			},
  9851			CLASSIC | FLAG_NO_DATA,
  9852			{},
  9853			{ {0x1, 0x0 } },
  9854		},
  9855		{
  9856			"MOD default X",
  9857			.u.insns = {
  9858				/*
  9859				 * A = 0x42
  9860				 * A = A mod X ; this halt the filter execution if X is 0
  9861				 * ret 0x42
  9862				 */
  9863				BPF_STMT(BPF_LD | BPF_IMM, 0x42),
  9864				BPF_STMT(BPF_ALU | BPF_MOD | BPF_X, 0),
  9865				BPF_STMT(BPF_RET | BPF_K, 0x42),
  9866			},
  9867			CLASSIC | FLAG_NO_DATA,
  9868			{},
  9869			{ {0x1, 0x0 } },
  9870		},
  9871		{
  9872			"MOD default A",
  9873			.u.insns = {
  9874				/*
  9875				 * A = A mod 1
  9876				 * ret A
  9877				 */
  9878				BPF_STMT(BPF_ALU | BPF_MOD | BPF_K, 0x1),
  9879				BPF_STMT(BPF_RET | BPF_A, 0x0),
  9880			},
  9881			CLASSIC | FLAG_NO_DATA,
  9882			{},
  9883			{ {0x1, 0x0 } },
  9884		},
  9885		{
  9886			"JMP EQ default A",
  9887			.u.insns = {
  9888				/*
  9889				 * cmp A, 0x0, 0, 1
  9890				 * ret 0x42
  9891				 * ret 0x66
  9892				 */
  9893				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x0, 0, 1),
  9894				BPF_STMT(BPF_RET | BPF_K, 0x42),
  9895				BPF_STMT(BPF_RET | BPF_K, 0x66),
  9896			},
  9897			CLASSIC | FLAG_NO_DATA,
  9898			{},
  9899			{ {0x1, 0x42 } },
  9900		},
  9901		{
  9902			"JMP EQ default X",
  9903			.u.insns = {
  9904				/*
  9905				 * A = 0x0
  9906				 * cmp A, X, 0, 1
  9907				 * ret 0x42
  9908				 * ret 0x66
  9909				 */
  9910				BPF_STMT(BPF_LD | BPF_IMM, 0x0),
  9911				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0x0, 0, 1),
  9912				BPF_STMT(BPF_RET | BPF_K, 0x42),
  9913				BPF_STMT(BPF_RET | BPF_K, 0x66),
  9914			},
  9915			CLASSIC | FLAG_NO_DATA,
  9916			{},
  9917			{ {0x1, 0x42 } },
  9918		},
  9919		/* Checking interpreter vs JIT wrt signed extended imms. */
  9920		{
  9921			"JNE signed compare, test 1",
  9922			.u.insns_int = {
  9923				BPF_ALU32_IMM(BPF_MOV, R1, 0xfefbbc12),
  9924				BPF_ALU32_IMM(BPF_MOV, R3, 0xffff0000),
  9925				BPF_MOV64_REG(R2, R1),
  9926				BPF_ALU64_REG(BPF_AND, R2, R3),
  9927				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  9928				BPF_JMP_IMM(BPF_JNE, R2, -17104896, 1),
  9929				BPF_ALU32_IMM(BPF_MOV, R0, 2),
  9930				BPF_EXIT_INSN(),
  9931			},
  9932			INTERNAL,
  9933			{ },
  9934			{ { 0, 1 } },
  9935		},
  9936		{
  9937			"JNE signed compare, test 2",
  9938			.u.insns_int = {
  9939				BPF_ALU32_IMM(BPF_MOV, R1, 0xfefbbc12),
  9940				BPF_ALU32_IMM(BPF_MOV, R3, 0xffff0000),
  9941				BPF_MOV64_REG(R2, R1),
  9942				BPF_ALU64_REG(BPF_AND, R2, R3),
  9943				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  9944				BPF_JMP_IMM(BPF_JNE, R2, 0xfefb0000, 1),
  9945				BPF_ALU32_IMM(BPF_MOV, R0, 2),
  9946				BPF_EXIT_INSN(),
  9947			},
  9948			INTERNAL,
  9949			{ },
  9950			{ { 0, 1 } },
  9951		},
  9952		{
  9953			"JNE signed compare, test 3",
  9954			.u.insns_int = {
  9955				BPF_ALU32_IMM(BPF_MOV, R1, 0xfefbbc12),
  9956				BPF_ALU32_IMM(BPF_MOV, R3, 0xffff0000),
  9957				BPF_ALU32_IMM(BPF_MOV, R4, 0xfefb0000),
  9958				BPF_MOV64_REG(R2, R1),
  9959				BPF_ALU64_REG(BPF_AND, R2, R3),
  9960				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  9961				BPF_JMP_REG(BPF_JNE, R2, R4, 1),
  9962				BPF_ALU32_IMM(BPF_MOV, R0, 2),
  9963				BPF_EXIT_INSN(),
  9964			},
  9965			INTERNAL,
  9966			{ },
  9967			{ { 0, 2 } },
  9968		},
  9969		{
  9970			"JNE signed compare, test 4",
  9971			.u.insns_int = {
  9972				BPF_LD_IMM64(R1, -17104896),
  9973				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  9974				BPF_JMP_IMM(BPF_JNE, R1, -17104896, 1),
  9975				BPF_ALU32_IMM(BPF_MOV, R0, 2),
  9976				BPF_EXIT_INSN(),
  9977			},
  9978			INTERNAL,
  9979			{ },
  9980			{ { 0, 2 } },
  9981		},
  9982		{
  9983			"JNE signed compare, test 5",
  9984			.u.insns_int = {
  9985				BPF_LD_IMM64(R1, 0xfefb0000),
  9986				BPF_ALU32_IMM(BPF_MOV, R0, 1),
  9987				BPF_JMP_IMM(BPF_JNE, R1, 0xfefb0000, 1),
  9988				BPF_ALU32_IMM(BPF_MOV, R0, 2),
  9989				BPF_EXIT_INSN(),
  9990			},
  9991			INTERNAL,
  9992			{ },
  9993			{ { 0, 1 } },
  9994		},
  9995		{
  9996			"JNE signed compare, test 6",
  9997			.u.insns_int = {
  9998				BPF_LD_IMM64(R1, 0x7efb0000),
  9999				BPF_ALU32_IMM(BPF_MOV, R0, 1),
 10000				BPF_JMP_IMM(BPF_JNE, R1, 0x7efb0000, 1),
 10001				BPF_ALU32_IMM(BPF_MOV, R0, 2),
 10002				BPF_EXIT_INSN(),
 10003			},
 10004			INTERNAL,
 10005			{ },
 10006			{ { 0, 2 } },
 10007		},
 10008		{
 10009			"JNE signed compare, test 7",
 10010			.u.insns = {
 10011				BPF_STMT(BPF_LD | BPF_IMM, 0xffff0000),
 10012				BPF_STMT(BPF_MISC | BPF_TAX, 0),
 10013				BPF_STMT(BPF_LD | BPF_IMM, 0xfefbbc12),
 10014				BPF_STMT(BPF_ALU | BPF_AND | BPF_X, 0),
 10015				BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0xfefb0000, 1, 0),
 10016				BPF_STMT(BPF_RET | BPF_K, 1),
 10017				BPF_STMT(BPF_RET | BPF_K, 2),
 10018			},
 10019			CLASSIC | FLAG_NO_DATA,
 10020			{},
 10021			{ { 0, 2 } },
 10022		},
 10023		/* Exhaustive test of ALU64 shift operations */
 10024		{
 10025			"ALU64_LSH_K: all shift values",
 10026			{ },
 10027			INTERNAL | FLAG_NO_DATA,
 10028			{ },
 10029			{ { 0, 1 } },
 10030			.fill_helper = bpf_fill_alu_lsh_imm,
 10031		},
 10032		{
 10033			"ALU64_RSH_K: all shift values",
 10034			{ },
 10035			INTERNAL | FLAG_NO_DATA,
 10036			{ },
 10037			{ { 0, 1 } },
 10038			.fill_helper = bpf_fill_alu_rsh_imm,
 10039		},
 10040		{
 10041			"ALU64_ARSH_K: all shift values",
 10042			{ },
 10043			INTERNAL | FLAG_NO_DATA,
 10044			{ },
 10045			{ { 0, 1 } },
 10046			.fill_helper = bpf_fill_alu_arsh_imm,
 10047		},
 10048		{
 10049			"ALU64_LSH_X: all shift values",
 10050			{ },
 10051			INTERNAL | FLAG_NO_DATA,
 10052			{ },
 10053			{ { 0, 1 } },
 10054			.fill_helper = bpf_fill_alu_lsh_reg,
 10055		},
 10056		{
 10057			"ALU64_RSH_X: all shift values",
 10058			{ },
 10059			INTERNAL | FLAG_NO_DATA,
 10060			{ },
 10061			{ { 0, 1 } },
 10062			.fill_helper = bpf_fill_alu_rsh_reg,
 10063		},
 10064		{
 10065			"ALU64_ARSH_X: all shift values",
 10066			{ },
 10067			INTERNAL | FLAG_NO_DATA,
 10068			{ },
 10069			{ { 0, 1 } },
 10070			.fill_helper = bpf_fill_alu_arsh_reg,
 10071		},
 10072		/* Exhaustive test of ALU32 shift operations */
 10073		{
 10074			"ALU32_LSH_K: all shift values",
 10075			{ },
 10076			INTERNAL | FLAG_NO_DATA,
 10077			{ },
 10078			{ { 0, 1 } },
 10079			.fill_helper = bpf_fill_alu32_lsh_imm,
 10080		},
 10081		{
 10082			"ALU32_RSH_K: all shift values",
 10083			{ },
 10084			INTERNAL | FLAG_NO_DATA,
 10085			{ },
 10086			{ { 0, 1 } },
 10087			.fill_helper = bpf_fill_alu32_rsh_imm,
 10088		},
 10089		{
 10090			"ALU32_ARSH_K: all shift values",
 10091			{ },
 10092			INTERNAL | FLAG_NO_DATA,
 10093			{ },
 10094			{ { 0, 1 } },
 10095			.fill_helper = bpf_fill_alu32_arsh_imm,
 10096		},
 10097		{
 10098			"ALU32_LSH_X: all shift values",
 10099			{ },
 10100			INTERNAL | FLAG_NO_DATA,
 10101			{ },
 10102			{ { 0, 1 } },
 10103			.fill_helper = bpf_fill_alu32_lsh_reg,
 10104		},
 10105		{
 10106			"ALU32_RSH_X: all shift values",
 10107			{ },
 10108			INTERNAL | FLAG_NO_DATA,
 10109			{ },
 10110			{ { 0, 1 } },
 10111			.fill_helper = bpf_fill_alu32_rsh_reg,
 10112		},
 10113		{
 10114			"ALU32_ARSH_X: all shift values",
 10115			{ },
 10116			INTERNAL | FLAG_NO_DATA,
 10117			{ },
 10118			{ { 0, 1 } },
 10119			.fill_helper = bpf_fill_alu32_arsh_reg,
 10120		},
 10121		/* ALU64 immediate magnitudes */
 10122		{
 10123			"ALU64_MOV_K: all immediate value magnitudes",
 10124			{ },
 10125			INTERNAL | FLAG_NO_DATA,
 10126			{ },
 10127			{ { 0, 1 } },
 10128			.fill_helper = bpf_fill_alu64_mov_imm,
 10129			.nr_testruns = NR_PATTERN_RUNS,
 10130		},
 10131		{
 10132			"ALU64_AND_K: all immediate value magnitudes",
 10133			{ },
 10134			INTERNAL | FLAG_NO_DATA,
 10135			{ },
 10136			{ { 0, 1 } },
 10137			.fill_helper = bpf_fill_alu64_and_imm,
 10138			.nr_testruns = NR_PATTERN_RUNS,
 10139		},
 10140		{
 10141			"ALU64_OR_K: all immediate value magnitudes",
 10142			{ },
 10143			INTERNAL | FLAG_NO_DATA,
 10144			{ },
 10145			{ { 0, 1 } },
 10146			.fill_helper = bpf_fill_alu64_or_imm,
 10147			.nr_testruns = NR_PATTERN_RUNS,
 10148		},
 10149		{
 10150			"ALU64_XOR_K: all immediate value magnitudes",
 10151			{ },
 10152			INTERNAL | FLAG_NO_DATA,
 10153			{ },
 10154			{ { 0, 1 } },
 10155			.fill_helper = bpf_fill_alu64_xor_imm,
 10156			.nr_testruns = NR_PATTERN_RUNS,
 10157		},
 10158		{
 10159			"ALU64_ADD_K: all immediate value magnitudes",
 10160			{ },
 10161			INTERNAL | FLAG_NO_DATA,
 10162			{ },
 10163			{ { 0, 1 } },
 10164			.fill_helper = bpf_fill_alu64_add_imm,
 10165			.nr_testruns = NR_PATTERN_RUNS,
 10166		},
 10167		{
 10168			"ALU64_SUB_K: all immediate value magnitudes",
 10169			{ },
 10170			INTERNAL | FLAG_NO_DATA,
 10171			{ },
 10172			{ { 0, 1 } },
 10173			.fill_helper = bpf_fill_alu64_sub_imm,
 10174			.nr_testruns = NR_PATTERN_RUNS,
 10175		},
 10176		{
 10177			"ALU64_MUL_K: all immediate value magnitudes",
 10178			{ },
 10179			INTERNAL | FLAG_NO_DATA,
 10180			{ },
 10181			{ { 0, 1 } },
 10182			.fill_helper = bpf_fill_alu64_mul_imm,
 10183			.nr_testruns = NR_PATTERN_RUNS,
 10184		},
 10185		{
 10186			"ALU64_DIV_K: all immediate value magnitudes",
 10187			{ },
 10188			INTERNAL | FLAG_NO_DATA,
 10189			{ },
 10190			{ { 0, 1 } },
 10191			.fill_helper = bpf_fill_alu64_div_imm,
 10192			.nr_testruns = NR_PATTERN_RUNS,
 10193		},
 10194		{
 10195			"ALU64_MOD_K: all immediate value magnitudes",
 10196			{ },
 10197			INTERNAL | FLAG_NO_DATA,
 10198			{ },
 10199			{ { 0, 1 } },
 10200			.fill_helper = bpf_fill_alu64_mod_imm,
 10201			.nr_testruns = NR_PATTERN_RUNS,
 10202		},
 10203		/* ALU32 immediate magnitudes */
 10204		{
 10205			"ALU32_MOV_K: all immediate value magnitudes",
 10206			{ },
 10207			INTERNAL | FLAG_NO_DATA,
 10208			{ },
 10209			{ { 0, 1 } },
 10210			.fill_helper = bpf_fill_alu32_mov_imm,
 10211			.nr_testruns = NR_PATTERN_RUNS,
 10212		},
 10213		{
 10214			"ALU32_AND_K: all immediate value magnitudes",
 10215			{ },
 10216			INTERNAL | FLAG_NO_DATA,
 10217			{ },
 10218			{ { 0, 1 } },
 10219			.fill_helper = bpf_fill_alu32_and_imm,
 10220			.nr_testruns = NR_PATTERN_RUNS,
 10221		},
 10222		{
 10223			"ALU32_OR_K: all immediate value magnitudes",
 10224			{ },
 10225			INTERNAL | FLAG_NO_DATA,
 10226			{ },
 10227			{ { 0, 1 } },
 10228			.fill_helper = bpf_fill_alu32_or_imm,
 10229			.nr_testruns = NR_PATTERN_RUNS,
 10230		},
 10231		{
 10232			"ALU32_XOR_K: all immediate value magnitudes",
 10233			{ },
 10234			INTERNAL | FLAG_NO_DATA,
 10235			{ },
 10236			{ { 0, 1 } },
 10237			.fill_helper = bpf_fill_alu32_xor_imm,
 10238			.nr_testruns = NR_PATTERN_RUNS,
 10239		},
 10240		{
 10241			"ALU32_ADD_K: all immediate value magnitudes",
 10242			{ },
 10243			INTERNAL | FLAG_NO_DATA,
 10244			{ },
 10245			{ { 0, 1 } },
 10246			.fill_helper = bpf_fill_alu32_add_imm,
 10247			.nr_testruns = NR_PATTERN_RUNS,
 10248		},
 10249		{
 10250			"ALU32_SUB_K: all immediate value magnitudes",
 10251			{ },
 10252			INTERNAL | FLAG_NO_DATA,
 10253			{ },
 10254			{ { 0, 1 } },
 10255			.fill_helper = bpf_fill_alu32_sub_imm,
 10256			.nr_testruns = NR_PATTERN_RUNS,
 10257		},
 10258		{
 10259			"ALU32_MUL_K: all immediate value magnitudes",
 10260			{ },
 10261			INTERNAL | FLAG_NO_DATA,
 10262			{ },
 10263			{ { 0, 1 } },
 10264			.fill_helper = bpf_fill_alu32_mul_imm,
 10265			.nr_testruns = NR_PATTERN_RUNS,
 10266		},
 10267		{
 10268			"ALU32_DIV_K: all immediate value magnitudes",
 10269			{ },
 10270			INTERNAL | FLAG_NO_DATA,
 10271			{ },
 10272			{ { 0, 1 } },
 10273			.fill_helper = bpf_fill_alu32_div_imm,
 10274			.nr_testruns = NR_PATTERN_RUNS,
 10275		},
 10276		{
 10277			"ALU32_MOD_K: all immediate value magnitudes",
 10278			{ },
 10279			INTERNAL | FLAG_NO_DATA,
 10280			{ },
 10281			{ { 0, 1 } },
 10282			.fill_helper = bpf_fill_alu32_mod_imm,
 10283			.nr_testruns = NR_PATTERN_RUNS,
 10284		},
 10285		/* ALU64 register magnitudes */
 10286		{
 10287			"ALU64_MOV_X: all register value magnitudes",
 10288			{ },
 10289			INTERNAL | FLAG_NO_DATA,
 10290			{ },
 10291			{ { 0, 1 } },
 10292			.fill_helper = bpf_fill_alu64_mov_reg,
 10293			.nr_testruns = NR_PATTERN_RUNS,
 10294		},
 10295		{
 10296			"ALU64_AND_X: all register value magnitudes",
 10297			{ },
 10298			INTERNAL | FLAG_NO_DATA,
 10299			{ },
 10300			{ { 0, 1 } },
 10301			.fill_helper = bpf_fill_alu64_and_reg,
 10302			.nr_testruns = NR_PATTERN_RUNS,
 10303		},
 10304		{
 10305			"ALU64_OR_X: all register value magnitudes",
 10306			{ },
 10307			INTERNAL | FLAG_NO_DATA,
 10308			{ },
 10309			{ { 0, 1 } },
 10310			.fill_helper = bpf_fill_alu64_or_reg,
 10311			.nr_testruns = NR_PATTERN_RUNS,
 10312		},
 10313		{
 10314			"ALU64_XOR_X: all register value magnitudes",
 10315			{ },
 10316			INTERNAL | FLAG_NO_DATA,
 10317			{ },
 10318			{ { 0, 1 } },
 10319			.fill_helper = bpf_fill_alu64_xor_reg,
 10320			.nr_testruns = NR_PATTERN_RUNS,
 10321		},
 10322		{
 10323			"ALU64_ADD_X: all register value magnitudes",
 10324			{ },
 10325			INTERNAL | FLAG_NO_DATA,
 10326			{ },
 10327			{ { 0, 1 } },
 10328			.fill_helper = bpf_fill_alu64_add_reg,
 10329			.nr_testruns = NR_PATTERN_RUNS,
 10330		},
 10331		{
 10332			"ALU64_SUB_X: all register value magnitudes",
 10333			{ },
 10334			INTERNAL | FLAG_NO_DATA,
 10335			{ },
 10336			{ { 0, 1 } },
 10337			.fill_helper = bpf_fill_alu64_sub_reg,
 10338			.nr_testruns = NR_PATTERN_RUNS,
 10339		},
 10340		{
 10341			"ALU64_MUL_X: all register value magnitudes",
 10342			{ },
 10343			INTERNAL | FLAG_NO_DATA,
 10344			{ },
 10345			{ { 0, 1 } },
 10346			.fill_helper = bpf_fill_alu64_mul_reg,
 10347			.nr_testruns = NR_PATTERN_RUNS,
 10348		},
 10349		{
 10350			"ALU64_DIV_X: all register value magnitudes",
 10351			{ },
 10352			INTERNAL | FLAG_NO_DATA,
 10353			{ },
 10354			{ { 0, 1 } },
 10355			.fill_helper = bpf_fill_alu64_div_reg,
 10356			.nr_testruns = NR_PATTERN_RUNS,
 10357		},
 10358		{
 10359			"ALU64_MOD_X: all register value magnitudes",
 10360			{ },
 10361			INTERNAL | FLAG_NO_DATA,
 10362			{ },
 10363			{ { 0, 1 } },
 10364			.fill_helper = bpf_fill_alu64_mod_reg,
 10365			.nr_testruns = NR_PATTERN_RUNS,
 10366		},
 10367		/* ALU32 register magnitudes */
 10368		{
 10369			"ALU32_MOV_X: all register value magnitudes",
 10370			{ },
 10371			INTERNAL | FLAG_NO_DATA,
 10372			{ },
 10373			{ { 0, 1 } },
 10374			.fill_helper = bpf_fill_alu32_mov_reg,
 10375			.nr_testruns = NR_PATTERN_RUNS,
 10376		},
 10377		{
 10378			"ALU32_AND_X: all register value magnitudes",
 10379			{ },
 10380			INTERNAL | FLAG_NO_DATA,
 10381			{ },
 10382			{ { 0, 1 } },
 10383			.fill_helper = bpf_fill_alu32_and_reg,
 10384			.nr_testruns = NR_PATTERN_RUNS,
 10385		},
 10386		{
 10387			"ALU32_OR_X: all register value magnitudes",
 10388			{ },
 10389			INTERNAL | FLAG_NO_DATA,
 10390			{ },
 10391			{ { 0, 1 } },
 10392			.fill_helper = bpf_fill_alu32_or_reg,
 10393			.nr_testruns = NR_PATTERN_RUNS,
 10394		},
 10395		{
 10396			"ALU32_XOR_X: all register value magnitudes",
 10397			{ },
 10398			INTERNAL | FLAG_NO_DATA,
 10399			{ },
 10400			{ { 0, 1 } },
 10401			.fill_helper = bpf_fill_alu32_xor_reg,
 10402			.nr_testruns = NR_PATTERN_RUNS,
 10403		},
 10404		{
 10405			"ALU32_ADD_X: all register value magnitudes",
 10406			{ },
 10407			INTERNAL | FLAG_NO_DATA,
 10408			{ },
 10409			{ { 0, 1 } },
 10410			.fill_helper = bpf_fill_alu32_add_reg,
 10411			.nr_testruns = NR_PATTERN_RUNS,
 10412		},
 10413		{
 10414			"ALU32_SUB_X: all register value magnitudes",
 10415			{ },
 10416			INTERNAL | FLAG_NO_DATA,
 10417			{ },
 10418			{ { 0, 1 } },
 10419			.fill_helper = bpf_fill_alu32_sub_reg,
 10420			.nr_testruns = NR_PATTERN_RUNS,
 10421		},
 10422		{
 10423			"ALU32_MUL_X: all register value magnitudes",
 10424			{ },
 10425			INTERNAL | FLAG_NO_DATA,
 10426			{ },
 10427			{ { 0, 1 } },
 10428			.fill_helper = bpf_fill_alu32_mul_reg,
 10429			.nr_testruns = NR_PATTERN_RUNS,
 10430		},
 10431		{
 10432			"ALU32_DIV_X: all register value magnitudes",
 10433			{ },
 10434			INTERNAL | FLAG_NO_DATA,
 10435			{ },
 10436			{ { 0, 1 } },
 10437			.fill_helper = bpf_fill_alu32_div_reg,
 10438			.nr_testruns = NR_PATTERN_RUNS,
 10439		},
 10440		{
 10441			"ALU32_MOD_X: all register value magnitudes",
 10442			{ },
 10443			INTERNAL | FLAG_NO_DATA,
 10444			{ },
 10445			{ { 0, 1 } },
 10446			.fill_helper = bpf_fill_alu32_mod_reg,
 10447			.nr_testruns = NR_PATTERN_RUNS,
 10448		},
 10449		/* LD_IMM64 immediate magnitudes */
 10450		{
 10451			"LD_IMM64: all immediate value magnitudes",
 10452			{ },
 10453			INTERNAL | FLAG_NO_DATA,
 10454			{ },
 10455			{ { 0, 1 } },
 10456			.fill_helper = bpf_fill_ld_imm64,
 10457		},
 10458		/* JMP immediate magnitudes */
 10459		{
 10460			"JMP_JSET_K: all immediate value magnitudes",
 10461			{ },
 10462			INTERNAL | FLAG_NO_DATA,
 10463			{ },
 10464			{ { 0, 1 } },
 10465			.fill_helper = bpf_fill_jmp_jset_imm,
 10466			.nr_testruns = NR_PATTERN_RUNS,
 10467		},
 10468		{
 10469			"JMP_JEQ_K: all immediate value magnitudes",
 10470			{ },
 10471			INTERNAL | FLAG_NO_DATA,
 10472			{ },
 10473			{ { 0, 1 } },
 10474			.fill_helper = bpf_fill_jmp_jeq_imm,
 10475			.nr_testruns = NR_PATTERN_RUNS,
 10476		},
 10477		{
 10478			"JMP_JNE_K: all immediate value magnitudes",
 10479			{ },
 10480			INTERNAL | FLAG_NO_DATA,
 10481			{ },
 10482			{ { 0, 1 } },
 10483			.fill_helper = bpf_fill_jmp_jne_imm,
 10484			.nr_testruns = NR_PATTERN_RUNS,
 10485		},
 10486		{
 10487			"JMP_JGT_K: all immediate value magnitudes",
 10488			{ },
 10489			INTERNAL | FLAG_NO_DATA,
 10490			{ },
 10491			{ { 0, 1 } },
 10492			.fill_helper = bpf_fill_jmp_jgt_imm,
 10493			.nr_testruns = NR_PATTERN_RUNS,
 10494		},
 10495		{
 10496			"JMP_JGE_K: all immediate value magnitudes",
 10497			{ },
 10498			INTERNAL | FLAG_NO_DATA,
 10499			{ },
 10500			{ { 0, 1 } },
 10501			.fill_helper = bpf_fill_jmp_jge_imm,
 10502			.nr_testruns = NR_PATTERN_RUNS,
 10503		},
 10504		{
 10505			"JMP_JLT_K: all immediate value magnitudes",
 10506			{ },
 10507			INTERNAL | FLAG_NO_DATA,
 10508			{ },
 10509			{ { 0, 1 } },
 10510			.fill_helper = bpf_fill_jmp_jlt_imm,
 10511			.nr_testruns = NR_PATTERN_RUNS,
 10512		},
 10513		{
 10514			"JMP_JLE_K: all immediate value magnitudes",
 10515			{ },
 10516			INTERNAL | FLAG_NO_DATA,
 10517			{ },
 10518			{ { 0, 1 } },
 10519			.fill_helper = bpf_fill_jmp_jle_imm,
 10520			.nr_testruns = NR_PATTERN_RUNS,
 10521		},
 10522		{
 10523			"JMP_JSGT_K: all immediate value magnitudes",
 10524			{ },
 10525			INTERNAL | FLAG_NO_DATA,
 10526			{ },
 10527			{ { 0, 1 } },
 10528			.fill_helper = bpf_fill_jmp_jsgt_imm,
 10529			.nr_testruns = NR_PATTERN_RUNS,
 10530		},
 10531		{
 10532			"JMP_JSGE_K: all immediate value magnitudes",
 10533			{ },
 10534			INTERNAL | FLAG_NO_DATA,
 10535			{ },
 10536			{ { 0, 1 } },
 10537			.fill_helper = bpf_fill_jmp_jsge_imm,
 10538			.nr_testruns = NR_PATTERN_RUNS,
 10539		},
 10540		{
 10541			"JMP_JSLT_K: all immediate value magnitudes",
 10542			{ },
 10543			INTERNAL | FLAG_NO_DATA,
 10544			{ },
 10545			{ { 0, 1 } },
 10546			.fill_helper = bpf_fill_jmp_jslt_imm,
 10547			.nr_testruns = NR_PATTERN_RUNS,
 10548		},
 10549		{
 10550			"JMP_JSLE_K: all immediate value magnitudes",
 10551			{ },
 10552			INTERNAL | FLAG_NO_DATA,
 10553			{ },
 10554			{ { 0, 1 } },
 10555			.fill_helper = bpf_fill_jmp_jsle_imm,
 10556			.nr_testruns = NR_PATTERN_RUNS,
 10557		},
 10558		/* JMP register magnitudes */
 10559		{
 10560			"JMP_JSET_X: all register value magnitudes",
 10561			{ },
 10562			INTERNAL | FLAG_NO_DATA,
 10563			{ },
 10564			{ { 0, 1 } },
 10565			.fill_helper = bpf_fill_jmp_jset_reg,
 10566			.nr_testruns = NR_PATTERN_RUNS,
 10567		},
 10568		{
 10569			"JMP_JEQ_X: all register value magnitudes",
 10570			{ },
 10571			INTERNAL | FLAG_NO_DATA,
 10572			{ },
 10573			{ { 0, 1 } },
 10574			.fill_helper = bpf_fill_jmp_jeq_reg,
 10575			.nr_testruns = NR_PATTERN_RUNS,
 10576		},
 10577		{
 10578			"JMP_JNE_X: all register value magnitudes",
 10579			{ },
 10580			INTERNAL | FLAG_NO_DATA,
 10581			{ },
 10582			{ { 0, 1 } },
 10583			.fill_helper = bpf_fill_jmp_jne_reg,
 10584			.nr_testruns = NR_PATTERN_RUNS,
 10585		},
 10586		{
 10587			"JMP_JGT_X: all register value magnitudes",
 10588			{ },
 10589			INTERNAL | FLAG_NO_DATA,
 10590			{ },
 10591			{ { 0, 1 } },
 10592			.fill_helper = bpf_fill_jmp_jgt_reg,
 10593			.nr_testruns = NR_PATTERN_RUNS,
 10594		},
 10595		{
 10596			"JMP_JGE_X: all register value magnitudes",
 10597			{ },
 10598			INTERNAL | FLAG_NO_DATA,
 10599			{ },
 10600			{ { 0, 1 } },
 10601			.fill_helper = bpf_fill_jmp_jge_reg,
 10602			.nr_testruns = NR_PATTERN_RUNS,
 10603		},
 10604		{
 10605			"JMP_JLT_X: all register value magnitudes",
 10606			{ },
 10607			INTERNAL | FLAG_NO_DATA,
 10608			{ },
 10609			{ { 0, 1 } },
 10610			.fill_helper = bpf_fill_jmp_jlt_reg,
 10611			.nr_testruns = NR_PATTERN_RUNS,
 10612		},
 10613		{
 10614			"JMP_JLE_X: all register value magnitudes",
 10615			{ },
 10616			INTERNAL | FLAG_NO_DATA,
 10617			{ },
 10618			{ { 0, 1 } },
 10619			.fill_helper = bpf_fill_jmp_jle_reg,
 10620			.nr_testruns = NR_PATTERN_RUNS,
 10621		},
 10622		{
 10623			"JMP_JSGT_X: all register value magnitudes",
 10624			{ },
 10625			INTERNAL | FLAG_NO_DATA,
 10626			{ },
 10627			{ { 0, 1 } },
 10628			.fill_helper = bpf_fill_jmp_jsgt_reg,
 10629			.nr_testruns = NR_PATTERN_RUNS,
 10630		},
 10631		{
 10632			"JMP_JSGE_X: all register value magnitudes",
 10633			{ },
 10634			INTERNAL | FLAG_NO_DATA,
 10635			{ },
 10636			{ { 0, 1 } },
 10637			.fill_helper = bpf_fill_jmp_jsge_reg,
 10638			.nr_testruns = NR_PATTERN_RUNS,
 10639		},
 10640		{
 10641			"JMP_JSLT_X: all register value magnitudes",
 10642			{ },
 10643			INTERNAL | FLAG_NO_DATA,
 10644			{ },
 10645			{ { 0, 1 } },
 10646			.fill_helper = bpf_fill_jmp_jslt_reg,
 10647			.nr_testruns = NR_PATTERN_RUNS,
 10648		},
 10649		{
 10650			"JMP_JSLE_X: all register value magnitudes",
 10651			{ },
 10652			INTERNAL | FLAG_NO_DATA,
 10653			{ },
 10654			{ { 0, 1 } },
 10655			.fill_helper = bpf_fill_jmp_jsle_reg,
 10656			.nr_testruns = NR_PATTERN_RUNS,
 10657		},
 10658		/* JMP32 immediate magnitudes */
 10659		{
 10660			"JMP32_JSET_K: all immediate value magnitudes",
 10661			{ },
 10662			INTERNAL | FLAG_NO_DATA,
 10663			{ },
 10664			{ { 0, 1 } },
 10665			.fill_helper = bpf_fill_jmp32_jset_imm,
 10666			.nr_testruns = NR_PATTERN_RUNS,
 10667		},
 10668		{
 10669			"JMP32_JEQ_K: all immediate value magnitudes",
 10670			{ },
 10671			INTERNAL | FLAG_NO_DATA,
 10672			{ },
 10673			{ { 0, 1 } },
 10674			.fill_helper = bpf_fill_jmp32_jeq_imm,
 10675			.nr_testruns = NR_PATTERN_RUNS,
 10676		},
 10677		{
 10678			"JMP32_JNE_K: all immediate value magnitudes",
 10679			{ },
 10680			INTERNAL | FLAG_NO_DATA,
 10681			{ },
 10682			{ { 0, 1 } },
 10683			.fill_helper = bpf_fill_jmp32_jne_imm,
 10684			.nr_testruns = NR_PATTERN_RUNS,
 10685		},
 10686		{
 10687			"JMP32_JGT_K: all immediate value magnitudes",
 10688			{ },
 10689			INTERNAL | FLAG_NO_DATA,
 10690			{ },
 10691			{ { 0, 1 } },
 10692			.fill_helper = bpf_fill_jmp32_jgt_imm,
 10693			.nr_testruns = NR_PATTERN_RUNS,
 10694		},
 10695		{
 10696			"JMP32_JGE_K: all immediate value magnitudes",
 10697			{ },
 10698			INTERNAL | FLAG_NO_DATA,
 10699			{ },
 10700			{ { 0, 1 } },
 10701			.fill_helper = bpf_fill_jmp32_jge_imm,
 10702			.nr_testruns = NR_PATTERN_RUNS,
 10703		},
 10704		{
 10705			"JMP32_JLT_K: all immediate value magnitudes",
 10706			{ },
 10707			INTERNAL | FLAG_NO_DATA,
 10708			{ },
 10709			{ { 0, 1 } },
 10710			.fill_helper = bpf_fill_jmp32_jlt_imm,
 10711			.nr_testruns = NR_PATTERN_RUNS,
 10712		},
 10713		{
 10714			"JMP32_JLE_K: all immediate value magnitudes",
 10715			{ },
 10716			INTERNAL | FLAG_NO_DATA,
 10717			{ },
 10718			{ { 0, 1 } },
 10719			.fill_helper = bpf_fill_jmp32_jle_imm,
 10720			.nr_testruns = NR_PATTERN_RUNS,
 10721		},
 10722		{
 10723			"JMP32_JSGT_K: all immediate value magnitudes",
 10724			{ },
 10725			INTERNAL | FLAG_NO_DATA,
 10726			{ },
 10727			{ { 0, 1 } },
 10728			.fill_helper = bpf_fill_jmp32_jsgt_imm,
 10729			.nr_testruns = NR_PATTERN_RUNS,
 10730		},
 10731		{
 10732			"JMP32_JSGE_K: all immediate value magnitudes",
 10733			{ },
 10734			INTERNAL | FLAG_NO_DATA,
 10735			{ },
 10736			{ { 0, 1 } },
 10737			.fill_helper = bpf_fill_jmp32_jsge_imm,
 10738			.nr_testruns = NR_PATTERN_RUNS,
 10739		},
 10740		{
 10741			"JMP32_JSLT_K: all immediate value magnitudes",
 10742			{ },
 10743			INTERNAL | FLAG_NO_DATA,
 10744			{ },
 10745			{ { 0, 1 } },
 10746			.fill_helper = bpf_fill_jmp32_jslt_imm,
 10747			.nr_testruns = NR_PATTERN_RUNS,
 10748		},
 10749		{
 10750			"JMP32_JSLE_K: all immediate value magnitudes",
 10751			{ },
 10752			INTERNAL | FLAG_NO_DATA,
 10753			{ },
 10754			{ { 0, 1 } },
 10755			.fill_helper = bpf_fill_jmp32_jsle_imm,
 10756			.nr_testruns = NR_PATTERN_RUNS,
 10757		},
 10758		/* JMP32 register magnitudes */
 10759		{
 10760			"JMP32_JSET_X: all register value magnitudes",
 10761			{ },
 10762			INTERNAL | FLAG_NO_DATA,
 10763			{ },
 10764			{ { 0, 1 } },
 10765			.fill_helper = bpf_fill_jmp32_jset_reg,
 10766			.nr_testruns = NR_PATTERN_RUNS,
 10767		},
 10768		{
 10769			"JMP32_JEQ_X: all register value magnitudes",
 10770			{ },
 10771			INTERNAL | FLAG_NO_DATA,
 10772			{ },
 10773			{ { 0, 1 } },
 10774			.fill_helper = bpf_fill_jmp32_jeq_reg,
 10775			.nr_testruns = NR_PATTERN_RUNS,
 10776		},
 10777		{
 10778			"JMP32_JNE_X: all register value magnitudes",
 10779			{ },
 10780			INTERNAL | FLAG_NO_DATA,
 10781			{ },
 10782			{ { 0, 1 } },
 10783			.fill_helper = bpf_fill_jmp32_jne_reg,
 10784			.nr_testruns = NR_PATTERN_RUNS,
 10785		},
 10786		{
 10787			"JMP32_JGT_X: all register value magnitudes",
 10788			{ },
 10789			INTERNAL | FLAG_NO_DATA,
 10790			{ },
 10791			{ { 0, 1 } },
 10792			.fill_helper = bpf_fill_jmp32_jgt_reg,
 10793			.nr_testruns = NR_PATTERN_RUNS,
 10794		},
 10795		{
 10796			"JMP32_JGE_X: all register value magnitudes",
 10797			{ },
 10798			INTERNAL | FLAG_NO_DATA,
 10799			{ },
 10800			{ { 0, 1 } },
 10801			.fill_helper = bpf_fill_jmp32_jge_reg,
 10802			.nr_testruns = NR_PATTERN_RUNS,
 10803		},
 10804		{
 10805			"JMP32_JLT_X: all register value magnitudes",
 10806			{ },
 10807			INTERNAL | FLAG_NO_DATA,
 10808			{ },
 10809			{ { 0, 1 } },
 10810			.fill_helper = bpf_fill_jmp32_jlt_reg,
 10811			.nr_testruns = NR_PATTERN_RUNS,
 10812		},
 10813		{
 10814			"JMP32_JLE_X: all register value magnitudes",
 10815			{ },
 10816			INTERNAL | FLAG_NO_DATA,
 10817			{ },
 10818			{ { 0, 1 } },
 10819			.fill_helper = bpf_fill_jmp32_jle_reg,
 10820			.nr_testruns = NR_PATTERN_RUNS,
 10821		},
 10822		{
 10823			"JMP32_JSGT_X: all register value magnitudes",
 10824			{ },
 10825			INTERNAL | FLAG_NO_DATA,
 10826			{ },
 10827			{ { 0, 1 } },
 10828			.fill_helper = bpf_fill_jmp32_jsgt_reg,
 10829			.nr_testruns = NR_PATTERN_RUNS,
 10830		},
 10831		{
 10832			"JMP32_JSGE_X: all register value magnitudes",
 10833			{ },
 10834			INTERNAL | FLAG_NO_DATA,
 10835			{ },
 10836			{ { 0, 1 } },
 10837			.fill_helper = bpf_fill_jmp32_jsge_reg,
 10838			.nr_testruns = NR_PATTERN_RUNS,
 10839		},
 10840		{
 10841			"JMP32_JSLT_X: all register value magnitudes",
 10842			{ },
 10843			INTERNAL | FLAG_NO_DATA,
 10844			{ },
 10845			{ { 0, 1 } },
 10846			.fill_helper = bpf_fill_jmp32_jslt_reg,
 10847			.nr_testruns = NR_PATTERN_RUNS,
 10848		},
 10849		{
 10850			"JMP32_JSLE_X: all register value magnitudes",
 10851			{ },
 10852			INTERNAL | FLAG_NO_DATA,
 10853			{ },
 10854			{ { 0, 1 } },
 10855			.fill_helper = bpf_fill_jmp32_jsle_reg,
 10856			.nr_testruns = NR_PATTERN_RUNS,
 10857		},
 10858		/* Conditional jumps with constant decision */
 10859		{
 10860			"JMP_JSET_K: imm = 0 -> never taken",
 10861			.u.insns_int = {
 10862				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10863				BPF_JMP_IMM(BPF_JSET, R1, 0, 1),
 10864				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10865				BPF_EXIT_INSN(),
 10866			},
 10867			INTERNAL | FLAG_NO_DATA,
 10868			{ },
 10869			{ { 0, 0 } },
 10870		},
 10871		{
 10872			"JMP_JLT_K: imm = 0 -> never taken",
 10873			.u.insns_int = {
 10874				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10875				BPF_JMP_IMM(BPF_JLT, R1, 0, 1),
 10876				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10877				BPF_EXIT_INSN(),
 10878			},
 10879			INTERNAL | FLAG_NO_DATA,
 10880			{ },
 10881			{ { 0, 0 } },
 10882		},
 10883		{
 10884			"JMP_JGE_K: imm = 0 -> always taken",
 10885			.u.insns_int = {
 10886				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10887				BPF_JMP_IMM(BPF_JGE, R1, 0, 1),
 10888				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10889				BPF_EXIT_INSN(),
 10890			},
 10891			INTERNAL | FLAG_NO_DATA,
 10892			{ },
 10893			{ { 0, 1 } },
 10894		},
 10895		{
 10896			"JMP_JGT_K: imm = 0xffffffff -> never taken",
 10897			.u.insns_int = {
 10898				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10899				BPF_JMP_IMM(BPF_JGT, R1, U32_MAX, 1),
 10900				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10901				BPF_EXIT_INSN(),
 10902			},
 10903			INTERNAL | FLAG_NO_DATA,
 10904			{ },
 10905			{ { 0, 0 } },
 10906		},
 10907		{
 10908			"JMP_JLE_K: imm = 0xffffffff -> always taken",
 10909			.u.insns_int = {
 10910				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10911				BPF_JMP_IMM(BPF_JLE, R1, U32_MAX, 1),
 10912				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10913				BPF_EXIT_INSN(),
 10914			},
 10915			INTERNAL | FLAG_NO_DATA,
 10916			{ },
 10917			{ { 0, 1 } },
 10918		},
 10919		{
 10920			"JMP32_JSGT_K: imm = 0x7fffffff -> never taken",
 10921			.u.insns_int = {
 10922				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10923				BPF_JMP32_IMM(BPF_JSGT, R1, S32_MAX, 1),
 10924				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10925				BPF_EXIT_INSN(),
 10926			},
 10927			INTERNAL | FLAG_NO_DATA,
 10928			{ },
 10929			{ { 0, 0 } },
 10930		},
 10931		{
 10932			"JMP32_JSGE_K: imm = -0x80000000 -> always taken",
 10933			.u.insns_int = {
 10934				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10935				BPF_JMP32_IMM(BPF_JSGE, R1, S32_MIN, 1),
 10936				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10937				BPF_EXIT_INSN(),
 10938			},
 10939			INTERNAL | FLAG_NO_DATA,
 10940			{ },
 10941			{ { 0, 1 } },
 10942		},
 10943		{
 10944			"JMP32_JSLT_K: imm = -0x80000000 -> never taken",
 10945			.u.insns_int = {
 10946				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10947				BPF_JMP32_IMM(BPF_JSLT, R1, S32_MIN, 1),
 10948				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10949				BPF_EXIT_INSN(),
 10950			},
 10951			INTERNAL | FLAG_NO_DATA,
 10952			{ },
 10953			{ { 0, 0 } },
 10954		},
 10955		{
 10956			"JMP32_JSLE_K: imm = 0x7fffffff -> always taken",
 10957			.u.insns_int = {
 10958				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10959				BPF_JMP32_IMM(BPF_JSLE, R1, S32_MAX, 1),
 10960				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10961				BPF_EXIT_INSN(),
 10962			},
 10963			INTERNAL | FLAG_NO_DATA,
 10964			{ },
 10965			{ { 0, 1 } },
 10966		},
 10967		{
 10968			"JMP_JEQ_X: dst = src -> always taken",
 10969			.u.insns_int = {
 10970				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10971				BPF_JMP_REG(BPF_JEQ, R1, R1, 1),
 10972				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10973				BPF_EXIT_INSN(),
 10974			},
 10975			INTERNAL | FLAG_NO_DATA,
 10976			{ },
 10977			{ { 0, 1 } },
 10978		},
 10979		{
 10980			"JMP_JGE_X: dst = src -> always taken",
 10981			.u.insns_int = {
 10982				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10983				BPF_JMP_REG(BPF_JGE, R1, R1, 1),
 10984				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10985				BPF_EXIT_INSN(),
 10986			},
 10987			INTERNAL | FLAG_NO_DATA,
 10988			{ },
 10989			{ { 0, 1 } },
 10990		},
 10991		{
 10992			"JMP_JLE_X: dst = src -> always taken",
 10993			.u.insns_int = {
 10994				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 10995				BPF_JMP_REG(BPF_JLE, R1, R1, 1),
 10996				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 10997				BPF_EXIT_INSN(),
 10998			},
 10999			INTERNAL | FLAG_NO_DATA,
 11000			{ },
 11001			{ { 0, 1 } },
 11002		},
 11003		{
 11004			"JMP_JSGE_X: dst = src -> always taken",
 11005			.u.insns_int = {
 11006				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 11007				BPF_JMP_REG(BPF_JSGE, R1, R1, 1),
 11008				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11009				BPF_EXIT_INSN(),
 11010			},
 11011			INTERNAL | FLAG_NO_DATA,
 11012			{ },
 11013			{ { 0, 1 } },
 11014		},
 11015		{
 11016			"JMP_JSLE_X: dst = src -> always taken",
 11017			.u.insns_int = {
 11018				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 11019				BPF_JMP_REG(BPF_JSLE, R1, R1, 1),
 11020				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11021				BPF_EXIT_INSN(),
 11022			},
 11023			INTERNAL | FLAG_NO_DATA,
 11024			{ },
 11025			{ { 0, 1 } },
 11026		},
 11027		{
 11028			"JMP_JNE_X: dst = src -> never taken",
 11029			.u.insns_int = {
 11030				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 11031				BPF_JMP_REG(BPF_JNE, R1, R1, 1),
 11032				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11033				BPF_EXIT_INSN(),
 11034			},
 11035			INTERNAL | FLAG_NO_DATA,
 11036			{ },
 11037			{ { 0, 0 } },
 11038		},
 11039		{
 11040			"JMP_JGT_X: dst = src -> never taken",
 11041			.u.insns_int = {
 11042				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 11043				BPF_JMP_REG(BPF_JGT, R1, R1, 1),
 11044				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11045				BPF_EXIT_INSN(),
 11046			},
 11047			INTERNAL | FLAG_NO_DATA,
 11048			{ },
 11049			{ { 0, 0 } },
 11050		},
 11051		{
 11052			"JMP_JLT_X: dst = src -> never taken",
 11053			.u.insns_int = {
 11054				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 11055				BPF_JMP_REG(BPF_JLT, R1, R1, 1),
 11056				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11057				BPF_EXIT_INSN(),
 11058			},
 11059			INTERNAL | FLAG_NO_DATA,
 11060			{ },
 11061			{ { 0, 0 } },
 11062		},
 11063		{
 11064			"JMP_JSGT_X: dst = src -> never taken",
 11065			.u.insns_int = {
 11066				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 11067				BPF_JMP_REG(BPF_JSGT, R1, R1, 1),
 11068				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11069				BPF_EXIT_INSN(),
 11070			},
 11071			INTERNAL | FLAG_NO_DATA,
 11072			{ },
 11073			{ { 0, 0 } },
 11074		},
 11075		{
 11076			"JMP_JSLT_X: dst = src -> never taken",
 11077			.u.insns_int = {
 11078				BPF_ALU64_IMM(BPF_MOV, R0, 1),
 11079				BPF_JMP_REG(BPF_JSLT, R1, R1, 1),
 11080				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11081				BPF_EXIT_INSN(),
 11082			},
 11083			INTERNAL | FLAG_NO_DATA,
 11084			{ },
 11085			{ { 0, 0 } },
 11086		},
 11087		/* Short relative jumps */
 11088		{
 11089			"Short relative jump: offset=0",
 11090			.u.insns_int = {
 11091				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11092				BPF_JMP_IMM(BPF_JEQ, R0, 0, 0),
 11093				BPF_EXIT_INSN(),
 11094				BPF_ALU32_IMM(BPF_MOV, R0, -1),
 11095			},
 11096			INTERNAL | FLAG_NO_DATA | FLAG_VERIFIER_ZEXT,
 11097			{ },
 11098			{ { 0, 0 } },
 11099		},
 11100		{
 11101			"Short relative jump: offset=1",
 11102			.u.insns_int = {
 11103				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11104				BPF_JMP_IMM(BPF_JEQ, R0, 0, 1),
 11105				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11106				BPF_EXIT_INSN(),
 11107				BPF_ALU32_IMM(BPF_MOV, R0, -1),
 11108			},
 11109			INTERNAL | FLAG_NO_DATA | FLAG_VERIFIER_ZEXT,
 11110			{ },
 11111			{ { 0, 0 } },
 11112		},
 11113		{
 11114			"Short relative jump: offset=2",
 11115			.u.insns_int = {
 11116				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11117				BPF_JMP_IMM(BPF_JEQ, R0, 0, 2),
 11118				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11119				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11120				BPF_EXIT_INSN(),
 11121				BPF_ALU32_IMM(BPF_MOV, R0, -1),
 11122			},
 11123			INTERNAL | FLAG_NO_DATA | FLAG_VERIFIER_ZEXT,
 11124			{ },
 11125			{ { 0, 0 } },
 11126		},
 11127		{
 11128			"Short relative jump: offset=3",
 11129			.u.insns_int = {
 11130				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11131				BPF_JMP_IMM(BPF_JEQ, R0, 0, 3),
 11132				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11133				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11134				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11135				BPF_EXIT_INSN(),
 11136				BPF_ALU32_IMM(BPF_MOV, R0, -1),
 11137			},
 11138			INTERNAL | FLAG_NO_DATA | FLAG_VERIFIER_ZEXT,
 11139			{ },
 11140			{ { 0, 0 } },
 11141		},
 11142		{
 11143			"Short relative jump: offset=4",
 11144			.u.insns_int = {
 11145				BPF_ALU64_IMM(BPF_MOV, R0, 0),
 11146				BPF_JMP_IMM(BPF_JEQ, R0, 0, 4),
 11147				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11148				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11149				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11150				BPF_ALU32_IMM(BPF_ADD, R0, 1),
 11151				BPF_EXIT_INSN(),
 11152				BPF_ALU32_IMM(BPF_MOV, R0, -1),
 11153			},
 11154			INTERNAL | FLAG_NO_DATA | FLAG_VERIFIER_ZEXT,
 11155			{ },
 11156			{ { 0, 0 } },
 11157		},
 11158		/* Conditional branch conversions */
 11159		{
 11160			"Long conditional jump: taken at runtime",
 11161			{ },
 11162			INTERNAL | FLAG_NO_DATA,
 11163			{ },
 11164			{ { 0, 1 } },
 11165			.fill_helper = bpf_fill_max_jmp_taken,
 11166		},
 11167		{
 11168			"Long conditional jump: not taken at runtime",
 11169			{ },
 11170			INTERNAL | FLAG_NO_DATA,
 11171			{ },
 11172			{ { 0, 2 } },
 11173			.fill_helper = bpf_fill_max_jmp_not_taken,
 11174		},
 11175		{
 11176			"Long conditional jump: always taken, known at JIT time",
 11177			{ },
 11178			INTERNAL | FLAG_NO_DATA,
 11179			{ },
 11180			{ { 0, 1 } },
 11181			.fill_helper = bpf_fill_max_jmp_always_taken,
 11182		},
 11183		{
 11184			"Long conditional jump: never taken, known at JIT time",
 11185			{ },
 11186			INTERNAL | FLAG_NO_DATA,
 11187			{ },
 11188			{ { 0, 2 } },
 11189			.fill_helper = bpf_fill_max_jmp_never_taken,
 11190		},
 11191		/* Staggered jump sequences, immediate */
 11192		{
 11193			"Staggered jumps: JMP_JA",
 11194			{ },
 11195			INTERNAL | FLAG_NO_DATA,
 11196			{ },
 11197			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11198			.fill_helper = bpf_fill_staggered_ja,
 11199			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11200		},
 11201		{
 11202			"Staggered jumps: JMP_JEQ_K",
 11203			{ },
 11204			INTERNAL | FLAG_NO_DATA,
 11205			{ },
 11206			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11207			.fill_helper = bpf_fill_staggered_jeq_imm,
 11208			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11209		},
 11210		{
 11211			"Staggered jumps: JMP_JNE_K",
 11212			{ },
 11213			INTERNAL | FLAG_NO_DATA,
 11214			{ },
 11215			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11216			.fill_helper = bpf_fill_staggered_jne_imm,
 11217			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11218		},
 11219		{
 11220			"Staggered jumps: JMP_JSET_K",
 11221			{ },
 11222			INTERNAL | FLAG_NO_DATA,
 11223			{ },
 11224			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11225			.fill_helper = bpf_fill_staggered_jset_imm,
 11226			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11227		},
 11228		{
 11229			"Staggered jumps: JMP_JGT_K",
 11230			{ },
 11231			INTERNAL | FLAG_NO_DATA,
 11232			{ },
 11233			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11234			.fill_helper = bpf_fill_staggered_jgt_imm,
 11235			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11236		},
 11237		{
 11238			"Staggered jumps: JMP_JGE_K",
 11239			{ },
 11240			INTERNAL | FLAG_NO_DATA,
 11241			{ },
 11242			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11243			.fill_helper = bpf_fill_staggered_jge_imm,
 11244			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11245		},
 11246		{
 11247			"Staggered jumps: JMP_JLT_K",
 11248			{ },
 11249			INTERNAL | FLAG_NO_DATA,
 11250			{ },
 11251			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11252			.fill_helper = bpf_fill_staggered_jlt_imm,
 11253			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11254		},
 11255		{
 11256			"Staggered jumps: JMP_JLE_K",
 11257			{ },
 11258			INTERNAL | FLAG_NO_DATA,
 11259			{ },
 11260			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11261			.fill_helper = bpf_fill_staggered_jle_imm,
 11262			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11263		},
 11264		{
 11265			"Staggered jumps: JMP_JSGT_K",
 11266			{ },
 11267			INTERNAL | FLAG_NO_DATA,
 11268			{ },
 11269			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11270			.fill_helper = bpf_fill_staggered_jsgt_imm,
 11271			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11272		},
 11273		{
 11274			"Staggered jumps: JMP_JSGE_K",
 11275			{ },
 11276			INTERNAL | FLAG_NO_DATA,
 11277			{ },
 11278			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11279			.fill_helper = bpf_fill_staggered_jsge_imm,
 11280			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11281		},
 11282		{
 11283			"Staggered jumps: JMP_JSLT_K",
 11284			{ },
 11285			INTERNAL | FLAG_NO_DATA,
 11286			{ },
 11287			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11288			.fill_helper = bpf_fill_staggered_jslt_imm,
 11289			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11290		},
 11291		{
 11292			"Staggered jumps: JMP_JSLE_K",
 11293			{ },
 11294			INTERNAL | FLAG_NO_DATA,
 11295			{ },
 11296			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11297			.fill_helper = bpf_fill_staggered_jsle_imm,
 11298			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11299		},
 11300		/* Staggered jump sequences, register */
 11301		{
 11302			"Staggered jumps: JMP_JEQ_X",
 11303			{ },
 11304			INTERNAL | FLAG_NO_DATA,
 11305			{ },
 11306			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11307			.fill_helper = bpf_fill_staggered_jeq_reg,
 11308			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11309		},
 11310		{
 11311			"Staggered jumps: JMP_JNE_X",
 11312			{ },
 11313			INTERNAL | FLAG_NO_DATA,
 11314			{ },
 11315			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11316			.fill_helper = bpf_fill_staggered_jne_reg,
 11317			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11318		},
 11319		{
 11320			"Staggered jumps: JMP_JSET_X",
 11321			{ },
 11322			INTERNAL | FLAG_NO_DATA,
 11323			{ },
 11324			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11325			.fill_helper = bpf_fill_staggered_jset_reg,
 11326			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11327		},
 11328		{
 11329			"Staggered jumps: JMP_JGT_X",
 11330			{ },
 11331			INTERNAL | FLAG_NO_DATA,
 11332			{ },
 11333			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11334			.fill_helper = bpf_fill_staggered_jgt_reg,
 11335			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11336		},
 11337		{
 11338			"Staggered jumps: JMP_JGE_X",
 11339			{ },
 11340			INTERNAL | FLAG_NO_DATA,
 11341			{ },
 11342			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11343			.fill_helper = bpf_fill_staggered_jge_reg,
 11344			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11345		},
 11346		{
 11347			"Staggered jumps: JMP_JLT_X",
 11348			{ },
 11349			INTERNAL | FLAG_NO_DATA,
 11350			{ },
 11351			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11352			.fill_helper = bpf_fill_staggered_jlt_reg,
 11353			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11354		},
 11355		{
 11356			"Staggered jumps: JMP_JLE_X",
 11357			{ },
 11358			INTERNAL | FLAG_NO_DATA,
 11359			{ },
 11360			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11361			.fill_helper = bpf_fill_staggered_jle_reg,
 11362			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11363		},
 11364		{
 11365			"Staggered jumps: JMP_JSGT_X",
 11366			{ },
 11367			INTERNAL | FLAG_NO_DATA,
 11368			{ },
 11369			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11370			.fill_helper = bpf_fill_staggered_jsgt_reg,
 11371			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11372		},
 11373		{
 11374			"Staggered jumps: JMP_JSGE_X",
 11375			{ },
 11376			INTERNAL | FLAG_NO_DATA,
 11377			{ },
 11378			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11379			.fill_helper = bpf_fill_staggered_jsge_reg,
 11380			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11381		},
 11382		{
 11383			"Staggered jumps: JMP_JSLT_X",
 11384			{ },
 11385			INTERNAL | FLAG_NO_DATA,
 11386			{ },
 11387			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11388			.fill_helper = bpf_fill_staggered_jslt_reg,
 11389			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11390		},
 11391		{
 11392			"Staggered jumps: JMP_JSLE_X",
 11393			{ },
 11394			INTERNAL | FLAG_NO_DATA,
 11395			{ },
 11396			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11397			.fill_helper = bpf_fill_staggered_jsle_reg,
 11398			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11399		},
 11400		/* Staggered jump sequences, JMP32 immediate */
 11401		{
 11402			"Staggered jumps: JMP32_JEQ_K",
 11403			{ },
 11404			INTERNAL | FLAG_NO_DATA,
 11405			{ },
 11406			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11407			.fill_helper = bpf_fill_staggered_jeq32_imm,
 11408			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11409		},
 11410		{
 11411			"Staggered jumps: JMP32_JNE_K",
 11412			{ },
 11413			INTERNAL | FLAG_NO_DATA,
 11414			{ },
 11415			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11416			.fill_helper = bpf_fill_staggered_jne32_imm,
 11417			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11418		},
 11419		{
 11420			"Staggered jumps: JMP32_JSET_K",
 11421			{ },
 11422			INTERNAL | FLAG_NO_DATA,
 11423			{ },
 11424			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11425			.fill_helper = bpf_fill_staggered_jset32_imm,
 11426			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11427		},
 11428		{
 11429			"Staggered jumps: JMP32_JGT_K",
 11430			{ },
 11431			INTERNAL | FLAG_NO_DATA,
 11432			{ },
 11433			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11434			.fill_helper = bpf_fill_staggered_jgt32_imm,
 11435			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11436		},
 11437		{
 11438			"Staggered jumps: JMP32_JGE_K",
 11439			{ },
 11440			INTERNAL | FLAG_NO_DATA,
 11441			{ },
 11442			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11443			.fill_helper = bpf_fill_staggered_jge32_imm,
 11444			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11445		},
 11446		{
 11447			"Staggered jumps: JMP32_JLT_K",
 11448			{ },
 11449			INTERNAL | FLAG_NO_DATA,
 11450			{ },
 11451			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11452			.fill_helper = bpf_fill_staggered_jlt32_imm,
 11453			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11454		},
 11455		{
 11456			"Staggered jumps: JMP32_JLE_K",
 11457			{ },
 11458			INTERNAL | FLAG_NO_DATA,
 11459			{ },
 11460			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11461			.fill_helper = bpf_fill_staggered_jle32_imm,
 11462			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11463		},
 11464		{
 11465			"Staggered jumps: JMP32_JSGT_K",
 11466			{ },
 11467			INTERNAL | FLAG_NO_DATA,
 11468			{ },
 11469			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11470			.fill_helper = bpf_fill_staggered_jsgt32_imm,
 11471			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11472		},
 11473		{
 11474			"Staggered jumps: JMP32_JSGE_K",
 11475			{ },
 11476			INTERNAL | FLAG_NO_DATA,
 11477			{ },
 11478			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11479			.fill_helper = bpf_fill_staggered_jsge32_imm,
 11480			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11481		},
 11482		{
 11483			"Staggered jumps: JMP32_JSLT_K",
 11484			{ },
 11485			INTERNAL | FLAG_NO_DATA,
 11486			{ },
 11487			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11488			.fill_helper = bpf_fill_staggered_jslt32_imm,
 11489			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11490		},
 11491		{
 11492			"Staggered jumps: JMP32_JSLE_K",
 11493			{ },
 11494			INTERNAL | FLAG_NO_DATA,
 11495			{ },
 11496			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11497			.fill_helper = bpf_fill_staggered_jsle32_imm,
 11498			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11499		},
 11500		/* Staggered jump sequences, JMP32 register */
 11501		{
 11502			"Staggered jumps: JMP32_JEQ_X",
 11503			{ },
 11504			INTERNAL | FLAG_NO_DATA,
 11505			{ },
 11506			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11507			.fill_helper = bpf_fill_staggered_jeq32_reg,
 11508			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11509		},
 11510		{
 11511			"Staggered jumps: JMP32_JNE_X",
 11512			{ },
 11513			INTERNAL | FLAG_NO_DATA,
 11514			{ },
 11515			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11516			.fill_helper = bpf_fill_staggered_jne32_reg,
 11517			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11518		},
 11519		{
 11520			"Staggered jumps: JMP32_JSET_X",
 11521			{ },
 11522			INTERNAL | FLAG_NO_DATA,
 11523			{ },
 11524			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11525			.fill_helper = bpf_fill_staggered_jset32_reg,
 11526			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11527		},
 11528		{
 11529			"Staggered jumps: JMP32_JGT_X",
 11530			{ },
 11531			INTERNAL | FLAG_NO_DATA,
 11532			{ },
 11533			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11534			.fill_helper = bpf_fill_staggered_jgt32_reg,
 11535			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11536		},
 11537		{
 11538			"Staggered jumps: JMP32_JGE_X",
 11539			{ },
 11540			INTERNAL | FLAG_NO_DATA,
 11541			{ },
 11542			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11543			.fill_helper = bpf_fill_staggered_jge32_reg,
 11544			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11545		},
 11546		{
 11547			"Staggered jumps: JMP32_JLT_X",
 11548			{ },
 11549			INTERNAL | FLAG_NO_DATA,
 11550			{ },
 11551			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11552			.fill_helper = bpf_fill_staggered_jlt32_reg,
 11553			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11554		},
 11555		{
 11556			"Staggered jumps: JMP32_JLE_X",
 11557			{ },
 11558			INTERNAL | FLAG_NO_DATA,
 11559			{ },
 11560			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11561			.fill_helper = bpf_fill_staggered_jle32_reg,
 11562			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11563		},
 11564		{
 11565			"Staggered jumps: JMP32_JSGT_X",
 11566			{ },
 11567			INTERNAL | FLAG_NO_DATA,
 11568			{ },
 11569			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11570			.fill_helper = bpf_fill_staggered_jsgt32_reg,
 11571			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11572		},
 11573		{
 11574			"Staggered jumps: JMP32_JSGE_X",
 11575			{ },
 11576			INTERNAL | FLAG_NO_DATA,
 11577			{ },
 11578			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11579			.fill_helper = bpf_fill_staggered_jsge32_reg,
 11580			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11581		},
 11582		{
 11583			"Staggered jumps: JMP32_JSLT_X",
 11584			{ },
 11585			INTERNAL | FLAG_NO_DATA,
 11586			{ },
 11587			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11588			.fill_helper = bpf_fill_staggered_jslt32_reg,
 11589			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11590		},
 11591		{
 11592			"Staggered jumps: JMP32_JSLE_X",
 11593			{ },
 11594			INTERNAL | FLAG_NO_DATA,
 11595			{ },
 11596			{ { 0, MAX_STAGGERED_JMP_SIZE + 1 } },
 11597			.fill_helper = bpf_fill_staggered_jsle32_reg,
 11598			.nr_testruns = NR_STAGGERED_JMP_RUNS,
 11599		},
 11600	};
 11601	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ