// ====------ util_ternary_logic_op_test.cpp ------------ *- C/C++ -* ---===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//
// ===--------------------------------------------------------------------===//

// This file is modified from the code migrated by SYCLomatic.

// RUN: %{build} -o %t.out
// RUN: %{run} %t.out

#include <cmath>
#include <cstdint>
#include <cstdio>
#include <stdlib.h>
#include <sycl/detail/core.hpp>
#include <syclcompat/util.hpp>

// clang-format off
void reference_of_ternary_logic_op(uint32_t &R, uint32_t A, uint32_t B, uint32_t C, uint32_t D) {
  switch (D) {
  case 0: R = 0; break;
  case 1: R = (~A & ~B & ~C); break;
  case 2: R = (~A & ~B & C); break;
  case 3: R = (~A & ~B & ~C) | (~A & ~B & C); break;
  case 4: R = (~A & B & ~C); break;
  case 5: R = (~A & ~B & ~C) | (~A & B & ~C); break;
  case 6: R = (~A & ~B & C) | (~A & B & ~C); break;
  case 7: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C); break;
  case 8: R = (~A & B & C); break;
  case 9: R = (~A & ~B & ~C) | (~A & B & C); break;
  case 10: R = (~A & ~B & C) | (~A & B & C); break;
  case 11: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C); break;
  case 12: R = (~A & B & ~C) | (~A & B & C); break;
  case 13: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C); break;
  case 14: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C); break;
  case 15: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C); break;
  case 16: R = (A & ~B & ~C); break;
  case 17: R = (~A & ~B & ~C) | (A & ~B & ~C); break;
  case 18: R = (~A & ~B & C) | (A & ~B & ~C); break;
  case 19: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & ~C); break;
  case 20: R = (~A & B & ~C) | (A & ~B & ~C); break;
  case 21: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & ~C); break;
  case 22: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C); break;
  case 23: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C); break;
  case 24: R = (~A & B & C) | (A & ~B & ~C); break;
  case 25: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & ~C); break;
  case 26: R = (A & B | C) ^ A; break;
  case 27: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C); break;
  case 28: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C); break;
  case 29: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C); break;
  case 30: R = A ^ (B | C); break;
  case 31: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C); break;
  case 32: R = (A & ~B & C); break;
  case 33: R = (~A & ~B & ~C) | (A & ~B & C); break;
  case 34: R = (~A & ~B & C) | (A & ~B & C); break;
  case 35: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & C); break;
  case 36: R = (~A & B & ~C) | (A & ~B & C); break;
  case 37: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & C); break;
  case 38: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & C); break;
  case 39: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & C); break;
  case 40: R = (~A & B & C) | (A & ~B & C); break;
  case 41: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & C); break;
  case 42: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & C); break;
  case 43: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & C); break;
  case 44: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & C); break;
  case 45: R = ~A ^ (~B & C); break;
  case 46: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C); break;
  case 47: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C); break;
  case 48: R = (A & ~B & ~C) | (A & ~B & C); break;
  case 49: R = (~A & ~B & ~C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 50: R = (~A & ~B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 51: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 52: R = (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 53: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 54: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 55: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 56: R = (~A & B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 57: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 58: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 59: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 60: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 61: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 62: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 63: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C); break;
  case 64: R = A & B & ~C; break;
  case 65: R = (~A & ~B & ~C) | (A & B & ~C); break;
  case 66: R = (~A & ~B & C) | (A & B & ~C); break;
  case 67: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & B & ~C); break;
  case 68: R = (~A & B & ~C) | (A & B & ~C); break;
  case 69: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & B & ~C); break;
  case 70: R = (~A & ~B & C) | (~A & B & ~C) | (A & B & ~C); break;
  case 71: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & B & ~C); break;
  case 72: R = (~A & B & C) | (A & B & ~C); break;
  case 73: R = (~A & ~B & ~C) | (~A & B & C) | (A & B & ~C); break;
  case 74: R = (~A & ~B & C) | (~A & B & C) | (A & B & ~C); break;
  case 75: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & B & ~C); break;
  case 76: R = (~A & B & ~C) | (~A & B & C) | (A & B & ~C); break;
  case 77: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & B & ~C); break;
  case 78: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & B & ~C); break;
  case 79: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & B & ~C); break;
  case 80: R = (A & ~B & ~C) | (A & B & ~C); break;
  case 81: R = (~A & ~B & ~C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 82: R = (~A & ~B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 83: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 84: R = (~A & B & ~C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 85: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 86: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 87: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 88: R = (~A & B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 89: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 90: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 91: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 92: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 93: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 94: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 95: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C); break;
  case 96: R = (A & ~B & C) | (A & B & ~C); break;
  case 97: R = (~A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 98: R = (~A & ~B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 99: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 100: R = (~A & B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 101: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 102: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 103: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 104: R = (~A & B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 105: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 106: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 107: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 108: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 109: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 110: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 111: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C); break;
  case 112: R = (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 113: R = (~A & ~B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 114: R = (~A & ~B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 115: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 116: R = (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 117: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 118: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 119: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 120: R = A ^ (B & C); break;
  case 121: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 122: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 123: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 124: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 125: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 126: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 127: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C); break;
  case 128: R = A & B & C; break;
  case 129: R = (~A & ~B & ~C) | (A & B & C); break;
  case 130: R = (~A & ~B & C) | (A & B & C); break;
  case 131: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & B & C); break;
  case 132: R = (~A & B & ~C) | (A & B & C); break;
  case 133: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & B & C); break;
  case 134: R = (~A & ~B & C) | (~A & B & ~C) | (A & B & C); break;
  case 135: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & B & C); break;
  case 136: R = (~A & B & C) | (A & B & C); break;
  case 137: R = (~A & ~B & ~C) | (~A & B & C) | (A & B & C); break;
  case 138: R = (~A & ~B & C) | (~A & B & C) | (A & B & C); break;
  case 139: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & B & C); break;
  case 140: R = (~A & B & ~C) | (~A & B & C) | (A & B & C); break;
  case 141: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & B & C); break;
  case 142: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & B & C); break;
  case 143: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & B & C); break;
  case 144: R = (A & ~B & ~C) | (A & B & C); break;
  case 145: R = (~A & ~B & ~C) | (A & ~B & ~C) | (A & B & C); break;
  case 146: R = (~A & ~B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 147: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 148: R = (~A & B & ~C) | (A & ~B & ~C) | (A & B & C); break;
  case 149: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & ~C) | (A & B & C); break;
  case 150: R = A ^ B ^ C; break;
  case 151: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & B & C); break;
  case 152: R = (~A & B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 153: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 154: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 155: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 156: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 157: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 158: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 159: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & C); break;
  case 160: R = (A & ~B & C) | (A & B & C); break;
  case 161: R = (~A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 162: R = (~A & ~B & C) | (A & ~B & C) | (A & B & C); break;
  case 163: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & C) | (A & B & C); break;
  case 164: R = (~A & B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 165: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 166: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 167: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 168: R = (~A & B & C) | (A & ~B & C) | (A & B & C); break;
  case 169: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & C); break;
  case 170: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & C) | (A & B & C); break;
  case 171: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & C) | (A & B & C); break;
  case 172: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & C); break;
  case 173: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & C); break;
  case 174: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & C); break;
  case 175: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & C); break;
  case 176: R = (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 177: R = (~A & ~B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 178: R = (~A & ~B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 179: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 180: R = A ^ (B & ~C); break;
  case 181: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 182: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 183: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 184: R = (A ^ (B & (C ^ A))); break;
  case 185: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 186: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 187: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 188: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 189: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 190: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 191: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & C); break;
  case 192: R = (A & B & ~C) | (A & B & C); break;
  case 193: R = (~A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 194: R = (~A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 195: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 196: R = (~A & B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 197: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 198: R = (~A & ~B & C) | (~A & B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 199: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 200: R = (~A & B & C) | (A & B & ~C) | (A & B & C); break;
  case 201: R = (~A & ~B & ~C) | (~A & B & C) | (A & B & ~C) | (A & B & C); break;
  case 202: R = (~A & ~B & C) | (~A & B & C) | (A & B & ~C) | (A & B & C); break;
  case 203: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & B & ~C) | (A & B & C); break;
  case 204: R = (~A & B & ~C) | (~A & B & C) | (A & B & ~C) | (A & B & C); break;
  case 205: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & B & ~C) | (A & B & C); break;
  case 206: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & B & ~C) | (A & B & C); break;
  case 207: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & B & ~C) | (A & B & C); break;
  case 208: R = (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 209: R = (~A & ~B & ~C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 210: R = A ^ (~B & C); break;
  case 211: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 212: R = (~A & B & ~C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 213: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 214: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 215: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 216: R = (~A & B & C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 217: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 218: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 219: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 220: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 221: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 222: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 223: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & B & ~C) | (A & B & C); break;
  case 224: R = (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 225: R = (~A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 226: R = (~A & ~B & C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 227: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 228: R = (~A & B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 229: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 230: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 231: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 232: R = ((A & (B | C)) | (B & C)); break;
  case 233: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 234: R = (A & B) | C; break;
  case 235: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 236: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 237: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 238: R = (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 239: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 240: R = (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 241: R = (~A & ~B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 242: R = (~A & ~B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 243: R = (~A & ~B & ~C) | (~A & ~B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 244: R = (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 245: R = (~A & ~B & ~C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 246: R = (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 247: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & ~C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 248: R = (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 249: R = (~A & ~B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 250: R = (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 251: R = (~A & ~B & ~C) | (~A & ~B & C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 252: R = (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 253: R = (~A & ~B & ~C) | (~A & B & ~C) | (~A & B & C) | (A & ~B & ~C) | (A & ~B & C) | (A & B & ~C) | (A & B & C); break;
  case 254: R = A | B | C; break;
  case 255: R = uint32_t(-1); break;
  default: break;
  }
}

void asm_ternary_logic_op(uint32_t &R, uint32_t A, uint32_t B, uint32_t C, uint32_t D) {
  switch (D) {
  case 0: R = syclcompat::ternary_logic_op(A, B, C, 0x0); break;
  case 1: R = syclcompat::ternary_logic_op(A, B, C, 0x1); break;
  case 2: R = syclcompat::ternary_logic_op(A, B, C, 0x2); break;
  case 3: R = syclcompat::ternary_logic_op(A, B, C, 0x3); break;
  case 4: R = syclcompat::ternary_logic_op(A, B, C, 0x4); break;
  case 5: R = syclcompat::ternary_logic_op(A, B, C, 0x5); break;
  case 6: R = syclcompat::ternary_logic_op(A, B, C, 0x6); break;
  case 7: R = syclcompat::ternary_logic_op(A, B, C, 0x7); break;
  case 8: R = syclcompat::ternary_logic_op(A, B, C, 0x8); break;
  case 9: R = syclcompat::ternary_logic_op(A, B, C, 0x9); break;
  case 10: R = syclcompat::ternary_logic_op(A, B, C, 0xA); break;
  case 11: R = syclcompat::ternary_logic_op(A, B, C, 0xB); break;
  case 12: R = syclcompat::ternary_logic_op(A, B, C, 0xC); break;
  case 13: R = syclcompat::ternary_logic_op(A, B, C, 0xD); break;
  case 14: R = syclcompat::ternary_logic_op(A, B, C, 0xE); break;
  case 15: R = syclcompat::ternary_logic_op(A, B, C, 0xF); break;
  case 16: R = syclcompat::ternary_logic_op(A, B, C, 0x10); break;
  case 17: R = syclcompat::ternary_logic_op(A, B, C, 0x11); break;
  case 18: R = syclcompat::ternary_logic_op(A, B, C, 0x12); break;
  case 19: R = syclcompat::ternary_logic_op(A, B, C, 0x13); break;
  case 20: R = syclcompat::ternary_logic_op(A, B, C, 0x14); break;
  case 21: R = syclcompat::ternary_logic_op(A, B, C, 0x15); break;
  case 22: R = syclcompat::ternary_logic_op(A, B, C, 0x16); break;
  case 23: R = syclcompat::ternary_logic_op(A, B, C, 0x17); break;
  case 24: R = syclcompat::ternary_logic_op(A, B, C, 0x18); break;
  case 25: R = syclcompat::ternary_logic_op(A, B, C, 0x19); break;
  case 26: R = syclcompat::ternary_logic_op(A, B, C, 0x1A); break;
  case 27: R = syclcompat::ternary_logic_op(A, B, C, 0x1B); break;
  case 28: R = syclcompat::ternary_logic_op(A, B, C, 0x1C); break;
  case 29: R = syclcompat::ternary_logic_op(A, B, C, 0x1D); break;
  case 30: R = syclcompat::ternary_logic_op(A, B, C, 0x1E); break;
  case 31: R = syclcompat::ternary_logic_op(A, B, C, 0x1F); break;
  case 32: R = syclcompat::ternary_logic_op(A, B, C, 0x20); break;
  case 33: R = syclcompat::ternary_logic_op(A, B, C, 0x21); break;
  case 34: R = syclcompat::ternary_logic_op(A, B, C, 0x22); break;
  case 35: R = syclcompat::ternary_logic_op(A, B, C, 0x23); break;
  case 36: R = syclcompat::ternary_logic_op(A, B, C, 0x24); break;
  case 37: R = syclcompat::ternary_logic_op(A, B, C, 0x25); break;
  case 38: R = syclcompat::ternary_logic_op(A, B, C, 0x26); break;
  case 39: R = syclcompat::ternary_logic_op(A, B, C, 0x27); break;
  case 40: R = syclcompat::ternary_logic_op(A, B, C, 0x28); break;
  case 41: R = syclcompat::ternary_logic_op(A, B, C, 0x29); break;
  case 42: R = syclcompat::ternary_logic_op(A, B, C, 0x2A); break;
  case 43: R = syclcompat::ternary_logic_op(A, B, C, 0x2B); break;
  case 44: R = syclcompat::ternary_logic_op(A, B, C, 0x2C); break;
  case 45: R = syclcompat::ternary_logic_op(A, B, C, 0x2D); break;
  case 46: R = syclcompat::ternary_logic_op(A, B, C, 0x2E); break;
  case 47: R = syclcompat::ternary_logic_op(A, B, C, 0x2F); break;
  case 48: R = syclcompat::ternary_logic_op(A, B, C, 0x30); break;
  case 49: R = syclcompat::ternary_logic_op(A, B, C, 0x31); break;
  case 50: R = syclcompat::ternary_logic_op(A, B, C, 0x32); break;
  case 51: R = syclcompat::ternary_logic_op(A, B, C, 0x33); break;
  case 52: R = syclcompat::ternary_logic_op(A, B, C, 0x34); break;
  case 53: R = syclcompat::ternary_logic_op(A, B, C, 0x35); break;
  case 54: R = syclcompat::ternary_logic_op(A, B, C, 0x36); break;
  case 55: R = syclcompat::ternary_logic_op(A, B, C, 0x37); break;
  case 56: R = syclcompat::ternary_logic_op(A, B, C, 0x38); break;
  case 57: R = syclcompat::ternary_logic_op(A, B, C, 0x39); break;
  case 58: R = syclcompat::ternary_logic_op(A, B, C, 0x3A); break;
  case 59: R = syclcompat::ternary_logic_op(A, B, C, 0x3B); break;
  case 60: R = syclcompat::ternary_logic_op(A, B, C, 0x3C); break;
  case 61: R = syclcompat::ternary_logic_op(A, B, C, 0x3D); break;
  case 62: R = syclcompat::ternary_logic_op(A, B, C, 0x3E); break;
  case 63: R = syclcompat::ternary_logic_op(A, B, C, 0x3F); break;
  case 64: R = syclcompat::ternary_logic_op(A, B, C, 0x40); break;
  case 65: R = syclcompat::ternary_logic_op(A, B, C, 0x41); break;
  case 66: R = syclcompat::ternary_logic_op(A, B, C, 0x42); break;
  case 67: R = syclcompat::ternary_logic_op(A, B, C, 0x43); break;
  case 68: R = syclcompat::ternary_logic_op(A, B, C, 0x44); break;
  case 69: R = syclcompat::ternary_logic_op(A, B, C, 0x45); break;
  case 70: R = syclcompat::ternary_logic_op(A, B, C, 0x46); break;
  case 71: R = syclcompat::ternary_logic_op(A, B, C, 0x47); break;
  case 72: R = syclcompat::ternary_logic_op(A, B, C, 0x48); break;
  case 73: R = syclcompat::ternary_logic_op(A, B, C, 0x49); break;
  case 74: R = syclcompat::ternary_logic_op(A, B, C, 0x4A); break;
  case 75: R = syclcompat::ternary_logic_op(A, B, C, 0x4B); break;
  case 76: R = syclcompat::ternary_logic_op(A, B, C, 0x4C); break;
  case 77: R = syclcompat::ternary_logic_op(A, B, C, 0x4D); break;
  case 78: R = syclcompat::ternary_logic_op(A, B, C, 0x4E); break;
  case 79: R = syclcompat::ternary_logic_op(A, B, C, 0x4F); break;
  case 80: R = syclcompat::ternary_logic_op(A, B, C, 0x50); break;
  case 81: R = syclcompat::ternary_logic_op(A, B, C, 0x51); break;
  case 82: R = syclcompat::ternary_logic_op(A, B, C, 0x52); break;
  case 83: R = syclcompat::ternary_logic_op(A, B, C, 0x53); break;
  case 84: R = syclcompat::ternary_logic_op(A, B, C, 0x54); break;
  case 85: R = syclcompat::ternary_logic_op(A, B, C, 0x55); break;
  case 86: R = syclcompat::ternary_logic_op(A, B, C, 0x56); break;
  case 87: R = syclcompat::ternary_logic_op(A, B, C, 0x57); break;
  case 88: R = syclcompat::ternary_logic_op(A, B, C, 0x58); break;
  case 89: R = syclcompat::ternary_logic_op(A, B, C, 0x59); break;
  case 90: R = syclcompat::ternary_logic_op(A, B, C, 0x5A); break;
  case 91: R = syclcompat::ternary_logic_op(A, B, C, 0x5B); break;
  case 92: R = syclcompat::ternary_logic_op(A, B, C, 0x5C); break;
  case 93: R = syclcompat::ternary_logic_op(A, B, C, 0x5D); break;
  case 94: R = syclcompat::ternary_logic_op(A, B, C, 0x5E); break;
  case 95: R = syclcompat::ternary_logic_op(A, B, C, 0x5F); break;
  case 96: R = syclcompat::ternary_logic_op(A, B, C, 0x60); break;
  case 97: R = syclcompat::ternary_logic_op(A, B, C, 0x61); break;
  case 98: R = syclcompat::ternary_logic_op(A, B, C, 0x62); break;
  case 99: R = syclcompat::ternary_logic_op(A, B, C, 0x63); break;
  case 100: R = syclcompat::ternary_logic_op(A, B, C, 0x64); break;
  case 101: R = syclcompat::ternary_logic_op(A, B, C, 0x65); break;
  case 102: R = syclcompat::ternary_logic_op(A, B, C, 0x66); break;
  case 103: R = syclcompat::ternary_logic_op(A, B, C, 0x67); break;
  case 104: R = syclcompat::ternary_logic_op(A, B, C, 0x68); break;
  case 105: R = syclcompat::ternary_logic_op(A, B, C, 0x69); break;
  case 106: R = syclcompat::ternary_logic_op(A, B, C, 0x6A); break;
  case 107: R = syclcompat::ternary_logic_op(A, B, C, 0x6B); break;
  case 108: R = syclcompat::ternary_logic_op(A, B, C, 0x6C); break;
  case 109: R = syclcompat::ternary_logic_op(A, B, C, 0x6D); break;
  case 110: R = syclcompat::ternary_logic_op(A, B, C, 0x6E); break;
  case 111: R = syclcompat::ternary_logic_op(A, B, C, 0x6F); break;
  case 112: R = syclcompat::ternary_logic_op(A, B, C, 0x70); break;
  case 113: R = syclcompat::ternary_logic_op(A, B, C, 0x71); break;
  case 114: R = syclcompat::ternary_logic_op(A, B, C, 0x72); break;
  case 115: R = syclcompat::ternary_logic_op(A, B, C, 0x73); break;
  case 116: R = syclcompat::ternary_logic_op(A, B, C, 0x74); break;
  case 117: R = syclcompat::ternary_logic_op(A, B, C, 0x75); break;
  case 118: R = syclcompat::ternary_logic_op(A, B, C, 0x76); break;
  case 119: R = syclcompat::ternary_logic_op(A, B, C, 0x77); break;
  case 120: R = syclcompat::ternary_logic_op(A, B, C, 0x78); break;
  case 121: R = syclcompat::ternary_logic_op(A, B, C, 0x79); break;
  case 122: R = syclcompat::ternary_logic_op(A, B, C, 0x7A); break;
  case 123: R = syclcompat::ternary_logic_op(A, B, C, 0x7B); break;
  case 124: R = syclcompat::ternary_logic_op(A, B, C, 0x7C); break;
  case 125: R = syclcompat::ternary_logic_op(A, B, C, 0x7D); break;
  case 126: R = syclcompat::ternary_logic_op(A, B, C, 0x7E); break;
  case 127: R = syclcompat::ternary_logic_op(A, B, C, 0x7F); break;
  case 128: R = syclcompat::ternary_logic_op(A, B, C, 0x80); break;
  case 129: R = syclcompat::ternary_logic_op(A, B, C, 0x81); break;
  case 130: R = syclcompat::ternary_logic_op(A, B, C, 0x82); break;
  case 131: R = syclcompat::ternary_logic_op(A, B, C, 0x83); break;
  case 132: R = syclcompat::ternary_logic_op(A, B, C, 0x84); break;
  case 133: R = syclcompat::ternary_logic_op(A, B, C, 0x85); break;
  case 134: R = syclcompat::ternary_logic_op(A, B, C, 0x86); break;
  case 135: R = syclcompat::ternary_logic_op(A, B, C, 0x87); break;
  case 136: R = syclcompat::ternary_logic_op(A, B, C, 0x88); break;
  case 137: R = syclcompat::ternary_logic_op(A, B, C, 0x89); break;
  case 138: R = syclcompat::ternary_logic_op(A, B, C, 0x8A); break;
  case 139: R = syclcompat::ternary_logic_op(A, B, C, 0x8B); break;
  case 140: R = syclcompat::ternary_logic_op(A, B, C, 0x8C); break;
  case 141: R = syclcompat::ternary_logic_op(A, B, C, 0x8D); break;
  case 142: R = syclcompat::ternary_logic_op(A, B, C, 0x8E); break;
  case 143: R = syclcompat::ternary_logic_op(A, B, C, 0x8F); break;
  case 144: R = syclcompat::ternary_logic_op(A, B, C, 0x90); break;
  case 145: R = syclcompat::ternary_logic_op(A, B, C, 0x91); break;
  case 146: R = syclcompat::ternary_logic_op(A, B, C, 0x92); break;
  case 147: R = syclcompat::ternary_logic_op(A, B, C, 0x93); break;
  case 148: R = syclcompat::ternary_logic_op(A, B, C, 0x94); break;
  case 149: R = syclcompat::ternary_logic_op(A, B, C, 0x95); break;
  case 150: R = syclcompat::ternary_logic_op(A, B, C, 0x96); break;
  case 151: R = syclcompat::ternary_logic_op(A, B, C, 0x97); break;
  case 152: R = syclcompat::ternary_logic_op(A, B, C, 0x98); break;
  case 153: R = syclcompat::ternary_logic_op(A, B, C, 0x99); break;
  case 154: R = syclcompat::ternary_logic_op(A, B, C, 0x9A); break;
  case 155: R = syclcompat::ternary_logic_op(A, B, C, 0x9B); break;
  case 156: R = syclcompat::ternary_logic_op(A, B, C, 0x9C); break;
  case 157: R = syclcompat::ternary_logic_op(A, B, C, 0x9D); break;
  case 158: R = syclcompat::ternary_logic_op(A, B, C, 0x9E); break;
  case 159: R = syclcompat::ternary_logic_op(A, B, C, 0x9F); break;
  case 160: R = syclcompat::ternary_logic_op(A, B, C, 0xA0); break;
  case 161: R = syclcompat::ternary_logic_op(A, B, C, 0xA1); break;
  case 162: R = syclcompat::ternary_logic_op(A, B, C, 0xA2); break;
  case 163: R = syclcompat::ternary_logic_op(A, B, C, 0xA3); break;
  case 164: R = syclcompat::ternary_logic_op(A, B, C, 0xA4); break;
  case 165: R = syclcompat::ternary_logic_op(A, B, C, 0xA5); break;
  case 166: R = syclcompat::ternary_logic_op(A, B, C, 0xA6); break;
  case 167: R = syclcompat::ternary_logic_op(A, B, C, 0xA7); break;
  case 168: R = syclcompat::ternary_logic_op(A, B, C, 0xA8); break;
  case 169: R = syclcompat::ternary_logic_op(A, B, C, 0xA9); break;
  case 170: R = syclcompat::ternary_logic_op(A, B, C, 0xAA); break;
  case 171: R = syclcompat::ternary_logic_op(A, B, C, 0xAB); break;
  case 172: R = syclcompat::ternary_logic_op(A, B, C, 0xAC); break;
  case 173: R = syclcompat::ternary_logic_op(A, B, C, 0xAD); break;
  case 174: R = syclcompat::ternary_logic_op(A, B, C, 0xAE); break;
  case 175: R = syclcompat::ternary_logic_op(A, B, C, 0xAF); break;
  case 176: R = syclcompat::ternary_logic_op(A, B, C, 0xB0); break;
  case 177: R = syclcompat::ternary_logic_op(A, B, C, 0xB1); break;
  case 178: R = syclcompat::ternary_logic_op(A, B, C, 0xB2); break;
  case 179: R = syclcompat::ternary_logic_op(A, B, C, 0xB3); break;
  case 180: R = syclcompat::ternary_logic_op(A, B, C, 0xB4); break;
  case 181: R = syclcompat::ternary_logic_op(A, B, C, 0xB5); break;
  case 182: R = syclcompat::ternary_logic_op(A, B, C, 0xB6); break;
  case 183: R = syclcompat::ternary_logic_op(A, B, C, 0xB7); break;
  case 184: R = syclcompat::ternary_logic_op(A, B, C, 0xB8); break;
  case 185: R = syclcompat::ternary_logic_op(A, B, C, 0xB9); break;
  case 186: R = syclcompat::ternary_logic_op(A, B, C, 0xBA); break;
  case 187: R = syclcompat::ternary_logic_op(A, B, C, 0xBB); break;
  case 188: R = syclcompat::ternary_logic_op(A, B, C, 0xBC); break;
  case 189: R = syclcompat::ternary_logic_op(A, B, C, 0xBD); break;
  case 190: R = syclcompat::ternary_logic_op(A, B, C, 0xBE); break;
  case 191: R = syclcompat::ternary_logic_op(A, B, C, 0xBF); break;
  case 192: R = syclcompat::ternary_logic_op(A, B, C, 0xC0); break;
  case 193: R = syclcompat::ternary_logic_op(A, B, C, 0xC1); break;
  case 194: R = syclcompat::ternary_logic_op(A, B, C, 0xC2); break;
  case 195: R = syclcompat::ternary_logic_op(A, B, C, 0xC3); break;
  case 196: R = syclcompat::ternary_logic_op(A, B, C, 0xC4); break;
  case 197: R = syclcompat::ternary_logic_op(A, B, C, 0xC5); break;
  case 198: R = syclcompat::ternary_logic_op(A, B, C, 0xC6); break;
  case 199: R = syclcompat::ternary_logic_op(A, B, C, 0xC7); break;
  case 200: R = syclcompat::ternary_logic_op(A, B, C, 0xC8); break;
  case 201: R = syclcompat::ternary_logic_op(A, B, C, 0xC9); break;
  case 202: R = syclcompat::ternary_logic_op(A, B, C, 0xCA); break;
  case 203: R = syclcompat::ternary_logic_op(A, B, C, 0xCB); break;
  case 204: R = syclcompat::ternary_logic_op(A, B, C, 0xCC); break;
  case 205: R = syclcompat::ternary_logic_op(A, B, C, 0xCD); break;
  case 206: R = syclcompat::ternary_logic_op(A, B, C, 0xCE); break;
  case 207: R = syclcompat::ternary_logic_op(A, B, C, 0xCF); break;
  case 208: R = syclcompat::ternary_logic_op(A, B, C, 0xD0); break;
  case 209: R = syclcompat::ternary_logic_op(A, B, C, 0xD1); break;
  case 210: R = syclcompat::ternary_logic_op(A, B, C, 0xD2); break;
  case 211: R = syclcompat::ternary_logic_op(A, B, C, 0xD3); break;
  case 212: R = syclcompat::ternary_logic_op(A, B, C, 0xD4); break;
  case 213: R = syclcompat::ternary_logic_op(A, B, C, 0xD5); break;
  case 214: R = syclcompat::ternary_logic_op(A, B, C, 0xD6); break;
  case 215: R = syclcompat::ternary_logic_op(A, B, C, 0xD7); break;
  case 216: R = syclcompat::ternary_logic_op(A, B, C, 0xD8); break;
  case 217: R = syclcompat::ternary_logic_op(A, B, C, 0xD9); break;
  case 218: R = syclcompat::ternary_logic_op(A, B, C, 0xDA); break;
  case 219: R = syclcompat::ternary_logic_op(A, B, C, 0xDB); break;
  case 220: R = syclcompat::ternary_logic_op(A, B, C, 0xDC); break;
  case 221: R = syclcompat::ternary_logic_op(A, B, C, 0xDD); break;
  case 222: R = syclcompat::ternary_logic_op(A, B, C, 0xDE); break;
  case 223: R = syclcompat::ternary_logic_op(A, B, C, 0xDF); break;
  case 224: R = syclcompat::ternary_logic_op(A, B, C, 0xE0); break;
  case 225: R = syclcompat::ternary_logic_op(A, B, C, 0xE1); break;
  case 226: R = syclcompat::ternary_logic_op(A, B, C, 0xE2); break;
  case 227: R = syclcompat::ternary_logic_op(A, B, C, 0xE3); break;
  case 228: R = syclcompat::ternary_logic_op(A, B, C, 0xE4); break;
  case 229: R = syclcompat::ternary_logic_op(A, B, C, 0xE5); break;
  case 230: R = syclcompat::ternary_logic_op(A, B, C, 0xE6); break;
  case 231: R = syclcompat::ternary_logic_op(A, B, C, 0xE7); break;
  case 232: R = syclcompat::ternary_logic_op(A, B, C, 0xE8); break;
  case 233: R = syclcompat::ternary_logic_op(A, B, C, 0xE9); break;
  case 234: R = syclcompat::ternary_logic_op(A, B, C, 0xEA); break;
  case 235: R = syclcompat::ternary_logic_op(A, B, C, 0xEB); break;
  case 236: R = syclcompat::ternary_logic_op(A, B, C, 0xEC); break;
  case 237: R = syclcompat::ternary_logic_op(A, B, C, 0xED); break;
  case 238: R = syclcompat::ternary_logic_op(A, B, C, 0xEE); break;
  case 239: R = syclcompat::ternary_logic_op(A, B, C, 0xEF); break;
  case 240: R = syclcompat::ternary_logic_op(A, B, C, 0xF0); break;
  case 241: R = syclcompat::ternary_logic_op(A, B, C, 0xF1); break;
  case 242: R = syclcompat::ternary_logic_op(A, B, C, 0xF2); break;
  case 243: R = syclcompat::ternary_logic_op(A, B, C, 0xF3); break;
  case 244: R = syclcompat::ternary_logic_op(A, B, C, 0xF4); break;
  case 245: R = syclcompat::ternary_logic_op(A, B, C, 0xF5); break;
  case 246: R = syclcompat::ternary_logic_op(A, B, C, 0xF6); break;
  case 247: R = syclcompat::ternary_logic_op(A, B, C, 0xF7); break;
  case 248: R = syclcompat::ternary_logic_op(A, B, C, 0xF8); break;
  case 249: R = syclcompat::ternary_logic_op(A, B, C, 0xF9); break;
  case 250: R = syclcompat::ternary_logic_op(A, B, C, 0xFA); break;
  case 251: R = syclcompat::ternary_logic_op(A, B, C, 0xFB); break;
  case 252: R = syclcompat::ternary_logic_op(A, B, C, 0xFC); break;
  case 253: R = syclcompat::ternary_logic_op(A, B, C, 0xFD); break;
  case 254: R = syclcompat::ternary_logic_op(A, B, C, 0xFE); break;
  case 255: R = syclcompat::ternary_logic_op(A, B, C, 0xFF); break;
  }
}

// clang-format on

void ternary_logic_op(int *ec) {
  uint32_t X, Y, A = 1, B = 2, C = 3, D;
  for (D = 0; D < 256; ++D) {
    reference_of_ternary_logic_op(X, A, B, C, D);
    asm_ternary_logic_op(Y, A, B, C, D);
    if (X != Y) {
      *ec = D;
      return;
    }
  }
  *ec = 0;
}

int main() {
  syclcompat::device_ext &dev_ct1 = syclcompat::get_current_device();
  sycl::queue &q_ct1 = *dev_ct1.default_queue();
  int ret = 0;
  int *d_ec = nullptr;
  d_ec = sycl::malloc_device<int>(1, q_ct1);

  auto wait_and_check = [&](const char *case_name) {
    syclcompat::get_current_device().queues_wait_and_throw();
    int ec = 0;
    syclcompat::get_default_queue().memcpy(&ec, d_ec, sizeof(int)).wait();
    if (ec != 0)
      printf("Test %s failed: return code = %d\n", case_name, ec);
    ret = ret || ec;
  };

  q_ct1.parallel_for(
      sycl::nd_range<3>(sycl::range<3>(1, 1, 1), sycl::range<3>(1, 1, 1)),
      [=](sycl::nd_item<3> item_ct1) { ternary_logic_op(d_ec); });
  wait_and_check("ternary_logic_op");

  syclcompat::wait_and_free(d_ec, q_ct1);

  return ret;
}
