https://gcc.gnu.org/g:ec985bc97a01577bca8307f986caba7ba7633cde
commit r15-1100-gec985bc97a01577bca8307f986caba7ba7633cde Author: Roger Sayle <ro...@nextmovesoftware.com> Date: Fri Jun 7 13:57:23 2024 +0100 i386: Improve handling of ternlog instructions in i386/sse.md This patch improves the way that the x86 backend recognizes and expands AVX512's bitwise ternary logic (vpternlog) instructions. As a motivating example consider the following code which calculates the carry out from a (binary) full adder: typedef unsigned long long v4di __attribute((vector_size(32))); v4di foo(v4di a, v4di b, v4di c) { return (a & b) | ((a ^ b) & c); } with -O2 -march=cascadelake current mainline produces: foo: vpternlogq $96, %ymm0, %ymm1, %ymm2 vmovdqa %ymm0, %ymm3 vmovdqa %ymm2, %ymm0 vpternlogq $248, %ymm3, %ymm1, %ymm0 ret with the patch below, we now generate a single instruction: foo: vpternlogq $232, %ymm2, %ymm1, %ymm0 ret The AVX512 vpternlog[qd] instructions are a very cool addition to the x86 instruction set, that can calculate any Boolean function of three inputs in a single fast instruction. As the truth table for any three-input function has 8 rows, any specific function can be represented by specifying those bits, i.e. by a 8-bit byte, an immediate integer between 0 and 256. Examples of ternary functions and their indices are given below: 0x01 1: ~((b|a)|c) 0x02 2: (~(b|a))&c 0x03 3: ~(b|a) 0x04 4: (~(c|a))&b 0x05 5: ~(c|a) 0x06 6: (c^b)&~a 0x07 7: ~((c&b)|a) 0x08 8: (~a&c)&b (~a&b)&c (c&b)&~a 0x09 9: ~((c^b)|a) 0x0a 10: ~a&c 0x0b 11: ~((~c&b)|a) (~b|c)&~a 0x0c 12: ~a&b 0x0d 13: ~((~b&c)|a) (~c|b)&~a 0x0e 14: (c|b)&~a 0x0f 15: ~a 0x10 16: (~(c|b))&a 0x11 17: ~(c|b) ... 0xf4 244: (~c&b)|a 0xf5 245: ~c|a 0xf6 246: (c^b)|a 0xf7 247: (~(c&b))|a 0xf8 248: (c&b)|a 0xf9 249: (~(c^b))|a 0xfa 250: c|a 0xfb 251: (c|a)|~b (~b|a)|c (~b|c)|a 0xfc 252: b|a 0xfd 253: (b|a)|~c (~c|a)|b (~c|b)|a 0xfe 254: (b|a)|c (c|a)|b (c|b)|a A naive implementation (in many compilers) might be add define_insn patterns for all 256 different functions. The situation is even worse as many of these Boolean functions don't have a "canonical form" (as produced by simplify_rtx) and would each need multiple patterns. See the space-separated equivalent expressions in the table above. This need to provide instruction "templates" might explain why GCC, LLVM and ICC all exhibit similar coverage problems in their ability to recognize x86 ternlog ternary functions. Perhaps a unique feature of GCC's design is that in addition to regular define_insn templates, machine descriptions can also perform pattern matching via a match_operator (and its corresponding predicate). This patch introduces a ternlog_operand predicate that matches a (possibly infinite) set of expression trees, identifying those that have at most three unique operands. This then allows a define_insn_and_split to recognize suitable expressions and then transform them into the appropriate UNSPEC_VTERNLOG as a pre-reload splitter. This design allows combine to smash together arbitrarily complex Boolean expressions, then transform them into an UNSPEC before register allocation. As an "optimization", where possible ix86_expand_ternlog generates a simpler binary operation, using AND, XOR, IOR or ANDN where possible, and in a few cases attempts to "canonicalize" the ternlog, by reordering or duplicating operands, so that later CSE passes have a hope of spotting equivalent values. This patch leaves the existing ternlog patterns in sse.md (for now), many of which are made obsolete by these changes. In theory we now only need one define_insn for UNSPEC_VTERNLOG. One complication from these previous variants was that they inconsistently used decimal vs. hexadecimal to specify the immediate constant operand in assembly language, making the list of tweaks to the testsuite with this patch larger than it might have been. I propose to remove the vestigial patterns in a follow-up patch, once this approach has baked (proven to be stable) on mainline. 2024-06-07 Roger Sayle <ro...@nextmovesoftware.com> Hongtao Liu <hongtao....@intel.com> gcc/ChangeLog * config/i386/i386-expand.cc (ix86_expand_args_builtin): Call fixup_modeless_constant before testing predicates. Only call copy_to_mode_reg on memory operands (after the first one). (ix86_gen_bcst_mem): Helper function to convert a CONST_VECTOR into a VEC_DUPLICATE if possible. (ix86_ternlog_idx): Convert an RTX expression into a ternlog index between 0 and 255, recording the operands in ARGS, if possible or return -1 if this is not possible/valid. (ix86_ternlog_leaf_p): Helper function to identify "leaves" of a ternlog expression, e.g. REG_P, MEM_P, CONST_VECTOR, etc. (ix86_ternlog_operand_p): Test whether a expression is suitable for and prefered as an UNSPEC_TERNLOG. (ix86_expand_ternlog_binop): Helper function to construct the binary operation corresponding to a sufficiently simple ternlog. (ix86_expand_ternlog_andnot): Helper function to construct a ANDN operation corresponding to a sufficiently simple ternlog. (ix86_expand_ternlog): Expand a 3-operand ternary logic expression, constructing either an UNSPEC_TERNLOG or simpler rtx expression. Called from builtin expanders and pre-reload splitters. * config/i386/i386-protos.h (ix86_ternlog_idx): Prototype here. (ix86_ternlog_operand_p): Likewise. (ix86_expand_ternlog): Likewise. * config/i386/predicates.md (ternlog_operand): New predicate that calls xi86_ternlog_operand_p. * config/i386/sse.md (<avx512>_vpternlog<mode>_0): New define_insn_and_split that recognizes a SET_SRC of ternlog_operand and expands it via ix86_expand_ternlog pre-reload. (<avx512>_vternlog<mode>_mask): Convert from define_insn to define_expand. Use ix86_expand_ternlog if the mask operand is ~0 (or 255 or -1). (*<avx512>_vternlog<mode>_mask): define_insn renamed from above. gcc/testsuite/ChangeLog * gcc.target/i386/avx512f-vpternlogd-1.c: Update test case. * gcc.target/i386/avx512f-vpternlogq-1.c: Likewise. * gcc.target/i386/avx512vl-vpternlogd-1.c: Likewise. * gcc.target/i386/avx512vl-vpternlogq-1.c: Likewise. * gcc.target/i386/pr100711-4.c: Likewise. * gcc.target/i386/pr100711-5.c: Likewise. * gcc.target/i386/avx512f-vpternlogd-3.c: New 128-bit test case. * gcc.target/i386/avx512f-vpternlogd-4.c: New 256-bit test case. * gcc.target/i386/avx512f-vpternlogd-5.c: New 512-bit test case. * gcc.target/i386/avx512f-vpternlogq-3.c: New test case. Diff: --- gcc/config/i386/i386-expand.cc | 558 +++++++++++- gcc/config/i386/i386-protos.h | 5 + gcc/config/i386/predicates.md | 5 + gcc/config/i386/sse.md | 48 +- .../gcc.target/i386/avx512f-vpternlogd-1.c | 1 - .../gcc.target/i386/avx512f-vpternlogd-3.c | 955 +++++++++++++++++++++ .../gcc.target/i386/avx512f-vpternlogd-4.c | 955 +++++++++++++++++++++ .../gcc.target/i386/avx512f-vpternlogd-5.c | 955 +++++++++++++++++++++ .../gcc.target/i386/avx512f-vpternlogq-1.c | 1 - .../gcc.target/i386/avx512f-vpternlogq-3.c | 9 + .../gcc.target/i386/avx512vl-vpternlogd-1.c | 2 - .../gcc.target/i386/avx512vl-vpternlogq-1.c | 2 - gcc/testsuite/gcc.target/i386/pr100711-4.c | 4 +- gcc/testsuite/gcc.target/i386/pr100711-5.c | 5 +- 14 files changed, 3491 insertions(+), 14 deletions(-) diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index d1d396a8713..9b60264dce2 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -11707,6 +11707,8 @@ ix86_expand_args_builtin (const struct builtin_description *d, tree arg = CALL_EXPR_ARG (exp, i); rtx op = expand_normal (arg); machine_mode mode = insn_p->operand[i + 1].mode; + /* Need to fixup modeless constant before testing predicate. */ + op = fixup_modeless_constant (op, mode); bool match = insn_p->operand[i + 1].predicate (op, mode); if (second_arg_count && i == 1) @@ -11873,13 +11875,15 @@ ix86_expand_args_builtin (const struct builtin_description *d, /* If we aren't optimizing, only allow one memory operand to be generated. */ if (memory_operand (op, mode)) - num_memory++; - - op = fixup_modeless_constant (op, mode); + { + num_memory++; + if (!optimize && num_memory > 1) + op = copy_to_mode_reg (mode, op); + } if (GET_MODE (op) == mode || GET_MODE (op) == VOIDmode) { - if (optimize || !match || num_memory > 1) + if (!match) op = copy_to_mode_reg (mode, op); } else @@ -25516,4 +25520,550 @@ ix86_gen_ccmp_next (rtx_insn **prep_seq, rtx_insn **gen_seq, rtx prev, return gen_rtx_fmt_ee ((rtx_code) cmp_code, VOIDmode, target, const0_rtx); } +/* Attempt to convert a CONST_VECTOR into a bcst_mem_operand. + Returns NULL_RTX if X is cannot be expressed as a suitable + VEC_DUPLICATE in mode MODE. */ + +static rtx +ix86_gen_bcst_mem (machine_mode mode, rtx x) +{ + if (!TARGET_AVX512F + || GET_CODE (x) != CONST_VECTOR + || (!TARGET_AVX512VL + && (GET_MODE_SIZE (mode) != 64 || !TARGET_EVEX512)) + || !VALID_BCST_MODE_P (GET_MODE_INNER (mode)) + /* Disallow HFmode broadcast. */ + || GET_MODE_SIZE (GET_MODE_INNER (mode)) < 4) + return NULL_RTX; + + rtx cst = CONST_VECTOR_ELT (x, 0); + if (!CONST_SCALAR_INT_P (cst) + && !CONST_DOUBLE_P (cst) + && !CONST_FIXED_P (cst)) + return NULL_RTX; + + int n_elts = GET_MODE_NUNITS (mode); + if (CONST_VECTOR_NUNITS (x) != n_elts) + return NULL_RTX; + + for (int i = 1; i < n_elts; i++) + if (!rtx_equal_p (cst, CONST_VECTOR_ELT (x, i))) + return NULL_RTX; + + rtx mem = force_const_mem (GET_MODE_INNER (mode), cst); + return gen_rtx_VEC_DUPLICATE (mode, validize_mem (mem)); +} + +/* Determine the ternlog immediate index that implements 3-operand + ternary logic expression OP. This uses and modifies the 3 element + array ARGS to record and check the leaves, either 3 REGs, or 2 REGs + and MEM. Returns an index between 0 and 255 for a valid ternlog, + or -1 if the expression isn't suitable. */ + +int +ix86_ternlog_idx (rtx op, rtx *args) +{ + int idx0, idx1; + + if (!op) + return -1; + + switch (GET_CODE (op)) + { + case REG: + if (!args[0]) + { + args[0] = op; + return 0xf0; + } + if (REGNO (op) == REGNO (args[0])) + return 0xf0; + if (!args[1]) + { + args[1] = op; + return 0xcc; + } + if (REGNO (op) == REGNO (args[1])) + return 0xcc; + if (!args[2]) + { + args[2] = op; + return 0xaa; + } + if (REG_P (args[2]) && REGNO (op) == REGNO (args[2])) + return 0xaa; + return -1; + + case VEC_DUPLICATE: + if (!bcst_mem_operand (op, GET_MODE (op))) + return -1; + /* FALLTHRU */ + + case MEM: + if (!memory_operand (op, GET_MODE (op))) + return -1; + if (MEM_P (op) + && MEM_VOLATILE_P (op) + && !volatile_ok) + return -1; + /* FALLTHRU */ + + case CONST_VECTOR: + if (!args[2]) + { + args[2] = op; + return 0xaa; + } + /* Maximum of one volatile memory reference per expression. */ + if (side_effects_p (op) && side_effects_p (args[2])) + return -1; + if (rtx_equal_p (op, args[2])) + return 0xaa; + /* Check if one CONST_VECTOR is the ones-complement of the other. */ + if (GET_CODE (op) == CONST_VECTOR + && GET_CODE (args[2]) == CONST_VECTOR + && rtx_equal_p (simplify_const_unary_operation (NOT, GET_MODE (op), + op, GET_MODE (op)), + args[2])) + return 0x55; + return -1; + + case SUBREG: + if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))) + != GET_MODE_SIZE (GET_MODE (op))) + return -1; + return ix86_ternlog_idx (SUBREG_REG (op), args); + + case NOT: + idx0 = ix86_ternlog_idx (XEXP (op, 0), args); + return (idx0 >= 0) ? idx0 ^ 0xff : -1; + + case AND: + idx0 = ix86_ternlog_idx (XEXP (op, 0), args); + if (idx0 < 0) + return -1; + idx1 = ix86_ternlog_idx (XEXP (op, 1), args); + return (idx1 >= 0) ? idx0 & idx1 : -1; + + case IOR: + idx0 = ix86_ternlog_idx (XEXP (op, 0), args); + if (idx0 < 0) + return -1; + idx1 = ix86_ternlog_idx (XEXP (op, 1), args); + return (idx1 >= 0) ? idx0 | idx1 : -1; + + case XOR: + idx0 = ix86_ternlog_idx (XEXP (op, 0), args); + if (idx0 < 0) + return -1; + if (vector_all_ones_operand (XEXP (op, 1), GET_MODE (op))) + return idx0 ^ 0xff; + idx1 = ix86_ternlog_idx (XEXP (op, 1), args); + return (idx1 >= 0) ? idx0 ^ idx1 : -1; + + case UNSPEC: + if (XINT (op, 1) != UNSPEC_VTERNLOG + || XVECLEN (op, 0) != 4 + || !CONST_INT_P (XVECEXP (op, 0, 3))) + return -1; + + /* TODO: Handle permuted operands. */ + if (ix86_ternlog_idx (XVECEXP (op, 0, 0), args) != 0xf0 + || ix86_ternlog_idx (XVECEXP (op, 0, 1), args) != 0xcc + || ix86_ternlog_idx (XVECEXP (op, 0, 2), args) != 0xaa) + return -1; + return INTVAL (XVECEXP (op, 0, 3)); + + default: + return -1; + } +} + +/* Return TRUE if OP (in mode MODE) is the leaf of a ternary logic + expression, such as a register or a memory reference. */ + +bool +ix86_ternlog_leaf_p (rtx op, machine_mode mode) +{ + /* We can't use memory_operand here, as it may return a different + value before and after reload (for volatile MEMs) which creates + problems splitting instructions. */ + return register_operand (op, mode) + || MEM_P (op) + || GET_CODE (op) == CONST_VECTOR + || bcst_mem_operand (op, mode); +} + +/* Test whether OP is a 3-operand ternary logic expression suitable + for use in a ternlog instruction. */ + +bool +ix86_ternlog_operand_p (rtx op) +{ + rtx op0, op1; + rtx args[3]; + + args[0] = NULL_RTX; + args[1] = NULL_RTX; + args[2] = NULL_RTX; + int idx = ix86_ternlog_idx (op, args); + if (idx < 0) + return false; + + /* Don't match simple (binary or unary) expressions. */ + machine_mode mode = GET_MODE (op); + switch (GET_CODE (op)) + { + case AND: + op0 = XEXP (op, 0); + op1 = XEXP (op, 1); + + /* Prefer pand. */ + if (ix86_ternlog_leaf_p (op0, mode) + && ix86_ternlog_leaf_p (op1, mode)) + return false; + /* Prefer pandn. */ + if (GET_CODE (op0) == NOT + && register_operand (XEXP (op0, 0), mode) + && ix86_ternlog_leaf_p (op1, mode)) + return false; + break; + + case IOR: + /* Prefer por. */ + if (ix86_ternlog_leaf_p (XEXP (op, 0), mode) + && ix86_ternlog_leaf_p (XEXP (op, 1), mode)) + return false; + break; + + case XOR: + op1 = XEXP (op, 1); + /* Prefer pxor, or one_cmpl<vmode>2. */ + if (ix86_ternlog_leaf_p (XEXP (op, 0), mode) + && (ix86_ternlog_leaf_p (op1, mode) + || vector_all_ones_operand (op1, mode))) + return false; + break; + + default: + break; + } + return true; +} + +/* Helper function for ix86_expand_ternlog. */ +static rtx +ix86_expand_ternlog_binop (enum rtx_code code, machine_mode mode, + rtx op0, rtx op1, rtx target) +{ + if (GET_MODE (op0) != mode) + op0 = gen_lowpart (mode, op0); + if (GET_MODE (op1) != mode) + op1 = gen_lowpart (mode, op1); + + if (GET_CODE (op0) == CONST_VECTOR) + op0 = validize_mem (force_const_mem (mode, op0)); + if (GET_CODE (op1) == CONST_VECTOR) + op1 = validize_mem (force_const_mem (mode, op1)); + + if (memory_operand (op0, mode)) + { + if (memory_operand (op1, mode)) + op0 = force_reg (mode, op0); + else + std::swap (op0, op1); + } + rtx ops[3] = { target, op0, op1 }; + ix86_expand_vector_logical_operator (code, mode, ops); + return target; +} + + +/* Helper function for ix86_expand_ternlog. */ +static rtx +ix86_expand_ternlog_andnot (machine_mode mode, rtx op0, rtx op1, rtx target) +{ + if (GET_MODE (op0) != mode) + op0 = gen_lowpart (mode, op0); + op0 = gen_rtx_NOT (mode, op0); + if (GET_MODE (op1) != mode) + op1 = gen_lowpart (mode, op1); + emit_move_insn (target, gen_rtx_AND (mode, op0, op1)); + return target; +} + +/* Expand a 3-operand ternary logic expression. Return TARGET. */ +rtx +ix86_expand_ternlog (machine_mode mode, rtx op0, rtx op1, rtx op2, int idx, + rtx target) +{ + rtx tmp0, tmp1, tmp2; + + if (!target) + target = gen_reg_rtx (mode); + + /* Canonicalize ternlog index for degenerate (duplicated) operands. */ + if (rtx_equal_p (op0, op1) && rtx_equal_p (op0, op2)) + switch (idx & 0x81) + { + case 0x00: + idx = 0x00; + break; + case 0x01: + idx = 0x0f; + break; + case 0x80: + idx = 0xf0; + break; + case 0x81: + idx = 0xff; + break; + } + + switch (idx & 0xff) + { + case 0x00: + if ((!op0 || !side_effects_p (op0)) + && (!op1 || !side_effects_p (op1)) + && (!op2 || !side_effects_p (op2))) + { + emit_move_insn (target, CONST0_RTX (mode)); + return target; + } + break; + + case 0x0a: /* ~a&c */ + if ((!op1 || !side_effects_p (op1)) + && op0 && register_operand (op0, mode) + && op2 && register_operand (op2, mode)) + return ix86_expand_ternlog_andnot (mode, op0, op2, target); + break; + + case 0x0c: /* ~a&b */ + if ((!op2 || !side_effects_p (op2)) + && op0 && register_operand (op0, mode) + && op1 && register_operand (op1, mode)) + return ix86_expand_ternlog_andnot (mode, op0, op1, target); + break; + + case 0x0f: /* ~a */ + if ((!op1 || !side_effects_p (op1)) + && (!op2 || !side_effects_p (op2)) + && op0) + { + if (GET_MODE (op0) != mode) + op0 = gen_lowpart (mode, op0); + if (!TARGET_64BIT && !register_operand (op0, mode)) + op0 = force_reg (mode, op0); + emit_move_insn (target, gen_rtx_XOR (mode, op0, CONSTM1_RTX (mode))); + return target; + } + break; + + case 0x22: /* ~b&c */ + if ((!op0 || !side_effects_p (op0)) + && op1 && register_operand (op1, mode) + && op2 && register_operand (op2, mode)) + return ix86_expand_ternlog_andnot (mode, op1, op2, target); + break; + + case 0x30: /* ~b&a */ + if ((!op2 || !side_effects_p (op2)) + && op0 && register_operand (op0, mode) + && op1 && register_operand (op1, mode)) + return ix86_expand_ternlog_andnot (mode, op1, op0, target); + break; + + case 0x33: /* ~b */ + if ((!op0 || !side_effects_p (op0)) + && (!op2 || !side_effects_p (op2)) + && op1) + { + if (GET_MODE (op1) != mode) + op1 = gen_lowpart (mode, op1); + if (!TARGET_64BIT && !register_operand (op1, mode)) + op1 = force_reg (mode, op1); + emit_move_insn (target, gen_rtx_XOR (mode, op1, CONSTM1_RTX (mode))); + return target; + } + break; + + case 0x3c: /* a^b */ + if (op0 && op1 + && (!op2 || !side_effects_p (op2))) + return ix86_expand_ternlog_binop (XOR, mode, op0, op1, target); + break; + + case 0x44: /* ~c&b */ + if ((!op0 || !side_effects_p (op0)) + && op1 && register_operand (op1, mode) + && op2 && register_operand (op2, mode)) + return ix86_expand_ternlog_andnot (mode, op2, op1, target); + break; + + case 0x50: /* ~c&a */ + if ((!op1 || !side_effects_p (op1)) + && op0 && register_operand (op0, mode) + && op2 && register_operand (op2, mode)) + return ix86_expand_ternlog_andnot (mode, op2, op0, target); + break; + + case 0x55: /* ~c */ + if ((!op0 || !side_effects_p (op0)) + && (!op1 || !side_effects_p (op1)) + && op2) + { + if (GET_MODE (op2) != mode) + op2 = gen_lowpart (mode, op2); + if (!TARGET_64BIT && !register_operand (op2, mode)) + op2 = force_reg (mode, op2); + emit_move_insn (target, gen_rtx_XOR (mode, op2, CONSTM1_RTX (mode))); + return target; + } + break; + + case 0x5a: /* a^c */ + if (op0 && op2 + && (!op1 || !side_effects_p (op1))) + return ix86_expand_ternlog_binop (XOR, mode, op0, op2, target); + break; + + case 0x66: /* b^c */ + if ((!op0 || !side_effects_p (op0)) + && op1 && op2) + return ix86_expand_ternlog_binop (XOR, mode, op1, op2, target); + break; + + case 0x88: /* b&c */ + if ((!op0 || !side_effects_p (op0)) + && op1 && op2) + return ix86_expand_ternlog_binop (AND, mode, op1, op2, target); + break; + + case 0xa0: /* a&c */ + if ((!op1 || !side_effects_p (op1)) + && op0 && op2) + return ix86_expand_ternlog_binop (AND, mode, op0, op2, target); + break; + + case 0xaa: /* c */ + if ((!op0 || !side_effects_p (op0)) + && (!op1 || !side_effects_p (op1)) + && op2) + { + if (GET_MODE (op2) != mode) + op2 = gen_lowpart (mode, op2); + emit_move_insn (target, op2); + return target; + } + break; + + case 0xc0: /* a&b */ + if (op0 && op1 + && (!op2 || !side_effects_p (op2))) + return ix86_expand_ternlog_binop (AND, mode, op0, op1, target); + break; + + case 0xcc: /* b */ + if ((!op0 || !side_effects_p (op0)) + && op1 + && (!op2 || !side_effects_p (op2))) + { + if (GET_MODE (op1) != mode) + op1 = gen_lowpart (mode, op1); + emit_move_insn (target, op1); + return target; + } + break; + + case 0xee: /* b|c */ + if ((!op0 || !side_effects_p (op0)) + && op1 && op2) + return ix86_expand_ternlog_binop (IOR, mode, op1, op2, target); + break; + + case 0xf0: /* a */ + if (op0 + && (!op1 || !side_effects_p (op1)) + && (!op2 || !side_effects_p (op2))) + { + if (GET_MODE (op0) != mode) + op0 = gen_lowpart (mode, op0); + emit_move_insn (target, op0); + return target; + } + break; + + case 0xfa: /* a|c */ + if (op0 && op2 + && (!op1 || !side_effects_p (op1))) + return ix86_expand_ternlog_binop (IOR, mode, op0, op2, target); + break; + + case 0xfc: /* a|b */ + if (op0 && op1 + && (!op2 || !side_effects_p (op2))) + return ix86_expand_ternlog_binop (IOR, mode, op0, op1, target); + break; + + case 0xff: + if ((!op0 || !side_effects_p (op0)) + && (!op1 || !side_effects_p (op1)) + && (!op2 || !side_effects_p (op2))) + { + emit_move_insn (target, CONSTM1_RTX (mode)); + return target; + } + break; + } + + tmp0 = register_operand (op0, mode) ? op0 : force_reg (mode, op0); + if (GET_MODE (tmp0) != mode) + tmp0 = gen_lowpart (mode, tmp0); + + if (!op1 || rtx_equal_p (op0, op1)) + tmp1 = copy_rtx (tmp0); + else if (!register_operand (op1, mode)) + tmp1 = force_reg (mode, op1); + else + tmp1 = op1; + if (GET_MODE (tmp1) != mode) + tmp1 = gen_lowpart (mode, tmp1); + + if (!op2 || rtx_equal_p (op0, op2)) + tmp2 = copy_rtx (tmp0); + else if (rtx_equal_p (op1, op2)) + tmp2 = copy_rtx (tmp1); + else if (GET_CODE (op2) == CONST_VECTOR) + { + if (GET_MODE (op2) != mode) + op2 = gen_lowpart (mode, op2); + tmp2 = ix86_gen_bcst_mem (mode, op2); + if (!tmp2) + { + tmp2 = validize_mem (force_const_mem (mode, op2)); + rtx bcast = ix86_broadcast_from_constant (mode, tmp2); + if (bcast) + { + rtx reg2 = gen_reg_rtx (mode); + bool ok = ix86_expand_vector_init_duplicate (false, mode, + reg2, bcast); + if (ok) + tmp2 = reg2; + } + } + } + else + tmp2 = op2; + if (GET_MODE (tmp2) != mode) + tmp2 = gen_lowpart (mode, tmp2); + /* Some memory_operands are not vector_memory_operands. */ + if (!bcst_vector_operand (tmp2, mode)) + tmp2 = force_reg (mode, tmp2); + + rtvec vec = gen_rtvec (4, tmp0, tmp1, tmp2, GEN_INT (idx)); + emit_move_insn (target, gen_rtx_UNSPEC (mode, vec, UNSPEC_VTERNLOG)); + return target; +} + #include "gt-i386-expand.h" diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index aa50b897b2b..f37d207ae64 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -251,6 +251,11 @@ extern int ix86_get_flags_cc (enum rtx_code); extern rtx ix86_memtag_untagged_pointer (rtx, rtx); extern bool ix86_memtag_can_tag_addresses (void); +extern int ix86_ternlog_idx (rtx op, rtx *args); +extern bool ix86_ternlog_operand_p (rtx op); +extern rtx ix86_expand_ternlog (machine_mode mode, rtx op0, rtx op1, rtx op2, + int idx, rtx target); + #ifdef TREE_CODE extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, int); #endif /* TREE_CODE */ diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 2a97776fc32..7afe3100cb7 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -1098,6 +1098,11 @@ (and (match_code "not") (match_test "nonimmediate_operand (XEXP (op, 0), mode)")))) +;; True for expressions valid for 3-operand ternlog instructions. +(define_predicate "ternlog_operand" + (and (match_code "not,and,ior,xor") + (match_test "ix86_ternlog_operand_p (op)"))) + ;; True if OP is acceptable as operand of DImode shift expander. (define_predicate "shiftdi_operand" (if_then_else (match_test "TARGET_64BIT") diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 4ad3917f5ce..680a46a0b08 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -13032,6 +13032,26 @@ ;; ;; and so on. +(define_insn_and_split "*<avx512>_vpternlog<mode>_0" + [(set (match_operand:V 0 "register_operand") + (match_operand:V 1 "ternlog_operand"))] + "(<MODE_SIZE> == 64 || TARGET_AVX512VL + || (TARGET_AVX512F && TARGET_EVEX512 && !TARGET_PREFER_AVX256)) + && ix86_pre_reload_split ()" + "#" + "&& 1" + [(const_int 0)] +{ + rtx args[3]; + args[0] = NULL_RTX; + args[1] = NULL_RTX; + args[2] = NULL_RTX; + int idx = ix86_ternlog_idx (operands[1], args); + ix86_expand_ternlog (<MODE>mode, args[0], args[1], args[2], idx, + operands[0]); + DONE; +}) + (define_code_iterator any_logic1 [and ior xor]) (define_code_iterator any_logic2 [and ior xor]) (define_code_attr logic_op [(and "&") (ior "|") (xor "^")]) @@ -13252,7 +13272,33 @@ }) -(define_insn "<avx512>_vternlog<mode>_mask" +(define_expand "<avx512>_vternlog<mode>_mask" + [(set (match_operand:VI48_AVX512VL 0 "register_operand") + (vec_merge:VI48_AVX512VL + (unspec:VI48_AVX512VL + [(match_operand:VI48_AVX512VL 1 "register_operand") + (match_operand:VI48_AVX512VL 2 "register_operand") + (match_operand:VI48_AVX512VL 3 "bcst_vector_operand") + (match_operand:SI 4 "const_0_to_255_operand")] + UNSPEC_VTERNLOG) + (match_dup 1) + (match_operand:<avx512fmaskmode> 5 "general_operand")))] + "TARGET_AVX512F" +{ + unsigned HOST_WIDE_INT mode_mask = GET_MODE_MASK (<avx512fmaskmode>mode); + if (CONST_INT_P (operands[5]) + && (UINTVAL (operands[5]) & mode_mask) == mode_mask) + { + ix86_expand_ternlog (<MODE>mode, operands[1], operands[2], + operands[3], INTVAL (operands[4]), + operands[0]); + DONE; + } + if (!register_operand (operands[5], <avx512fmaskmode>mode)) + operands[5] = force_reg (<avx512fmaskmode>mode, operands[5]); +}) + +(define_insn "*<avx512>_vternlog<mode>_mask" [(set (match_operand:VI48_AVX512VL 0 "register_operand" "=v") (vec_merge:VI48_AVX512VL (unspec:VI48_AVX512VL diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-1.c b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-1.c index a88153a85db..b0984879eab 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-1.c @@ -1,6 +1,5 @@ /* { dg-do compile } */ /* { dg-options "-mavx512f -O2" } */ -/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-3.c b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-3.c new file mode 100644 index 00000000000..fc66a9f5572 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-3.c @@ -0,0 +1,955 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512f" } */ + +typedef unsigned int V __attribute__ ((__vector_size__ (16))); + +V foo_0_1(V a, V b, V c) { return (V){0,0,0,0}; } + +V foo_1_1(V a, V b, V c) { return ~((b|a)|c); } + +V foo_2_1(V a, V b, V c) { return (~(b|a))&c; } + +V foo_3_1(V a, V b, V c) { return ~(b|a); } + +V foo_4_1(V a, V b, V c) { return (~(c|a))&b; } + +V foo_5_1(V a, V b, V c) { return ~(c|a); } + +V foo_6_1(V a, V b, V c) { return (c^b)&~a; } + +V foo_7_1(V a, V b, V c) { return ~((c&b)|a); } + +V foo_8_1(V a, V b, V c) { return (~a&c)&b; } +V foo_8_2(V a, V b, V c) { return (~a&b)&c; } +V foo_8_3(V a, V b, V c) { return (c&b)&~a; } + +V foo_9_1(V a, V b, V c) { return ~((c^b)|a); } + +V foo_10_1(V a, V b, V c) { return ~a&c; } + +V foo_11_1(V a, V b, V c) { return ~((~c&b)|a); } +V foo_11_2(V a, V b, V c) { return (~b|c)&~a; } + +V foo_12_1(V a, V b, V c) { return ~a&b; } + +V foo_13_1(V a, V b, V c) { return ~((~b&c)|a); } +V foo_13_2(V a, V b, V c) { return (~c|b)&~a; } + +V foo_14_1(V a, V b, V c) { return (c|b)&~a; } + +V foo_15_1(V a, V b, V c) { return ~a; } + +V foo_16_1(V a, V b, V c) { return (~(c|b))&a; } + +V foo_17_1(V a, V b, V c) { return ~(c|b); } + +V foo_18_1(V a, V b, V c) { return (c^a)&~b; } + +V foo_19_1(V a, V b, V c) { return ~((c&a)|b); } + +V foo_20_1(V a, V b, V c) { return (b^a)&~c; } + +V foo_21_1(V a, V b, V c) { return ~((b&a)|c); } + +V foo_22_1(V a, V b, V c) { return ((b^a)|(c&b))^c; } +V foo_22_2(V a, V b, V c) { return ((c^a)|(c&b))^b; } +V foo_22_3(V a, V b, V c) { return ((c^b)|(c&a))^a; } +V foo_22_4(V a, V b, V c) { return ((b&a)|c)^(b|a); } +V foo_22_5(V a, V b, V c) { return ((c&a)|b)^(c|a); } +V foo_22_6(V a, V b, V c) { return ((c&b)|a)^(c|b); } + +V foo_23_1(V a, V b, V c) { return ~(((b^a)&(c^a))^a); } +V foo_23_2(V a, V b, V c) { return ((b^a)&(c^a))^~a; } +V foo_23_3(V a, V b, V c) { return ((b^a)&(c^b))^~b; } +V foo_23_4(V a, V b, V c) { return ((b^a)&c)^(~(b&a)); } +V foo_23_5(V a, V b, V c) { return ((c^a)&(c^b))^~c; } +V foo_23_6(V a, V b, V c) { return ((c^a)&b)^(~(c&a)); } +V foo_23_7(V a, V b, V c) { return ((c^b)&a)^(~(c&b)); } +V foo_23_8(V a, V b, V c) { return (~((c^b)&a))^(c&b); } +V foo_23_9(V a, V b, V c) { return (~((c^a)&b))^(c&a); } +V foo_23_10(V a, V b, V c) { return (~((c^a)&(c^b)))^c; } +V foo_23_11(V a, V b, V c) { return (~((b^a)&c))^(b&a); } +V foo_23_12(V a, V b, V c) { return (~((b^a)&(c^b)))^b; } +V foo_23_13(V a, V b, V c) { return (~((b^a)&(c^a)))^a; } +V foo_23_14(V a, V b, V c) { return ((~(b^a))|c)^(b|a); } +V foo_23_15(V a, V b, V c) { return ((~(c^a))|b)^(c|a); } +V foo_23_16(V a, V b, V c) { return ((~(c^b))|a)^(c|b); } + +V foo_24_1(V a, V b, V c) { return (b^a)&(c^a); } + +V foo_25_1(V a, V b, V c) { return ~((c^b)|(c&a)); } +V foo_25_2(V a, V b, V c) { return ((c&a)|~b)^c; } +V foo_25_3(V a, V b, V c) { return ((b&a)|~c)^b; } + +V foo_26_1(V a, V b, V c) { return ((b&a)|c)^a; } + +V foo_27_1(V a, V b, V c) { return ~(((b^a)&c)^b); } +V foo_27_2(V a, V b, V c) { return ((b^a)&c)^~b; } +V foo_27_3(V a, V b, V c) { return (~b|c)^(c&a); } +V foo_27_4(V a, V b, V c) { return (~((b^a)&c))^b; } +V foo_27_5(V a, V b, V c) { return ((~(b^a))|c)^a; } +V foo_27_6(V a, V b, V c) { return (~c|a)^(c|b); } + +V foo_28_1(V a, V b, V c) { return ((c&a)|b)^a; } + +V foo_29_1(V a, V b, V c) { return ~(((c^a)&b)^c); } +V foo_29_2(V a, V b, V c) { return ((c^a)&b)^~c; } +V foo_29_3(V a, V b, V c) { return (~((c^a)&b))^c; } +V foo_29_4(V a, V b, V c) { return (~c|b)^(b&a); } +V foo_29_5(V a, V b, V c) { return ((~(c^a))|b)^a; } +V foo_29_6(V a, V b, V c) { return (~b|a)^(c|b); } + +V foo_30_1(V a, V b, V c) { return (c|b)^a; } + +V foo_31_1(V a, V b, V c) { return ~((c|b)&a); } + +V foo_32_1(V a, V b, V c) { return (~b&c)&a; } +V foo_32_2(V a, V b, V c) { return (~b&a)&c; } +V foo_32_3(V a, V b, V c) { return (c&a)&~b; } + +V foo_33_1(V a, V b, V c) { return ~((c^a)|b); } + +V foo_34_1(V a, V b, V c) { return ~b&c; } + +V foo_35_1(V a, V b, V c) { return ~((~c&a)|b); } +V foo_35_2(V a, V b, V c) { return (~a|c)&~b; } + +V foo_36_1(V a, V b, V c) { return (b^a)&(c^b); } + +V foo_37_1(V a, V b, V c) { return ~((c^a)|(c&b)); } +V foo_37_2(V a, V b, V c) { return ((c&b)|~a)^c; } +V foo_37_3(V a, V b, V c) { return ((b&a)|~c)^a; } + +V foo_38_1(V a, V b, V c) { return ((b&a)|c)^b; } + +V foo_39_1(V a, V b, V c) { return ~(((b^a)&c)^a); } +V foo_39_2(V a, V b, V c) { return ((b^a)&c)^~a; } +V foo_39_3(V a, V b, V c) { return (~a|c)^(c&b); } +V foo_39_4(V a, V b, V c) { return ((~(b^a))|c)^b; } +V foo_39_5(V a, V b, V c) { return (~((b^a)&c))^a; } +V foo_39_6(V a, V b, V c) { return (~c|b)^(c|a); } + +V foo_40_1(V a, V b, V c) { return (b^a)&c; } + +V foo_41_1(V a, V b, V c) { return ~((((b&a)|c)^a)^b); } +V foo_41_2(V a, V b, V c) { return (((b&a)|c)^b)^~a; } +V foo_41_3(V a, V b, V c) { return (~((b&a)|c))^(b^a); } +V foo_41_4(V a, V b, V c) { return (((b&a)|c)^a)^~b; } +V foo_41_5(V a, V b, V c) { return ((b&a)|c)^(~(b^a)); } +V foo_41_6(V a, V b, V c) { return (~(((b&a)|c)^a))^b; } +V foo_41_7(V a, V b, V c) { return ((b&a)|~c)^(b|a); } +V foo_41_8(V a, V b, V c) { return (~(((b&a)|c)^b))^a; } + +V foo_42_1(V a, V b, V c) { return (~(b&a))&c; } + +V foo_43_1(V a, V b, V c) { return ~(((b^a)&(c^a))^b); } +V foo_43_2(V a, V b, V c) { return ((b^a)&c)|(~(b|a)); } +V foo_43_3(V a, V b, V c) { return ((b^a)&c)^(~(b|a)); } +V foo_43_4(V a, V b, V c) { return ((b^a)&(c^b))^~a; } +V foo_43_5(V a, V b, V c) { return ((b^a)&(c^a))^~b; } +V foo_43_6(V a, V b, V c) { return ((b^a)|(c^a))^~c; } +V foo_43_7(V a, V b, V c) { return (~((b^a)|(c^a)))^c; } +V foo_43_8(V a, V b, V c) { return ((~(b^a))|c)^(b&a); } +V foo_43_9(V a, V b, V c) { return (~((b^a)&(c^a)))^b; } +V foo_43_10(V a, V b, V c) { return (~((b^a)&c))^(b|a); } +V foo_43_11(V a, V b, V c) { return (~((b^a)&(c^b)))^a; } +V foo_43_12(V a, V b, V c) { return ((c^b)|a)^(~c|b); } +V foo_43_13(V a, V b, V c) { return ((c^a)|b)^(~c|a); } + +V foo_44_1(V a, V b, V c) { return (b^a)&(c|b); } +V foo_44_2(V a, V b, V c) { return ((c|b)&a)^b; } + +V foo_45_1(V a, V b, V c) { return (~c|b)^a; } + +V foo_46_1(V a, V b, V c) { return (b&a)^(c|b); } +V foo_46_2(V a, V b, V c) { return ((c^a)|b)^a; } + +V foo_47_1(V a, V b, V c) { return ~((~c|b)&a); } +V foo_47_2(V a, V b, V c) { return (~b&c)|~a; } + +V foo_48_1(V a, V b, V c) { return ~b&a; } + +V foo_49_1(V a, V b, V c) { return ~((~a&c)|b); } +V foo_49_2(V a, V b, V c) { return (~c|a)&~b; } + +V foo_50_1(V a, V b, V c) { return (c|a)&~b; } + +V foo_51_1(V a, V b, V c) { return ~b; } + +V foo_52_1(V a, V b, V c) { return ((c&b)|a)^b; } + +V foo_53_1(V a, V b, V c) { return ~(((c^b)&a)^c); } +V foo_53_2(V a, V b, V c) { return ((c^b)&a)^~c; } +V foo_53_3(V a, V b, V c) { return (~((c^b)&a))^c; } +V foo_53_4(V a, V b, V c) { return (~c|a)^(b&a); } +V foo_53_5(V a, V b, V c) { return ((~(c^b))|a)^b; } +V foo_53_6(V a, V b, V c) { return (~a|b)^(c|a); } + +V foo_54_1(V a, V b, V c) { return (c|a)^b; } + +V foo_55_1(V a, V b, V c) { return ~((c|a)&b); } + +V foo_56_1(V a, V b, V c) { return (b^a)&(c|a); } +V foo_56_2(V a, V b, V c) { return ((c|a)&b)^a; } + +V foo_57_1(V a, V b, V c) { return (~c|a)^b; } + +V foo_58_1(V a, V b, V c) { return (b&a)^(c|a); } +V foo_58_2(V a, V b, V c) { return ((c^b)|a)^b; } + +V foo_59_1(V a, V b, V c) { return ~((~c|a)&b); } +V foo_59_2(V a, V b, V c) { return (~a&c)|~b; } + +V foo_60_1(V a, V b, V c) { return b^a; } + +V foo_61_1(V a, V b, V c) { return (~(c|a))|(b^a); } +V foo_61_2(V a, V b, V c) { return (~(c|b))|(b^a); } +V foo_61_3(V a, V b, V c) { return ((~(c|b))|a)^b; } +V foo_61_4(V a, V b, V c) { return ((~(c|a))|b)^a; } + +V foo_62_1(V a, V b, V c) { return (~a&c)|(b^a); } +V foo_62_2(V a, V b, V c) { return (~b&c)|(b^a); } +V foo_62_3(V a, V b, V c) { return ((~b&c)|a)^b; } +V foo_62_4(V a, V b, V c) { return ((~a&c)|b)^a; } + +V foo_63_1(V a, V b, V c) { return ~(b&a); } + +V foo_64_1(V a, V b, V c) { return (~c&b)&a; } +V foo_64_2(V a, V b, V c) { return (~c&a)&b; } +V foo_64_3(V a, V b, V c) { return (b&a)&~c; } + +V foo_65_1(V a, V b, V c) { return ~((b^a)|c); } + +V foo_66_1(V a, V b, V c) { return (c^a)&(c^b); } + +V foo_67_1(V a, V b, V c) { return ~((b^a)|(c&b)); } +V foo_67_2(V a, V b, V c) { return ((c&b)|~a)^b; } +V foo_67_3(V a, V b, V c) { return ((c&a)|~b)^a; } + +V foo_68_1(V a, V b, V c) { return ~c&b; } + +V foo_69_1(V a, V b, V c) { return ~((~b&a)|c); } +V foo_69_2(V a, V b, V c) { return (~a|b)&~c; } + +V foo_70_1(V a, V b, V c) { return ((c&a)|b)^c; } + +V foo_71_1(V a, V b, V c) { return ~(((c^a)&b)^a); } +V foo_71_2(V a, V b, V c) { return ((c^a)&b)^~a; } +V foo_71_3(V a, V b, V c) { return (~a|b)^(c&b); } +V foo_71_4(V a, V b, V c) { return ((~(c^a))|b)^c; } +V foo_71_5(V a, V b, V c) { return (~((c^a)&b))^a; } +V foo_71_6(V a, V b, V c) { return (~b|c)^(b|a); } + +V foo_72_1(V a, V b, V c) { return (c^a)&b; } + +V foo_73_1(V a, V b, V c) { return ~((((c&a)|b)^a)^c); } +V foo_73_2(V a, V b, V c) { return (((c&a)|b)^c)^~a; } +V foo_73_3(V a, V b, V c) { return (~((c&a)|b))^(c^a); } +V foo_73_4(V a, V b, V c) { return (((c&a)|b)^a)^~c; } +V foo_73_5(V a, V b, V c) { return ((c&a)|b)^(~(c^a)); } +V foo_73_6(V a, V b, V c) { return (~(((c&a)|b)^a))^c; } +V foo_73_7(V a, V b, V c) { return ((c&a)|~b)^(c|a); } +V foo_73_8(V a, V b, V c) { return (~(((c&a)|b)^c))^a; } + +V foo_74_1(V a, V b, V c) { return (c^a)&(c|b); } +V foo_74_2(V a, V b, V c) { return ((c|b)&a)^c; } + +V foo_75_1(V a, V b, V c) { return (~b|c)^a; } + +V foo_76_1(V a, V b, V c) { return (~(c&a))&b; } + +V foo_77_1(V a, V b, V c) { return ~(((b^a)&(c^a))^c); } +V foo_77_2(V a, V b, V c) { return ((c^a)&b)|(~(c|a)); } +V foo_77_3(V a, V b, V c) { return ((c^a)&b)^(~(c|a)); } +V foo_77_4(V a, V b, V c) { return ((c^a)&(c^b))^~a; } +V foo_77_5(V a, V b, V c) { return ((b^a)&(c^a))^~c; } +V foo_77_6(V a, V b, V c) { return ((b^a)|(c^a))^~b; } +V foo_77_7(V a, V b, V c) { return (~((b^a)|(c^a)))^b; } +V foo_77_8(V a, V b, V c) { return ((~(c^a))|b)^(c&a); } +V foo_77_9(V a, V b, V c) { return (~((b^a)&(c^a)))^c; } +V foo_77_10(V a, V b, V c) { return (~((c^a)&b))^(c|a); } +V foo_77_11(V a, V b, V c) { return ((c^b)|a)^(~b|c); } +V foo_77_12(V a, V b, V c) { return (~((c^a)&(c^b)))^a; } +V foo_77_13(V a, V b, V c) { return ((b^a)|c)^(~b|a); } + +V foo_78_1(V a, V b, V c) { return (c&a)^(c|b); } +V foo_78_2(V a, V b, V c) { return ((b^a)|c)^a; } + +V foo_79_1(V a, V b, V c) { return ~((~b|c)&a); } +V foo_79_2(V a, V b, V c) { return (~c&b)|~a; } + +V foo_80_1(V a, V b, V c) { return ~c&a; } + +V foo_81_1(V a, V b, V c) { return ~((~a&b)|c); } +V foo_81_2(V a, V b, V c) { return (~b|a)&~c; } + +V foo_82_1(V a, V b, V c) { return ((c&b)|a)^c; } + +V foo_83_1(V a, V b, V c) { return ~(((c^b)&a)^b); } +V foo_83_2(V a, V b, V c) { return ((c^b)&a)^~b; } +V foo_83_3(V a, V b, V c) { return (~((c^b)&a))^b; } +V foo_83_4(V a, V b, V c) { return (~b|a)^(c&a); } +V foo_83_5(V a, V b, V c) { return ((~(c^b))|a)^c; } +V foo_83_6(V a, V b, V c) { return (~a|c)^(b|a); } + +V foo_84_1(V a, V b, V c) { return (b|a)&~c; } + +V foo_85_1(V a, V b, V c) { return ~c; } + +V foo_86_1(V a, V b, V c) { return (b|a)^c; } + +V foo_87_1(V a, V b, V c) { return ~((b|a)&c); } + +V foo_88_1(V a, V b, V c) { return (c^a)&(b|a); } +V foo_88_2(V a, V b, V c) { return ((b|a)&c)^a; } + +V foo_89_1(V a, V b, V c) { return (~b|a)^c; } + +V foo_90_1(V a, V b, V c) { return c^a; } + +V foo_91_1(V a, V b, V c) { return (~(b|a))|(c^a); } +V foo_91_2(V a, V b, V c) { return (~(c|b))|(c^a); } +V foo_91_3(V a, V b, V c) { return ((~(c|b))|a)^c; } +V foo_91_4(V a, V b, V c) { return ((~(b|a))|c)^a; } + +V foo_92_1(V a, V b, V c) { return (c&a)^(b|a); } +V foo_92_2(V a, V b, V c) { return ((c^b)|a)^c; } + +V foo_93_1(V a, V b, V c) { return ~((~b|a)&c); } +V foo_93_2(V a, V b, V c) { return (~a&b)|~c; } + +V foo_94_1(V a, V b, V c) { return (~a&b)|(c^a); } +V foo_94_2(V a, V b, V c) { return (~c&b)|(c^a); } +V foo_94_3(V a, V b, V c) { return ((~c&b)|a)^c; } +V foo_94_4(V a, V b, V c) { return ((~a&b)|c)^a; } + +V foo_95_1(V a, V b, V c) { return ~(c&a); } + +V foo_96_1(V a, V b, V c) { return (c^b)&a; } + +V foo_97_1(V a, V b, V c) { return ~(((c|b)^a)|(c&b)); } +V foo_97_2(V a, V b, V c) { return (~((c&b)|a))^(c^b); } +V foo_97_3(V a, V b, V c) { return (((c&b)|a)^c)^~b; } +V foo_97_4(V a, V b, V c) { return (((c&b)|a)^b)^~c; } +V foo_97_5(V a, V b, V c) { return ((c&b)|~a)^(c|b); } +V foo_97_6(V a, V b, V c) { return ((c&b)|a)^(~(c^b)); } +V foo_97_7(V a, V b, V c) { return (~(((c&b)|a)^b))^c; } +V foo_97_8(V a, V b, V c) { return (~(((c&b)|a)^c))^b; } + +V foo_98_1(V a, V b, V c) { return (c^b)&(c|a); } +V foo_98_2(V a, V b, V c) { return ((c|a)&b)^c; } + +V foo_99_1(V a, V b, V c) { return (~a|c)^b; } + +V foo_100_1(V a, V b, V c) { return (c^b)&(b|a); } +V foo_100_2(V a, V b, V c) { return ((b|a)&c)^b; } + +V foo_101_1(V a, V b, V c) { return (~a|b)^c; } + +V foo_102_1(V a, V b, V c) { return c^b; } + +V foo_103_1(V a, V b, V c) { return (~(b|a))|(c^b); } +V foo_103_2(V a, V b, V c) { return (~(c|a))|(c^b); } +V foo_103_3(V a, V b, V c) { return ((~(c|a))|b)^c; } +V foo_103_4(V a, V b, V c) { return ((~(b|a))|c)^b; } + +V foo_104_1(V a, V b, V c) { return ((b&a)^c)&(b|a); } +V foo_104_2(V a, V b, V c) { return ((c&a)^b)&(c|a); } +V foo_104_3(V a, V b, V c) { return ((c&b)^a)&(c|b); } +V foo_104_4(V a, V b, V c) { return ((c|b)&a)^(c&b); } +V foo_104_5(V a, V b, V c) { return ((c|a)&b)^(c&a); } +V foo_104_6(V a, V b, V c) { return ((b|a)&c)^(b&a); } + +V foo_105_1(V a, V b, V c) { return ~((b^a)^c); } +V foo_105_2(V a, V b, V c) { return (c^b)^~a; } +V foo_105_3(V a, V b, V c) { return (c^a)^~b; } +V foo_105_4(V a, V b, V c) { return (b^a)^~c; } +V foo_105_5(V a, V b, V c) { return (~(c^b))^a; } +V foo_105_6(V a, V b, V c) { return (~(c^a))^b; } +V foo_105_7(V a, V b, V c) { return (~(b^a))^c; } + +V foo_106_1(V a, V b, V c) { return (b&a)^c; } + +V foo_107_1(V a, V b, V c) { return ~(((b|a)&c)^(b^a)); } +V foo_107_2(V a, V b, V c) { return ((b&a)^c)|(~(b|a)); } +V foo_107_3(V a, V b, V c) { return ((c^b)&(b|a))^~a; } +V foo_107_4(V a, V b, V c) { return ((c^a)&(b|a))^~b; } +V foo_107_5(V a, V b, V c) { return (~((b|a)&c))^(b^a); } +V foo_107_6(V a, V b, V c) { return (~((c^b)&(b|a)))^a; } +V foo_107_7(V a, V b, V c) { return (~((c^a)&(b|a)))^b; } +V foo_107_8(V a, V b, V c) { return ((b|a)&c)^(~(b^a)); } +V foo_107_9(V a, V b, V c) { return ((~(b|a))|c)^(b&a); } + +V foo_108_1(V a, V b, V c) { return (c&a)^b; } + +V foo_109_1(V a, V b, V c) { return ~(((b^a)&(c|a))^c); } +V foo_109_2(V a, V b, V c) { return ((c&a)^b)|(~(c|a)); } +V foo_109_3(V a, V b, V c) { return ((c^b)&(c|a))^~a; } +V foo_109_4(V a, V b, V c) { return (~((c|a)&b))^(c^a); } +V foo_109_5(V a, V b, V c) { return ((b^a)&(c|a))^~c; } +V foo_109_6(V a, V b, V c) { return (~((c^b)&(c|a)))^a; } +V foo_109_7(V a, V b, V c) { return ((~(c|a))|b)^(c&a); } +V foo_109_8(V a, V b, V c) { return ((c|a)&b)^(~(c^a)); } +V foo_109_9(V a, V b, V c) { return (~((b^a)&(c|a)))^c; } + +V foo_110_1(V a, V b, V c) { return (~a&c)|(c^b); } +V foo_110_2(V a, V b, V c) { return (~a&b)|(c^b); } +V foo_110_3(V a, V b, V c) { return ((~b|a)&c)^b; } +V foo_110_4(V a, V b, V c) { return ((~c|a)&b)^c; } + +V foo_111_1(V a, V b, V c) { return (c^b)|~a; } + +V foo_112_1(V a, V b, V c) { return (~(c&b))&a; } + +V foo_113_1(V a, V b, V c) { return ~(((b^a)&(c^b))^c); } +V foo_113_2(V a, V b, V c) { return ((b^a)|(c^a))^~a; } +V foo_113_3(V a, V b, V c) { return ((c^b)&a)|(~(c|b)); } +V foo_113_4(V a, V b, V c) { return ((c^b)&a)^(~(c|b)); } +V foo_113_5(V a, V b, V c) { return ((b^a)&(c^b))^~c; } +V foo_113_6(V a, V b, V c) { return ((c^a)&(c^b))^~b; } +V foo_113_7(V a, V b, V c) { return (~((b^a)|(c^a)))^a; } +V foo_113_8(V a, V b, V c) { return ((~(c^b))|a)^(c&b); } +V foo_113_9(V a, V b, V c) { return (~((c^b)&a))^(c|b); } +V foo_113_10(V a, V b, V c) { return (~((b^a)&(c^b)))^c; } +V foo_113_11(V a, V b, V c) { return ((c^a)|b)^(~a|c); } +V foo_113_12(V a, V b, V c) { return (~((c^a)&(c^b)))^b; } +V foo_113_13(V a, V b, V c) { return ((b^a)|c)^(~a|b); } + +V foo_114_1(V a, V b, V c) { return (c&b)^(c|a); } +V foo_114_2(V a, V b, V c) { return ((b^a)|c)^b; } + +V foo_115_1(V a, V b, V c) { return ~((~a|c)&b); } +V foo_115_2(V a, V b, V c) { return (~c&a)|~b; } + +V foo_116_1(V a, V b, V c) { return (c&b)^(b|a); } +V foo_116_2(V a, V b, V c) { return ((c^a)|b)^c; } + +V foo_117_1(V a, V b, V c) { return ~((~a|b)&c); } +V foo_117_2(V a, V b, V c) { return (~b&a)|~c; } + +V foo_118_1(V a, V b, V c) { return (~b&a)|(c^b); } +V foo_118_2(V a, V b, V c) { return (~c&a)|(c^b); } +V foo_118_3(V a, V b, V c) { return ((~c&a)|b)^c; } +V foo_118_4(V a, V b, V c) { return ((~b&a)|c)^b; } + +V foo_119_1(V a, V b, V c) { return ~(c&b); } + +V foo_120_1(V a, V b, V c) { return (c&b)^a; } + +V foo_121_1(V a, V b, V c) { return ~(((b^a)&(c|b))^c); } +V foo_121_2(V a, V b, V c) { return ((c&b)^a)|(~(c|b)); } +V foo_121_3(V a, V b, V c) { return (~((c|b)&a))^(c^b); } +V foo_121_4(V a, V b, V c) { return ((b^a)&(c|b))^~c; } +V foo_121_5(V a, V b, V c) { return ((c^a)&(c|b))^~b; } +V foo_121_6(V a, V b, V c) { return ((~(c|b))|a)^(c&b); } +V foo_121_7(V a, V b, V c) { return ((c|b)&a)^(~(c^b)); } +V foo_121_8(V a, V b, V c) { return (~((b^a)&(c|b)))^c; } +V foo_121_9(V a, V b, V c) { return (~((c^a)&(c|b)))^b; } + +V foo_122_1(V a, V b, V c) { return (~b&c)|(c^a); } +V foo_122_2(V a, V b, V c) { return (~b&a)|(c^a); } +V foo_122_3(V a, V b, V c) { return ((~a|b)&c)^a; } +V foo_122_4(V a, V b, V c) { return ((~c|b)&a)^c; } + +V foo_123_1(V a, V b, V c) { return (c^a)|~b; } + +V foo_124_1(V a, V b, V c) { return (~c&b)|(b^a); } +V foo_124_2(V a, V b, V c) { return (~c&a)|(b^a); } +V foo_124_3(V a, V b, V c) { return ((~a|c)&b)^a; } +V foo_124_4(V a, V b, V c) { return ((~b|c)&a)^b; } + +V foo_125_1(V a, V b, V c) { return (b^a)|~c; } + +V foo_126_1(V a, V b, V c) { return (b^a)|(c^a); } +V foo_126_2(V a, V b, V c) { return (b^a)|(c^b); } +V foo_126_3(V a, V b, V c) { return (c^a)|(c^b); } + +V foo_127_1(V a, V b, V c) { return ~((c&b)&a); } + +V foo_128_1(V a, V b, V c) { return (c&b)&a; } +V foo_128_2(V a, V b, V c) { return (c&a)&b; } +V foo_128_3(V a, V b, V c) { return (b&a)&c; } + +V foo_129_1(V a, V b, V c) { return ~((b^a)|(c^a)); } + +V foo_130_1(V a, V b, V c) { return (~(b^a))&c; } + +V foo_131_1(V a, V b, V c) { return ~((~c&b)|(b^a)); } +V foo_131_2(V a, V b, V c) { return ((~a|c)&b)^~a; } +V foo_131_3(V a, V b, V c) { return ((~b|c)&a)^~b; } +V foo_131_4(V a, V b, V c) { return (~((~b|c)&a))^b; } +V foo_131_5(V a, V b, V c) { return (~((~a|c)&b))^a; } +V foo_131_6(V a, V b, V c) { return (~a|c)&(~(b^a)); } +V foo_131_7(V a, V b, V c) { return (~b|c)&(~(b^a)); } + +V foo_132_1(V a, V b, V c) { return (~(c^a))&b; } + +V foo_133_1(V a, V b, V c) { return ~((~b&c)|(c^a)); } +V foo_133_2(V a, V b, V c) { return ((~a|b)&c)^~a; } +V foo_133_3(V a, V b, V c) { return (~((~c|b)&a))^c; } +V foo_133_4(V a, V b, V c) { return ((~c|b)&a)^~c; } +V foo_133_5(V a, V b, V c) { return (~((~a|b)&c))^a; } +V foo_133_6(V a, V b, V c) { return (~(c^a))&(~a|b); } +V foo_133_7(V a, V b, V c) { return (~(c^a))&(~c|b); } + +V foo_134_1(V a, V b, V c) { return ((b^a)&(c|b))^c; } +V foo_134_2(V a, V b, V c) { return ((c^a)&(c|b))^b; } +V foo_134_3(V a, V b, V c) { return ((c|b)&a)^(c^b); } +V foo_134_4(V a, V b, V c) { return ((b^a)^c)&(c|b); } + +V foo_135_1(V a, V b, V c) { return ~((c&b)^a); } +V foo_135_2(V a, V b, V c) { return (c&b)^~a; } +V foo_135_3(V a, V b, V c) { return (~(c&b))^a; } + +V foo_136_1(V a, V b, V c) { return c&b; } + +V foo_137_1(V a, V b, V c) { return ~((~b&a)|(c^b)); } +V foo_137_2(V a, V b, V c) { return (~((~c&a)|b))^c; } +V foo_137_3(V a, V b, V c) { return ((~b&a)|c)^~b; } +V foo_137_4(V a, V b, V c) { return (~((~b&a)|c))^b; } +V foo_137_5(V a, V b, V c) { return ((~c&a)|b)^~c; } +V foo_137_6(V a, V b, V c) { return (~(c^b))&(~a|c); } +V foo_137_7(V a, V b, V c) { return (~(c^b))&(~a|b); } + +V foo_138_1(V a, V b, V c) { return (~a|b)&c; } + +V foo_139_1(V a, V b, V c) { return ~((c&b)^(b|a)); } +V foo_139_2(V a, V b, V c) { return (~(b|a))|(c&b); } +V foo_139_3(V a, V b, V c) { return (~(b|a))^(c&b); } +V foo_139_4(V a, V b, V c) { return (~((c^a)|b))^c; } +V foo_139_5(V a, V b, V c) { return ((c^a)|b)^~c; } +V foo_139_6(V a, V b, V c) { return (~(c&b))^(b|a); } +V foo_139_7(V a, V b, V c) { return ((c^a)|~b)^a; } + +V foo_140_1(V a, V b, V c) { return (~a|c)&b; } + +V foo_141_1(V a, V b, V c) { return ~((c&b)^(c|a)); } +V foo_141_2(V a, V b, V c) { return (~(c|a))|(c&b); } +V foo_141_3(V a, V b, V c) { return (~(c|a))^(c&b); } +V foo_141_4(V a, V b, V c) { return ((b^a)|c)^~b; } +V foo_141_5(V a, V b, V c) { return (~((b^a)|c))^b; } +V foo_141_6(V a, V b, V c) { return (~(c&b))^(c|a); } +V foo_141_7(V a, V b, V c) { return ((b^a)|~c)^a; } + +V foo_142_1(V a, V b, V c) { return ((b^a)&(c^b))^c; } +V foo_142_2(V a, V b, V c) { return ((c^a)&(c^b))^b; } +V foo_142_3(V a, V b, V c) { return ((c^b)&a)^(c|b); } +V foo_142_4(V a, V b, V c) { return ((b^a)|(c^a))^a; } + +V foo_143_1(V a, V b, V c) { return (c&b)|~a; } + +V foo_144_1(V a, V b, V c) { return (~(c^b))&a; } + +V foo_145_1(V a, V b, V c) { return ~((~a&c)|(c^b)); } +V foo_145_2(V a, V b, V c) { return ((~b|a)&c)^~b; } +V foo_145_3(V a, V b, V c) { return (~((~c|a)&b))^c; } +V foo_145_4(V a, V b, V c) { return ((~c|a)&b)^~c; } +V foo_145_5(V a, V b, V c) { return (~((~b|a)&c))^b; } +V foo_145_6(V a, V b, V c) { return (~(c^b))&(~b|a); } +V foo_145_7(V a, V b, V c) { return (~(c^b))&(~c|a); } + +V foo_146_1(V a, V b, V c) { return ((b^a)&(c|a))^c; } +V foo_146_2(V a, V b, V c) { return ((c|a)&b)^(c^a); } +V foo_146_3(V a, V b, V c) { return ((c^b)&(c|a))^a; } +V foo_146_4(V a, V b, V c) { return ((b^a)^c)&(c|a); } + +V foo_147_1(V a, V b, V c) { return ~((c&a)^b); } +V foo_147_2(V a, V b, V c) { return (c&a)^~b; } +V foo_147_3(V a, V b, V c) { return (~(c&a))^b; } + +V foo_148_1(V a, V b, V c) { return ((b|a)&c)^(b^a); } +V foo_148_2(V a, V b, V c) { return ((c^a)&(b|a))^b; } +V foo_148_3(V a, V b, V c) { return ((c^b)&(b|a))^a; } +V foo_148_4(V a, V b, V c) { return ((b^a)^c)&(b|a); } + +V foo_149_1(V a, V b, V c) { return ~((b&a)^c); } +V foo_149_2(V a, V b, V c) { return (~(b&a))^c; } +V foo_149_3(V a, V b, V c) { return (b&a)^~c; } + +V foo_150_1(V a, V b, V c) { return (b^a)^c; } +V foo_150_2(V a, V b, V c) { return (c^a)^b; } +V foo_150_3(V a, V b, V c) { return (c^b)^a; } + +V foo_151_1(V a, V b, V c) { return ~(((b&a)^c)&(b|a)); } +V foo_151_2(V a, V b, V c) { return ((b^a)^c)|(~(b|a)); } +V foo_151_3(V a, V b, V c) { return ((b^a)^c)|(~(c|a)); } +V foo_151_4(V a, V b, V c) { return ((b^a)^c)|(~(c|b)); } +V foo_151_5(V a, V b, V c) { return (~((c|b)&a))^(c&b); } +V foo_151_6(V a, V b, V c) { return (~((c|a)&b))^(c&a); } +V foo_151_7(V a, V b, V c) { return ((~(b|a))|c)^(b^a); } +V foo_151_8(V a, V b, V c) { return ((~(c|a))|(b^a))^c; } +V foo_151_9(V a, V b, V c) { return ((b|a)&c)^(~(b&a)); } +V foo_151_10(V a, V b, V c) { return (~((b|a)&c))^(b&a); } +V foo_151_11(V a, V b, V c) { return ((~(c|a))|b)^(c^a); } +V foo_151_12(V a, V b, V c) { return ((~(b|a))|(c^a))^b; } +V foo_151_13(V a, V b, V c) { return ((c|a)&b)^(~(c&a)); } +V foo_151_14(V a, V b, V c) { return ((~(c|b))|a)^(c^b); } +V foo_151_15(V a, V b, V c) { return ((~(b|a))|(c^b))^a; } +V foo_151_16(V a, V b, V c) { return ((c|b)&a)^(~(c&b)); } + +V foo_152_1(V a, V b, V c) { return ((c|a)&~b)^c; } +V foo_152_2(V a, V b, V c) { return ((b|a)&~c)^b; } +V foo_152_3(V a, V b, V c) { return (~(c^b))&(c|a); } +V foo_152_4(V a, V b, V c) { return (~(c^b))&(b|a); } + +V foo_153_1(V a, V b, V c) { return ~(c^b); } +V foo_153_2(V a, V b, V c) { return ~b^c; } +V foo_153_3(V a, V b, V c) { return ~c^b; } + +V foo_154_1(V a, V b, V c) { return (~b&a)^c; } + +V foo_155_1(V a, V b, V c) { return ~((c^b)&(b|a)); } +V foo_155_2(V a, V b, V c) { return ((b|a)&c)^~b; } +V foo_155_3(V a, V b, V c) { return (~((b|a)&c))^b; } + +V foo_156_1(V a, V b, V c) { return (~c&a)^b; } + +V foo_157_1(V a, V b, V c) { return ~((c^b)&(c|a)); } +V foo_157_2(V a, V b, V c) { return (~((c|a)&b))^c; } +V foo_157_3(V a, V b, V c) { return ((c|a)&b)^~c; } + +V foo_158_1(V a, V b, V c) { return ((c|b)^a)|(c&b); } +V foo_158_2(V a, V b, V c) { return (((c&b)|a)^b)^c; } +V foo_158_3(V a, V b, V c) { return (((c&b)|a)^c)^b; } +V foo_158_4(V a, V b, V c) { return ((c&b)|a)^(c^b); } +V foo_158_5(V a, V b, V c) { return ((b^a)^c)|(c&b); } + +V foo_159_1(V a, V b, V c) { return ~((c^b)&a); } + +V foo_160_1(V a, V b, V c) { return c&a; } + +V foo_161_1(V a, V b, V c) { return ~((~a&b)|(c^a)); } +V foo_161_2(V a, V b, V c) { return (~((~c&b)|a))^c; } +V foo_161_3(V a, V b, V c) { return ((~a&b)|c)^~a; } +V foo_161_4(V a, V b, V c) { return (~((~a&b)|c))^a; } +V foo_161_5(V a, V b, V c) { return ((~c&b)|a)^~c; } +V foo_161_6(V a, V b, V c) { return (~(c^a))&(~b|c); } +V foo_161_7(V a, V b, V c) { return (~(c^a))&(~b|a); } + +V foo_162_1(V a, V b, V c) { return (~b|a)&c; } + +V foo_163_1(V a, V b, V c) { return ~((c&a)^(b|a)); } +V foo_163_2(V a, V b, V c) { return (~(b|a))|(c&a); } +V foo_163_3(V a, V b, V c) { return (~(b|a))^(c&a); } +V foo_163_4(V a, V b, V c) { return (~((c^b)|a))^c; } +V foo_163_5(V a, V b, V c) { return ((c^b)|a)^~c; } +V foo_163_6(V a, V b, V c) { return (~(c&a))^(b|a); } +V foo_163_7(V a, V b, V c) { return ((c^b)|~a)^b; } + +V foo_164_1(V a, V b, V c) { return ((c|b)&~a)^c; } +V foo_164_2(V a, V b, V c) { return ((b|a)&~c)^a; } +V foo_164_3(V a, V b, V c) { return (~(c^a))&(c|b); } +V foo_164_4(V a, V b, V c) { return (~(c^a))&(b|a); } + +V foo_165_1(V a, V b, V c) { return ~(c^a); } +V foo_165_2(V a, V b, V c) { return ~a^c; } +V foo_165_3(V a, V b, V c) { return ~c^a; } + +V foo_166_1(V a, V b, V c) { return (~a&b)^c; } + +V foo_167_1(V a, V b, V c) { return ~((c^a)&(b|a)); } +V foo_167_2(V a, V b, V c) { return ((b|a)&c)^~a; } +V foo_167_3(V a, V b, V c) { return (~((b|a)&c))^a; } + +V foo_168_1(V a, V b, V c) { return (b|a)&c; } + +V foo_169_1(V a, V b, V c) { return ~((b|a)^c); } +V foo_169_2(V a, V b, V c) { return (~(b|a))^c; } +V foo_169_3(V a, V b, V c) { return (b|a)^~c; } + +V foo_170_1(V a, V b, V c) { return c; } + +V foo_171_1(V a, V b, V c) { return (~(b|a))|c; } + +V foo_172_1(V a, V b, V c) { return ((c^b)&a)^b; } + +V foo_173_1(V a, V b, V c) { return ~(((c&b)|a)^c); } +V foo_173_2(V a, V b, V c) { return (~((c&b)|a))^c; } +V foo_173_3(V a, V b, V c) { return ((c&b)|a)^~c; } +V foo_173_4(V a, V b, V c) { return (~(c^a))|(c&b); } + +V foo_174_1(V a, V b, V c) { return (~a&b)|c; } + +V foo_175_1(V a, V b, V c) { return ~a|c; } + +V foo_176_1(V a, V b, V c) { return (~b|c)&a; } + +V foo_177_1(V a, V b, V c) { return ~((c&a)^(c|b)); } +V foo_177_2(V a, V b, V c) { return ((b^a)|c)^~a; } +V foo_177_3(V a, V b, V c) { return (~(c|b))|(c&a); } +V foo_177_4(V a, V b, V c) { return (~(c|b))^(c&a); } +V foo_177_5(V a, V b, V c) { return (~((b^a)|c))^a; } +V foo_177_6(V a, V b, V c) { return (~(c&a))^(c|b); } +V foo_177_7(V a, V b, V c) { return ((b^a)|~c)^b; } + +V foo_178_1(V a, V b, V c) { return ((b^a)&(c^a))^c; } +V foo_178_2(V a, V b, V c) { return ((c^a)&(c^b))^a; } +V foo_178_3(V a, V b, V c) { return ((c^a)&b)^(c|a); } +V foo_178_4(V a, V b, V c) { return ((b^a)|(c^a))^b; } + +V foo_179_1(V a, V b, V c) { return (c&a)|~b; } + +V foo_180_1(V a, V b, V c) { return (~c&b)^a; } + +V foo_181_1(V a, V b, V c) { return ~((c^a)&(c|b)); } +V foo_181_2(V a, V b, V c) { return (~((c|b)&a))^c; } +V foo_181_3(V a, V b, V c) { return ((c|b)&a)^~c; } + +V foo_182_1(V a, V b, V c) { return (((c&a)|b)^a)^c; } +V foo_182_2(V a, V b, V c) { return ((c|a)^b)|(c&a); } +V foo_182_3(V a, V b, V c) { return (((c&a)|b)^c)^a; } +V foo_182_4(V a, V b, V c) { return ((c&a)|b)^(c^a); } +V foo_182_5(V a, V b, V c) { return ((b^a)^c)|(c&a); } + +V foo_183_1(V a, V b, V c) { return ~((c^a)&b); } + +V foo_184_1(V a, V b, V c) { return ((c^a)&b)^a; } + +V foo_185_1(V a, V b, V c) { return ~(((c&a)|b)^c); } +V foo_185_2(V a, V b, V c) { return (~((c&a)|b))^c; } +V foo_185_3(V a, V b, V c) { return ((c&a)|b)^~c; } +V foo_185_4(V a, V b, V c) { return (~(c^b))|(c&a); } + +V foo_186_1(V a, V b, V c) { return (~b&a)|c; } + +V foo_187_1(V a, V b, V c) { return ~b|c; } + +V foo_188_1(V a, V b, V c) { return (b^a)|(c&b); } +V foo_188_2(V a, V b, V c) { return (b^a)|(c&a); } + +V foo_189_1(V a, V b, V c) { return ~((c^a)&(c^b)); } +V foo_189_2(V a, V b, V c) { return (~(c^b))|(b^a); } +V foo_189_3(V a, V b, V c) { return (~(c^a))|(b^a); } + +V foo_190_1(V a, V b, V c) { return (b^a)|c; } + +V foo_191_1(V a, V b, V c) { return (~(b&a))|c; } + +V foo_192_1(V a, V b, V c) { return b&a; } + +V foo_193_1(V a, V b, V c) { return ~((~a&c)|(b^a)); } +V foo_193_2(V a, V b, V c) { return (~((~b&c)|a))^b; } +V foo_193_3(V a, V b, V c) { return ((~a&c)|b)^~a; } +V foo_193_4(V a, V b, V c) { return (~((~a&c)|b))^a; } +V foo_193_5(V a, V b, V c) { return ((~b&c)|a)^~b; } +V foo_193_6(V a, V b, V c) { return (~(b^a))&(~c|b); } +V foo_193_7(V a, V b, V c) { return (~(b^a))&(~c|a); } + +V foo_194_1(V a, V b, V c) { return ((c|b)&~a)^b; } +V foo_194_2(V a, V b, V c) { return ((c|a)&~b)^a; } +V foo_194_3(V a, V b, V c) { return (~(b^a))&(c|b); } +V foo_194_4(V a, V b, V c) { return (~(b^a))&(c|a); } + +V foo_195_1(V a, V b, V c) { return ~(b^a); } +V foo_195_2(V a, V b, V c) { return ~a^b; } +V foo_195_3(V a, V b, V c) { return ~b^a; } + +V foo_196_1(V a, V b, V c) { return (~c|a)&b; } + +V foo_197_1(V a, V b, V c) { return ~((b&a)^(c|a)); } +V foo_197_2(V a, V b, V c) { return (~(c|a))|(b&a); } +V foo_197_3(V a, V b, V c) { return (~(c|a))^(b&a); } +V foo_197_4(V a, V b, V c) { return (~((c^b)|a))^b; } +V foo_197_5(V a, V b, V c) { return ((c^b)|a)^~b; } +V foo_197_6(V a, V b, V c) { return (~(b&a))^(c|a); } +V foo_197_7(V a, V b, V c) { return ((c^b)|~a)^c; } + +V foo_198_1(V a, V b, V c) { return (~a&c)^b; } + +V foo_199_1(V a, V b, V c) { return ~((b^a)&(c|a)); } +V foo_199_2(V a, V b, V c) { return ((c|a)&b)^~a; } +V foo_199_3(V a, V b, V c) { return (~((c|a)&b))^a; } + +V foo_200_1(V a, V b, V c) { return (c|a)&b; } + +V foo_201_1(V a, V b, V c) { return ~((c|a)^b); } +V foo_201_2(V a, V b, V c) { return (~(c|a))^b; } +V foo_201_3(V a, V b, V c) { return (c|a)^~b; } + +V foo_202_1(V a, V b, V c) { return ((c^b)&a)^c; } + +V foo_203_1(V a, V b, V c) { return ~(((c&b)|a)^b); } +V foo_203_2(V a, V b, V c) { return (~((c&b)|a))^b; } +V foo_203_3(V a, V b, V c) { return ((c&b)|a)^~b; } +V foo_203_4(V a, V b, V c) { return (~(b^a))|(c&b); } + +V foo_204_1(V a, V b, V c) { return b; } + +V foo_205_1(V a, V b, V c) { return (~(c|a))|b; } + +V foo_206_1(V a, V b, V c) { return (~a&c)|b; } + +V foo_207_1(V a, V b, V c) { return ~a|b; } + +V foo_208_1(V a, V b, V c) { return (~c|b)&a; } + +V foo_209_1(V a, V b, V c) { return ~((b&a)^(c|b)); } +V foo_209_2(V a, V b, V c) { return ((c^a)|b)^~a; } +V foo_209_3(V a, V b, V c) { return (~(c|b))|(b&a); } +V foo_209_4(V a, V b, V c) { return (~(c|b))^(b&a); } +V foo_209_5(V a, V b, V c) { return (~((c^a)|b))^a; } +V foo_209_6(V a, V b, V c) { return (~(b&a))^(c|b); } +V foo_209_7(V a, V b, V c) { return ((c^a)|~b)^c; } + +V foo_210_1(V a, V b, V c) { return (~b&c)^a; } + +V foo_211_1(V a, V b, V c) { return ~((b^a)&(c|b)); } +V foo_211_2(V a, V b, V c) { return (~((c|b)&a))^b; } +V foo_211_3(V a, V b, V c) { return ((c|b)&a)^~b; } + +V foo_212_1(V a, V b, V c) { return ((b^a)&(c^a))^b; } +V foo_212_2(V a, V b, V c) { return ((b^a)&(c^b))^a; } +V foo_212_3(V a, V b, V c) { return ((b^a)&c)^(b|a); } +V foo_212_4(V a, V b, V c) { return ((b^a)|(c^a))^c; } + +V foo_213_1(V a, V b, V c) { return (b&a)|~c; } + +V foo_214_1(V a, V b, V c) { return (((b&a)|c)^a)^b; } +V foo_214_2(V a, V b, V c) { return (((b&a)|c)^b)^a; } +V foo_214_3(V a, V b, V c) { return ((b&a)|c)^(b^a); } +V foo_214_4(V a, V b, V c) { return ((b|a)^c)|(b&a); } +V foo_214_5(V a, V b, V c) { return ((b^a)^c)|(b&a); } + +V foo_215_1(V a, V b, V c) { return ~((b^a)&c); } + +V foo_216_1(V a, V b, V c) { return ((b^a)&c)^a; } + +V foo_217_1(V a, V b, V c) { return ~(((b&a)|c)^b); } +V foo_217_2(V a, V b, V c) { return (~((b&a)|c))^b; } +V foo_217_3(V a, V b, V c) { return ((b&a)|c)^~b; } +V foo_217_4(V a, V b, V c) { return (~(c^b))|(b&a); } + +V foo_218_1(V a, V b, V c) { return (c^a)|(c&b); } +V foo_218_2(V a, V b, V c) { return (c^a)|(b&a); } + +V foo_219_1(V a, V b, V c) { return ~((b^a)&(c^b)); } +V foo_219_2(V a, V b, V c) { return (~(c^b))|(c^a); } +V foo_219_3(V a, V b, V c) { return (~(b^a))|(c^a); } + +V foo_220_1(V a, V b, V c) { return (~c&a)|b; } + +V foo_221_1(V a, V b, V c) { return ~c|b; } + +V foo_222_1(V a, V b, V c) { return (c^a)|b; } + +V foo_223_1(V a, V b, V c) { return (~(c&a))|b; } + +V foo_224_1(V a, V b, V c) { return (c|b)&a; } + +V foo_225_1(V a, V b, V c) { return ~((c|b)^a); } +V foo_225_2(V a, V b, V c) { return (c|b)^~a; } +V foo_225_3(V a, V b, V c) { return (~(c|b))^a; } + +V foo_226_1(V a, V b, V c) { return ((c^a)&b)^c; } + +V foo_227_1(V a, V b, V c) { return ~(((c&a)|b)^a); } +V foo_227_2(V a, V b, V c) { return ((c&a)|b)^~a; } +V foo_227_3(V a, V b, V c) { return (~((c&a)|b))^a; } +V foo_227_4(V a, V b, V c) { return (~(b^a))|(c&a); } + +V foo_228_1(V a, V b, V c) { return ((b^a)&c)^b; } + +V foo_229_1(V a, V b, V c) { return ~(((b&a)|c)^a); } +V foo_229_2(V a, V b, V c) { return ((b&a)|c)^~a; } +V foo_229_3(V a, V b, V c) { return (~((b&a)|c))^a; } +V foo_229_4(V a, V b, V c) { return (~(c^a))|(b&a); } + +V foo_230_1(V a, V b, V c) { return (c^b)|(c&a); } +V foo_230_2(V a, V b, V c) { return (c^b)|(b&a); } + +V foo_231_1(V a, V b, V c) { return ~((b^a)&(c^a)); } +V foo_231_2(V a, V b, V c) { return (~(c^a))|(c^b); } +V foo_231_3(V a, V b, V c) { return (~(b^a))|(c^b); } + +V foo_232_1(V a, V b, V c) { return ((b^a)&(c^a))^a; } +V foo_232_2(V a, V b, V c) { return ((b^a)&(c^b))^b; } +V foo_232_3(V a, V b, V c) { return ((b^a)&c)|(b&a); } +V foo_232_4(V a, V b, V c) { return ((b^a)&c)^(b&a); } +V foo_232_5(V a, V b, V c) { return ((c^a)&(c^b))^c; } +V foo_232_6(V a, V b, V c) { return ((c^a)&b)|(c&a); } +V foo_232_7(V a, V b, V c) { return ((c^a)&b)^(c&a); } +V foo_232_8(V a, V b, V c) { return ((c^b)&a)|(c&b); } +V foo_232_9(V a, V b, V c) { return ((c^b)&a)^(c&b); } +V foo_232_10(V a, V b, V c) { return ((c|b)&a)|(c&b); } +V foo_232_11(V a, V b, V c) { return ((c|a)&b)|(c&a); } +V foo_232_12(V a, V b, V c) { return ((b|a)&c)|(b&a); } +V foo_232_13(V a, V b, V c) { return ((b&a)|c)&(b|a); } +V foo_232_14(V a, V b, V c) { return ((c&a)|b)&(c|a); } +V foo_232_15(V a, V b, V c) { return ((c&b)|a)&(c|b); } + +V foo_233_1(V a, V b, V c) { return ~(((b^a)|(c&b))^c); } +V foo_233_2(V a, V b, V c) { return ((b&a)|c)^(~(b|a)); } +V foo_233_3(V a, V b, V c) { return ((c&a)|b)^(~(c|a)); } +V foo_233_4(V a, V b, V c) { return (~((c&b)|a))^(c|b); } +V foo_233_5(V a, V b, V c) { return ((c^b)|(c&a))^~a; } +V foo_233_6(V a, V b, V c) { return ((c&b)|a)^(~(c|b)); } +V foo_233_7(V a, V b, V c) { return (~((c&a)|b))^(c|a); } +V foo_233_8(V a, V b, V c) { return (~((b&a)|c))^(b|a); } +V foo_233_9(V a, V b, V c) { return (~((c^b)|(c&a)))^a; } +V foo_233_10(V a, V b, V c) { return (~((c^a)|(c&b)))^b; } +V foo_233_11(V a, V b, V c) { return ((c^a)|(c&b))^~b; } +V foo_233_12(V a, V b, V c) { return ((b&a)|~c)^(b^a); } +V foo_233_13(V a, V b, V c) { return (~((b^a)|(c&b)))^c; } +V foo_233_14(V a, V b, V c) { return ((b^a)|(c&b))^~c; } +V foo_233_15(V a, V b, V c) { return ((c&a)|~b)^(c^a); } +V foo_233_16(V a, V b, V c) { return ((c&b)|~a)^(c^b); } +V foo_233_17(V a, V b, V c) { return (~((b^a)^c))|(c&b); } +V foo_233_18(V a, V b, V c) { return (~((b^a)^c))|(c&a); } +V foo_233_19(V a, V b, V c) { return (~((b^a)^c))|(b&a); } +V foo_233_20(V a, V b, V c) { return (~((c|b)^a))|(c&b); } +V foo_233_21(V a, V b, V c) { return (~((c|a)^b))|(c&a); } +V foo_233_22(V a, V b, V c) { return (~((b|a)^c))|(b&a); } + +V foo_234_1(V a, V b, V c) { return (b&a)|c; } + +V foo_235_1(V a, V b, V c) { return (~(b^a))|c; } + +V foo_236_1(V a, V b, V c) { return (c&a)|b; } + +V foo_237_1(V a, V b, V c) { return (~(c^a))|b; } + +V foo_238_1(V a, V b, V c) { return c|b; } + +V foo_239_1(V a, V b, V c) { return (c|b)|~a; } +V foo_239_2(V a, V b, V c) { return (~a|b)|c; } +V foo_239_3(V a, V b, V c) { return (~a|c)|b; } + +V foo_240_1(V a, V b, V c) { return a; } + +V foo_241_1(V a, V b, V c) { return (~(c|b))|a; } + +V foo_242_1(V a, V b, V c) { return (~b&c)|a; } + +V foo_243_1(V a, V b, V c) { return ~b|a; } + +V foo_244_1(V a, V b, V c) { return (~c&b)|a; } + +V foo_245_1(V a, V b, V c) { return ~c|a; } + +V foo_246_1(V a, V b, V c) { return (c^b)|a; } + +V foo_247_1(V a, V b, V c) { return (~(c&b))|a; } + +V foo_248_1(V a, V b, V c) { return (c&b)|a; } + +V foo_249_1(V a, V b, V c) { return (~(c^b))|a; } + +V foo_250_1(V a, V b, V c) { return c|a; } + +V foo_251_1(V a, V b, V c) { return (c|a)|~b; } +V foo_251_2(V a, V b, V c) { return (~b|a)|c; } +V foo_251_3(V a, V b, V c) { return (~b|c)|a; } + +V foo_252_1(V a, V b, V c) { return b|a; } + +V foo_253_1(V a, V b, V c) { return (b|a)|~c; } +V foo_253_2(V a, V b, V c) { return (~c|a)|b; } +V foo_253_3(V a, V b, V c) { return (~c|b)|a; } + +V foo_254_1(V a, V b, V c) { return (b|a)|c; } +V foo_254_2(V a, V b, V c) { return (c|a)|b; } +V foo_254_3(V a, V b, V c) { return (c|b)|a; } + +V foo_255_1(V a, V b, V c) { return (V){~0,~0,~0,~0}; } + +/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]" 694 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-4.c b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-4.c new file mode 100644 index 00000000000..14296508cac --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-4.c @@ -0,0 +1,955 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512f" } */ + +typedef unsigned int V __attribute__ ((__vector_size__ (32))); + +V foo_0_1(V a, V b, V c) { return (V){0,0,0,0}; } + +V foo_1_1(V a, V b, V c) { return ~((b|a)|c); } + +V foo_2_1(V a, V b, V c) { return (~(b|a))&c; } + +V foo_3_1(V a, V b, V c) { return ~(b|a); } + +V foo_4_1(V a, V b, V c) { return (~(c|a))&b; } + +V foo_5_1(V a, V b, V c) { return ~(c|a); } + +V foo_6_1(V a, V b, V c) { return (c^b)&~a; } + +V foo_7_1(V a, V b, V c) { return ~((c&b)|a); } + +V foo_8_1(V a, V b, V c) { return (~a&c)&b; } +V foo_8_2(V a, V b, V c) { return (~a&b)&c; } +V foo_8_3(V a, V b, V c) { return (c&b)&~a; } + +V foo_9_1(V a, V b, V c) { return ~((c^b)|a); } + +V foo_10_1(V a, V b, V c) { return ~a&c; } + +V foo_11_1(V a, V b, V c) { return ~((~c&b)|a); } +V foo_11_2(V a, V b, V c) { return (~b|c)&~a; } + +V foo_12_1(V a, V b, V c) { return ~a&b; } + +V foo_13_1(V a, V b, V c) { return ~((~b&c)|a); } +V foo_13_2(V a, V b, V c) { return (~c|b)&~a; } + +V foo_14_1(V a, V b, V c) { return (c|b)&~a; } + +V foo_15_1(V a, V b, V c) { return ~a; } + +V foo_16_1(V a, V b, V c) { return (~(c|b))&a; } + +V foo_17_1(V a, V b, V c) { return ~(c|b); } + +V foo_18_1(V a, V b, V c) { return (c^a)&~b; } + +V foo_19_1(V a, V b, V c) { return ~((c&a)|b); } + +V foo_20_1(V a, V b, V c) { return (b^a)&~c; } + +V foo_21_1(V a, V b, V c) { return ~((b&a)|c); } + +V foo_22_1(V a, V b, V c) { return ((b^a)|(c&b))^c; } +V foo_22_2(V a, V b, V c) { return ((c^a)|(c&b))^b; } +V foo_22_3(V a, V b, V c) { return ((c^b)|(c&a))^a; } +V foo_22_4(V a, V b, V c) { return ((b&a)|c)^(b|a); } +V foo_22_5(V a, V b, V c) { return ((c&a)|b)^(c|a); } +V foo_22_6(V a, V b, V c) { return ((c&b)|a)^(c|b); } + +V foo_23_1(V a, V b, V c) { return ~(((b^a)&(c^a))^a); } +V foo_23_2(V a, V b, V c) { return ((b^a)&(c^a))^~a; } +V foo_23_3(V a, V b, V c) { return ((b^a)&(c^b))^~b; } +V foo_23_4(V a, V b, V c) { return ((b^a)&c)^(~(b&a)); } +V foo_23_5(V a, V b, V c) { return ((c^a)&(c^b))^~c; } +V foo_23_6(V a, V b, V c) { return ((c^a)&b)^(~(c&a)); } +V foo_23_7(V a, V b, V c) { return ((c^b)&a)^(~(c&b)); } +V foo_23_8(V a, V b, V c) { return (~((c^b)&a))^(c&b); } +V foo_23_9(V a, V b, V c) { return (~((c^a)&b))^(c&a); } +V foo_23_10(V a, V b, V c) { return (~((c^a)&(c^b)))^c; } +V foo_23_11(V a, V b, V c) { return (~((b^a)&c))^(b&a); } +V foo_23_12(V a, V b, V c) { return (~((b^a)&(c^b)))^b; } +V foo_23_13(V a, V b, V c) { return (~((b^a)&(c^a)))^a; } +V foo_23_14(V a, V b, V c) { return ((~(b^a))|c)^(b|a); } +V foo_23_15(V a, V b, V c) { return ((~(c^a))|b)^(c|a); } +V foo_23_16(V a, V b, V c) { return ((~(c^b))|a)^(c|b); } + +V foo_24_1(V a, V b, V c) { return (b^a)&(c^a); } + +V foo_25_1(V a, V b, V c) { return ~((c^b)|(c&a)); } +V foo_25_2(V a, V b, V c) { return ((c&a)|~b)^c; } +V foo_25_3(V a, V b, V c) { return ((b&a)|~c)^b; } + +V foo_26_1(V a, V b, V c) { return ((b&a)|c)^a; } + +V foo_27_1(V a, V b, V c) { return ~(((b^a)&c)^b); } +V foo_27_2(V a, V b, V c) { return ((b^a)&c)^~b; } +V foo_27_3(V a, V b, V c) { return (~b|c)^(c&a); } +V foo_27_4(V a, V b, V c) { return (~((b^a)&c))^b; } +V foo_27_5(V a, V b, V c) { return ((~(b^a))|c)^a; } +V foo_27_6(V a, V b, V c) { return (~c|a)^(c|b); } + +V foo_28_1(V a, V b, V c) { return ((c&a)|b)^a; } + +V foo_29_1(V a, V b, V c) { return ~(((c^a)&b)^c); } +V foo_29_2(V a, V b, V c) { return ((c^a)&b)^~c; } +V foo_29_3(V a, V b, V c) { return (~((c^a)&b))^c; } +V foo_29_4(V a, V b, V c) { return (~c|b)^(b&a); } +V foo_29_5(V a, V b, V c) { return ((~(c^a))|b)^a; } +V foo_29_6(V a, V b, V c) { return (~b|a)^(c|b); } + +V foo_30_1(V a, V b, V c) { return (c|b)^a; } + +V foo_31_1(V a, V b, V c) { return ~((c|b)&a); } + +V foo_32_1(V a, V b, V c) { return (~b&c)&a; } +V foo_32_2(V a, V b, V c) { return (~b&a)&c; } +V foo_32_3(V a, V b, V c) { return (c&a)&~b; } + +V foo_33_1(V a, V b, V c) { return ~((c^a)|b); } + +V foo_34_1(V a, V b, V c) { return ~b&c; } + +V foo_35_1(V a, V b, V c) { return ~((~c&a)|b); } +V foo_35_2(V a, V b, V c) { return (~a|c)&~b; } + +V foo_36_1(V a, V b, V c) { return (b^a)&(c^b); } + +V foo_37_1(V a, V b, V c) { return ~((c^a)|(c&b)); } +V foo_37_2(V a, V b, V c) { return ((c&b)|~a)^c; } +V foo_37_3(V a, V b, V c) { return ((b&a)|~c)^a; } + +V foo_38_1(V a, V b, V c) { return ((b&a)|c)^b; } + +V foo_39_1(V a, V b, V c) { return ~(((b^a)&c)^a); } +V foo_39_2(V a, V b, V c) { return ((b^a)&c)^~a; } +V foo_39_3(V a, V b, V c) { return (~a|c)^(c&b); } +V foo_39_4(V a, V b, V c) { return ((~(b^a))|c)^b; } +V foo_39_5(V a, V b, V c) { return (~((b^a)&c))^a; } +V foo_39_6(V a, V b, V c) { return (~c|b)^(c|a); } + +V foo_40_1(V a, V b, V c) { return (b^a)&c; } + +V foo_41_1(V a, V b, V c) { return ~((((b&a)|c)^a)^b); } +V foo_41_2(V a, V b, V c) { return (((b&a)|c)^b)^~a; } +V foo_41_3(V a, V b, V c) { return (~((b&a)|c))^(b^a); } +V foo_41_4(V a, V b, V c) { return (((b&a)|c)^a)^~b; } +V foo_41_5(V a, V b, V c) { return ((b&a)|c)^(~(b^a)); } +V foo_41_6(V a, V b, V c) { return (~(((b&a)|c)^a))^b; } +V foo_41_7(V a, V b, V c) { return ((b&a)|~c)^(b|a); } +V foo_41_8(V a, V b, V c) { return (~(((b&a)|c)^b))^a; } + +V foo_42_1(V a, V b, V c) { return (~(b&a))&c; } + +V foo_43_1(V a, V b, V c) { return ~(((b^a)&(c^a))^b); } +V foo_43_2(V a, V b, V c) { return ((b^a)&c)|(~(b|a)); } +V foo_43_3(V a, V b, V c) { return ((b^a)&c)^(~(b|a)); } +V foo_43_4(V a, V b, V c) { return ((b^a)&(c^b))^~a; } +V foo_43_5(V a, V b, V c) { return ((b^a)&(c^a))^~b; } +V foo_43_6(V a, V b, V c) { return ((b^a)|(c^a))^~c; } +V foo_43_7(V a, V b, V c) { return (~((b^a)|(c^a)))^c; } +V foo_43_8(V a, V b, V c) { return ((~(b^a))|c)^(b&a); } +V foo_43_9(V a, V b, V c) { return (~((b^a)&(c^a)))^b; } +V foo_43_10(V a, V b, V c) { return (~((b^a)&c))^(b|a); } +V foo_43_11(V a, V b, V c) { return (~((b^a)&(c^b)))^a; } +V foo_43_12(V a, V b, V c) { return ((c^b)|a)^(~c|b); } +V foo_43_13(V a, V b, V c) { return ((c^a)|b)^(~c|a); } + +V foo_44_1(V a, V b, V c) { return (b^a)&(c|b); } +V foo_44_2(V a, V b, V c) { return ((c|b)&a)^b; } + +V foo_45_1(V a, V b, V c) { return (~c|b)^a; } + +V foo_46_1(V a, V b, V c) { return (b&a)^(c|b); } +V foo_46_2(V a, V b, V c) { return ((c^a)|b)^a; } + +V foo_47_1(V a, V b, V c) { return ~((~c|b)&a); } +V foo_47_2(V a, V b, V c) { return (~b&c)|~a; } + +V foo_48_1(V a, V b, V c) { return ~b&a; } + +V foo_49_1(V a, V b, V c) { return ~((~a&c)|b); } +V foo_49_2(V a, V b, V c) { return (~c|a)&~b; } + +V foo_50_1(V a, V b, V c) { return (c|a)&~b; } + +V foo_51_1(V a, V b, V c) { return ~b; } + +V foo_52_1(V a, V b, V c) { return ((c&b)|a)^b; } + +V foo_53_1(V a, V b, V c) { return ~(((c^b)&a)^c); } +V foo_53_2(V a, V b, V c) { return ((c^b)&a)^~c; } +V foo_53_3(V a, V b, V c) { return (~((c^b)&a))^c; } +V foo_53_4(V a, V b, V c) { return (~c|a)^(b&a); } +V foo_53_5(V a, V b, V c) { return ((~(c^b))|a)^b; } +V foo_53_6(V a, V b, V c) { return (~a|b)^(c|a); } + +V foo_54_1(V a, V b, V c) { return (c|a)^b; } + +V foo_55_1(V a, V b, V c) { return ~((c|a)&b); } + +V foo_56_1(V a, V b, V c) { return (b^a)&(c|a); } +V foo_56_2(V a, V b, V c) { return ((c|a)&b)^a; } + +V foo_57_1(V a, V b, V c) { return (~c|a)^b; } + +V foo_58_1(V a, V b, V c) { return (b&a)^(c|a); } +V foo_58_2(V a, V b, V c) { return ((c^b)|a)^b; } + +V foo_59_1(V a, V b, V c) { return ~((~c|a)&b); } +V foo_59_2(V a, V b, V c) { return (~a&c)|~b; } + +V foo_60_1(V a, V b, V c) { return b^a; } + +V foo_61_1(V a, V b, V c) { return (~(c|a))|(b^a); } +V foo_61_2(V a, V b, V c) { return (~(c|b))|(b^a); } +V foo_61_3(V a, V b, V c) { return ((~(c|b))|a)^b; } +V foo_61_4(V a, V b, V c) { return ((~(c|a))|b)^a; } + +V foo_62_1(V a, V b, V c) { return (~a&c)|(b^a); } +V foo_62_2(V a, V b, V c) { return (~b&c)|(b^a); } +V foo_62_3(V a, V b, V c) { return ((~b&c)|a)^b; } +V foo_62_4(V a, V b, V c) { return ((~a&c)|b)^a; } + +V foo_63_1(V a, V b, V c) { return ~(b&a); } + +V foo_64_1(V a, V b, V c) { return (~c&b)&a; } +V foo_64_2(V a, V b, V c) { return (~c&a)&b; } +V foo_64_3(V a, V b, V c) { return (b&a)&~c; } + +V foo_65_1(V a, V b, V c) { return ~((b^a)|c); } + +V foo_66_1(V a, V b, V c) { return (c^a)&(c^b); } + +V foo_67_1(V a, V b, V c) { return ~((b^a)|(c&b)); } +V foo_67_2(V a, V b, V c) { return ((c&b)|~a)^b; } +V foo_67_3(V a, V b, V c) { return ((c&a)|~b)^a; } + +V foo_68_1(V a, V b, V c) { return ~c&b; } + +V foo_69_1(V a, V b, V c) { return ~((~b&a)|c); } +V foo_69_2(V a, V b, V c) { return (~a|b)&~c; } + +V foo_70_1(V a, V b, V c) { return ((c&a)|b)^c; } + +V foo_71_1(V a, V b, V c) { return ~(((c^a)&b)^a); } +V foo_71_2(V a, V b, V c) { return ((c^a)&b)^~a; } +V foo_71_3(V a, V b, V c) { return (~a|b)^(c&b); } +V foo_71_4(V a, V b, V c) { return ((~(c^a))|b)^c; } +V foo_71_5(V a, V b, V c) { return (~((c^a)&b))^a; } +V foo_71_6(V a, V b, V c) { return (~b|c)^(b|a); } + +V foo_72_1(V a, V b, V c) { return (c^a)&b; } + +V foo_73_1(V a, V b, V c) { return ~((((c&a)|b)^a)^c); } +V foo_73_2(V a, V b, V c) { return (((c&a)|b)^c)^~a; } +V foo_73_3(V a, V b, V c) { return (~((c&a)|b))^(c^a); } +V foo_73_4(V a, V b, V c) { return (((c&a)|b)^a)^~c; } +V foo_73_5(V a, V b, V c) { return ((c&a)|b)^(~(c^a)); } +V foo_73_6(V a, V b, V c) { return (~(((c&a)|b)^a))^c; } +V foo_73_7(V a, V b, V c) { return ((c&a)|~b)^(c|a); } +V foo_73_8(V a, V b, V c) { return (~(((c&a)|b)^c))^a; } + +V foo_74_1(V a, V b, V c) { return (c^a)&(c|b); } +V foo_74_2(V a, V b, V c) { return ((c|b)&a)^c; } + +V foo_75_1(V a, V b, V c) { return (~b|c)^a; } + +V foo_76_1(V a, V b, V c) { return (~(c&a))&b; } + +V foo_77_1(V a, V b, V c) { return ~(((b^a)&(c^a))^c); } +V foo_77_2(V a, V b, V c) { return ((c^a)&b)|(~(c|a)); } +V foo_77_3(V a, V b, V c) { return ((c^a)&b)^(~(c|a)); } +V foo_77_4(V a, V b, V c) { return ((c^a)&(c^b))^~a; } +V foo_77_5(V a, V b, V c) { return ((b^a)&(c^a))^~c; } +V foo_77_6(V a, V b, V c) { return ((b^a)|(c^a))^~b; } +V foo_77_7(V a, V b, V c) { return (~((b^a)|(c^a)))^b; } +V foo_77_8(V a, V b, V c) { return ((~(c^a))|b)^(c&a); } +V foo_77_9(V a, V b, V c) { return (~((b^a)&(c^a)))^c; } +V foo_77_10(V a, V b, V c) { return (~((c^a)&b))^(c|a); } +V foo_77_11(V a, V b, V c) { return ((c^b)|a)^(~b|c); } +V foo_77_12(V a, V b, V c) { return (~((c^a)&(c^b)))^a; } +V foo_77_13(V a, V b, V c) { return ((b^a)|c)^(~b|a); } + +V foo_78_1(V a, V b, V c) { return (c&a)^(c|b); } +V foo_78_2(V a, V b, V c) { return ((b^a)|c)^a; } + +V foo_79_1(V a, V b, V c) { return ~((~b|c)&a); } +V foo_79_2(V a, V b, V c) { return (~c&b)|~a; } + +V foo_80_1(V a, V b, V c) { return ~c&a; } + +V foo_81_1(V a, V b, V c) { return ~((~a&b)|c); } +V foo_81_2(V a, V b, V c) { return (~b|a)&~c; } + +V foo_82_1(V a, V b, V c) { return ((c&b)|a)^c; } + +V foo_83_1(V a, V b, V c) { return ~(((c^b)&a)^b); } +V foo_83_2(V a, V b, V c) { return ((c^b)&a)^~b; } +V foo_83_3(V a, V b, V c) { return (~((c^b)&a))^b; } +V foo_83_4(V a, V b, V c) { return (~b|a)^(c&a); } +V foo_83_5(V a, V b, V c) { return ((~(c^b))|a)^c; } +V foo_83_6(V a, V b, V c) { return (~a|c)^(b|a); } + +V foo_84_1(V a, V b, V c) { return (b|a)&~c; } + +V foo_85_1(V a, V b, V c) { return ~c; } + +V foo_86_1(V a, V b, V c) { return (b|a)^c; } + +V foo_87_1(V a, V b, V c) { return ~((b|a)&c); } + +V foo_88_1(V a, V b, V c) { return (c^a)&(b|a); } +V foo_88_2(V a, V b, V c) { return ((b|a)&c)^a; } + +V foo_89_1(V a, V b, V c) { return (~b|a)^c; } + +V foo_90_1(V a, V b, V c) { return c^a; } + +V foo_91_1(V a, V b, V c) { return (~(b|a))|(c^a); } +V foo_91_2(V a, V b, V c) { return (~(c|b))|(c^a); } +V foo_91_3(V a, V b, V c) { return ((~(c|b))|a)^c; } +V foo_91_4(V a, V b, V c) { return ((~(b|a))|c)^a; } + +V foo_92_1(V a, V b, V c) { return (c&a)^(b|a); } +V foo_92_2(V a, V b, V c) { return ((c^b)|a)^c; } + +V foo_93_1(V a, V b, V c) { return ~((~b|a)&c); } +V foo_93_2(V a, V b, V c) { return (~a&b)|~c; } + +V foo_94_1(V a, V b, V c) { return (~a&b)|(c^a); } +V foo_94_2(V a, V b, V c) { return (~c&b)|(c^a); } +V foo_94_3(V a, V b, V c) { return ((~c&b)|a)^c; } +V foo_94_4(V a, V b, V c) { return ((~a&b)|c)^a; } + +V foo_95_1(V a, V b, V c) { return ~(c&a); } + +V foo_96_1(V a, V b, V c) { return (c^b)&a; } + +V foo_97_1(V a, V b, V c) { return ~(((c|b)^a)|(c&b)); } +V foo_97_2(V a, V b, V c) { return (~((c&b)|a))^(c^b); } +V foo_97_3(V a, V b, V c) { return (((c&b)|a)^c)^~b; } +V foo_97_4(V a, V b, V c) { return (((c&b)|a)^b)^~c; } +V foo_97_5(V a, V b, V c) { return ((c&b)|~a)^(c|b); } +V foo_97_6(V a, V b, V c) { return ((c&b)|a)^(~(c^b)); } +V foo_97_7(V a, V b, V c) { return (~(((c&b)|a)^b))^c; } +V foo_97_8(V a, V b, V c) { return (~(((c&b)|a)^c))^b; } + +V foo_98_1(V a, V b, V c) { return (c^b)&(c|a); } +V foo_98_2(V a, V b, V c) { return ((c|a)&b)^c; } + +V foo_99_1(V a, V b, V c) { return (~a|c)^b; } + +V foo_100_1(V a, V b, V c) { return (c^b)&(b|a); } +V foo_100_2(V a, V b, V c) { return ((b|a)&c)^b; } + +V foo_101_1(V a, V b, V c) { return (~a|b)^c; } + +V foo_102_1(V a, V b, V c) { return c^b; } + +V foo_103_1(V a, V b, V c) { return (~(b|a))|(c^b); } +V foo_103_2(V a, V b, V c) { return (~(c|a))|(c^b); } +V foo_103_3(V a, V b, V c) { return ((~(c|a))|b)^c; } +V foo_103_4(V a, V b, V c) { return ((~(b|a))|c)^b; } + +V foo_104_1(V a, V b, V c) { return ((b&a)^c)&(b|a); } +V foo_104_2(V a, V b, V c) { return ((c&a)^b)&(c|a); } +V foo_104_3(V a, V b, V c) { return ((c&b)^a)&(c|b); } +V foo_104_4(V a, V b, V c) { return ((c|b)&a)^(c&b); } +V foo_104_5(V a, V b, V c) { return ((c|a)&b)^(c&a); } +V foo_104_6(V a, V b, V c) { return ((b|a)&c)^(b&a); } + +V foo_105_1(V a, V b, V c) { return ~((b^a)^c); } +V foo_105_2(V a, V b, V c) { return (c^b)^~a; } +V foo_105_3(V a, V b, V c) { return (c^a)^~b; } +V foo_105_4(V a, V b, V c) { return (b^a)^~c; } +V foo_105_5(V a, V b, V c) { return (~(c^b))^a; } +V foo_105_6(V a, V b, V c) { return (~(c^a))^b; } +V foo_105_7(V a, V b, V c) { return (~(b^a))^c; } + +V foo_106_1(V a, V b, V c) { return (b&a)^c; } + +V foo_107_1(V a, V b, V c) { return ~(((b|a)&c)^(b^a)); } +V foo_107_2(V a, V b, V c) { return ((b&a)^c)|(~(b|a)); } +V foo_107_3(V a, V b, V c) { return ((c^b)&(b|a))^~a; } +V foo_107_4(V a, V b, V c) { return ((c^a)&(b|a))^~b; } +V foo_107_5(V a, V b, V c) { return (~((b|a)&c))^(b^a); } +V foo_107_6(V a, V b, V c) { return (~((c^b)&(b|a)))^a; } +V foo_107_7(V a, V b, V c) { return (~((c^a)&(b|a)))^b; } +V foo_107_8(V a, V b, V c) { return ((b|a)&c)^(~(b^a)); } +V foo_107_9(V a, V b, V c) { return ((~(b|a))|c)^(b&a); } + +V foo_108_1(V a, V b, V c) { return (c&a)^b; } + +V foo_109_1(V a, V b, V c) { return ~(((b^a)&(c|a))^c); } +V foo_109_2(V a, V b, V c) { return ((c&a)^b)|(~(c|a)); } +V foo_109_3(V a, V b, V c) { return ((c^b)&(c|a))^~a; } +V foo_109_4(V a, V b, V c) { return (~((c|a)&b))^(c^a); } +V foo_109_5(V a, V b, V c) { return ((b^a)&(c|a))^~c; } +V foo_109_6(V a, V b, V c) { return (~((c^b)&(c|a)))^a; } +V foo_109_7(V a, V b, V c) { return ((~(c|a))|b)^(c&a); } +V foo_109_8(V a, V b, V c) { return ((c|a)&b)^(~(c^a)); } +V foo_109_9(V a, V b, V c) { return (~((b^a)&(c|a)))^c; } + +V foo_110_1(V a, V b, V c) { return (~a&c)|(c^b); } +V foo_110_2(V a, V b, V c) { return (~a&b)|(c^b); } +V foo_110_3(V a, V b, V c) { return ((~b|a)&c)^b; } +V foo_110_4(V a, V b, V c) { return ((~c|a)&b)^c; } + +V foo_111_1(V a, V b, V c) { return (c^b)|~a; } + +V foo_112_1(V a, V b, V c) { return (~(c&b))&a; } + +V foo_113_1(V a, V b, V c) { return ~(((b^a)&(c^b))^c); } +V foo_113_2(V a, V b, V c) { return ((b^a)|(c^a))^~a; } +V foo_113_3(V a, V b, V c) { return ((c^b)&a)|(~(c|b)); } +V foo_113_4(V a, V b, V c) { return ((c^b)&a)^(~(c|b)); } +V foo_113_5(V a, V b, V c) { return ((b^a)&(c^b))^~c; } +V foo_113_6(V a, V b, V c) { return ((c^a)&(c^b))^~b; } +V foo_113_7(V a, V b, V c) { return (~((b^a)|(c^a)))^a; } +V foo_113_8(V a, V b, V c) { return ((~(c^b))|a)^(c&b); } +V foo_113_9(V a, V b, V c) { return (~((c^b)&a))^(c|b); } +V foo_113_10(V a, V b, V c) { return (~((b^a)&(c^b)))^c; } +V foo_113_11(V a, V b, V c) { return ((c^a)|b)^(~a|c); } +V foo_113_12(V a, V b, V c) { return (~((c^a)&(c^b)))^b; } +V foo_113_13(V a, V b, V c) { return ((b^a)|c)^(~a|b); } + +V foo_114_1(V a, V b, V c) { return (c&b)^(c|a); } +V foo_114_2(V a, V b, V c) { return ((b^a)|c)^b; } + +V foo_115_1(V a, V b, V c) { return ~((~a|c)&b); } +V foo_115_2(V a, V b, V c) { return (~c&a)|~b; } + +V foo_116_1(V a, V b, V c) { return (c&b)^(b|a); } +V foo_116_2(V a, V b, V c) { return ((c^a)|b)^c; } + +V foo_117_1(V a, V b, V c) { return ~((~a|b)&c); } +V foo_117_2(V a, V b, V c) { return (~b&a)|~c; } + +V foo_118_1(V a, V b, V c) { return (~b&a)|(c^b); } +V foo_118_2(V a, V b, V c) { return (~c&a)|(c^b); } +V foo_118_3(V a, V b, V c) { return ((~c&a)|b)^c; } +V foo_118_4(V a, V b, V c) { return ((~b&a)|c)^b; } + +V foo_119_1(V a, V b, V c) { return ~(c&b); } + +V foo_120_1(V a, V b, V c) { return (c&b)^a; } + +V foo_121_1(V a, V b, V c) { return ~(((b^a)&(c|b))^c); } +V foo_121_2(V a, V b, V c) { return ((c&b)^a)|(~(c|b)); } +V foo_121_3(V a, V b, V c) { return (~((c|b)&a))^(c^b); } +V foo_121_4(V a, V b, V c) { return ((b^a)&(c|b))^~c; } +V foo_121_5(V a, V b, V c) { return ((c^a)&(c|b))^~b; } +V foo_121_6(V a, V b, V c) { return ((~(c|b))|a)^(c&b); } +V foo_121_7(V a, V b, V c) { return ((c|b)&a)^(~(c^b)); } +V foo_121_8(V a, V b, V c) { return (~((b^a)&(c|b)))^c; } +V foo_121_9(V a, V b, V c) { return (~((c^a)&(c|b)))^b; } + +V foo_122_1(V a, V b, V c) { return (~b&c)|(c^a); } +V foo_122_2(V a, V b, V c) { return (~b&a)|(c^a); } +V foo_122_3(V a, V b, V c) { return ((~a|b)&c)^a; } +V foo_122_4(V a, V b, V c) { return ((~c|b)&a)^c; } + +V foo_123_1(V a, V b, V c) { return (c^a)|~b; } + +V foo_124_1(V a, V b, V c) { return (~c&b)|(b^a); } +V foo_124_2(V a, V b, V c) { return (~c&a)|(b^a); } +V foo_124_3(V a, V b, V c) { return ((~a|c)&b)^a; } +V foo_124_4(V a, V b, V c) { return ((~b|c)&a)^b; } + +V foo_125_1(V a, V b, V c) { return (b^a)|~c; } + +V foo_126_1(V a, V b, V c) { return (b^a)|(c^a); } +V foo_126_2(V a, V b, V c) { return (b^a)|(c^b); } +V foo_126_3(V a, V b, V c) { return (c^a)|(c^b); } + +V foo_127_1(V a, V b, V c) { return ~((c&b)&a); } + +V foo_128_1(V a, V b, V c) { return (c&b)&a; } +V foo_128_2(V a, V b, V c) { return (c&a)&b; } +V foo_128_3(V a, V b, V c) { return (b&a)&c; } + +V foo_129_1(V a, V b, V c) { return ~((b^a)|(c^a)); } + +V foo_130_1(V a, V b, V c) { return (~(b^a))&c; } + +V foo_131_1(V a, V b, V c) { return ~((~c&b)|(b^a)); } +V foo_131_2(V a, V b, V c) { return ((~a|c)&b)^~a; } +V foo_131_3(V a, V b, V c) { return ((~b|c)&a)^~b; } +V foo_131_4(V a, V b, V c) { return (~((~b|c)&a))^b; } +V foo_131_5(V a, V b, V c) { return (~((~a|c)&b))^a; } +V foo_131_6(V a, V b, V c) { return (~a|c)&(~(b^a)); } +V foo_131_7(V a, V b, V c) { return (~b|c)&(~(b^a)); } + +V foo_132_1(V a, V b, V c) { return (~(c^a))&b; } + +V foo_133_1(V a, V b, V c) { return ~((~b&c)|(c^a)); } +V foo_133_2(V a, V b, V c) { return ((~a|b)&c)^~a; } +V foo_133_3(V a, V b, V c) { return (~((~c|b)&a))^c; } +V foo_133_4(V a, V b, V c) { return ((~c|b)&a)^~c; } +V foo_133_5(V a, V b, V c) { return (~((~a|b)&c))^a; } +V foo_133_6(V a, V b, V c) { return (~(c^a))&(~a|b); } +V foo_133_7(V a, V b, V c) { return (~(c^a))&(~c|b); } + +V foo_134_1(V a, V b, V c) { return ((b^a)&(c|b))^c; } +V foo_134_2(V a, V b, V c) { return ((c^a)&(c|b))^b; } +V foo_134_3(V a, V b, V c) { return ((c|b)&a)^(c^b); } +V foo_134_4(V a, V b, V c) { return ((b^a)^c)&(c|b); } + +V foo_135_1(V a, V b, V c) { return ~((c&b)^a); } +V foo_135_2(V a, V b, V c) { return (c&b)^~a; } +V foo_135_3(V a, V b, V c) { return (~(c&b))^a; } + +V foo_136_1(V a, V b, V c) { return c&b; } + +V foo_137_1(V a, V b, V c) { return ~((~b&a)|(c^b)); } +V foo_137_2(V a, V b, V c) { return (~((~c&a)|b))^c; } +V foo_137_3(V a, V b, V c) { return ((~b&a)|c)^~b; } +V foo_137_4(V a, V b, V c) { return (~((~b&a)|c))^b; } +V foo_137_5(V a, V b, V c) { return ((~c&a)|b)^~c; } +V foo_137_6(V a, V b, V c) { return (~(c^b))&(~a|c); } +V foo_137_7(V a, V b, V c) { return (~(c^b))&(~a|b); } + +V foo_138_1(V a, V b, V c) { return (~a|b)&c; } + +V foo_139_1(V a, V b, V c) { return ~((c&b)^(b|a)); } +V foo_139_2(V a, V b, V c) { return (~(b|a))|(c&b); } +V foo_139_3(V a, V b, V c) { return (~(b|a))^(c&b); } +V foo_139_4(V a, V b, V c) { return (~((c^a)|b))^c; } +V foo_139_5(V a, V b, V c) { return ((c^a)|b)^~c; } +V foo_139_6(V a, V b, V c) { return (~(c&b))^(b|a); } +V foo_139_7(V a, V b, V c) { return ((c^a)|~b)^a; } + +V foo_140_1(V a, V b, V c) { return (~a|c)&b; } + +V foo_141_1(V a, V b, V c) { return ~((c&b)^(c|a)); } +V foo_141_2(V a, V b, V c) { return (~(c|a))|(c&b); } +V foo_141_3(V a, V b, V c) { return (~(c|a))^(c&b); } +V foo_141_4(V a, V b, V c) { return ((b^a)|c)^~b; } +V foo_141_5(V a, V b, V c) { return (~((b^a)|c))^b; } +V foo_141_6(V a, V b, V c) { return (~(c&b))^(c|a); } +V foo_141_7(V a, V b, V c) { return ((b^a)|~c)^a; } + +V foo_142_1(V a, V b, V c) { return ((b^a)&(c^b))^c; } +V foo_142_2(V a, V b, V c) { return ((c^a)&(c^b))^b; } +V foo_142_3(V a, V b, V c) { return ((c^b)&a)^(c|b); } +V foo_142_4(V a, V b, V c) { return ((b^a)|(c^a))^a; } + +V foo_143_1(V a, V b, V c) { return (c&b)|~a; } + +V foo_144_1(V a, V b, V c) { return (~(c^b))&a; } + +V foo_145_1(V a, V b, V c) { return ~((~a&c)|(c^b)); } +V foo_145_2(V a, V b, V c) { return ((~b|a)&c)^~b; } +V foo_145_3(V a, V b, V c) { return (~((~c|a)&b))^c; } +V foo_145_4(V a, V b, V c) { return ((~c|a)&b)^~c; } +V foo_145_5(V a, V b, V c) { return (~((~b|a)&c))^b; } +V foo_145_6(V a, V b, V c) { return (~(c^b))&(~b|a); } +V foo_145_7(V a, V b, V c) { return (~(c^b))&(~c|a); } + +V foo_146_1(V a, V b, V c) { return ((b^a)&(c|a))^c; } +V foo_146_2(V a, V b, V c) { return ((c|a)&b)^(c^a); } +V foo_146_3(V a, V b, V c) { return ((c^b)&(c|a))^a; } +V foo_146_4(V a, V b, V c) { return ((b^a)^c)&(c|a); } + +V foo_147_1(V a, V b, V c) { return ~((c&a)^b); } +V foo_147_2(V a, V b, V c) { return (c&a)^~b; } +V foo_147_3(V a, V b, V c) { return (~(c&a))^b; } + +V foo_148_1(V a, V b, V c) { return ((b|a)&c)^(b^a); } +V foo_148_2(V a, V b, V c) { return ((c^a)&(b|a))^b; } +V foo_148_3(V a, V b, V c) { return ((c^b)&(b|a))^a; } +V foo_148_4(V a, V b, V c) { return ((b^a)^c)&(b|a); } + +V foo_149_1(V a, V b, V c) { return ~((b&a)^c); } +V foo_149_2(V a, V b, V c) { return (~(b&a))^c; } +V foo_149_3(V a, V b, V c) { return (b&a)^~c; } + +V foo_150_1(V a, V b, V c) { return (b^a)^c; } +V foo_150_2(V a, V b, V c) { return (c^a)^b; } +V foo_150_3(V a, V b, V c) { return (c^b)^a; } + +V foo_151_1(V a, V b, V c) { return ~(((b&a)^c)&(b|a)); } +V foo_151_2(V a, V b, V c) { return ((b^a)^c)|(~(b|a)); } +V foo_151_3(V a, V b, V c) { return ((b^a)^c)|(~(c|a)); } +V foo_151_4(V a, V b, V c) { return ((b^a)^c)|(~(c|b)); } +V foo_151_5(V a, V b, V c) { return (~((c|b)&a))^(c&b); } +V foo_151_6(V a, V b, V c) { return (~((c|a)&b))^(c&a); } +V foo_151_7(V a, V b, V c) { return ((~(b|a))|c)^(b^a); } +V foo_151_8(V a, V b, V c) { return ((~(c|a))|(b^a))^c; } +V foo_151_9(V a, V b, V c) { return ((b|a)&c)^(~(b&a)); } +V foo_151_10(V a, V b, V c) { return (~((b|a)&c))^(b&a); } +V foo_151_11(V a, V b, V c) { return ((~(c|a))|b)^(c^a); } +V foo_151_12(V a, V b, V c) { return ((~(b|a))|(c^a))^b; } +V foo_151_13(V a, V b, V c) { return ((c|a)&b)^(~(c&a)); } +V foo_151_14(V a, V b, V c) { return ((~(c|b))|a)^(c^b); } +V foo_151_15(V a, V b, V c) { return ((~(b|a))|(c^b))^a; } +V foo_151_16(V a, V b, V c) { return ((c|b)&a)^(~(c&b)); } + +V foo_152_1(V a, V b, V c) { return ((c|a)&~b)^c; } +V foo_152_2(V a, V b, V c) { return ((b|a)&~c)^b; } +V foo_152_3(V a, V b, V c) { return (~(c^b))&(c|a); } +V foo_152_4(V a, V b, V c) { return (~(c^b))&(b|a); } + +V foo_153_1(V a, V b, V c) { return ~(c^b); } +V foo_153_2(V a, V b, V c) { return ~b^c; } +V foo_153_3(V a, V b, V c) { return ~c^b; } + +V foo_154_1(V a, V b, V c) { return (~b&a)^c; } + +V foo_155_1(V a, V b, V c) { return ~((c^b)&(b|a)); } +V foo_155_2(V a, V b, V c) { return ((b|a)&c)^~b; } +V foo_155_3(V a, V b, V c) { return (~((b|a)&c))^b; } + +V foo_156_1(V a, V b, V c) { return (~c&a)^b; } + +V foo_157_1(V a, V b, V c) { return ~((c^b)&(c|a)); } +V foo_157_2(V a, V b, V c) { return (~((c|a)&b))^c; } +V foo_157_3(V a, V b, V c) { return ((c|a)&b)^~c; } + +V foo_158_1(V a, V b, V c) { return ((c|b)^a)|(c&b); } +V foo_158_2(V a, V b, V c) { return (((c&b)|a)^b)^c; } +V foo_158_3(V a, V b, V c) { return (((c&b)|a)^c)^b; } +V foo_158_4(V a, V b, V c) { return ((c&b)|a)^(c^b); } +V foo_158_5(V a, V b, V c) { return ((b^a)^c)|(c&b); } + +V foo_159_1(V a, V b, V c) { return ~((c^b)&a); } + +V foo_160_1(V a, V b, V c) { return c&a; } + +V foo_161_1(V a, V b, V c) { return ~((~a&b)|(c^a)); } +V foo_161_2(V a, V b, V c) { return (~((~c&b)|a))^c; } +V foo_161_3(V a, V b, V c) { return ((~a&b)|c)^~a; } +V foo_161_4(V a, V b, V c) { return (~((~a&b)|c))^a; } +V foo_161_5(V a, V b, V c) { return ((~c&b)|a)^~c; } +V foo_161_6(V a, V b, V c) { return (~(c^a))&(~b|c); } +V foo_161_7(V a, V b, V c) { return (~(c^a))&(~b|a); } + +V foo_162_1(V a, V b, V c) { return (~b|a)&c; } + +V foo_163_1(V a, V b, V c) { return ~((c&a)^(b|a)); } +V foo_163_2(V a, V b, V c) { return (~(b|a))|(c&a); } +V foo_163_3(V a, V b, V c) { return (~(b|a))^(c&a); } +V foo_163_4(V a, V b, V c) { return (~((c^b)|a))^c; } +V foo_163_5(V a, V b, V c) { return ((c^b)|a)^~c; } +V foo_163_6(V a, V b, V c) { return (~(c&a))^(b|a); } +V foo_163_7(V a, V b, V c) { return ((c^b)|~a)^b; } + +V foo_164_1(V a, V b, V c) { return ((c|b)&~a)^c; } +V foo_164_2(V a, V b, V c) { return ((b|a)&~c)^a; } +V foo_164_3(V a, V b, V c) { return (~(c^a))&(c|b); } +V foo_164_4(V a, V b, V c) { return (~(c^a))&(b|a); } + +V foo_165_1(V a, V b, V c) { return ~(c^a); } +V foo_165_2(V a, V b, V c) { return ~a^c; } +V foo_165_3(V a, V b, V c) { return ~c^a; } + +V foo_166_1(V a, V b, V c) { return (~a&b)^c; } + +V foo_167_1(V a, V b, V c) { return ~((c^a)&(b|a)); } +V foo_167_2(V a, V b, V c) { return ((b|a)&c)^~a; } +V foo_167_3(V a, V b, V c) { return (~((b|a)&c))^a; } + +V foo_168_1(V a, V b, V c) { return (b|a)&c; } + +V foo_169_1(V a, V b, V c) { return ~((b|a)^c); } +V foo_169_2(V a, V b, V c) { return (~(b|a))^c; } +V foo_169_3(V a, V b, V c) { return (b|a)^~c; } + +V foo_170_1(V a, V b, V c) { return c; } + +V foo_171_1(V a, V b, V c) { return (~(b|a))|c; } + +V foo_172_1(V a, V b, V c) { return ((c^b)&a)^b; } + +V foo_173_1(V a, V b, V c) { return ~(((c&b)|a)^c); } +V foo_173_2(V a, V b, V c) { return (~((c&b)|a))^c; } +V foo_173_3(V a, V b, V c) { return ((c&b)|a)^~c; } +V foo_173_4(V a, V b, V c) { return (~(c^a))|(c&b); } + +V foo_174_1(V a, V b, V c) { return (~a&b)|c; } + +V foo_175_1(V a, V b, V c) { return ~a|c; } + +V foo_176_1(V a, V b, V c) { return (~b|c)&a; } + +V foo_177_1(V a, V b, V c) { return ~((c&a)^(c|b)); } +V foo_177_2(V a, V b, V c) { return ((b^a)|c)^~a; } +V foo_177_3(V a, V b, V c) { return (~(c|b))|(c&a); } +V foo_177_4(V a, V b, V c) { return (~(c|b))^(c&a); } +V foo_177_5(V a, V b, V c) { return (~((b^a)|c))^a; } +V foo_177_6(V a, V b, V c) { return (~(c&a))^(c|b); } +V foo_177_7(V a, V b, V c) { return ((b^a)|~c)^b; } + +V foo_178_1(V a, V b, V c) { return ((b^a)&(c^a))^c; } +V foo_178_2(V a, V b, V c) { return ((c^a)&(c^b))^a; } +V foo_178_3(V a, V b, V c) { return ((c^a)&b)^(c|a); } +V foo_178_4(V a, V b, V c) { return ((b^a)|(c^a))^b; } + +V foo_179_1(V a, V b, V c) { return (c&a)|~b; } + +V foo_180_1(V a, V b, V c) { return (~c&b)^a; } + +V foo_181_1(V a, V b, V c) { return ~((c^a)&(c|b)); } +V foo_181_2(V a, V b, V c) { return (~((c|b)&a))^c; } +V foo_181_3(V a, V b, V c) { return ((c|b)&a)^~c; } + +V foo_182_1(V a, V b, V c) { return (((c&a)|b)^a)^c; } +V foo_182_2(V a, V b, V c) { return ((c|a)^b)|(c&a); } +V foo_182_3(V a, V b, V c) { return (((c&a)|b)^c)^a; } +V foo_182_4(V a, V b, V c) { return ((c&a)|b)^(c^a); } +V foo_182_5(V a, V b, V c) { return ((b^a)^c)|(c&a); } + +V foo_183_1(V a, V b, V c) { return ~((c^a)&b); } + +V foo_184_1(V a, V b, V c) { return ((c^a)&b)^a; } + +V foo_185_1(V a, V b, V c) { return ~(((c&a)|b)^c); } +V foo_185_2(V a, V b, V c) { return (~((c&a)|b))^c; } +V foo_185_3(V a, V b, V c) { return ((c&a)|b)^~c; } +V foo_185_4(V a, V b, V c) { return (~(c^b))|(c&a); } + +V foo_186_1(V a, V b, V c) { return (~b&a)|c; } + +V foo_187_1(V a, V b, V c) { return ~b|c; } + +V foo_188_1(V a, V b, V c) { return (b^a)|(c&b); } +V foo_188_2(V a, V b, V c) { return (b^a)|(c&a); } + +V foo_189_1(V a, V b, V c) { return ~((c^a)&(c^b)); } +V foo_189_2(V a, V b, V c) { return (~(c^b))|(b^a); } +V foo_189_3(V a, V b, V c) { return (~(c^a))|(b^a); } + +V foo_190_1(V a, V b, V c) { return (b^a)|c; } + +V foo_191_1(V a, V b, V c) { return (~(b&a))|c; } + +V foo_192_1(V a, V b, V c) { return b&a; } + +V foo_193_1(V a, V b, V c) { return ~((~a&c)|(b^a)); } +V foo_193_2(V a, V b, V c) { return (~((~b&c)|a))^b; } +V foo_193_3(V a, V b, V c) { return ((~a&c)|b)^~a; } +V foo_193_4(V a, V b, V c) { return (~((~a&c)|b))^a; } +V foo_193_5(V a, V b, V c) { return ((~b&c)|a)^~b; } +V foo_193_6(V a, V b, V c) { return (~(b^a))&(~c|b); } +V foo_193_7(V a, V b, V c) { return (~(b^a))&(~c|a); } + +V foo_194_1(V a, V b, V c) { return ((c|b)&~a)^b; } +V foo_194_2(V a, V b, V c) { return ((c|a)&~b)^a; } +V foo_194_3(V a, V b, V c) { return (~(b^a))&(c|b); } +V foo_194_4(V a, V b, V c) { return (~(b^a))&(c|a); } + +V foo_195_1(V a, V b, V c) { return ~(b^a); } +V foo_195_2(V a, V b, V c) { return ~a^b; } +V foo_195_3(V a, V b, V c) { return ~b^a; } + +V foo_196_1(V a, V b, V c) { return (~c|a)&b; } + +V foo_197_1(V a, V b, V c) { return ~((b&a)^(c|a)); } +V foo_197_2(V a, V b, V c) { return (~(c|a))|(b&a); } +V foo_197_3(V a, V b, V c) { return (~(c|a))^(b&a); } +V foo_197_4(V a, V b, V c) { return (~((c^b)|a))^b; } +V foo_197_5(V a, V b, V c) { return ((c^b)|a)^~b; } +V foo_197_6(V a, V b, V c) { return (~(b&a))^(c|a); } +V foo_197_7(V a, V b, V c) { return ((c^b)|~a)^c; } + +V foo_198_1(V a, V b, V c) { return (~a&c)^b; } + +V foo_199_1(V a, V b, V c) { return ~((b^a)&(c|a)); } +V foo_199_2(V a, V b, V c) { return ((c|a)&b)^~a; } +V foo_199_3(V a, V b, V c) { return (~((c|a)&b))^a; } + +V foo_200_1(V a, V b, V c) { return (c|a)&b; } + +V foo_201_1(V a, V b, V c) { return ~((c|a)^b); } +V foo_201_2(V a, V b, V c) { return (~(c|a))^b; } +V foo_201_3(V a, V b, V c) { return (c|a)^~b; } + +V foo_202_1(V a, V b, V c) { return ((c^b)&a)^c; } + +V foo_203_1(V a, V b, V c) { return ~(((c&b)|a)^b); } +V foo_203_2(V a, V b, V c) { return (~((c&b)|a))^b; } +V foo_203_3(V a, V b, V c) { return ((c&b)|a)^~b; } +V foo_203_4(V a, V b, V c) { return (~(b^a))|(c&b); } + +V foo_204_1(V a, V b, V c) { return b; } + +V foo_205_1(V a, V b, V c) { return (~(c|a))|b; } + +V foo_206_1(V a, V b, V c) { return (~a&c)|b; } + +V foo_207_1(V a, V b, V c) { return ~a|b; } + +V foo_208_1(V a, V b, V c) { return (~c|b)&a; } + +V foo_209_1(V a, V b, V c) { return ~((b&a)^(c|b)); } +V foo_209_2(V a, V b, V c) { return ((c^a)|b)^~a; } +V foo_209_3(V a, V b, V c) { return (~(c|b))|(b&a); } +V foo_209_4(V a, V b, V c) { return (~(c|b))^(b&a); } +V foo_209_5(V a, V b, V c) { return (~((c^a)|b))^a; } +V foo_209_6(V a, V b, V c) { return (~(b&a))^(c|b); } +V foo_209_7(V a, V b, V c) { return ((c^a)|~b)^c; } + +V foo_210_1(V a, V b, V c) { return (~b&c)^a; } + +V foo_211_1(V a, V b, V c) { return ~((b^a)&(c|b)); } +V foo_211_2(V a, V b, V c) { return (~((c|b)&a))^b; } +V foo_211_3(V a, V b, V c) { return ((c|b)&a)^~b; } + +V foo_212_1(V a, V b, V c) { return ((b^a)&(c^a))^b; } +V foo_212_2(V a, V b, V c) { return ((b^a)&(c^b))^a; } +V foo_212_3(V a, V b, V c) { return ((b^a)&c)^(b|a); } +V foo_212_4(V a, V b, V c) { return ((b^a)|(c^a))^c; } + +V foo_213_1(V a, V b, V c) { return (b&a)|~c; } + +V foo_214_1(V a, V b, V c) { return (((b&a)|c)^a)^b; } +V foo_214_2(V a, V b, V c) { return (((b&a)|c)^b)^a; } +V foo_214_3(V a, V b, V c) { return ((b&a)|c)^(b^a); } +V foo_214_4(V a, V b, V c) { return ((b|a)^c)|(b&a); } +V foo_214_5(V a, V b, V c) { return ((b^a)^c)|(b&a); } + +V foo_215_1(V a, V b, V c) { return ~((b^a)&c); } + +V foo_216_1(V a, V b, V c) { return ((b^a)&c)^a; } + +V foo_217_1(V a, V b, V c) { return ~(((b&a)|c)^b); } +V foo_217_2(V a, V b, V c) { return (~((b&a)|c))^b; } +V foo_217_3(V a, V b, V c) { return ((b&a)|c)^~b; } +V foo_217_4(V a, V b, V c) { return (~(c^b))|(b&a); } + +V foo_218_1(V a, V b, V c) { return (c^a)|(c&b); } +V foo_218_2(V a, V b, V c) { return (c^a)|(b&a); } + +V foo_219_1(V a, V b, V c) { return ~((b^a)&(c^b)); } +V foo_219_2(V a, V b, V c) { return (~(c^b))|(c^a); } +V foo_219_3(V a, V b, V c) { return (~(b^a))|(c^a); } + +V foo_220_1(V a, V b, V c) { return (~c&a)|b; } + +V foo_221_1(V a, V b, V c) { return ~c|b; } + +V foo_222_1(V a, V b, V c) { return (c^a)|b; } + +V foo_223_1(V a, V b, V c) { return (~(c&a))|b; } + +V foo_224_1(V a, V b, V c) { return (c|b)&a; } + +V foo_225_1(V a, V b, V c) { return ~((c|b)^a); } +V foo_225_2(V a, V b, V c) { return (c|b)^~a; } +V foo_225_3(V a, V b, V c) { return (~(c|b))^a; } + +V foo_226_1(V a, V b, V c) { return ((c^a)&b)^c; } + +V foo_227_1(V a, V b, V c) { return ~(((c&a)|b)^a); } +V foo_227_2(V a, V b, V c) { return ((c&a)|b)^~a; } +V foo_227_3(V a, V b, V c) { return (~((c&a)|b))^a; } +V foo_227_4(V a, V b, V c) { return (~(b^a))|(c&a); } + +V foo_228_1(V a, V b, V c) { return ((b^a)&c)^b; } + +V foo_229_1(V a, V b, V c) { return ~(((b&a)|c)^a); } +V foo_229_2(V a, V b, V c) { return ((b&a)|c)^~a; } +V foo_229_3(V a, V b, V c) { return (~((b&a)|c))^a; } +V foo_229_4(V a, V b, V c) { return (~(c^a))|(b&a); } + +V foo_230_1(V a, V b, V c) { return (c^b)|(c&a); } +V foo_230_2(V a, V b, V c) { return (c^b)|(b&a); } + +V foo_231_1(V a, V b, V c) { return ~((b^a)&(c^a)); } +V foo_231_2(V a, V b, V c) { return (~(c^a))|(c^b); } +V foo_231_3(V a, V b, V c) { return (~(b^a))|(c^b); } + +V foo_232_1(V a, V b, V c) { return ((b^a)&(c^a))^a; } +V foo_232_2(V a, V b, V c) { return ((b^a)&(c^b))^b; } +V foo_232_3(V a, V b, V c) { return ((b^a)&c)|(b&a); } +V foo_232_4(V a, V b, V c) { return ((b^a)&c)^(b&a); } +V foo_232_5(V a, V b, V c) { return ((c^a)&(c^b))^c; } +V foo_232_6(V a, V b, V c) { return ((c^a)&b)|(c&a); } +V foo_232_7(V a, V b, V c) { return ((c^a)&b)^(c&a); } +V foo_232_8(V a, V b, V c) { return ((c^b)&a)|(c&b); } +V foo_232_9(V a, V b, V c) { return ((c^b)&a)^(c&b); } +V foo_232_10(V a, V b, V c) { return ((c|b)&a)|(c&b); } +V foo_232_11(V a, V b, V c) { return ((c|a)&b)|(c&a); } +V foo_232_12(V a, V b, V c) { return ((b|a)&c)|(b&a); } +V foo_232_13(V a, V b, V c) { return ((b&a)|c)&(b|a); } +V foo_232_14(V a, V b, V c) { return ((c&a)|b)&(c|a); } +V foo_232_15(V a, V b, V c) { return ((c&b)|a)&(c|b); } + +V foo_233_1(V a, V b, V c) { return ~(((b^a)|(c&b))^c); } +V foo_233_2(V a, V b, V c) { return ((b&a)|c)^(~(b|a)); } +V foo_233_3(V a, V b, V c) { return ((c&a)|b)^(~(c|a)); } +V foo_233_4(V a, V b, V c) { return (~((c&b)|a))^(c|b); } +V foo_233_5(V a, V b, V c) { return ((c^b)|(c&a))^~a; } +V foo_233_6(V a, V b, V c) { return ((c&b)|a)^(~(c|b)); } +V foo_233_7(V a, V b, V c) { return (~((c&a)|b))^(c|a); } +V foo_233_8(V a, V b, V c) { return (~((b&a)|c))^(b|a); } +V foo_233_9(V a, V b, V c) { return (~((c^b)|(c&a)))^a; } +V foo_233_10(V a, V b, V c) { return (~((c^a)|(c&b)))^b; } +V foo_233_11(V a, V b, V c) { return ((c^a)|(c&b))^~b; } +V foo_233_12(V a, V b, V c) { return ((b&a)|~c)^(b^a); } +V foo_233_13(V a, V b, V c) { return (~((b^a)|(c&b)))^c; } +V foo_233_14(V a, V b, V c) { return ((b^a)|(c&b))^~c; } +V foo_233_15(V a, V b, V c) { return ((c&a)|~b)^(c^a); } +V foo_233_16(V a, V b, V c) { return ((c&b)|~a)^(c^b); } +V foo_233_17(V a, V b, V c) { return (~((b^a)^c))|(c&b); } +V foo_233_18(V a, V b, V c) { return (~((b^a)^c))|(c&a); } +V foo_233_19(V a, V b, V c) { return (~((b^a)^c))|(b&a); } +V foo_233_20(V a, V b, V c) { return (~((c|b)^a))|(c&b); } +V foo_233_21(V a, V b, V c) { return (~((c|a)^b))|(c&a); } +V foo_233_22(V a, V b, V c) { return (~((b|a)^c))|(b&a); } + +V foo_234_1(V a, V b, V c) { return (b&a)|c; } + +V foo_235_1(V a, V b, V c) { return (~(b^a))|c; } + +V foo_236_1(V a, V b, V c) { return (c&a)|b; } + +V foo_237_1(V a, V b, V c) { return (~(c^a))|b; } + +V foo_238_1(V a, V b, V c) { return c|b; } + +V foo_239_1(V a, V b, V c) { return (c|b)|~a; } +V foo_239_2(V a, V b, V c) { return (~a|b)|c; } +V foo_239_3(V a, V b, V c) { return (~a|c)|b; } + +V foo_240_1(V a, V b, V c) { return a; } + +V foo_241_1(V a, V b, V c) { return (~(c|b))|a; } + +V foo_242_1(V a, V b, V c) { return (~b&c)|a; } + +V foo_243_1(V a, V b, V c) { return ~b|a; } + +V foo_244_1(V a, V b, V c) { return (~c&b)|a; } + +V foo_245_1(V a, V b, V c) { return ~c|a; } + +V foo_246_1(V a, V b, V c) { return (c^b)|a; } + +V foo_247_1(V a, V b, V c) { return (~(c&b))|a; } + +V foo_248_1(V a, V b, V c) { return (c&b)|a; } + +V foo_249_1(V a, V b, V c) { return (~(c^b))|a; } + +V foo_250_1(V a, V b, V c) { return c|a; } + +V foo_251_1(V a, V b, V c) { return (c|a)|~b; } +V foo_251_2(V a, V b, V c) { return (~b|a)|c; } +V foo_251_3(V a, V b, V c) { return (~b|c)|a; } + +V foo_252_1(V a, V b, V c) { return b|a; } + +V foo_253_1(V a, V b, V c) { return (b|a)|~c; } +V foo_253_2(V a, V b, V c) { return (~c|a)|b; } +V foo_253_3(V a, V b, V c) { return (~c|b)|a; } + +V foo_254_1(V a, V b, V c) { return (b|a)|c; } +V foo_254_2(V a, V b, V c) { return (c|a)|b; } +V foo_254_3(V a, V b, V c) { return (c|b)|a; } + +V foo_255_1(V a, V b, V c) { return (V){~0,~0,~0,~0}; } + +/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]" 694 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-5.c b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-5.c new file mode 100644 index 00000000000..3dbd9545283 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-5.c @@ -0,0 +1,955 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512f" } */ + +typedef unsigned int V __attribute__ ((__vector_size__ (64))); + +V foo_0_1(V a, V b, V c) { return (V){0,0,0,0}; } + +V foo_1_1(V a, V b, V c) { return ~((b|a)|c); } + +V foo_2_1(V a, V b, V c) { return (~(b|a))&c; } + +V foo_3_1(V a, V b, V c) { return ~(b|a); } + +V foo_4_1(V a, V b, V c) { return (~(c|a))&b; } + +V foo_5_1(V a, V b, V c) { return ~(c|a); } + +V foo_6_1(V a, V b, V c) { return (c^b)&~a; } + +V foo_7_1(V a, V b, V c) { return ~((c&b)|a); } + +V foo_8_1(V a, V b, V c) { return (~a&c)&b; } +V foo_8_2(V a, V b, V c) { return (~a&b)&c; } +V foo_8_3(V a, V b, V c) { return (c&b)&~a; } + +V foo_9_1(V a, V b, V c) { return ~((c^b)|a); } + +V foo_10_1(V a, V b, V c) { return ~a&c; } + +V foo_11_1(V a, V b, V c) { return ~((~c&b)|a); } +V foo_11_2(V a, V b, V c) { return (~b|c)&~a; } + +V foo_12_1(V a, V b, V c) { return ~a&b; } + +V foo_13_1(V a, V b, V c) { return ~((~b&c)|a); } +V foo_13_2(V a, V b, V c) { return (~c|b)&~a; } + +V foo_14_1(V a, V b, V c) { return (c|b)&~a; } + +V foo_15_1(V a, V b, V c) { return ~a; } + +V foo_16_1(V a, V b, V c) { return (~(c|b))&a; } + +V foo_17_1(V a, V b, V c) { return ~(c|b); } + +V foo_18_1(V a, V b, V c) { return (c^a)&~b; } + +V foo_19_1(V a, V b, V c) { return ~((c&a)|b); } + +V foo_20_1(V a, V b, V c) { return (b^a)&~c; } + +V foo_21_1(V a, V b, V c) { return ~((b&a)|c); } + +V foo_22_1(V a, V b, V c) { return ((b^a)|(c&b))^c; } +V foo_22_2(V a, V b, V c) { return ((c^a)|(c&b))^b; } +V foo_22_3(V a, V b, V c) { return ((c^b)|(c&a))^a; } +V foo_22_4(V a, V b, V c) { return ((b&a)|c)^(b|a); } +V foo_22_5(V a, V b, V c) { return ((c&a)|b)^(c|a); } +V foo_22_6(V a, V b, V c) { return ((c&b)|a)^(c|b); } + +V foo_23_1(V a, V b, V c) { return ~(((b^a)&(c^a))^a); } +V foo_23_2(V a, V b, V c) { return ((b^a)&(c^a))^~a; } +V foo_23_3(V a, V b, V c) { return ((b^a)&(c^b))^~b; } +V foo_23_4(V a, V b, V c) { return ((b^a)&c)^(~(b&a)); } +V foo_23_5(V a, V b, V c) { return ((c^a)&(c^b))^~c; } +V foo_23_6(V a, V b, V c) { return ((c^a)&b)^(~(c&a)); } +V foo_23_7(V a, V b, V c) { return ((c^b)&a)^(~(c&b)); } +V foo_23_8(V a, V b, V c) { return (~((c^b)&a))^(c&b); } +V foo_23_9(V a, V b, V c) { return (~((c^a)&b))^(c&a); } +V foo_23_10(V a, V b, V c) { return (~((c^a)&(c^b)))^c; } +V foo_23_11(V a, V b, V c) { return (~((b^a)&c))^(b&a); } +V foo_23_12(V a, V b, V c) { return (~((b^a)&(c^b)))^b; } +V foo_23_13(V a, V b, V c) { return (~((b^a)&(c^a)))^a; } +V foo_23_14(V a, V b, V c) { return ((~(b^a))|c)^(b|a); } +V foo_23_15(V a, V b, V c) { return ((~(c^a))|b)^(c|a); } +V foo_23_16(V a, V b, V c) { return ((~(c^b))|a)^(c|b); } + +V foo_24_1(V a, V b, V c) { return (b^a)&(c^a); } + +V foo_25_1(V a, V b, V c) { return ~((c^b)|(c&a)); } +V foo_25_2(V a, V b, V c) { return ((c&a)|~b)^c; } +V foo_25_3(V a, V b, V c) { return ((b&a)|~c)^b; } + +V foo_26_1(V a, V b, V c) { return ((b&a)|c)^a; } + +V foo_27_1(V a, V b, V c) { return ~(((b^a)&c)^b); } +V foo_27_2(V a, V b, V c) { return ((b^a)&c)^~b; } +V foo_27_3(V a, V b, V c) { return (~b|c)^(c&a); } +V foo_27_4(V a, V b, V c) { return (~((b^a)&c))^b; } +V foo_27_5(V a, V b, V c) { return ((~(b^a))|c)^a; } +V foo_27_6(V a, V b, V c) { return (~c|a)^(c|b); } + +V foo_28_1(V a, V b, V c) { return ((c&a)|b)^a; } + +V foo_29_1(V a, V b, V c) { return ~(((c^a)&b)^c); } +V foo_29_2(V a, V b, V c) { return ((c^a)&b)^~c; } +V foo_29_3(V a, V b, V c) { return (~((c^a)&b))^c; } +V foo_29_4(V a, V b, V c) { return (~c|b)^(b&a); } +V foo_29_5(V a, V b, V c) { return ((~(c^a))|b)^a; } +V foo_29_6(V a, V b, V c) { return (~b|a)^(c|b); } + +V foo_30_1(V a, V b, V c) { return (c|b)^a; } + +V foo_31_1(V a, V b, V c) { return ~((c|b)&a); } + +V foo_32_1(V a, V b, V c) { return (~b&c)&a; } +V foo_32_2(V a, V b, V c) { return (~b&a)&c; } +V foo_32_3(V a, V b, V c) { return (c&a)&~b; } + +V foo_33_1(V a, V b, V c) { return ~((c^a)|b); } + +V foo_34_1(V a, V b, V c) { return ~b&c; } + +V foo_35_1(V a, V b, V c) { return ~((~c&a)|b); } +V foo_35_2(V a, V b, V c) { return (~a|c)&~b; } + +V foo_36_1(V a, V b, V c) { return (b^a)&(c^b); } + +V foo_37_1(V a, V b, V c) { return ~((c^a)|(c&b)); } +V foo_37_2(V a, V b, V c) { return ((c&b)|~a)^c; } +V foo_37_3(V a, V b, V c) { return ((b&a)|~c)^a; } + +V foo_38_1(V a, V b, V c) { return ((b&a)|c)^b; } + +V foo_39_1(V a, V b, V c) { return ~(((b^a)&c)^a); } +V foo_39_2(V a, V b, V c) { return ((b^a)&c)^~a; } +V foo_39_3(V a, V b, V c) { return (~a|c)^(c&b); } +V foo_39_4(V a, V b, V c) { return ((~(b^a))|c)^b; } +V foo_39_5(V a, V b, V c) { return (~((b^a)&c))^a; } +V foo_39_6(V a, V b, V c) { return (~c|b)^(c|a); } + +V foo_40_1(V a, V b, V c) { return (b^a)&c; } + +V foo_41_1(V a, V b, V c) { return ~((((b&a)|c)^a)^b); } +V foo_41_2(V a, V b, V c) { return (((b&a)|c)^b)^~a; } +V foo_41_3(V a, V b, V c) { return (~((b&a)|c))^(b^a); } +V foo_41_4(V a, V b, V c) { return (((b&a)|c)^a)^~b; } +V foo_41_5(V a, V b, V c) { return ((b&a)|c)^(~(b^a)); } +V foo_41_6(V a, V b, V c) { return (~(((b&a)|c)^a))^b; } +V foo_41_7(V a, V b, V c) { return ((b&a)|~c)^(b|a); } +V foo_41_8(V a, V b, V c) { return (~(((b&a)|c)^b))^a; } + +V foo_42_1(V a, V b, V c) { return (~(b&a))&c; } + +V foo_43_1(V a, V b, V c) { return ~(((b^a)&(c^a))^b); } +V foo_43_2(V a, V b, V c) { return ((b^a)&c)|(~(b|a)); } +V foo_43_3(V a, V b, V c) { return ((b^a)&c)^(~(b|a)); } +V foo_43_4(V a, V b, V c) { return ((b^a)&(c^b))^~a; } +V foo_43_5(V a, V b, V c) { return ((b^a)&(c^a))^~b; } +V foo_43_6(V a, V b, V c) { return ((b^a)|(c^a))^~c; } +V foo_43_7(V a, V b, V c) { return (~((b^a)|(c^a)))^c; } +V foo_43_8(V a, V b, V c) { return ((~(b^a))|c)^(b&a); } +V foo_43_9(V a, V b, V c) { return (~((b^a)&(c^a)))^b; } +V foo_43_10(V a, V b, V c) { return (~((b^a)&c))^(b|a); } +V foo_43_11(V a, V b, V c) { return (~((b^a)&(c^b)))^a; } +V foo_43_12(V a, V b, V c) { return ((c^b)|a)^(~c|b); } +V foo_43_13(V a, V b, V c) { return ((c^a)|b)^(~c|a); } + +V foo_44_1(V a, V b, V c) { return (b^a)&(c|b); } +V foo_44_2(V a, V b, V c) { return ((c|b)&a)^b; } + +V foo_45_1(V a, V b, V c) { return (~c|b)^a; } + +V foo_46_1(V a, V b, V c) { return (b&a)^(c|b); } +V foo_46_2(V a, V b, V c) { return ((c^a)|b)^a; } + +V foo_47_1(V a, V b, V c) { return ~((~c|b)&a); } +V foo_47_2(V a, V b, V c) { return (~b&c)|~a; } + +V foo_48_1(V a, V b, V c) { return ~b&a; } + +V foo_49_1(V a, V b, V c) { return ~((~a&c)|b); } +V foo_49_2(V a, V b, V c) { return (~c|a)&~b; } + +V foo_50_1(V a, V b, V c) { return (c|a)&~b; } + +V foo_51_1(V a, V b, V c) { return ~b; } + +V foo_52_1(V a, V b, V c) { return ((c&b)|a)^b; } + +V foo_53_1(V a, V b, V c) { return ~(((c^b)&a)^c); } +V foo_53_2(V a, V b, V c) { return ((c^b)&a)^~c; } +V foo_53_3(V a, V b, V c) { return (~((c^b)&a))^c; } +V foo_53_4(V a, V b, V c) { return (~c|a)^(b&a); } +V foo_53_5(V a, V b, V c) { return ((~(c^b))|a)^b; } +V foo_53_6(V a, V b, V c) { return (~a|b)^(c|a); } + +V foo_54_1(V a, V b, V c) { return (c|a)^b; } + +V foo_55_1(V a, V b, V c) { return ~((c|a)&b); } + +V foo_56_1(V a, V b, V c) { return (b^a)&(c|a); } +V foo_56_2(V a, V b, V c) { return ((c|a)&b)^a; } + +V foo_57_1(V a, V b, V c) { return (~c|a)^b; } + +V foo_58_1(V a, V b, V c) { return (b&a)^(c|a); } +V foo_58_2(V a, V b, V c) { return ((c^b)|a)^b; } + +V foo_59_1(V a, V b, V c) { return ~((~c|a)&b); } +V foo_59_2(V a, V b, V c) { return (~a&c)|~b; } + +V foo_60_1(V a, V b, V c) { return b^a; } + +V foo_61_1(V a, V b, V c) { return (~(c|a))|(b^a); } +V foo_61_2(V a, V b, V c) { return (~(c|b))|(b^a); } +V foo_61_3(V a, V b, V c) { return ((~(c|b))|a)^b; } +V foo_61_4(V a, V b, V c) { return ((~(c|a))|b)^a; } + +V foo_62_1(V a, V b, V c) { return (~a&c)|(b^a); } +V foo_62_2(V a, V b, V c) { return (~b&c)|(b^a); } +V foo_62_3(V a, V b, V c) { return ((~b&c)|a)^b; } +V foo_62_4(V a, V b, V c) { return ((~a&c)|b)^a; } + +V foo_63_1(V a, V b, V c) { return ~(b&a); } + +V foo_64_1(V a, V b, V c) { return (~c&b)&a; } +V foo_64_2(V a, V b, V c) { return (~c&a)&b; } +V foo_64_3(V a, V b, V c) { return (b&a)&~c; } + +V foo_65_1(V a, V b, V c) { return ~((b^a)|c); } + +V foo_66_1(V a, V b, V c) { return (c^a)&(c^b); } + +V foo_67_1(V a, V b, V c) { return ~((b^a)|(c&b)); } +V foo_67_2(V a, V b, V c) { return ((c&b)|~a)^b; } +V foo_67_3(V a, V b, V c) { return ((c&a)|~b)^a; } + +V foo_68_1(V a, V b, V c) { return ~c&b; } + +V foo_69_1(V a, V b, V c) { return ~((~b&a)|c); } +V foo_69_2(V a, V b, V c) { return (~a|b)&~c; } + +V foo_70_1(V a, V b, V c) { return ((c&a)|b)^c; } + +V foo_71_1(V a, V b, V c) { return ~(((c^a)&b)^a); } +V foo_71_2(V a, V b, V c) { return ((c^a)&b)^~a; } +V foo_71_3(V a, V b, V c) { return (~a|b)^(c&b); } +V foo_71_4(V a, V b, V c) { return ((~(c^a))|b)^c; } +V foo_71_5(V a, V b, V c) { return (~((c^a)&b))^a; } +V foo_71_6(V a, V b, V c) { return (~b|c)^(b|a); } + +V foo_72_1(V a, V b, V c) { return (c^a)&b; } + +V foo_73_1(V a, V b, V c) { return ~((((c&a)|b)^a)^c); } +V foo_73_2(V a, V b, V c) { return (((c&a)|b)^c)^~a; } +V foo_73_3(V a, V b, V c) { return (~((c&a)|b))^(c^a); } +V foo_73_4(V a, V b, V c) { return (((c&a)|b)^a)^~c; } +V foo_73_5(V a, V b, V c) { return ((c&a)|b)^(~(c^a)); } +V foo_73_6(V a, V b, V c) { return (~(((c&a)|b)^a))^c; } +V foo_73_7(V a, V b, V c) { return ((c&a)|~b)^(c|a); } +V foo_73_8(V a, V b, V c) { return (~(((c&a)|b)^c))^a; } + +V foo_74_1(V a, V b, V c) { return (c^a)&(c|b); } +V foo_74_2(V a, V b, V c) { return ((c|b)&a)^c; } + +V foo_75_1(V a, V b, V c) { return (~b|c)^a; } + +V foo_76_1(V a, V b, V c) { return (~(c&a))&b; } + +V foo_77_1(V a, V b, V c) { return ~(((b^a)&(c^a))^c); } +V foo_77_2(V a, V b, V c) { return ((c^a)&b)|(~(c|a)); } +V foo_77_3(V a, V b, V c) { return ((c^a)&b)^(~(c|a)); } +V foo_77_4(V a, V b, V c) { return ((c^a)&(c^b))^~a; } +V foo_77_5(V a, V b, V c) { return ((b^a)&(c^a))^~c; } +V foo_77_6(V a, V b, V c) { return ((b^a)|(c^a))^~b; } +V foo_77_7(V a, V b, V c) { return (~((b^a)|(c^a)))^b; } +V foo_77_8(V a, V b, V c) { return ((~(c^a))|b)^(c&a); } +V foo_77_9(V a, V b, V c) { return (~((b^a)&(c^a)))^c; } +V foo_77_10(V a, V b, V c) { return (~((c^a)&b))^(c|a); } +V foo_77_11(V a, V b, V c) { return ((c^b)|a)^(~b|c); } +V foo_77_12(V a, V b, V c) { return (~((c^a)&(c^b)))^a; } +V foo_77_13(V a, V b, V c) { return ((b^a)|c)^(~b|a); } + +V foo_78_1(V a, V b, V c) { return (c&a)^(c|b); } +V foo_78_2(V a, V b, V c) { return ((b^a)|c)^a; } + +V foo_79_1(V a, V b, V c) { return ~((~b|c)&a); } +V foo_79_2(V a, V b, V c) { return (~c&b)|~a; } + +V foo_80_1(V a, V b, V c) { return ~c&a; } + +V foo_81_1(V a, V b, V c) { return ~((~a&b)|c); } +V foo_81_2(V a, V b, V c) { return (~b|a)&~c; } + +V foo_82_1(V a, V b, V c) { return ((c&b)|a)^c; } + +V foo_83_1(V a, V b, V c) { return ~(((c^b)&a)^b); } +V foo_83_2(V a, V b, V c) { return ((c^b)&a)^~b; } +V foo_83_3(V a, V b, V c) { return (~((c^b)&a))^b; } +V foo_83_4(V a, V b, V c) { return (~b|a)^(c&a); } +V foo_83_5(V a, V b, V c) { return ((~(c^b))|a)^c; } +V foo_83_6(V a, V b, V c) { return (~a|c)^(b|a); } + +V foo_84_1(V a, V b, V c) { return (b|a)&~c; } + +V foo_85_1(V a, V b, V c) { return ~c; } + +V foo_86_1(V a, V b, V c) { return (b|a)^c; } + +V foo_87_1(V a, V b, V c) { return ~((b|a)&c); } + +V foo_88_1(V a, V b, V c) { return (c^a)&(b|a); } +V foo_88_2(V a, V b, V c) { return ((b|a)&c)^a; } + +V foo_89_1(V a, V b, V c) { return (~b|a)^c; } + +V foo_90_1(V a, V b, V c) { return c^a; } + +V foo_91_1(V a, V b, V c) { return (~(b|a))|(c^a); } +V foo_91_2(V a, V b, V c) { return (~(c|b))|(c^a); } +V foo_91_3(V a, V b, V c) { return ((~(c|b))|a)^c; } +V foo_91_4(V a, V b, V c) { return ((~(b|a))|c)^a; } + +V foo_92_1(V a, V b, V c) { return (c&a)^(b|a); } +V foo_92_2(V a, V b, V c) { return ((c^b)|a)^c; } + +V foo_93_1(V a, V b, V c) { return ~((~b|a)&c); } +V foo_93_2(V a, V b, V c) { return (~a&b)|~c; } + +V foo_94_1(V a, V b, V c) { return (~a&b)|(c^a); } +V foo_94_2(V a, V b, V c) { return (~c&b)|(c^a); } +V foo_94_3(V a, V b, V c) { return ((~c&b)|a)^c; } +V foo_94_4(V a, V b, V c) { return ((~a&b)|c)^a; } + +V foo_95_1(V a, V b, V c) { return ~(c&a); } + +V foo_96_1(V a, V b, V c) { return (c^b)&a; } + +V foo_97_1(V a, V b, V c) { return ~(((c|b)^a)|(c&b)); } +V foo_97_2(V a, V b, V c) { return (~((c&b)|a))^(c^b); } +V foo_97_3(V a, V b, V c) { return (((c&b)|a)^c)^~b; } +V foo_97_4(V a, V b, V c) { return (((c&b)|a)^b)^~c; } +V foo_97_5(V a, V b, V c) { return ((c&b)|~a)^(c|b); } +V foo_97_6(V a, V b, V c) { return ((c&b)|a)^(~(c^b)); } +V foo_97_7(V a, V b, V c) { return (~(((c&b)|a)^b))^c; } +V foo_97_8(V a, V b, V c) { return (~(((c&b)|a)^c))^b; } + +V foo_98_1(V a, V b, V c) { return (c^b)&(c|a); } +V foo_98_2(V a, V b, V c) { return ((c|a)&b)^c; } + +V foo_99_1(V a, V b, V c) { return (~a|c)^b; } + +V foo_100_1(V a, V b, V c) { return (c^b)&(b|a); } +V foo_100_2(V a, V b, V c) { return ((b|a)&c)^b; } + +V foo_101_1(V a, V b, V c) { return (~a|b)^c; } + +V foo_102_1(V a, V b, V c) { return c^b; } + +V foo_103_1(V a, V b, V c) { return (~(b|a))|(c^b); } +V foo_103_2(V a, V b, V c) { return (~(c|a))|(c^b); } +V foo_103_3(V a, V b, V c) { return ((~(c|a))|b)^c; } +V foo_103_4(V a, V b, V c) { return ((~(b|a))|c)^b; } + +V foo_104_1(V a, V b, V c) { return ((b&a)^c)&(b|a); } +V foo_104_2(V a, V b, V c) { return ((c&a)^b)&(c|a); } +V foo_104_3(V a, V b, V c) { return ((c&b)^a)&(c|b); } +V foo_104_4(V a, V b, V c) { return ((c|b)&a)^(c&b); } +V foo_104_5(V a, V b, V c) { return ((c|a)&b)^(c&a); } +V foo_104_6(V a, V b, V c) { return ((b|a)&c)^(b&a); } + +V foo_105_1(V a, V b, V c) { return ~((b^a)^c); } +V foo_105_2(V a, V b, V c) { return (c^b)^~a; } +V foo_105_3(V a, V b, V c) { return (c^a)^~b; } +V foo_105_4(V a, V b, V c) { return (b^a)^~c; } +V foo_105_5(V a, V b, V c) { return (~(c^b))^a; } +V foo_105_6(V a, V b, V c) { return (~(c^a))^b; } +V foo_105_7(V a, V b, V c) { return (~(b^a))^c; } + +V foo_106_1(V a, V b, V c) { return (b&a)^c; } + +V foo_107_1(V a, V b, V c) { return ~(((b|a)&c)^(b^a)); } +V foo_107_2(V a, V b, V c) { return ((b&a)^c)|(~(b|a)); } +V foo_107_3(V a, V b, V c) { return ((c^b)&(b|a))^~a; } +V foo_107_4(V a, V b, V c) { return ((c^a)&(b|a))^~b; } +V foo_107_5(V a, V b, V c) { return (~((b|a)&c))^(b^a); } +V foo_107_6(V a, V b, V c) { return (~((c^b)&(b|a)))^a; } +V foo_107_7(V a, V b, V c) { return (~((c^a)&(b|a)))^b; } +V foo_107_8(V a, V b, V c) { return ((b|a)&c)^(~(b^a)); } +V foo_107_9(V a, V b, V c) { return ((~(b|a))|c)^(b&a); } + +V foo_108_1(V a, V b, V c) { return (c&a)^b; } + +V foo_109_1(V a, V b, V c) { return ~(((b^a)&(c|a))^c); } +V foo_109_2(V a, V b, V c) { return ((c&a)^b)|(~(c|a)); } +V foo_109_3(V a, V b, V c) { return ((c^b)&(c|a))^~a; } +V foo_109_4(V a, V b, V c) { return (~((c|a)&b))^(c^a); } +V foo_109_5(V a, V b, V c) { return ((b^a)&(c|a))^~c; } +V foo_109_6(V a, V b, V c) { return (~((c^b)&(c|a)))^a; } +V foo_109_7(V a, V b, V c) { return ((~(c|a))|b)^(c&a); } +V foo_109_8(V a, V b, V c) { return ((c|a)&b)^(~(c^a)); } +V foo_109_9(V a, V b, V c) { return (~((b^a)&(c|a)))^c; } + +V foo_110_1(V a, V b, V c) { return (~a&c)|(c^b); } +V foo_110_2(V a, V b, V c) { return (~a&b)|(c^b); } +V foo_110_3(V a, V b, V c) { return ((~b|a)&c)^b; } +V foo_110_4(V a, V b, V c) { return ((~c|a)&b)^c; } + +V foo_111_1(V a, V b, V c) { return (c^b)|~a; } + +V foo_112_1(V a, V b, V c) { return (~(c&b))&a; } + +V foo_113_1(V a, V b, V c) { return ~(((b^a)&(c^b))^c); } +V foo_113_2(V a, V b, V c) { return ((b^a)|(c^a))^~a; } +V foo_113_3(V a, V b, V c) { return ((c^b)&a)|(~(c|b)); } +V foo_113_4(V a, V b, V c) { return ((c^b)&a)^(~(c|b)); } +V foo_113_5(V a, V b, V c) { return ((b^a)&(c^b))^~c; } +V foo_113_6(V a, V b, V c) { return ((c^a)&(c^b))^~b; } +V foo_113_7(V a, V b, V c) { return (~((b^a)|(c^a)))^a; } +V foo_113_8(V a, V b, V c) { return ((~(c^b))|a)^(c&b); } +V foo_113_9(V a, V b, V c) { return (~((c^b)&a))^(c|b); } +V foo_113_10(V a, V b, V c) { return (~((b^a)&(c^b)))^c; } +V foo_113_11(V a, V b, V c) { return ((c^a)|b)^(~a|c); } +V foo_113_12(V a, V b, V c) { return (~((c^a)&(c^b)))^b; } +V foo_113_13(V a, V b, V c) { return ((b^a)|c)^(~a|b); } + +V foo_114_1(V a, V b, V c) { return (c&b)^(c|a); } +V foo_114_2(V a, V b, V c) { return ((b^a)|c)^b; } + +V foo_115_1(V a, V b, V c) { return ~((~a|c)&b); } +V foo_115_2(V a, V b, V c) { return (~c&a)|~b; } + +V foo_116_1(V a, V b, V c) { return (c&b)^(b|a); } +V foo_116_2(V a, V b, V c) { return ((c^a)|b)^c; } + +V foo_117_1(V a, V b, V c) { return ~((~a|b)&c); } +V foo_117_2(V a, V b, V c) { return (~b&a)|~c; } + +V foo_118_1(V a, V b, V c) { return (~b&a)|(c^b); } +V foo_118_2(V a, V b, V c) { return (~c&a)|(c^b); } +V foo_118_3(V a, V b, V c) { return ((~c&a)|b)^c; } +V foo_118_4(V a, V b, V c) { return ((~b&a)|c)^b; } + +V foo_119_1(V a, V b, V c) { return ~(c&b); } + +V foo_120_1(V a, V b, V c) { return (c&b)^a; } + +V foo_121_1(V a, V b, V c) { return ~(((b^a)&(c|b))^c); } +V foo_121_2(V a, V b, V c) { return ((c&b)^a)|(~(c|b)); } +V foo_121_3(V a, V b, V c) { return (~((c|b)&a))^(c^b); } +V foo_121_4(V a, V b, V c) { return ((b^a)&(c|b))^~c; } +V foo_121_5(V a, V b, V c) { return ((c^a)&(c|b))^~b; } +V foo_121_6(V a, V b, V c) { return ((~(c|b))|a)^(c&b); } +V foo_121_7(V a, V b, V c) { return ((c|b)&a)^(~(c^b)); } +V foo_121_8(V a, V b, V c) { return (~((b^a)&(c|b)))^c; } +V foo_121_9(V a, V b, V c) { return (~((c^a)&(c|b)))^b; } + +V foo_122_1(V a, V b, V c) { return (~b&c)|(c^a); } +V foo_122_2(V a, V b, V c) { return (~b&a)|(c^a); } +V foo_122_3(V a, V b, V c) { return ((~a|b)&c)^a; } +V foo_122_4(V a, V b, V c) { return ((~c|b)&a)^c; } + +V foo_123_1(V a, V b, V c) { return (c^a)|~b; } + +V foo_124_1(V a, V b, V c) { return (~c&b)|(b^a); } +V foo_124_2(V a, V b, V c) { return (~c&a)|(b^a); } +V foo_124_3(V a, V b, V c) { return ((~a|c)&b)^a; } +V foo_124_4(V a, V b, V c) { return ((~b|c)&a)^b; } + +V foo_125_1(V a, V b, V c) { return (b^a)|~c; } + +V foo_126_1(V a, V b, V c) { return (b^a)|(c^a); } +V foo_126_2(V a, V b, V c) { return (b^a)|(c^b); } +V foo_126_3(V a, V b, V c) { return (c^a)|(c^b); } + +V foo_127_1(V a, V b, V c) { return ~((c&b)&a); } + +V foo_128_1(V a, V b, V c) { return (c&b)&a; } +V foo_128_2(V a, V b, V c) { return (c&a)&b; } +V foo_128_3(V a, V b, V c) { return (b&a)&c; } + +V foo_129_1(V a, V b, V c) { return ~((b^a)|(c^a)); } + +V foo_130_1(V a, V b, V c) { return (~(b^a))&c; } + +V foo_131_1(V a, V b, V c) { return ~((~c&b)|(b^a)); } +V foo_131_2(V a, V b, V c) { return ((~a|c)&b)^~a; } +V foo_131_3(V a, V b, V c) { return ((~b|c)&a)^~b; } +V foo_131_4(V a, V b, V c) { return (~((~b|c)&a))^b; } +V foo_131_5(V a, V b, V c) { return (~((~a|c)&b))^a; } +V foo_131_6(V a, V b, V c) { return (~a|c)&(~(b^a)); } +V foo_131_7(V a, V b, V c) { return (~b|c)&(~(b^a)); } + +V foo_132_1(V a, V b, V c) { return (~(c^a))&b; } + +V foo_133_1(V a, V b, V c) { return ~((~b&c)|(c^a)); } +V foo_133_2(V a, V b, V c) { return ((~a|b)&c)^~a; } +V foo_133_3(V a, V b, V c) { return (~((~c|b)&a))^c; } +V foo_133_4(V a, V b, V c) { return ((~c|b)&a)^~c; } +V foo_133_5(V a, V b, V c) { return (~((~a|b)&c))^a; } +V foo_133_6(V a, V b, V c) { return (~(c^a))&(~a|b); } +V foo_133_7(V a, V b, V c) { return (~(c^a))&(~c|b); } + +V foo_134_1(V a, V b, V c) { return ((b^a)&(c|b))^c; } +V foo_134_2(V a, V b, V c) { return ((c^a)&(c|b))^b; } +V foo_134_3(V a, V b, V c) { return ((c|b)&a)^(c^b); } +V foo_134_4(V a, V b, V c) { return ((b^a)^c)&(c|b); } + +V foo_135_1(V a, V b, V c) { return ~((c&b)^a); } +V foo_135_2(V a, V b, V c) { return (c&b)^~a; } +V foo_135_3(V a, V b, V c) { return (~(c&b))^a; } + +V foo_136_1(V a, V b, V c) { return c&b; } + +V foo_137_1(V a, V b, V c) { return ~((~b&a)|(c^b)); } +V foo_137_2(V a, V b, V c) { return (~((~c&a)|b))^c; } +V foo_137_3(V a, V b, V c) { return ((~b&a)|c)^~b; } +V foo_137_4(V a, V b, V c) { return (~((~b&a)|c))^b; } +V foo_137_5(V a, V b, V c) { return ((~c&a)|b)^~c; } +V foo_137_6(V a, V b, V c) { return (~(c^b))&(~a|c); } +V foo_137_7(V a, V b, V c) { return (~(c^b))&(~a|b); } + +V foo_138_1(V a, V b, V c) { return (~a|b)&c; } + +V foo_139_1(V a, V b, V c) { return ~((c&b)^(b|a)); } +V foo_139_2(V a, V b, V c) { return (~(b|a))|(c&b); } +V foo_139_3(V a, V b, V c) { return (~(b|a))^(c&b); } +V foo_139_4(V a, V b, V c) { return (~((c^a)|b))^c; } +V foo_139_5(V a, V b, V c) { return ((c^a)|b)^~c; } +V foo_139_6(V a, V b, V c) { return (~(c&b))^(b|a); } +V foo_139_7(V a, V b, V c) { return ((c^a)|~b)^a; } + +V foo_140_1(V a, V b, V c) { return (~a|c)&b; } + +V foo_141_1(V a, V b, V c) { return ~((c&b)^(c|a)); } +V foo_141_2(V a, V b, V c) { return (~(c|a))|(c&b); } +V foo_141_3(V a, V b, V c) { return (~(c|a))^(c&b); } +V foo_141_4(V a, V b, V c) { return ((b^a)|c)^~b; } +V foo_141_5(V a, V b, V c) { return (~((b^a)|c))^b; } +V foo_141_6(V a, V b, V c) { return (~(c&b))^(c|a); } +V foo_141_7(V a, V b, V c) { return ((b^a)|~c)^a; } + +V foo_142_1(V a, V b, V c) { return ((b^a)&(c^b))^c; } +V foo_142_2(V a, V b, V c) { return ((c^a)&(c^b))^b; } +V foo_142_3(V a, V b, V c) { return ((c^b)&a)^(c|b); } +V foo_142_4(V a, V b, V c) { return ((b^a)|(c^a))^a; } + +V foo_143_1(V a, V b, V c) { return (c&b)|~a; } + +V foo_144_1(V a, V b, V c) { return (~(c^b))&a; } + +V foo_145_1(V a, V b, V c) { return ~((~a&c)|(c^b)); } +V foo_145_2(V a, V b, V c) { return ((~b|a)&c)^~b; } +V foo_145_3(V a, V b, V c) { return (~((~c|a)&b))^c; } +V foo_145_4(V a, V b, V c) { return ((~c|a)&b)^~c; } +V foo_145_5(V a, V b, V c) { return (~((~b|a)&c))^b; } +V foo_145_6(V a, V b, V c) { return (~(c^b))&(~b|a); } +V foo_145_7(V a, V b, V c) { return (~(c^b))&(~c|a); } + +V foo_146_1(V a, V b, V c) { return ((b^a)&(c|a))^c; } +V foo_146_2(V a, V b, V c) { return ((c|a)&b)^(c^a); } +V foo_146_3(V a, V b, V c) { return ((c^b)&(c|a))^a; } +V foo_146_4(V a, V b, V c) { return ((b^a)^c)&(c|a); } + +V foo_147_1(V a, V b, V c) { return ~((c&a)^b); } +V foo_147_2(V a, V b, V c) { return (c&a)^~b; } +V foo_147_3(V a, V b, V c) { return (~(c&a))^b; } + +V foo_148_1(V a, V b, V c) { return ((b|a)&c)^(b^a); } +V foo_148_2(V a, V b, V c) { return ((c^a)&(b|a))^b; } +V foo_148_3(V a, V b, V c) { return ((c^b)&(b|a))^a; } +V foo_148_4(V a, V b, V c) { return ((b^a)^c)&(b|a); } + +V foo_149_1(V a, V b, V c) { return ~((b&a)^c); } +V foo_149_2(V a, V b, V c) { return (~(b&a))^c; } +V foo_149_3(V a, V b, V c) { return (b&a)^~c; } + +V foo_150_1(V a, V b, V c) { return (b^a)^c; } +V foo_150_2(V a, V b, V c) { return (c^a)^b; } +V foo_150_3(V a, V b, V c) { return (c^b)^a; } + +V foo_151_1(V a, V b, V c) { return ~(((b&a)^c)&(b|a)); } +V foo_151_2(V a, V b, V c) { return ((b^a)^c)|(~(b|a)); } +V foo_151_3(V a, V b, V c) { return ((b^a)^c)|(~(c|a)); } +V foo_151_4(V a, V b, V c) { return ((b^a)^c)|(~(c|b)); } +V foo_151_5(V a, V b, V c) { return (~((c|b)&a))^(c&b); } +V foo_151_6(V a, V b, V c) { return (~((c|a)&b))^(c&a); } +V foo_151_7(V a, V b, V c) { return ((~(b|a))|c)^(b^a); } +V foo_151_8(V a, V b, V c) { return ((~(c|a))|(b^a))^c; } +V foo_151_9(V a, V b, V c) { return ((b|a)&c)^(~(b&a)); } +V foo_151_10(V a, V b, V c) { return (~((b|a)&c))^(b&a); } +V foo_151_11(V a, V b, V c) { return ((~(c|a))|b)^(c^a); } +V foo_151_12(V a, V b, V c) { return ((~(b|a))|(c^a))^b; } +V foo_151_13(V a, V b, V c) { return ((c|a)&b)^(~(c&a)); } +V foo_151_14(V a, V b, V c) { return ((~(c|b))|a)^(c^b); } +V foo_151_15(V a, V b, V c) { return ((~(b|a))|(c^b))^a; } +V foo_151_16(V a, V b, V c) { return ((c|b)&a)^(~(c&b)); } + +V foo_152_1(V a, V b, V c) { return ((c|a)&~b)^c; } +V foo_152_2(V a, V b, V c) { return ((b|a)&~c)^b; } +V foo_152_3(V a, V b, V c) { return (~(c^b))&(c|a); } +V foo_152_4(V a, V b, V c) { return (~(c^b))&(b|a); } + +V foo_153_1(V a, V b, V c) { return ~(c^b); } +V foo_153_2(V a, V b, V c) { return ~b^c; } +V foo_153_3(V a, V b, V c) { return ~c^b; } + +V foo_154_1(V a, V b, V c) { return (~b&a)^c; } + +V foo_155_1(V a, V b, V c) { return ~((c^b)&(b|a)); } +V foo_155_2(V a, V b, V c) { return ((b|a)&c)^~b; } +V foo_155_3(V a, V b, V c) { return (~((b|a)&c))^b; } + +V foo_156_1(V a, V b, V c) { return (~c&a)^b; } + +V foo_157_1(V a, V b, V c) { return ~((c^b)&(c|a)); } +V foo_157_2(V a, V b, V c) { return (~((c|a)&b))^c; } +V foo_157_3(V a, V b, V c) { return ((c|a)&b)^~c; } + +V foo_158_1(V a, V b, V c) { return ((c|b)^a)|(c&b); } +V foo_158_2(V a, V b, V c) { return (((c&b)|a)^b)^c; } +V foo_158_3(V a, V b, V c) { return (((c&b)|a)^c)^b; } +V foo_158_4(V a, V b, V c) { return ((c&b)|a)^(c^b); } +V foo_158_5(V a, V b, V c) { return ((b^a)^c)|(c&b); } + +V foo_159_1(V a, V b, V c) { return ~((c^b)&a); } + +V foo_160_1(V a, V b, V c) { return c&a; } + +V foo_161_1(V a, V b, V c) { return ~((~a&b)|(c^a)); } +V foo_161_2(V a, V b, V c) { return (~((~c&b)|a))^c; } +V foo_161_3(V a, V b, V c) { return ((~a&b)|c)^~a; } +V foo_161_4(V a, V b, V c) { return (~((~a&b)|c))^a; } +V foo_161_5(V a, V b, V c) { return ((~c&b)|a)^~c; } +V foo_161_6(V a, V b, V c) { return (~(c^a))&(~b|c); } +V foo_161_7(V a, V b, V c) { return (~(c^a))&(~b|a); } + +V foo_162_1(V a, V b, V c) { return (~b|a)&c; } + +V foo_163_1(V a, V b, V c) { return ~((c&a)^(b|a)); } +V foo_163_2(V a, V b, V c) { return (~(b|a))|(c&a); } +V foo_163_3(V a, V b, V c) { return (~(b|a))^(c&a); } +V foo_163_4(V a, V b, V c) { return (~((c^b)|a))^c; } +V foo_163_5(V a, V b, V c) { return ((c^b)|a)^~c; } +V foo_163_6(V a, V b, V c) { return (~(c&a))^(b|a); } +V foo_163_7(V a, V b, V c) { return ((c^b)|~a)^b; } + +V foo_164_1(V a, V b, V c) { return ((c|b)&~a)^c; } +V foo_164_2(V a, V b, V c) { return ((b|a)&~c)^a; } +V foo_164_3(V a, V b, V c) { return (~(c^a))&(c|b); } +V foo_164_4(V a, V b, V c) { return (~(c^a))&(b|a); } + +V foo_165_1(V a, V b, V c) { return ~(c^a); } +V foo_165_2(V a, V b, V c) { return ~a^c; } +V foo_165_3(V a, V b, V c) { return ~c^a; } + +V foo_166_1(V a, V b, V c) { return (~a&b)^c; } + +V foo_167_1(V a, V b, V c) { return ~((c^a)&(b|a)); } +V foo_167_2(V a, V b, V c) { return ((b|a)&c)^~a; } +V foo_167_3(V a, V b, V c) { return (~((b|a)&c))^a; } + +V foo_168_1(V a, V b, V c) { return (b|a)&c; } + +V foo_169_1(V a, V b, V c) { return ~((b|a)^c); } +V foo_169_2(V a, V b, V c) { return (~(b|a))^c; } +V foo_169_3(V a, V b, V c) { return (b|a)^~c; } + +V foo_170_1(V a, V b, V c) { return c; } + +V foo_171_1(V a, V b, V c) { return (~(b|a))|c; } + +V foo_172_1(V a, V b, V c) { return ((c^b)&a)^b; } + +V foo_173_1(V a, V b, V c) { return ~(((c&b)|a)^c); } +V foo_173_2(V a, V b, V c) { return (~((c&b)|a))^c; } +V foo_173_3(V a, V b, V c) { return ((c&b)|a)^~c; } +V foo_173_4(V a, V b, V c) { return (~(c^a))|(c&b); } + +V foo_174_1(V a, V b, V c) { return (~a&b)|c; } + +V foo_175_1(V a, V b, V c) { return ~a|c; } + +V foo_176_1(V a, V b, V c) { return (~b|c)&a; } + +V foo_177_1(V a, V b, V c) { return ~((c&a)^(c|b)); } +V foo_177_2(V a, V b, V c) { return ((b^a)|c)^~a; } +V foo_177_3(V a, V b, V c) { return (~(c|b))|(c&a); } +V foo_177_4(V a, V b, V c) { return (~(c|b))^(c&a); } +V foo_177_5(V a, V b, V c) { return (~((b^a)|c))^a; } +V foo_177_6(V a, V b, V c) { return (~(c&a))^(c|b); } +V foo_177_7(V a, V b, V c) { return ((b^a)|~c)^b; } + +V foo_178_1(V a, V b, V c) { return ((b^a)&(c^a))^c; } +V foo_178_2(V a, V b, V c) { return ((c^a)&(c^b))^a; } +V foo_178_3(V a, V b, V c) { return ((c^a)&b)^(c|a); } +V foo_178_4(V a, V b, V c) { return ((b^a)|(c^a))^b; } + +V foo_179_1(V a, V b, V c) { return (c&a)|~b; } + +V foo_180_1(V a, V b, V c) { return (~c&b)^a; } + +V foo_181_1(V a, V b, V c) { return ~((c^a)&(c|b)); } +V foo_181_2(V a, V b, V c) { return (~((c|b)&a))^c; } +V foo_181_3(V a, V b, V c) { return ((c|b)&a)^~c; } + +V foo_182_1(V a, V b, V c) { return (((c&a)|b)^a)^c; } +V foo_182_2(V a, V b, V c) { return ((c|a)^b)|(c&a); } +V foo_182_3(V a, V b, V c) { return (((c&a)|b)^c)^a; } +V foo_182_4(V a, V b, V c) { return ((c&a)|b)^(c^a); } +V foo_182_5(V a, V b, V c) { return ((b^a)^c)|(c&a); } + +V foo_183_1(V a, V b, V c) { return ~((c^a)&b); } + +V foo_184_1(V a, V b, V c) { return ((c^a)&b)^a; } + +V foo_185_1(V a, V b, V c) { return ~(((c&a)|b)^c); } +V foo_185_2(V a, V b, V c) { return (~((c&a)|b))^c; } +V foo_185_3(V a, V b, V c) { return ((c&a)|b)^~c; } +V foo_185_4(V a, V b, V c) { return (~(c^b))|(c&a); } + +V foo_186_1(V a, V b, V c) { return (~b&a)|c; } + +V foo_187_1(V a, V b, V c) { return ~b|c; } + +V foo_188_1(V a, V b, V c) { return (b^a)|(c&b); } +V foo_188_2(V a, V b, V c) { return (b^a)|(c&a); } + +V foo_189_1(V a, V b, V c) { return ~((c^a)&(c^b)); } +V foo_189_2(V a, V b, V c) { return (~(c^b))|(b^a); } +V foo_189_3(V a, V b, V c) { return (~(c^a))|(b^a); } + +V foo_190_1(V a, V b, V c) { return (b^a)|c; } + +V foo_191_1(V a, V b, V c) { return (~(b&a))|c; } + +V foo_192_1(V a, V b, V c) { return b&a; } + +V foo_193_1(V a, V b, V c) { return ~((~a&c)|(b^a)); } +V foo_193_2(V a, V b, V c) { return (~((~b&c)|a))^b; } +V foo_193_3(V a, V b, V c) { return ((~a&c)|b)^~a; } +V foo_193_4(V a, V b, V c) { return (~((~a&c)|b))^a; } +V foo_193_5(V a, V b, V c) { return ((~b&c)|a)^~b; } +V foo_193_6(V a, V b, V c) { return (~(b^a))&(~c|b); } +V foo_193_7(V a, V b, V c) { return (~(b^a))&(~c|a); } + +V foo_194_1(V a, V b, V c) { return ((c|b)&~a)^b; } +V foo_194_2(V a, V b, V c) { return ((c|a)&~b)^a; } +V foo_194_3(V a, V b, V c) { return (~(b^a))&(c|b); } +V foo_194_4(V a, V b, V c) { return (~(b^a))&(c|a); } + +V foo_195_1(V a, V b, V c) { return ~(b^a); } +V foo_195_2(V a, V b, V c) { return ~a^b; } +V foo_195_3(V a, V b, V c) { return ~b^a; } + +V foo_196_1(V a, V b, V c) { return (~c|a)&b; } + +V foo_197_1(V a, V b, V c) { return ~((b&a)^(c|a)); } +V foo_197_2(V a, V b, V c) { return (~(c|a))|(b&a); } +V foo_197_3(V a, V b, V c) { return (~(c|a))^(b&a); } +V foo_197_4(V a, V b, V c) { return (~((c^b)|a))^b; } +V foo_197_5(V a, V b, V c) { return ((c^b)|a)^~b; } +V foo_197_6(V a, V b, V c) { return (~(b&a))^(c|a); } +V foo_197_7(V a, V b, V c) { return ((c^b)|~a)^c; } + +V foo_198_1(V a, V b, V c) { return (~a&c)^b; } + +V foo_199_1(V a, V b, V c) { return ~((b^a)&(c|a)); } +V foo_199_2(V a, V b, V c) { return ((c|a)&b)^~a; } +V foo_199_3(V a, V b, V c) { return (~((c|a)&b))^a; } + +V foo_200_1(V a, V b, V c) { return (c|a)&b; } + +V foo_201_1(V a, V b, V c) { return ~((c|a)^b); } +V foo_201_2(V a, V b, V c) { return (~(c|a))^b; } +V foo_201_3(V a, V b, V c) { return (c|a)^~b; } + +V foo_202_1(V a, V b, V c) { return ((c^b)&a)^c; } + +V foo_203_1(V a, V b, V c) { return ~(((c&b)|a)^b); } +V foo_203_2(V a, V b, V c) { return (~((c&b)|a))^b; } +V foo_203_3(V a, V b, V c) { return ((c&b)|a)^~b; } +V foo_203_4(V a, V b, V c) { return (~(b^a))|(c&b); } + +V foo_204_1(V a, V b, V c) { return b; } + +V foo_205_1(V a, V b, V c) { return (~(c|a))|b; } + +V foo_206_1(V a, V b, V c) { return (~a&c)|b; } + +V foo_207_1(V a, V b, V c) { return ~a|b; } + +V foo_208_1(V a, V b, V c) { return (~c|b)&a; } + +V foo_209_1(V a, V b, V c) { return ~((b&a)^(c|b)); } +V foo_209_2(V a, V b, V c) { return ((c^a)|b)^~a; } +V foo_209_3(V a, V b, V c) { return (~(c|b))|(b&a); } +V foo_209_4(V a, V b, V c) { return (~(c|b))^(b&a); } +V foo_209_5(V a, V b, V c) { return (~((c^a)|b))^a; } +V foo_209_6(V a, V b, V c) { return (~(b&a))^(c|b); } +V foo_209_7(V a, V b, V c) { return ((c^a)|~b)^c; } + +V foo_210_1(V a, V b, V c) { return (~b&c)^a; } + +V foo_211_1(V a, V b, V c) { return ~((b^a)&(c|b)); } +V foo_211_2(V a, V b, V c) { return (~((c|b)&a))^b; } +V foo_211_3(V a, V b, V c) { return ((c|b)&a)^~b; } + +V foo_212_1(V a, V b, V c) { return ((b^a)&(c^a))^b; } +V foo_212_2(V a, V b, V c) { return ((b^a)&(c^b))^a; } +V foo_212_3(V a, V b, V c) { return ((b^a)&c)^(b|a); } +V foo_212_4(V a, V b, V c) { return ((b^a)|(c^a))^c; } + +V foo_213_1(V a, V b, V c) { return (b&a)|~c; } + +V foo_214_1(V a, V b, V c) { return (((b&a)|c)^a)^b; } +V foo_214_2(V a, V b, V c) { return (((b&a)|c)^b)^a; } +V foo_214_3(V a, V b, V c) { return ((b&a)|c)^(b^a); } +V foo_214_4(V a, V b, V c) { return ((b|a)^c)|(b&a); } +V foo_214_5(V a, V b, V c) { return ((b^a)^c)|(b&a); } + +V foo_215_1(V a, V b, V c) { return ~((b^a)&c); } + +V foo_216_1(V a, V b, V c) { return ((b^a)&c)^a; } + +V foo_217_1(V a, V b, V c) { return ~(((b&a)|c)^b); } +V foo_217_2(V a, V b, V c) { return (~((b&a)|c))^b; } +V foo_217_3(V a, V b, V c) { return ((b&a)|c)^~b; } +V foo_217_4(V a, V b, V c) { return (~(c^b))|(b&a); } + +V foo_218_1(V a, V b, V c) { return (c^a)|(c&b); } +V foo_218_2(V a, V b, V c) { return (c^a)|(b&a); } + +V foo_219_1(V a, V b, V c) { return ~((b^a)&(c^b)); } +V foo_219_2(V a, V b, V c) { return (~(c^b))|(c^a); } +V foo_219_3(V a, V b, V c) { return (~(b^a))|(c^a); } + +V foo_220_1(V a, V b, V c) { return (~c&a)|b; } + +V foo_221_1(V a, V b, V c) { return ~c|b; } + +V foo_222_1(V a, V b, V c) { return (c^a)|b; } + +V foo_223_1(V a, V b, V c) { return (~(c&a))|b; } + +V foo_224_1(V a, V b, V c) { return (c|b)&a; } + +V foo_225_1(V a, V b, V c) { return ~((c|b)^a); } +V foo_225_2(V a, V b, V c) { return (c|b)^~a; } +V foo_225_3(V a, V b, V c) { return (~(c|b))^a; } + +V foo_226_1(V a, V b, V c) { return ((c^a)&b)^c; } + +V foo_227_1(V a, V b, V c) { return ~(((c&a)|b)^a); } +V foo_227_2(V a, V b, V c) { return ((c&a)|b)^~a; } +V foo_227_3(V a, V b, V c) { return (~((c&a)|b))^a; } +V foo_227_4(V a, V b, V c) { return (~(b^a))|(c&a); } + +V foo_228_1(V a, V b, V c) { return ((b^a)&c)^b; } + +V foo_229_1(V a, V b, V c) { return ~(((b&a)|c)^a); } +V foo_229_2(V a, V b, V c) { return ((b&a)|c)^~a; } +V foo_229_3(V a, V b, V c) { return (~((b&a)|c))^a; } +V foo_229_4(V a, V b, V c) { return (~(c^a))|(b&a); } + +V foo_230_1(V a, V b, V c) { return (c^b)|(c&a); } +V foo_230_2(V a, V b, V c) { return (c^b)|(b&a); } + +V foo_231_1(V a, V b, V c) { return ~((b^a)&(c^a)); } +V foo_231_2(V a, V b, V c) { return (~(c^a))|(c^b); } +V foo_231_3(V a, V b, V c) { return (~(b^a))|(c^b); } + +V foo_232_1(V a, V b, V c) { return ((b^a)&(c^a))^a; } +V foo_232_2(V a, V b, V c) { return ((b^a)&(c^b))^b; } +V foo_232_3(V a, V b, V c) { return ((b^a)&c)|(b&a); } +V foo_232_4(V a, V b, V c) { return ((b^a)&c)^(b&a); } +V foo_232_5(V a, V b, V c) { return ((c^a)&(c^b))^c; } +V foo_232_6(V a, V b, V c) { return ((c^a)&b)|(c&a); } +V foo_232_7(V a, V b, V c) { return ((c^a)&b)^(c&a); } +V foo_232_8(V a, V b, V c) { return ((c^b)&a)|(c&b); } +V foo_232_9(V a, V b, V c) { return ((c^b)&a)^(c&b); } +V foo_232_10(V a, V b, V c) { return ((c|b)&a)|(c&b); } +V foo_232_11(V a, V b, V c) { return ((c|a)&b)|(c&a); } +V foo_232_12(V a, V b, V c) { return ((b|a)&c)|(b&a); } +V foo_232_13(V a, V b, V c) { return ((b&a)|c)&(b|a); } +V foo_232_14(V a, V b, V c) { return ((c&a)|b)&(c|a); } +V foo_232_15(V a, V b, V c) { return ((c&b)|a)&(c|b); } + +V foo_233_1(V a, V b, V c) { return ~(((b^a)|(c&b))^c); } +V foo_233_2(V a, V b, V c) { return ((b&a)|c)^(~(b|a)); } +V foo_233_3(V a, V b, V c) { return ((c&a)|b)^(~(c|a)); } +V foo_233_4(V a, V b, V c) { return (~((c&b)|a))^(c|b); } +V foo_233_5(V a, V b, V c) { return ((c^b)|(c&a))^~a; } +V foo_233_6(V a, V b, V c) { return ((c&b)|a)^(~(c|b)); } +V foo_233_7(V a, V b, V c) { return (~((c&a)|b))^(c|a); } +V foo_233_8(V a, V b, V c) { return (~((b&a)|c))^(b|a); } +V foo_233_9(V a, V b, V c) { return (~((c^b)|(c&a)))^a; } +V foo_233_10(V a, V b, V c) { return (~((c^a)|(c&b)))^b; } +V foo_233_11(V a, V b, V c) { return ((c^a)|(c&b))^~b; } +V foo_233_12(V a, V b, V c) { return ((b&a)|~c)^(b^a); } +V foo_233_13(V a, V b, V c) { return (~((b^a)|(c&b)))^c; } +V foo_233_14(V a, V b, V c) { return ((b^a)|(c&b))^~c; } +V foo_233_15(V a, V b, V c) { return ((c&a)|~b)^(c^a); } +V foo_233_16(V a, V b, V c) { return ((c&b)|~a)^(c^b); } +V foo_233_17(V a, V b, V c) { return (~((b^a)^c))|(c&b); } +V foo_233_18(V a, V b, V c) { return (~((b^a)^c))|(c&a); } +V foo_233_19(V a, V b, V c) { return (~((b^a)^c))|(b&a); } +V foo_233_20(V a, V b, V c) { return (~((c|b)^a))|(c&b); } +V foo_233_21(V a, V b, V c) { return (~((c|a)^b))|(c&a); } +V foo_233_22(V a, V b, V c) { return (~((b|a)^c))|(b&a); } + +V foo_234_1(V a, V b, V c) { return (b&a)|c; } + +V foo_235_1(V a, V b, V c) { return (~(b^a))|c; } + +V foo_236_1(V a, V b, V c) { return (c&a)|b; } + +V foo_237_1(V a, V b, V c) { return (~(c^a))|b; } + +V foo_238_1(V a, V b, V c) { return c|b; } + +V foo_239_1(V a, V b, V c) { return (c|b)|~a; } +V foo_239_2(V a, V b, V c) { return (~a|b)|c; } +V foo_239_3(V a, V b, V c) { return (~a|c)|b; } + +V foo_240_1(V a, V b, V c) { return a; } + +V foo_241_1(V a, V b, V c) { return (~(c|b))|a; } + +V foo_242_1(V a, V b, V c) { return (~b&c)|a; } + +V foo_243_1(V a, V b, V c) { return ~b|a; } + +V foo_244_1(V a, V b, V c) { return (~c&b)|a; } + +V foo_245_1(V a, V b, V c) { return ~c|a; } + +V foo_246_1(V a, V b, V c) { return (c^b)|a; } + +V foo_247_1(V a, V b, V c) { return (~(c&b))|a; } + +V foo_248_1(V a, V b, V c) { return (c&b)|a; } + +V foo_249_1(V a, V b, V c) { return (~(c^b))|a; } + +V foo_250_1(V a, V b, V c) { return c|a; } + +V foo_251_1(V a, V b, V c) { return (c|a)|~b; } +V foo_251_2(V a, V b, V c) { return (~b|a)|c; } +V foo_251_3(V a, V b, V c) { return (~b|c)|a; } + +V foo_252_1(V a, V b, V c) { return b|a; } + +V foo_253_1(V a, V b, V c) { return (b|a)|~c; } +V foo_253_2(V a, V b, V c) { return (~c|a)|b; } +V foo_253_3(V a, V b, V c) { return (~c|b)|a; } + +V foo_254_1(V a, V b, V c) { return (b|a)|c; } +V foo_254_2(V a, V b, V c) { return (c|a)|b; } +V foo_254_3(V a, V b, V c) { return (c|b)|a; } + +V foo_255_1(V a, V b, V c) { return (V){~0,~0,~0,~0}; } + +/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]" 679 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-1.c b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-1.c index ef302464765..8e5d22fd4d6 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-1.c @@ -1,6 +1,5 @@ /* { dg-do compile } */ /* { dg-options "-mavx512f -O2" } */ -/* { dg-final { scan-assembler-times "vpternlogq\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogq\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogq\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-3.c b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-3.c new file mode 100644 index 00000000000..fb943da1956 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogq-3.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=x86-64-v4" } */ + +#include <immintrin.h> +__m256i +foo2 (__m256i** a, __m256i b) +{ + return ~(**a); +} diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpternlogd-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpternlogd-1.c index 045a266664c..dd53563d39d 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpternlogd-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpternlogd-1.c @@ -1,7 +1,5 @@ /* { dg-do compile } */ /* { dg-options "-mavx512vl -O2" } */ -/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpternlogq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpternlogq-1.c index 3a6707c8f65..31fec3e0dde 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpternlogq-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpternlogq-1.c @@ -1,7 +1,5 @@ /* { dg-do compile } */ /* { dg-options "-mavx512vl -O2" } */ -/* { dg-final { scan-assembler-times "vpternlogq\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpternlogq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogq\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpternlogq\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr100711-4.c b/gcc/testsuite/gcc.target/i386/pr100711-4.c index 3ca524f8a8a..26152d63f8c 100644 --- a/gcc/testsuite/gcc.target/i386/pr100711-4.c +++ b/gcc/testsuite/gcc.target/i386/pr100711-4.c @@ -37,6 +37,6 @@ v8di foo_v8di (long long a, v8di b) return (__extension__ (v8di) {~a, ~a, ~a, ~a, ~a, ~a, ~a, ~a}) | b; } -/* { dg-final { scan-assembler-times "vpternlog\[dq\]\[ \\t\]+\\\$0xbb" 4 { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-times "vpternlog\[dq\]\[ \\t\]+\\\$0xbb" 2 { target { ia32 } } } } */ +/* { dg-final { scan-assembler-times "vpternlog\[dq\]\[ \\t\]+\\\$207" 4 { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\\\$207" 2 { target { ia32 } } } } */ /* { dg-final { scan-assembler-times "vpternlog\[dq\]\[ \\t\]+\\\$0xdd" 2 { target { ia32 } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr100711-5.c b/gcc/testsuite/gcc.target/i386/pr100711-5.c index 161fbfcc256..820bed88ed5 100644 --- a/gcc/testsuite/gcc.target/i386/pr100711-5.c +++ b/gcc/testsuite/gcc.target/i386/pr100711-5.c @@ -37,4 +37,7 @@ v8di foo_v8di (long long a, v8di b) return (__extension__ (v8di) {~a, ~a, ~a, ~a, ~a, ~a, ~a, ~a}) ^ b; } -/* { dg-final { scan-assembler-times "vpternlog\[dq\]\[ \\t\]+\\\$0x99" 4 } } */ +/* { dg-final { scan-assembler-times "vpternlog\[dq\]\[ \\t\]+\\\$195" 4 { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]+\\\$195" 2 { target { ia32 } } } } */ +/* { dg-final { scan-assembler-times "vpternlog\[dq\]\[ \\t\]+\\\$0x99" 2 { target { ia32 } } } } */ +