1436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* -*- mode: C; c-basic-offset: 3; -*- */
2436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
3436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include <stdio.h>     // fprintf
4436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include <stdlib.h>    // exit
5436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include <assert.h>    // assert
6436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#if defined(__APPLE__)
7436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include <machine/endian.h>
8436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define __BYTE_ORDER    BYTE_ORDER
9436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define __LITTLE_ENDIAN LITTLE_ENDIAN
10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#else
11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include <endian.h>
12436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#endif
13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include <inttypes.h>
14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "vtest.h"
15436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
16436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
17436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* Something bad happened. Cannot continue. */
18436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid __attribute__((noreturn))
19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovpanic(const char *string)
20436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
21436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   fprintf(stderr, "*** OOPS: %s\n", string);
22436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   exit(1);
23436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
24436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
25436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
26436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* Issue a complaint because the V-bits of the result of an operation
27436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   differ from what was expected. */
28436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid
29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovcomplain(const irop_t *op, const test_data_t *data, vbits_t expected)
30436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
31436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   fprintf(stderr, "*** Incorrect result for operator %s\n", op->name);
32436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   int num_operands = get_num_operands(op->op);
34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
35436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   for (unsigned i = 0; i < num_operands; ++i) {
36436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      fprintf(stderr, "    opnd %u:  ", i);
37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      print_opnd(stderr, &data->opnds[i]);
38436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      fprintf(stderr, "\n");
39436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
40436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   fprintf(stderr, "    result:  ");
41436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   print_opnd(stderr, &data->result);
42436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   fprintf(stderr, "\n");
43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   fprintf(stderr, "    expect:  vbits = ");
44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   print_vbits(stderr, expected);
45436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   fprintf(stderr, "\n");
46436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
48436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
49436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstatic void
50436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovprint_value(FILE *fp, value_t val, unsigned num_bits)
51436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
52436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   switch (num_bits) {
53436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case 1:  fprintf(fp, "%02x",   val.u8);  break;
54436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case 8:  fprintf(fp, "%02x",   val.u8);  break;
55436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case 16: fprintf(fp, "%04x",   val.u16); break;
56436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case 32: fprintf(fp, "%08x",   val.u32); break;
57436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case 64: fprintf(fp, "%016"PRIx64, val.u64); break;
58436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case 128:
59436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      if (__BYTE_ORDER == __LITTLE_ENDIAN) {
60436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u128[1]);
61436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u128[0]);
62436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      } else {
63436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u128[0]);
64436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u128[1]);
65436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      }
66436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      break;
67436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case 256:
68436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      if (__BYTE_ORDER == __LITTLE_ENDIAN) {
69436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u256[3]);
70436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u256[2]);
71436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u256[1]);
72436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u256[0]);
73436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      } else {
74436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u256[0]);
75436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u256[1]);
76436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u256[2]);
77436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         fprintf(fp, "%016"PRIx64, val.u256[3]);
78436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      }
79436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      break;
80436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov  default:
81436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      panic(__func__);
82436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
83436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
84436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
85436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
86436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid
87436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovprint_opnd(FILE *fp, const opnd_t *opnd)
88436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
89436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   fprintf(fp, "vbits = ");
90436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   print_vbits(fp, opnd->vbits);
91436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   /* Write the value only if it is defined. Otherwise, there will be error
92436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      messages about it being undefined */
93436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   if (equal_vbits(opnd->vbits, defined_vbits(opnd->vbits.num_bits))) {
94436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      fprintf(fp, "   value = ");
95436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      print_value(fp, opnd->value, opnd->vbits.num_bits);
96436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
97436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
98436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
99436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
100436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstatic int
101436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovis_floating_point_type(IRType type)
102436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
103436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   switch (type) {
104436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case Ity_F32:
105436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case Ity_F64:
106436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case Ity_F128:
107436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case Ity_D32:
108436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case Ity_D64:
109436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   case Ity_D128:
110436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      return 1;
111436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
112436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   default:
113436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      return 0;
114436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
115436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
116436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
117436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
118436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovint
119436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovis_floating_point_op_with_rounding_mode(IROp op)
120436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
121436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   IRType t_dst, t_arg1, t_arg2, t_arg3, t_arg4;
122436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
123436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   typeof_primop(op, &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4);
124436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
125436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   // A unary operator cannot have a rounding mode
126436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   if (t_arg2 == Ity_INVALID) return 0;
127436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
128436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   if (is_floating_point_type(t_dst)  ||
129436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov       is_floating_point_type(t_arg1) ||
130436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov       is_floating_point_type(t_arg2) ||
131436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov       is_floating_point_type(t_arg3) ||
132436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov       is_floating_point_type(t_arg4)) {
133436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      // Rounding mode, if present, is the 1st operand
134436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      return t_arg1 == Ity_I32;
135436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
136436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   return 0;
137436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
138436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
139436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
140436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* Return the number of operands for which input values can
141436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   be freely chosen. For floating point ops, the rounding mode
142436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   is not counted here, as it is restricted. */
143436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovint
144436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovget_num_operands(IROp op)
145436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
146436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   IRType unused, t1, t2, t3, t4;
147436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
148436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   typeof_primop(op, &unused, &t1, &t2, &t3, &t4);
149436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
150436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   int num_operands = 4;
151436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   if (t4 == Ity_INVALID) num_operands = 3;
152436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   if (t3 == Ity_INVALID) num_operands = 2;
153436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   if (t2 == Ity_INVALID) num_operands = 1;
154436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
155436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   if (is_floating_point_op_with_rounding_mode(op))
156436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      -- num_operands;
157436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
158436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   return num_operands;
159436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
160436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
161436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
162436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* ---------------------------------------------------------------- */
163436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
164436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* The functions below have been imported from VEX/pric/ir_defs.c.
165436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   This is more convenient because
166436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   (1) Don't have to figure out the Makefile machinery to pick up the
167436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov       correct VEX library (platform specific)
168436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   (2) Would have to export typeofIRType in VEX
169436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   (3) There is no worry that these functions get out of synch because
170436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov       the test harness will iterate over all IROps in libvex_ir.h.
171436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov       So if a new one was added there, we would assert here and elsewhere.
172436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov*/
173436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
174436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// Taken from VEX/priv/ir_defs.c: function sizeofIRType
175436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovunsigned
176436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovsizeof_irtype(IRType ty)
177436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
178436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   switch (ty) {
179436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_I8:   return 1;
180436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_I16:  return 2;
181436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_I32:  return 4;
182436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_I64:  return 8;
183436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_I128: return 16;
184436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_F32:  return 4;
185436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_F64:  return 8;
186436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_F128: return 16;
187436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_D32:  return 4;
188436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_D64:  return 8;
189436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_D128: return 16;
190436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_V128: return 16;
191436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Ity_V256: return 32;
192436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      default:
193436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         panic(__func__);
194436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
195436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
196436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
197436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
198436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// Taken from VEX/priv/ir_defs.c: function typeOfPrimop
199436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// Modified minimally to break dependencies on VEX infrastructure.
200436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid
201436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypeof_primop(IROp op, IRType *t_dst, IRType *t_arg1, IRType *t_arg2,
202436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov              IRType *t_arg3, IRType *t_arg4)
203436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
204436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  define UNARY(_ta1,_td)                                      \
205436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      *t_dst = (_td); *t_arg1 = (_ta1); break
206436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  define BINARY(_ta1,_ta2,_td)                                \
207436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov     *t_dst = (_td); *t_arg1 = (_ta1); *t_arg2 = (_ta2); break
208436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  define TERNARY(_ta1,_ta2,_ta3,_td)                          \
209436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov     *t_dst = (_td); *t_arg1 = (_ta1);                         \
210436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov     *t_arg2 = (_ta2); *t_arg3 = (_ta3); break
211436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  define QUATERNARY(_ta1,_ta2,_ta3,_ta4,_td)                  \
212436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov     *t_dst = (_td); *t_arg1 = (_ta1);                         \
213436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov     *t_arg2 = (_ta2); *t_arg3 = (_ta3);                       \
214436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov     *t_arg4 = (_ta4); break
215436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  define COMPARISON(_ta)                                      \
216436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov     *t_dst = Ity_I1; *t_arg1 = *t_arg2 = (_ta); break;
217436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  define UNARY_COMPARISON(_ta)                                \
218436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov     *t_dst = Ity_I1; *t_arg1 = (_ta); break;
219436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
220436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   /* Rounding mode values are always Ity_I32, encoded as per
221436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      IRRoundingMode */
222436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   const IRType ity_RMode = Ity_I32;
223436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
224436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   *t_dst  = Ity_INVALID;
225436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   *t_arg1 = Ity_INVALID;
226436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   *t_arg2 = Ity_INVALID;
227436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   *t_arg3 = Ity_INVALID;
228436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   *t_arg4 = Ity_INVALID;
229436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   switch (op) {
230436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add8: case Iop_Sub8: case Iop_Mul8:
231436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Or8:  case Iop_And8: case Iop_Xor8:
232436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I8,Ity_I8, Ity_I8);
233436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
234436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add16: case Iop_Sub16: case Iop_Mul16:
235436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Or16:  case Iop_And16: case Iop_Xor16:
236436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I16,Ity_I16, Ity_I16);
237436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
238436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpORD32U:
239436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpORD32S:
240436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add32: case Iop_Sub32: case Iop_Mul32:
241436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Or32:  case Iop_And32: case Iop_Xor32:
242436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max32U:
243436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd32S: case Iop_QSub32S:
244436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add16x2: case Iop_Sub16x2:
245436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd16Sx2: case Iop_QAdd16Ux2:
246436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub16Sx2: case Iop_QSub16Ux2:
247436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_HAdd16Ux2: case Iop_HAdd16Sx2:
248436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_HSub16Ux2: case Iop_HSub16Sx2:
249436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add8x4: case Iop_Sub8x4:
250436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd8Sx4: case Iop_QAdd8Ux4:
251436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub8Sx4: case Iop_QSub8Ux4:
252436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_HAdd8Ux4: case Iop_HAdd8Sx4:
253436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_HSub8Ux4: case Iop_HSub8Sx4:
254436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sad8Ux4:
255436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I32,Ity_I32, Ity_I32);
256436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
257436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add64: case Iop_Sub64: case Iop_Mul64:
258436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Or64:  case Iop_And64: case Iop_Xor64:
259436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpORD64U:
260436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpORD64S:
261436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Avg8Ux8: case Iop_Avg16Ux4:
262436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add8x8: case Iop_Add16x4: case Iop_Add32x2:
263436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add32Fx2: case Iop_Sub32Fx2:
264436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ8x8: case Iop_CmpEQ16x4: case Iop_CmpEQ32x2:
265436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpGT8Sx8: case Iop_CmpGT16Sx4: case Iop_CmpGT32Sx2:
266436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpGT8Ux8: case Iop_CmpGT16Ux4: case Iop_CmpGT32Ux2:
267436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpGT32Fx2: case Iop_CmpEQ32Fx2: case Iop_CmpGE32Fx2:
268436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveHI8x8: case Iop_InterleaveLO8x8:
269436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveHI16x4: case Iop_InterleaveLO16x4:
270436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveHI32x2: case Iop_InterleaveLO32x2:
271436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CatOddLanes8x8: case Iop_CatEvenLanes8x8:
272436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CatOddLanes16x4: case Iop_CatEvenLanes16x4:
273436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveOddLanes8x8: case Iop_InterleaveEvenLanes8x8:
274436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveOddLanes16x4: case Iop_InterleaveEvenLanes16x4:
275436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Perm8x8:
276436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max8Ux8: case Iop_Max16Ux4: case Iop_Max32Ux2:
277436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max8Sx8: case Iop_Max16Sx4: case Iop_Max32Sx2:
278436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max32Fx2: case Iop_Min32Fx2:
279436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwMax32Fx2: case Iop_PwMin32Fx2:
280436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Min8Ux8: case Iop_Min16Ux4: case Iop_Min32Ux2:
281436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Min8Sx8: case Iop_Min16Sx4: case Iop_Min32Sx2:
282436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwMax8Ux8: case Iop_PwMax16Ux4: case Iop_PwMax32Ux2:
283436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwMax8Sx8: case Iop_PwMax16Sx4: case Iop_PwMax32Sx2:
284436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwMin8Ux8: case Iop_PwMin16Ux4: case Iop_PwMin32Ux2:
285436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwMin8Sx8: case Iop_PwMin16Sx4: case Iop_PwMin32Sx2:
286436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mul8x8: case Iop_Mul16x4: case Iop_Mul32x2:
287436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mul32Fx2:
288436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PolynomialMul8x8:
289436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MulHi16Sx4: case Iop_MulHi16Ux4:
290436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QDMulHi16Sx4: case Iop_QDMulHi32Sx2:
291436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QRDMulHi16Sx4: case Iop_QRDMulHi32Sx2:
292436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd8Sx8: case Iop_QAdd16Sx4:
293436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd32Sx2: case Iop_QAdd64Sx1:
294436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd8Ux8: case Iop_QAdd16Ux4:
295436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd32Ux2: case Iop_QAdd64Ux1:
296436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwAdd8x8: case Iop_PwAdd16x4: case Iop_PwAdd32x2:
297436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwAdd32Fx2:
298436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowBin32Sto16Sx4:
299436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowBin16Sto8Sx8: case Iop_QNarrowBin16Sto8Ux8:
300436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NarrowBin16to8x8: case Iop_NarrowBin32to16x4:
301436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sub8x8: case Iop_Sub16x4: case Iop_Sub32x2:
302436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub8Sx8: case Iop_QSub16Sx4:
303436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub32Sx2: case Iop_QSub64Sx1:
304436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub8Ux8: case Iop_QSub16Ux4:
305436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub32Ux2: case Iop_QSub64Ux1:
306436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Shl8x8: case Iop_Shl16x4: case Iop_Shl32x2:
307436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Shr8x8: case Iop_Shr16x4: case Iop_Shr32x2:
308436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sar8x8: case Iop_Sar16x4: case Iop_Sar32x2:
309436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sal8x8: case Iop_Sal16x4: case Iop_Sal32x2: case Iop_Sal64x1:
310436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShl8x8: case Iop_QShl16x4: case Iop_QShl32x2: case Iop_QShl64x1:
311436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSal8x8: case Iop_QSal16x4: case Iop_QSal32x2: case Iop_QSal64x1:
312436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Recps32Fx2:
313436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Rsqrts32Fx2:
314436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_I64, Ity_I64);
315436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
316436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShlN32x2: case Iop_ShlN16x4: case Iop_ShlN8x8:
317436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShrN32x2: case Iop_ShrN16x4: case Iop_ShrN8x8:
318436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SarN32x2: case Iop_SarN16x4: case Iop_SarN8x8:
319436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShlN8x8: case Iop_QShlN16x4:
320436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShlN32x2: case Iop_QShlN64x1:
321436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShlN8Sx8: case Iop_QShlN16Sx4:
322436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShlN32Sx2: case Iop_QShlN64Sx1:
323436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSalN8x8: case Iop_QSalN16x4:
324436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSalN32x2: case Iop_QSalN64x1:
325436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_I8, Ity_I64);
326436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
327436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Shl8: case Iop_Shr8: case Iop_Sar8:
328436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I8,Ity_I8, Ity_I8);
329436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Shl16: case Iop_Shr16: case Iop_Sar16:
330436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I16,Ity_I8, Ity_I16);
331436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Shl32: case Iop_Shr32: case Iop_Sar32:
332436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I32,Ity_I8, Ity_I32);
333436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Shl64: case Iop_Shr64: case Iop_Sar64:
334436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_I8, Ity_I64);
335436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
336436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Not8:
337436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I8, Ity_I8);
338436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Not16:
339436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I16, Ity_I16);
340436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Not32:
341436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpNEZ16x2: case Iop_CmpNEZ8x4:
342436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I32, Ity_I32);
343436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
344436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Not64:
345436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpNEZ32x2: case Iop_CmpNEZ16x4: case Iop_CmpNEZ8x8:
346436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Cnt8x8:
347436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Clz8Sx8: case Iop_Clz16Sx4: case Iop_Clz32Sx2:
348436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Cls8Sx8: case Iop_Cls16Sx4: case Iop_Cls32Sx2:
349436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwAddL8Ux8: case Iop_PwAddL16Ux4: case Iop_PwAddL32Ux2:
350436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwAddL8Sx8: case Iop_PwAddL16Sx4: case Iop_PwAddL32Sx2:
351436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Reverse64_8x8: case Iop_Reverse64_16x4: case Iop_Reverse64_32x2:
352436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Reverse32_8x8: case Iop_Reverse32_16x4:
353436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Reverse16_8x8:
354436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_FtoI32Sx2_RZ: case Iop_FtoI32Ux2_RZ:
355436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32StoFx2: case Iop_I32UtoFx2:
356436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Recip32x2: case Iop_Recip32Fx2:
357436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Abs32Fx2:
358436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Rsqrte32Fx2:
359436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Rsqrte32x2:
360436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Neg32Fx2:
361436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Abs8x8: case Iop_Abs16x4: case Iop_Abs32x2:
362436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I64, Ity_I64);
363436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
364436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ8: case Iop_CmpNE8:
365436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CasCmpEQ8: case Iop_CasCmpNE8:
366436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         COMPARISON(Ity_I8);
367436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ16: case Iop_CmpNE16:
368436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CasCmpEQ16: case Iop_CasCmpNE16:
369436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         COMPARISON(Ity_I16);
370436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ32: case Iop_CmpNE32:
371436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CasCmpEQ32: case Iop_CasCmpNE32:
372436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpLT32S: case Iop_CmpLE32S:
373436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpLT32U: case Iop_CmpLE32U:
374436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         COMPARISON(Ity_I32);
375436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ64: case Iop_CmpNE64:
376436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CasCmpEQ64: case Iop_CasCmpNE64:
377436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpLT64S: case Iop_CmpLE64S:
378436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpLT64U: case Iop_CmpLE64U:
379436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         COMPARISON(Ity_I64);
380436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
381436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpNEZ8:  UNARY_COMPARISON(Ity_I8);
382436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpNEZ16: UNARY_COMPARISON(Ity_I16);
383436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpNEZ32: UNARY_COMPARISON(Ity_I32);
384436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpNEZ64: UNARY_COMPARISON(Ity_I64);
385436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
386436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Left8:  UNARY(Ity_I8, Ity_I8);
387436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Left16: UNARY(Ity_I16,Ity_I16);
388436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpwNEZ32: case Iop_Left32: UNARY(Ity_I32,Ity_I32);
389436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpwNEZ64: case Iop_Left64: UNARY(Ity_I64,Ity_I64);
390436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
391436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MullU8: case Iop_MullS8:
392436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I8,Ity_I8, Ity_I16);
393436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MullU16: case Iop_MullS16:
394436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I16,Ity_I16, Ity_I32);
395436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MullU32: case Iop_MullS32:
396436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I32,Ity_I32, Ity_I64);
397436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MullU64: case Iop_MullS64:
398436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_I64, Ity_I128);
399436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
400436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Clz32: case Iop_Ctz32:
401436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I32, Ity_I32);
402436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
403436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Clz64: case Iop_Ctz64:
404436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I64, Ity_I64);
405436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
406436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_DivU32: case Iop_DivS32: case Iop_DivU32E: case Iop_DivS32E:
407436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I32,Ity_I32, Ity_I32);
408436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
409436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_DivU64: case Iop_DivS64: case Iop_DivS64E: case Iop_DivU64E:
410436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_I64, Ity_I64);
411436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
412436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_DivModU64to32: case Iop_DivModS64to32:
413436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_I32, Ity_I64);
414436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
415436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_DivModU128to64: case Iop_DivModS128to64:
416436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I128,Ity_I64, Ity_I128);
417436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
418436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_DivModS64to64:
419436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_I64, Ity_I128);
420436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
421436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_16HIto8: case Iop_16to8:
422436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I16, Ity_I8);
423436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_8HLto16:
424436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I8,Ity_I8, Ity_I16);
425436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
426436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_32HIto16: case Iop_32to16:
427436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I32, Ity_I16);
428436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_16HLto32:
429436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I16,Ity_I16, Ity_I32);
430436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
431436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_64HIto32: case Iop_64to32:
432436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I64, Ity_I32);
433436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_32HLto64:
434436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I32,Ity_I32, Ity_I64);
435436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
436436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_128HIto64: case Iop_128to64:
437436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I128, Ity_I64);
438436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_64HLto128:
439436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_I64, Ity_I128);
440436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
441436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Not1:   UNARY(Ity_I1, Ity_I1);
442436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_1Uto8:  UNARY(Ity_I1, Ity_I8);
443436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_1Sto8:  UNARY(Ity_I1, Ity_I8);
444436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_1Sto16: UNARY(Ity_I1, Ity_I16);
445436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_1Uto32: case Iop_1Sto32: UNARY(Ity_I1, Ity_I32);
446436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_1Sto64: case Iop_1Uto64: UNARY(Ity_I1, Ity_I64);
447436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_32to1:  UNARY(Ity_I32, Ity_I1);
448436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_64to1:  UNARY(Ity_I64, Ity_I1);
449436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
450436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_8Uto32: case Iop_8Sto32:
451436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I8, Ity_I32);
452436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
453436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_8Uto16: case Iop_8Sto16:
454436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I8, Ity_I16);
455436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
456436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_16Uto32: case Iop_16Sto32:
457436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I16, Ity_I32);
458436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
459436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_32Sto64: case Iop_32Uto64:
460436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I32, Ity_I64);
461436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
462436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_8Uto64: case Iop_8Sto64:
463436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I8, Ity_I64);
464436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
465436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_16Uto64: case Iop_16Sto64:
466436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I16, Ity_I64);
467436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_64to16:
468436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I64, Ity_I16);
469436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
470436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_32to8: UNARY(Ity_I32, Ity_I8);
471436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_64to8: UNARY(Ity_I64, Ity_I8);
472436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
473436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AddF64:    case Iop_SubF64:
474436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MulF64:    case Iop_DivF64:
475436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AddF64r32: case Iop_SubF64r32:
476436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MulF64r32: case Iop_DivF64r32:
477436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_F64);
478436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
479436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AddF32: case Iop_SubF32:
480436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MulF32: case Iop_DivF32:
481436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_F32,Ity_F32, Ity_F32);
482436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
483436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NegF64: case Iop_AbsF64:
484436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_F64, Ity_F64);
485436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
486436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NegF32: case Iop_AbsF32:
487436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_F32, Ity_F32);
488436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
489436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SqrtF64:
490436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode,Ity_F64, Ity_F64);
491436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
492436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SqrtF32:
493436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundF32toInt:
494436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode,Ity_F32, Ity_F32);
495436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
496436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpF32:
497436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_F32,Ity_F32, Ity_I32);
498436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
499436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpF64:
500436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_F64,Ity_F64, Ity_I32);
501436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
502436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpF128:
503436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_F128,Ity_F128, Ity_I32);
504436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
505436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64toI16S: BINARY(ity_RMode,Ity_F64, Ity_I16);
506436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64toI32S: BINARY(ity_RMode,Ity_F64, Ity_I32);
507436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64toI64S: case Iop_F64toI64U:
508436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode,Ity_F64, Ity_I64);
509436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
510436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64toI32U: BINARY(ity_RMode,Ity_F64, Ity_I32);
511436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
512436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32StoF64: UNARY(Ity_I32, Ity_F64);
513436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64StoF64: BINARY(ity_RMode,Ity_I64, Ity_F64);
514436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64UtoF64: BINARY(ity_RMode,Ity_I64, Ity_F64);
515436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64UtoF32: BINARY(ity_RMode,Ity_I64, Ity_F32);
516436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
517436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32UtoF64: UNARY(Ity_I32, Ity_F64);
518436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
519436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toI32S: BINARY(ity_RMode,Ity_F32, Ity_I32);
520436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toI64S: BINARY(ity_RMode,Ity_F32, Ity_I64);
521436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toI32U: BINARY(ity_RMode,Ity_F32, Ity_I32);
522436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toI64U: BINARY(ity_RMode,Ity_F32, Ity_I64);
523436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
524436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32UtoF32: BINARY(ity_RMode,Ity_I32, Ity_F32);
525436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32StoF32: BINARY(ity_RMode,Ity_I32, Ity_F32);
526436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64StoF32: BINARY(ity_RMode,Ity_I64, Ity_F32);
527436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
528436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toF64: UNARY(Ity_F32, Ity_F64);
529436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64toF32: BINARY(ity_RMode,Ity_F64, Ity_F32);
530436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
531436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ReinterpI64asF64: UNARY(Ity_I64, Ity_F64);
532436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ReinterpF64asI64: UNARY(Ity_F64, Ity_I64);
533436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ReinterpI32asF32: UNARY(Ity_I32, Ity_F32);
534436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ReinterpF32asI32: UNARY(Ity_F32, Ity_I32);
535436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
536436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AtanF64: case Iop_Yl2xF64:  case Iop_Yl2xp1F64:
537436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ScaleF64: case Iop_PRemF64: case Iop_PRem1F64:
538436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_F64);
539436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
540436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PRemC3210F64: case Iop_PRem1C3210F64:
541436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_I32);
542436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
543436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SinF64: case Iop_CosF64: case Iop_TanF64:
544436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_2xm1F64:
545436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundF64toInt: BINARY(ity_RMode,Ity_F64, Ity_F64);
546436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
547436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MAddF64: case Iop_MSubF64:
548436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MAddF64r32: case Iop_MSubF64r32:
549436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         QUATERNARY(ity_RMode,Ity_F64,Ity_F64,Ity_F64, Ity_F64);
550436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
551436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Est5FRSqrt:
552436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundF64toF64_NEAREST: case Iop_RoundF64toF64_NegINF:
553436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundF64toF64_PosINF: case Iop_RoundF64toF64_ZERO:
554436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_F64, Ity_F64);
555436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundF64toF32:
556436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode,Ity_F64, Ity_F64);
557436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_TruncF64asF32:
558436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_F64, Ity_F32);
559436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
560436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32UtoFx4:
561436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32StoFx4:
562436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QFtoI32Ux4_RZ:
563436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QFtoI32Sx4_RZ:
564436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_FtoI32Ux4_RZ:
565436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_FtoI32Sx4_RZ:
566436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundF32x4_RM:
567436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundF32x4_RP:
568436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundF32x4_RN:
569436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundF32x4_RZ:
570436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Abs32Fx4:
571436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Rsqrte32Fx4:
572436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Rsqrte32x4:
573436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_V128, Ity_V128);
574436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
575436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_64HLtoV128:
576436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_I64, Ity_V128);
577436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
578436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_V128to64: case Iop_V128HIto64:
579436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NarrowUn16to8x8:
580436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NarrowUn32to16x4:
581436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NarrowUn64to32x2:
582436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowUn16Uto8Ux8:
583436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowUn32Uto16Ux4:
584436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowUn64Uto32Ux2:
585436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowUn16Sto8Sx8:
586436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowUn32Sto16Sx4:
587436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowUn64Sto32Sx2:
588436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowUn16Sto8Ux8:
589436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowUn32Sto16Ux4:
590436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowUn64Sto32Ux2:
591436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toF16x4:
592436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_V128, Ity_I64);
593436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
594436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Widen8Uto16x8:
595436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Widen16Uto32x4:
596436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Widen32Uto64x2:
597436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Widen8Sto16x8:
598436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Widen16Sto32x4:
599436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Widen32Sto64x2:
600436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F16toF32x4:
601436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I64, Ity_V128);
602436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
603436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_V128to32:    UNARY(Ity_V128, Ity_I32);
604436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_32UtoV128:   UNARY(Ity_I32, Ity_V128);
605436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_64UtoV128:   UNARY(Ity_I64, Ity_V128);
606436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SetV128lo32: BINARY(Ity_V128,Ity_I32, Ity_V128);
607436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SetV128lo64: BINARY(Ity_V128,Ity_I64, Ity_V128);
608436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
609436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Dup8x16: UNARY(Ity_I8, Ity_V128);
610436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Dup16x8: UNARY(Ity_I16, Ity_V128);
611436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Dup32x4: UNARY(Ity_I32, Ity_V128);
612436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Dup8x8:  UNARY(Ity_I8, Ity_I64);
613436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Dup16x4: UNARY(Ity_I16, Ity_I64);
614436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Dup32x2: UNARY(Ity_I32, Ity_I64);
615436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
616436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ32Fx4: case Iop_CmpLT32Fx4:
617436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ64Fx2: case Iop_CmpLT64Fx2:
618436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpLE32Fx4: case Iop_CmpUN32Fx4:
619436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpLE64Fx2: case Iop_CmpUN64Fx2:
620436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpGT32Fx4: case Iop_CmpGE32Fx4:
621436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ32F0x4: case Iop_CmpLT32F0x4:
622436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ64F0x2: case Iop_CmpLT64F0x2:
623436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpLE32F0x4: case Iop_CmpUN32F0x4:
624436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpLE64F0x2: case Iop_CmpUN64F0x2:
625436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add32Fx4: case Iop_Add32F0x4:
626436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add64Fx2: case Iop_Add64F0x2:
627436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Div32Fx4: case Iop_Div32F0x4:
628436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Div64Fx2: case Iop_Div64F0x2:
629436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max32Fx4: case Iop_Max32F0x4:
630436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwMax32Fx4: case Iop_PwMin32Fx4:
631436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max64Fx2: case Iop_Max64F0x2:
632436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Min32Fx4: case Iop_Min32F0x4:
633436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Min64Fx2: case Iop_Min64F0x2:
634436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mul32Fx4: case Iop_Mul32F0x4:
635436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mul64Fx2: case Iop_Mul64F0x2:
636436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sub32Fx4: case Iop_Sub32F0x4:
637436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sub64Fx2: case Iop_Sub64F0x2:
638436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AndV128: case Iop_OrV128: case Iop_XorV128:
639436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add8x16:   case Iop_Add16x8:
640436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add32x4:   case Iop_Add64x2:
641436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd8Ux16: case Iop_QAdd16Ux8:
642436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd32Ux4: //case Iop_QAdd64Ux2:
643436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd8Sx16: case Iop_QAdd16Sx8:
644436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QAdd32Sx4: case Iop_QAdd64Sx2:
645436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwAdd8x16: case Iop_PwAdd16x8: case Iop_PwAdd32x4:
646436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sub8x16:   case Iop_Sub16x8:
647436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sub32x4:   case Iop_Sub64x2:
648436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub8Ux16: case Iop_QSub16Ux8:
649436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub32Ux4: //case Iop_QSub64Ux2:
650436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub8Sx16: case Iop_QSub16Sx8:
651436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSub32Sx4: case Iop_QSub64Sx2:
652436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mul8x16: case Iop_Mul16x8: case Iop_Mul32x4:
653436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PolynomialMul8x16:
654436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MulHi16Ux8: case Iop_MulHi32Ux4:
655436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MulHi16Sx8: case Iop_MulHi32Sx4:
656436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QDMulHi16Sx8: case Iop_QDMulHi32Sx4:
657436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QRDMulHi16Sx8: case Iop_QRDMulHi32Sx4:
658436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MullEven8Ux16: case Iop_MullEven16Ux8:
659436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MullEven8Sx16: case Iop_MullEven16Sx8:
660436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Avg8Ux16: case Iop_Avg16Ux8: case Iop_Avg32Ux4:
661436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Avg8Sx16: case Iop_Avg16Sx8: case Iop_Avg32Sx4:
662436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max8Sx16: case Iop_Max16Sx8: case Iop_Max32Sx4:
663436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max8Ux16: case Iop_Max16Ux8: case Iop_Max32Ux4:
664436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Min8Sx16: case Iop_Min16Sx8: case Iop_Min32Sx4:
665436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Min8Ux16: case Iop_Min16Ux8: case Iop_Min32Ux4:
666436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ8x16:  case Iop_CmpEQ16x8:  case Iop_CmpEQ32x4:
667436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpEQ64x2:
668436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpGT8Sx16: case Iop_CmpGT16Sx8: case Iop_CmpGT32Sx4:
669436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpGT64Sx2:
670436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpGT8Ux16: case Iop_CmpGT16Ux8: case Iop_CmpGT32Ux4:
671436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Shl8x16: case Iop_Shl16x8: case Iop_Shl32x4: case Iop_Shl64x2:
672436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShl8x16: case Iop_QShl16x8:
673436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShl32x4: case Iop_QShl64x2:
674436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSal8x16: case Iop_QSal16x8:
675436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSal32x4: case Iop_QSal64x2:
676436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Shr8x16: case Iop_Shr16x8: case Iop_Shr32x4: case Iop_Shr64x2:
677436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sar8x16: case Iop_Sar16x8: case Iop_Sar32x4: case Iop_Sar64x2:
678436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sal8x16: case Iop_Sal16x8: case Iop_Sal32x4: case Iop_Sal64x2:
679436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Rol8x16: case Iop_Rol16x8: case Iop_Rol32x4:
680436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowBin16Sto8Ux16: case Iop_QNarrowBin32Sto16Ux8:
681436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowBin16Sto8Sx16: case Iop_QNarrowBin32Sto16Sx8:
682436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QNarrowBin16Uto8Ux16: case Iop_QNarrowBin32Uto16Ux8:
683436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NarrowBin16to8x16:   case Iop_NarrowBin32to16x8:
684436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveHI8x16: case Iop_InterleaveHI16x8:
685436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveHI32x4: case Iop_InterleaveHI64x2:
686436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveLO8x16: case Iop_InterleaveLO16x8:
687436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveLO32x4: case Iop_InterleaveLO64x2:
688436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CatOddLanes8x16: case Iop_CatEvenLanes8x16:
689436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CatOddLanes16x8: case Iop_CatEvenLanes16x8:
690436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CatOddLanes32x4: case Iop_CatEvenLanes32x4:
691436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveOddLanes8x16: case Iop_InterleaveEvenLanes8x16:
692436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveOddLanes16x8: case Iop_InterleaveEvenLanes16x8:
693436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InterleaveOddLanes32x4: case Iop_InterleaveEvenLanes32x4:
694436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Perm8x16: case Iop_Perm32x4:
695436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Recps32Fx4:
696436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Rsqrts32Fx4:
697436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_V128,Ity_V128, Ity_V128);
698436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
699436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PolynomialMull8x8:
700436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mull8Ux8: case Iop_Mull8Sx8:
701436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mull16Ux4: case Iop_Mull16Sx4:
702436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mull32Ux2: case Iop_Mull32Sx2:
703436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64, Ity_I64, Ity_V128);
704436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
705436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NotV128:
706436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Recip32Fx4: case Iop_Recip32F0x4:
707436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Recip32x4:
708436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Recip64Fx2: case Iop_Recip64F0x2:
709436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RSqrt32Fx4: case Iop_RSqrt32F0x4:
710436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RSqrt64Fx2: case Iop_RSqrt64F0x2:
711436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sqrt32Fx4:  case Iop_Sqrt32F0x4:
712436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sqrt64Fx2:  case Iop_Sqrt64F0x2:
713436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpNEZ8x16: case Iop_CmpNEZ16x8:
714436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpNEZ32x4: case Iop_CmpNEZ64x2:
715436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Cnt8x16:
716436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Clz8Sx16: case Iop_Clz16Sx8: case Iop_Clz32Sx4:
717436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Cls8Sx16: case Iop_Cls16Sx8: case Iop_Cls32Sx4:
718436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwAddL8Ux16: case Iop_PwAddL16Ux8: case Iop_PwAddL32Ux4:
719436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_PwAddL8Sx16: case Iop_PwAddL16Sx8: case Iop_PwAddL32Sx4:
720436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Reverse64_8x16: case Iop_Reverse64_16x8: case Iop_Reverse64_32x4:
721436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Reverse32_8x16: case Iop_Reverse32_16x8:
722436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Reverse16_8x16:
723436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Neg32Fx4:
724436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Abs8x16: case Iop_Abs16x8: case Iop_Abs32x4:
725436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_V128, Ity_V128);
726436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
727436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShlV128: case Iop_ShrV128:
728436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShlN8x16: case Iop_ShlN16x8:
729436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShlN32x4: case Iop_ShlN64x2:
730436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShrN8x16: case Iop_ShrN16x8:
731436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShrN32x4: case Iop_ShrN64x2:
732436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SarN8x16: case Iop_SarN16x8:
733436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SarN32x4: case Iop_SarN64x2:
734436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShlN8x16: case Iop_QShlN16x8:
735436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShlN32x4: case Iop_QShlN64x2:
736436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShlN8Sx16: case Iop_QShlN16Sx8:
737436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QShlN32Sx4: case Iop_QShlN64Sx2:
738436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSalN8x16: case Iop_QSalN16x8:
739436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QSalN32x4: case Iop_QSalN64x2:
740436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_V128,Ity_I8, Ity_V128);
741436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
742436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32ToFixed32Ux4_RZ:
743436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32ToFixed32Sx4_RZ:
744436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Fixed32UToF32x4_RN:
745436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Fixed32SToF32x4_RN:
746436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_V128, Ity_I8, Ity_V128);
747436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
748436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32ToFixed32Ux2_RZ:
749436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32ToFixed32Sx2_RZ:
750436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Fixed32UToF32x2_RN:
751436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Fixed32SToF32x2_RN:
752436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64, Ity_I8, Ity_I64);
753436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
754436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_GetElem8x16:
755436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_V128, Ity_I8, Ity_I8);
756436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_GetElem16x8:
757436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_V128, Ity_I8, Ity_I16);
758436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_GetElem32x4:
759436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_V128, Ity_I8, Ity_I32);
760436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_GetElem64x2:
761436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_V128, Ity_I8, Ity_I64);
762436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_GetElem8x8:
763436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64, Ity_I8, Ity_I8);
764436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_GetElem16x4:
765436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64, Ity_I8, Ity_I16);
766436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_GetElem32x2:
767436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64, Ity_I8, Ity_I32);
768436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SetElem8x8:
769436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(Ity_I64, Ity_I8, Ity_I8, Ity_I64);
770436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SetElem16x4:
771436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(Ity_I64, Ity_I8, Ity_I16, Ity_I64);
772436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SetElem32x2:
773436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(Ity_I64, Ity_I8, Ity_I32, Ity_I64);
774436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
775436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Extract64:
776436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(Ity_I64, Ity_I64, Ity_I8, Ity_I64);
777436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ExtractV128:
778436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(Ity_V128, Ity_V128, Ity_I8, Ity_V128);
779436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
780436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QDMulLong16Sx4: case Iop_QDMulLong32Sx2:
781436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64, Ity_I64, Ity_V128);
782436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
783436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         /* s390 specific */
784436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MAddF32:
785436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MSubF32:
786436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         QUATERNARY(ity_RMode,Ity_F32,Ity_F32,Ity_F32, Ity_F32);
787436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
788436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64HLtoF128:
789436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        BINARY(Ity_F64,Ity_F64, Ity_F128);
790436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
791436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128HItoF64:
792436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128LOtoF64:
793436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        UNARY(Ity_F128, Ity_F64);
794436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
795436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AddF128:
796436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SubF128:
797436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MulF128:
798436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_DivF128:
799436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_F128,Ity_F128, Ity_F128);
800436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
801436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NegF128:
802436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AbsF128:
803436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_F128, Ity_F128);
804436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
805436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SqrtF128:
806436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode,Ity_F128, Ity_F128);
807436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
808436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32StoF128: UNARY(Ity_I32, Ity_F128);
809436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64StoF128: UNARY(Ity_I64, Ity_F128);
810436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
811436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32UtoF128: UNARY(Ity_I32, Ity_F128);
812436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64UtoF128: UNARY(Ity_I64, Ity_F128);
813436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
814436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128toI32S: BINARY(ity_RMode,Ity_F128, Ity_I32);
815436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128toI64S: BINARY(ity_RMode,Ity_F128, Ity_I64);
816436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
817436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128toI32U: BINARY(ity_RMode,Ity_F128, Ity_I32);
818436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128toI64U: BINARY(ity_RMode,Ity_F128, Ity_I64);
819436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
820436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toF128: UNARY(Ity_F32, Ity_F128);
821436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64toF128: UNARY(Ity_F64, Ity_F128);
822436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
823436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128toF32: BINARY(ity_RMode,Ity_F128, Ity_F32);
824436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128toF64: BINARY(ity_RMode,Ity_F128, Ity_F64);
825436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
826436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D32toD64:
827436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_D32, Ity_D64);
828436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
829436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ExtractExpD64:
830436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_D64, Ity_I64);
831436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
832436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ExtractSigD64:
833436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_D64, Ity_I64);
834436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
835436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InsertExpD64:
836436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_D64, Ity_D64);
837436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
838436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ExtractExpD128:
839436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_D128, Ity_I64);
840436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
841436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ExtractSigD128:
842436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_D128, Ity_I64);
843436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
844436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_InsertExpD128:
845436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_I64,Ity_D128, Ity_D128);
846436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
847436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64toD128:
848436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_D64, Ity_D128);
849436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
850436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ReinterpD64asI64:
851436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	UNARY(Ity_D64, Ity_I64);
852436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
853436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ReinterpI64asD64:
854436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I64, Ity_D64);
855436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
856436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundD64toInt:
857436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode,Ity_D64, Ity_D64);
858436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
859436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RoundD128toInt:
860436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode,Ity_D128, Ity_D128);
861436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
862436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32StoD128:
863436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32UtoD128:
864436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I32, Ity_D128);
865436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
866436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64StoD128:
867436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I64, Ity_D128);
868436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
869436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64UtoD128:
870436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I64, Ity_D128);
871436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
872436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toD32:
873436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_F32, Ity_D32);
874436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
875436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toD64:
876436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_F32, Ity_D64);
877436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
878436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F32toD128:
879436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_F32, Ity_D128);
880436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
881436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64toD32:
882436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_F64, Ity_D32);
883436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
884436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64toD64:
885436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_F64, Ity_D64);
886436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
887436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F64toD128:
888436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_F64, Ity_D128);
889436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
890436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128toD32:
891436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_F128, Ity_D32);
892436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
893436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128toD64:
894436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_F128, Ity_D64);
895436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
896436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_F128toD128:
897436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_F128, Ity_D128);
898436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
899436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D32toF32:
900436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D32, Ity_F32);
901436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
902436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D32toF64:
903436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D32, Ity_F64);
904436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
905436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D32toF128:
906436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D32, Ity_F128);
907436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
908436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64toF32:
909436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D64, Ity_F32);
910436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
911436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64toF64:
912436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D64, Ity_F64);
913436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
914436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64toF128:
915436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D64, Ity_F128);
916436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
917436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128toF32:
918436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D128, Ity_F32);
919436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
920436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128toF64:
921436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D128, Ity_F64);
922436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
923436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128toF128:
924436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D128, Ity_F128);
925436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
926436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_DPBtoBCD:
927436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_BCDtoDPB:
928436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I64, Ity_I64);
929436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
930436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128HItoD64:
931436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128LOtoD64:
932436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_D128, Ity_D64);
933436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
934436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128toI32S:
935436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128toI32U:
936436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D128, Ity_I32);
937436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
938436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128toI64S:
939436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D128, Ity_I64);
940436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
941436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128toI64U:
942436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D128, Ity_I64);
943436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
944436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64HLtoD128:
945436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_D64, Ity_D64, Ity_D128);
946436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
947436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShlD64:
948436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShrD64:
949436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_D64, Ity_I8, Ity_D64 );
950436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
951436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64toD32:
952436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D64, Ity_D32);
953436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
954436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64toI32S:
955436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64toI32U:
956436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D64, Ity_I32);
957436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
958436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64toI64S:
959436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D64toI64U:
960436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_D64, Ity_I64);
961436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
962436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32StoD64:
963436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I32UtoD64:
964436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_I32, Ity_D64);
965436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
966436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64StoD64:
967436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_I64UtoD64:
968436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(ity_RMode, Ity_I64, Ity_D64);
969436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
970436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpD64:
971436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpExpD64:
972436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_D64,Ity_D64, Ity_I32);
973436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
974436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpD128:
975436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpExpD128:
976436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_D128,Ity_D128, Ity_I32);
977436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
978436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QuantizeD64:
979436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_D64,Ity_D64, Ity_D64);
980436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
981436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SignificanceRoundD64:
982436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_I8,Ity_D64, Ity_D64);
983436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
984436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_QuantizeD128:
985436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_D128,Ity_D128, Ity_D128);
986436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
987436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SignificanceRoundD128:
988436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_I8,Ity_D128, Ity_D128);
989436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
990436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShlD128:
991436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_ShrD128:
992436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_D128, Ity_I8, Ity_D128 );
993436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
994436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AddD64:
995436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SubD64:
996436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MulD64:
997436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_DivD64:
998436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY( ity_RMode, Ity_D64, Ity_D64, Ity_D64 );
999436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
1000436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_D128toD64:
1001436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY( ity_RMode, Ity_D128, Ity_D64 );
1002436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
1003436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AddD128:
1004436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_SubD128:
1005436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_MulD128:
1006436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_DivD128:
1007436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         TERNARY(ity_RMode,Ity_D128,Ity_D128, Ity_D128);
1008436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
1009436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_V256to64_0: case Iop_V256to64_1:
1010436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_V256to64_2: case Iop_V256to64_3:
1011436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_V256, Ity_I64);
1012436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
1013436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_64x4toV256:
1014436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         QUATERNARY(Ity_I64, Ity_I64, Ity_I64, Ity_I64, Ity_V256);
1015436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
1016436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add64Fx4: case Iop_Sub64Fx4:
1017436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mul64Fx4: case Iop_Div64Fx4:
1018436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Add32Fx8: case Iop_Sub32Fx8:
1019436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Mul32Fx8: case Iop_Div32Fx8:
1020436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_AndV256:  case Iop_OrV256:
1021436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_XorV256:
1022436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max32Fx8: case Iop_Min32Fx8:
1023436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Max64Fx4: case Iop_Min64Fx4:
1024436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_V256,Ity_V256, Ity_V256);
1025436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
1026436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_V256toV128_1: case Iop_V256toV128_0:
1027436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_V256, Ity_V128);
1028436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
1029436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_V128HLtoV256:
1030436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         BINARY(Ity_V128,Ity_V128, Ity_V256);
1031436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
1032436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_NotV256:
1033436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_RSqrt32Fx8:
1034436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sqrt32Fx8:
1035436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Sqrt64Fx4:
1036436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_Recip32Fx8:
1037436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      case Iop_CmpNEZ64x4: case Iop_CmpNEZ32x8:
1038436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         UNARY(Ity_V256, Ity_V256);
1039436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
1040436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      default:
1041436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         panic(__func__);
1042436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
1043436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  undef UNARY
1044436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  undef BINARY
1045436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  undef TERNARY
1046436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  undef COMPARISON
1047436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#  undef UNARY_COMPARISON
1048436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
1049