1ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
2ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj/*---------------------------------------------------------------*/
3752f90673ebbb6b2f55fc5e46606dea371313713sewardj/*--- begin                                         ir_defs.c ---*/
4ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj/*---------------------------------------------------------------*/
5ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
6f8ed9d874a7b8651654591c68c6d431c758d787csewardj/*
7752f90673ebbb6b2f55fc5e46606dea371313713sewardj   This file is part of Valgrind, a dynamic binary instrumentation
8752f90673ebbb6b2f55fc5e46606dea371313713sewardj   framework.
9f8ed9d874a7b8651654591c68c6d431c758d787csewardj
1089ae8477745fd2a15453557d729a50e627325ee2sewardj   Copyright (C) 2004-2013 OpenWorks LLP
11752f90673ebbb6b2f55fc5e46606dea371313713sewardj      info@open-works.net
127bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj
13752f90673ebbb6b2f55fc5e46606dea371313713sewardj   This program is free software; you can redistribute it and/or
14752f90673ebbb6b2f55fc5e46606dea371313713sewardj   modify it under the terms of the GNU General Public License as
15752f90673ebbb6b2f55fc5e46606dea371313713sewardj   published by the Free Software Foundation; either version 2 of the
16752f90673ebbb6b2f55fc5e46606dea371313713sewardj   License, or (at your option) any later version.
177bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj
18752f90673ebbb6b2f55fc5e46606dea371313713sewardj   This program is distributed in the hope that it will be useful, but
19752f90673ebbb6b2f55fc5e46606dea371313713sewardj   WITHOUT ANY WARRANTY; without even the implied warranty of
20752f90673ebbb6b2f55fc5e46606dea371313713sewardj   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21752f90673ebbb6b2f55fc5e46606dea371313713sewardj   General Public License for more details.
22752f90673ebbb6b2f55fc5e46606dea371313713sewardj
23752f90673ebbb6b2f55fc5e46606dea371313713sewardj   You should have received a copy of the GNU General Public License
24752f90673ebbb6b2f55fc5e46606dea371313713sewardj   along with this program; if not, write to the Free Software
25752f90673ebbb6b2f55fc5e46606dea371313713sewardj   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
267bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj   02110-1301, USA.
277bd6ffe203f3aa9e7b25f7eae40a9b9cf48710cfsewardj
28752f90673ebbb6b2f55fc5e46606dea371313713sewardj   The GNU General Public License is contained in the file COPYING.
29f8ed9d874a7b8651654591c68c6d431c758d787csewardj
30f8ed9d874a7b8651654591c68c6d431c758d787csewardj   Neither the names of the U.S. Department of Energy nor the
31f8ed9d874a7b8651654591c68c6d431c758d787csewardj   University of California nor the names of its contributors may be
32f8ed9d874a7b8651654591c68c6d431c758d787csewardj   used to endorse or promote products derived from this software
33f8ed9d874a7b8651654591c68c6d431c758d787csewardj   without prior written permission.
34f8ed9d874a7b8651654591c68c6d431c758d787csewardj*/
35f8ed9d874a7b8651654591c68c6d431c758d787csewardj
36887a11a609f3e61d2ae8fe4e67f176207715da7esewardj#include "libvex_basictypes.h"
37887a11a609f3e61d2ae8fe4e67f176207715da7esewardj#include "libvex_ir.h"
38887a11a609f3e61d2ae8fe4e67f176207715da7esewardj#include "libvex.h"
39ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
40cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj#include "main_util.h"
41c0ee2edb4563c90bc8f1a83a09984a1fda86d1d3sewardj
42ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
43ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj/*---------------------------------------------------------------*/
44ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj/*--- Printing the IR                                         ---*/
45ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj/*---------------------------------------------------------------*/
46ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
4735421a3cfd43bc829d27ee15bd34bbc7cb690805sewardjvoid ppIRType ( IRType ty )
48ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj{
493e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj   switch (ty) {
503e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj      case Ity_INVALID: vex_printf("Ity_INVALID"); break;
519b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_I1:      vex_printf( "I1");   break;
529b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_I8:      vex_printf( "I8");   break;
539b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_I16:     vex_printf( "I16");  break;
549b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_I32:     vex_printf( "I32");  break;
559b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_I64:     vex_printf( "I64");  break;
569b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_I128:    vex_printf( "I128"); break;
573738bfcea70600334c830de5421adc0204890c95sewardj      case Ity_F16:     vex_printf( "F16");  break;
589b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_F32:     vex_printf( "F32");  break;
599b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_F64:     vex_printf( "F64");  break;
602019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ity_F128:    vex_printf( "F128"); break;
61c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Ity_D32:     vex_printf( "D32");  break;
62c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Ity_D64:     vex_printf( "D64");  break;
63c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Ity_D128:    vex_printf( "D128"); break;
64c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Ity_V128:    vex_printf( "V128"); break;
65c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Ity_V256:    vex_printf( "V256"); break;
663e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj      default: vex_printf("ty = 0x%x\n", (Int)ty);
673e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj               vpanic("ppIRType");
683e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj   }
69ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
70ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
710b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRConst ( const IRConst* con )
72ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj{
732019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   union { ULong i64; Double f64; UInt i32; Float f32; } u;
74633274098fafebdc79cf1c8a1ef7f9a9914669f1sewardj   vassert(sizeof(ULong) == sizeof(Double));
752d3f77c12d2911173fd182d0b6e954196dee9135sewardj   switch (con->tag) {
76ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj      case Ico_U1:   vex_printf( "%d:I1",        con->Ico.U1 ? 1 : 0); break;
772d3f77c12d2911173fd182d0b6e954196dee9135sewardj      case Ico_U8:   vex_printf( "0x%x:I8",      (UInt)(con->Ico.U8)); break;
782d3f77c12d2911173fd182d0b6e954196dee9135sewardj      case Ico_U16:  vex_printf( "0x%x:I16",     (UInt)(con->Ico.U16)); break;
792d3f77c12d2911173fd182d0b6e954196dee9135sewardj      case Ico_U32:  vex_printf( "0x%x:I32",     (UInt)(con->Ico.U32)); break;
802d3f77c12d2911173fd182d0b6e954196dee9135sewardj      case Ico_U64:  vex_printf( "0x%llx:I64",   (ULong)(con->Ico.U64)); break;
812019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ico_F32:  u.f32 = con->Ico.F32;
822019a976f07ff418dde2dfc7cc74667ef66d7764sewardj                     vex_printf( "F32{0x%x}",   u.i32);
832019a976f07ff418dde2dfc7cc74667ef66d7764sewardj                     break;
842019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ico_F32i: vex_printf( "F32i{0x%x}",   con->Ico.F32i); break;
85a162c2c121b525f4d72c444325e6dca261170ed9sewardj      case Ico_F64:  u.f64 = con->Ico.F64;
86a162c2c121b525f4d72c444325e6dca261170ed9sewardj                     vex_printf( "F64{0x%llx}",  u.i64);
87695cff9303ef5dc8079117acfd632b44edb1f010sewardj                     break;
882d3f77c12d2911173fd182d0b6e954196dee9135sewardj      case Ico_F64i: vex_printf( "F64i{0x%llx}", con->Ico.F64i); break;
891e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Ico_V128: vex_printf( "V128{0x%04x}", (UInt)(con->Ico.V128)); break;
9037a505b5a6814921fcfff1eac950a9ef7651e42bsewardj      case Ico_V256: vex_printf( "V256{0x%08x}", con->Ico.V256); break;
912d3f77c12d2911173fd182d0b6e954196dee9135sewardj      default: vpanic("ppIRConst");
922d3f77c12d2911173fd182d0b6e954196dee9135sewardj   }
932d3f77c12d2911173fd182d0b6e954196dee9135sewardj}
942d3f77c12d2911173fd182d0b6e954196dee9135sewardj
950b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRCallee ( const IRCallee* ce )
968ea867b06de73d909c29e243407713c291c8414esewardj{
978ea867b06de73d909c29e243407713c291c8414esewardj   vex_printf("%s", ce->name);
9877352545d8416a36a4e6310aaea6b0205508aea2sewardj   if (ce->regparms > 0)
9943c56461a667ca81fe29f1db01450d6ff1d62949sewardj      vex_printf("[rp=%d]", ce->regparms);
10043c56461a667ca81fe29f1db01450d6ff1d62949sewardj   if (ce->mcx_mask > 0)
10143c56461a667ca81fe29f1db01450d6ff1d62949sewardj      vex_printf("[mcx=0x%x]", ce->mcx_mask);
1028ea867b06de73d909c29e243407713c291c8414esewardj   vex_printf("{%p}", (void*)ce->addr);
1038ea867b06de73d909c29e243407713c291c8414esewardj}
1048ea867b06de73d909c29e243407713c291c8414esewardj
1050b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRRegArray ( const IRRegArray* arr )
1062d3f77c12d2911173fd182d0b6e954196dee9135sewardj{
1070bfea7fb2a99707674610bbc2214c47df1918c5bsewardj   vex_printf("(%d:%dx", arr->base, arr->nElems);
1082d3f77c12d2911173fd182d0b6e954196dee9135sewardj   ppIRType(arr->elemTy);
1090bfea7fb2a99707674610bbc2214c47df1918c5bsewardj   vex_printf(")");
110ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
111ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
11235421a3cfd43bc829d27ee15bd34bbc7cb690805sewardjvoid ppIRTemp ( IRTemp tmp )
113ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj{
11492d168d0f2a985ed9f7ae4e6bba9565a13921b31sewardj   if (tmp == IRTemp_INVALID)
11592d168d0f2a985ed9f7ae4e6bba9565a13921b31sewardj      vex_printf("IRTemp_INVALID");
116fbcaf3312f39fb73d54821636c6168db76245f61sewardj   else
11741f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      vex_printf( "t%d", (Int)tmp);
118ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
119ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
12035421a3cfd43bc829d27ee15bd34bbc7cb690805sewardjvoid ppIROp ( IROp op )
121ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj{
1221ff4756e1731485e6bf3cd96717cd8398daec1f2florian   const HChar* str = NULL;
123a98bf499383d95b92038450b4ef47f8cf1901148sewardj   IROp   base;
12441f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj   switch (op) {
12541f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_Add8 ... Iop_Add64:
12641f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "Add"; base = Iop_Add8; break;
12741f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_Sub8 ... Iop_Sub64:
12841f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "Sub"; base = Iop_Sub8; break;
12941f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_Mul8 ... Iop_Mul64:
13041f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "Mul"; base = Iop_Mul8; break;
13141f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_Or8 ... Iop_Or64:
13241f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "Or"; base = Iop_Or8; break;
13341f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_And8 ... Iop_And64:
13441f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "And"; base = Iop_And8; break;
13541f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_Xor8 ... Iop_Xor64:
13641f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "Xor"; base = Iop_Xor8; break;
13741f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_Shl8 ... Iop_Shl64:
13841f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "Shl"; base = Iop_Shl8; break;
13941f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_Shr8 ... Iop_Shr64:
14041f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "Shr"; base = Iop_Shr8; break;
14141f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_Sar8 ... Iop_Sar64:
14241f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "Sar"; base = Iop_Sar8; break;
143e90ad6abbe540a5b3ffa68ba0c641ced77c20211sewardj      case Iop_CmpEQ8 ... Iop_CmpEQ64:
144e90ad6abbe540a5b3ffa68ba0c641ced77c20211sewardj         str = "CmpEQ"; base = Iop_CmpEQ8; break;
145e90ad6abbe540a5b3ffa68ba0c641ced77c20211sewardj      case Iop_CmpNE8 ... Iop_CmpNE64:
146e90ad6abbe540a5b3ffa68ba0c641ced77c20211sewardj         str = "CmpNE"; base = Iop_CmpNE8; break;
1471fb8c92e9b0882ebbd53c04c69ebad7efb1cd3d8sewardj      case Iop_CasCmpEQ8 ... Iop_CasCmpEQ64:
1481fb8c92e9b0882ebbd53c04c69ebad7efb1cd3d8sewardj         str = "CasCmpEQ"; base = Iop_CasCmpEQ8; break;
1491fb8c92e9b0882ebbd53c04c69ebad7efb1cd3d8sewardj      case Iop_CasCmpNE8 ... Iop_CasCmpNE64:
1501fb8c92e9b0882ebbd53c04c69ebad7efb1cd3d8sewardj         str = "CasCmpNE"; base = Iop_CasCmpNE8; break;
151e13074c2c1321d069fb95806bdce64f9a3512341sewardj      case Iop_ExpCmpNE8 ... Iop_ExpCmpNE64:
152e13074c2c1321d069fb95806bdce64f9a3512341sewardj         str = "ExpCmpNE"; base = Iop_ExpCmpNE8; break;
15341f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      case Iop_Not8 ... Iop_Not64:
15441f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj         str = "Not"; base = Iop_Not8; break;
15541f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      /* other cases must explicitly "return;" */
1569690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_8Uto16:   vex_printf("8Uto16");  return;
1579690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_8Uto32:   vex_printf("8Uto32");  return;
1589690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_16Uto32:  vex_printf("16Uto32"); return;
1599690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_8Sto16:   vex_printf("8Sto16");  return;
1609690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_8Sto32:   vex_printf("8Sto32");  return;
1619690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_16Sto32:  vex_printf("16Sto32"); return;
162bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj      case Iop_32Sto64:  vex_printf("32Sto64"); return;
163e5427e8407f108e5a3dc778e0d208e32a1f02db6sewardj      case Iop_32Uto64:  vex_printf("32Uto64"); return;
164a238471814bd386aeb58a76718b41e68b1a794b2sewardj      case Iop_32to8:    vex_printf("32to8");   return;
165291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_16Uto64:  vex_printf("16Uto64"); return;
166291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_16Sto64:  vex_printf("16Sto64"); return;
167291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_8Uto64:   vex_printf("8Uto64"); return;
168291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_8Sto64:   vex_printf("8Sto64"); return;
169291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_64to16:   vex_printf("64to16"); return;
170291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_64to8:    vex_printf("64to8");  return;
1716e797c5fbd90ecc6531f9d8c4929848664a13714sewardj
1726e797c5fbd90ecc6531f9d8c4929848664a13714sewardj      case Iop_Not1:     vex_printf("Not1");    return;
1739690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_32to1:    vex_printf("32to1");   return;
174291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_64to1:    vex_printf("64to1");   return;
1759690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_1Uto8:    vex_printf("1Uto8");   return;
17684ff0657940e62f38e618ea18bac6f27ce0e741fsewardj      case Iop_1Uto32:   vex_printf("1Uto32");  return;
177291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_1Uto64:   vex_printf("1Uto64");  return;
178fd33277c458b31596eb4fb15959467ac047c75dasewardj      case Iop_1Sto8:    vex_printf("1Sto8");  return;
1798eda6304ecfaa1d0aa70773a2c07f996717f8f54sewardj      case Iop_1Sto16:   vex_printf("1Sto16");  return;
180415d9356bb34f487b9c1affd7848848ba0de403csewardj      case Iop_1Sto32:   vex_printf("1Sto32");  return;
181b5874aa03bb38bf754aa8c1cb1e400f3d7e86b9fsewardj      case Iop_1Sto64:   vex_printf("1Sto64");  return;
1829690d927540d730525a5f7f14663f3ceaa7818dasewardj
1839690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_MullS8:   vex_printf("MullS8");  return;
1849690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_MullS16:  vex_printf("MullS16"); return;
1859690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_MullS32:  vex_printf("MullS32"); return;
1869b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Iop_MullS64:  vex_printf("MullS64"); return;
1879690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_MullU8:   vex_printf("MullU8");  return;
1889690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_MullU16:  vex_printf("MullU16"); return;
1899690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_MullU32:  vex_printf("MullU32"); return;
1909b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Iop_MullU64:  vex_printf("MullU64"); return;
1919690d927540d730525a5f7f14663f3ceaa7818dasewardj
192f53b7359a342e7d79090615169c6583a1a75fbcesewardj      case Iop_Clz64:    vex_printf("Clz64"); return;
193ce646f23d71ac432c340667387aa4a5ce7d18099sewardj      case Iop_Clz32:    vex_printf("Clz32"); return;
194f53b7359a342e7d79090615169c6583a1a75fbcesewardj      case Iop_Ctz64:    vex_printf("Ctz64"); return;
195ce646f23d71ac432c340667387aa4a5ce7d18099sewardj      case Iop_Ctz32:    vex_printf("Ctz32"); return;
196ce646f23d71ac432c340667387aa4a5ce7d18099sewardj
19784ff0657940e62f38e618ea18bac6f27ce0e741fsewardj      case Iop_CmpLT32S: vex_printf("CmpLT32S"); return;
19884ff0657940e62f38e618ea18bac6f27ce0e741fsewardj      case Iop_CmpLE32S: vex_printf("CmpLE32S"); return;
19984ff0657940e62f38e618ea18bac6f27ce0e741fsewardj      case Iop_CmpLT32U: vex_printf("CmpLT32U"); return;
20084ff0657940e62f38e618ea18bac6f27ce0e741fsewardj      case Iop_CmpLE32U: vex_printf("CmpLE32U"); return;
20184ff0657940e62f38e618ea18bac6f27ce0e741fsewardj
2029854007808ab24cad3f971eab63face1cb1e6089sewardj      case Iop_CmpLT64S: vex_printf("CmpLT64S"); return;
2039854007808ab24cad3f971eab63face1cb1e6089sewardj      case Iop_CmpLE64S: vex_printf("CmpLE64S"); return;
2049854007808ab24cad3f971eab63face1cb1e6089sewardj      case Iop_CmpLT64U: vex_printf("CmpLT64U"); return;
2059854007808ab24cad3f971eab63face1cb1e6089sewardj      case Iop_CmpLE64U: vex_printf("CmpLE64U"); return;
2069854007808ab24cad3f971eab63face1cb1e6089sewardj
2070033ddccac6f90789fe2e78e86b8a649931d77b4sewardj      case Iop_CmpNEZ8:  vex_printf("CmpNEZ8"); return;
2080033ddccac6f90789fe2e78e86b8a649931d77b4sewardj      case Iop_CmpNEZ16: vex_printf("CmpNEZ16"); return;
2090033ddccac6f90789fe2e78e86b8a649931d77b4sewardj      case Iop_CmpNEZ32: vex_printf("CmpNEZ32"); return;
2100033ddccac6f90789fe2e78e86b8a649931d77b4sewardj      case Iop_CmpNEZ64: vex_printf("CmpNEZ64"); return;
2110033ddccac6f90789fe2e78e86b8a649931d77b4sewardj
212eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_CmpwNEZ32: vex_printf("CmpwNEZ32"); return;
213eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_CmpwNEZ64: vex_printf("CmpwNEZ64"); return;
214eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj
215eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_Left8:  vex_printf("Left8"); return;
216eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_Left16: vex_printf("Left16"); return;
217eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_Left32: vex_printf("Left32"); return;
218eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_Left64: vex_printf("Left64"); return;
219478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj      case Iop_Max32U: vex_printf("Max32U"); return;
220eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj
221b51f0f4f33256638ed953156a2635aa739b232f1sewardj      case Iop_CmpORD32U: vex_printf("CmpORD32U"); return;
222b51f0f4f33256638ed953156a2635aa739b232f1sewardj      case Iop_CmpORD32S: vex_printf("CmpORD32S"); return;
223b51f0f4f33256638ed953156a2635aa739b232f1sewardj
2242831b00c4950d6c2b061def05fd67528fe132ececerion      case Iop_CmpORD64U: vex_printf("CmpORD64U"); return;
2252831b00c4950d6c2b061def05fd67528fe132ececerion      case Iop_CmpORD64S: vex_printf("CmpORD64S"); return;
2262831b00c4950d6c2b061def05fd67528fe132ececerion
2275c8a0cbfd7fd3b506f6ba1cb25a6aa20efb59dcbcerion      case Iop_DivU32: vex_printf("DivU32"); return;
2285c8a0cbfd7fd3b506f6ba1cb25a6aa20efb59dcbcerion      case Iop_DivS32: vex_printf("DivS32"); return;
229f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion      case Iop_DivU64: vex_printf("DivU64"); return;
230f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion      case Iop_DivS64: vex_printf("DivS64"); return;
231e71e56a90e91ce37b0ee846a4ff94493d59f2095sewardj      case Iop_DivU64E: vex_printf("DivU64E"); return;
2324aa412af1d8166cc11f39a6e721df49431d23618sewardj      case Iop_DivS64E: vex_printf("DivS64E"); return;
2334aa412af1d8166cc11f39a6e721df49431d23618sewardj      case Iop_DivU32E: vex_printf("DivU32E"); return;
234e71e56a90e91ce37b0ee846a4ff94493d59f2095sewardj      case Iop_DivS32E: vex_printf("DivS32E"); return;
2355c8a0cbfd7fd3b506f6ba1cb25a6aa20efb59dcbcerion
2369690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_DivModU64to32: vex_printf("DivModU64to32"); return;
2379690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_DivModS64to32: vex_printf("DivModS64to32"); return;
2389690d927540d730525a5f7f14663f3ceaa7818dasewardj
239343b9d0f6be20948ab2f4fe87de55835f96fe30asewardj      case Iop_DivModU128to64: vex_printf("DivModU128to64"); return;
240343b9d0f6be20948ab2f4fe87de55835f96fe30asewardj      case Iop_DivModS128to64: vex_printf("DivModS128to64"); return;
241343b9d0f6be20948ab2f4fe87de55835f96fe30asewardj
2422019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_DivModS64to64: vex_printf("DivModS64to64"); return;
2432019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
244b81f8b3e9110a5608094b8ec1a5c6d3c30a8e5aesewardj      case Iop_16HIto8:  vex_printf("16HIto8"); return;
245b81f8b3e9110a5608094b8ec1a5c6d3c30a8e5aesewardj      case Iop_16to8:    vex_printf("16to8");   return;
246b81f8b3e9110a5608094b8ec1a5c6d3c30a8e5aesewardj      case Iop_8HLto16:  vex_printf("8HLto16"); return;
247b81f8b3e9110a5608094b8ec1a5c6d3c30a8e5aesewardj
2488c7f1abe9e022f6382634efea09c9cac89ec6336sewardj      case Iop_32HIto16: vex_printf("32HIto16"); return;
2498c7f1abe9e022f6382634efea09c9cac89ec6336sewardj      case Iop_32to16:   vex_printf("32to16");   return;
2508c7f1abe9e022f6382634efea09c9cac89ec6336sewardj      case Iop_16HLto32: vex_printf("16HLto32"); return;
2518c7f1abe9e022f6382634efea09c9cac89ec6336sewardj
2529690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_64HIto32: vex_printf("64HIto32"); return;
2538c7f1abe9e022f6382634efea09c9cac89ec6336sewardj      case Iop_64to32:   vex_printf("64to32");   return;
2549690d927540d730525a5f7f14663f3ceaa7818dasewardj      case Iop_32HLto64: vex_printf("32HLto64"); return;
2559690d927540d730525a5f7f14663f3ceaa7818dasewardj
2569b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Iop_128HIto64: vex_printf("128HIto64"); return;
2579b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Iop_128to64:   vex_printf("128to64");   return;
2589b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Iop_64HLto128: vex_printf("64HLto128"); return;
2599b96767debeeb1f78378f0e7e295fe6762c64002sewardj
2602019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_CmpF32:    vex_printf("CmpF32");    return;
2612019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F32toI32S: vex_printf("F32toI32S");  return;
2622019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F32toI64S: vex_printf("F32toI64S");  return;
2632019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_I32StoF32: vex_printf("I32StoF32");  return;
2642019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_I64StoF32: vex_printf("I64StoF32");  return;
2652019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
266cfded9ab7c059881ecdbe967ddfcc1ce207986casewardj      case Iop_AddF64:    vex_printf("AddF64"); return;
267cfded9ab7c059881ecdbe967ddfcc1ce207986casewardj      case Iop_SubF64:    vex_printf("SubF64"); return;
268cfded9ab7c059881ecdbe967ddfcc1ce207986casewardj      case Iop_MulF64:    vex_printf("MulF64"); return;
269cfded9ab7c059881ecdbe967ddfcc1ce207986casewardj      case Iop_DivF64:    vex_printf("DivF64"); return;
270b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_AddF64r32: vex_printf("AddF64r32"); return;
271b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_SubF64r32: vex_printf("SubF64r32"); return;
272b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_MulF64r32: vex_printf("MulF64r32"); return;
273b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_DivF64r32: vex_printf("DivF64r32"); return;
2746c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_AddF32:    vex_printf("AddF32"); return;
2756c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_SubF32:    vex_printf("SubF32"); return;
2766c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_MulF32:    vex_printf("MulF32"); return;
2776c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_DivF32:    vex_printf("DivF32"); return;
27846de4076882d6a44ff0f76bd8b70c3d89b050293sewardj
2792019a976f07ff418dde2dfc7cc74667ef66d7764sewardj        /* 128 bit floating point */
2802019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_AddF128:   vex_printf("AddF128");  return;
2812019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_SubF128:   vex_printf("SubF128");  return;
2822019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_MulF128:   vex_printf("MulF128");  return;
2832019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_DivF128:   vex_printf("DivF128");  return;
2842019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_AbsF128:   vex_printf("AbsF128");  return;
2852019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_NegF128:   vex_printf("NegF128");  return;
2862019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_SqrtF128:  vex_printf("SqrtF128"); return;
2872019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_CmpF128:   vex_printf("CmpF128");  return;
2882019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
2892019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F64HLtoF128: vex_printf("F64HLtoF128"); return;
2902019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128HItoF64: vex_printf("F128HItoF64"); return;
2912019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128LOtoF64: vex_printf("F128LOtoF64"); return;
2922019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_I32StoF128: vex_printf("I32StoF128"); return;
2932019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_I64StoF128: vex_printf("I64StoF128"); return;
2941c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_I32UtoF128: vex_printf("I32UtoF128"); return;
2951c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_I64UtoF128: vex_printf("I64UtoF128"); return;
2962019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128toI32S: vex_printf("F128toI32S"); return;
2972019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128toI64S: vex_printf("F128toI64S"); return;
2981c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_F128toI32U: vex_printf("F128toI32U"); return;
2991c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_F128toI64U: vex_printf("F128toI64U"); return;
3002019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F32toF128:  vex_printf("F32toF128");  return;
3012019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F64toF128:  vex_printf("F64toF128");  return;
3022019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128toF64:  vex_printf("F128toF64");  return;
3032019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128toF32:  vex_printf("F128toF32");  return;
3042019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
3052019a976f07ff418dde2dfc7cc74667ef66d7764sewardj        /* s390 specific */
3062019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_MAddF32:    vex_printf("s390_MAddF32"); return;
3072019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_MSubF32:    vex_printf("s390_MSubF32"); return;
3082019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
309442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_ScaleF64:      vex_printf("ScaleF64"); return;
310442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_AtanF64:       vex_printf("AtanF64"); return;
311442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_Yl2xF64:       vex_printf("Yl2xF64"); return;
312442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_Yl2xp1F64:     vex_printf("Yl2xp1F64"); return;
313442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_PRemF64:       vex_printf("PRemF64"); return;
314442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_PRemC3210F64:  vex_printf("PRemC3210F64"); return;
315442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_PRem1F64:      vex_printf("PRem1F64"); return;
316442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_PRem1C3210F64: vex_printf("PRem1C3210F64"); return;
317442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_NegF64:        vex_printf("NegF64"); return;
3186c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_AbsF64:        vex_printf("AbsF64"); return;
3196c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_NegF32:        vex_printf("NegF32"); return;
3206c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_AbsF32:        vex_printf("AbsF32"); return;
321442d0be1e8050056c3f50a8c0f9e74ed1d522c84sewardj      case Iop_SqrtF64:       vex_printf("SqrtF64"); return;
3226c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_SqrtF32:       vex_printf("SqrtF32"); return;
323cfded9ab7c059881ecdbe967ddfcc1ce207986casewardj      case Iop_SinF64:    vex_printf("SinF64"); return;
324cfded9ab7c059881ecdbe967ddfcc1ce207986casewardj      case Iop_CosF64:    vex_printf("CosF64"); return;
32599016a7b2d31c50a02b4a3ae8c7b0cf4de2c22cfsewardj      case Iop_TanF64:    vex_printf("TanF64"); return;
32606c32a0f13e91af2947dd01ebd4b81c01a64b15bsewardj      case Iop_2xm1F64:   vex_printf("2xm1F64"); return;
327bdc7d215ca35fbf5213549560fc3bd8967f60f6dsewardj
32840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      case Iop_MAddF64:    vex_printf("MAddF64"); return;
32940c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      case Iop_MSubF64:    vex_printf("MSubF64"); return;
33040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      case Iop_MAddF64r32: vex_printf("MAddF64r32"); return;
33140c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      case Iop_MSubF64r32: vex_printf("MSubF64r32"); return;
33240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj
3331ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst5GoodF64: vex_printf("RSqrtEst5GoodF64"); return;
3340f1ef86a99d5129e04ed188e44d16a344d2bc42asewardj      case Iop_RoundF64toF64_NEAREST: vex_printf("RoundF64toF64_NEAREST"); return;
3350f1ef86a99d5129e04ed188e44d16a344d2bc42asewardj      case Iop_RoundF64toF64_NegINF: vex_printf("RoundF64toF64_NegINF"); return;
3360f1ef86a99d5129e04ed188e44d16a344d2bc42asewardj      case Iop_RoundF64toF64_PosINF: vex_printf("RoundF64toF64_PosINF"); return;
3370f1ef86a99d5129e04ed188e44d16a344d2bc42asewardj      case Iop_RoundF64toF64_ZERO: vex_printf("RoundF64toF64_ZERO"); return;
3380f1ef86a99d5129e04ed188e44d16a344d2bc42asewardj
339b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_TruncF64asF32: vex_printf("TruncF64asF32"); return;
340baf971ad7f6e005109f3301ec9d19c98066b3840sewardj
34189cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RecpExpF64: vex_printf("RecpExpF64"); return;
34289cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RecpExpF32: vex_printf("RecpExpF32"); return;
34389cefe4bb6a35343636d47f9888409a4e877fd5esewardj
3443738bfcea70600334c830de5421adc0204890c95sewardj      case Iop_F16toF64: vex_printf("F16toF64"); return;
3453738bfcea70600334c830de5421adc0204890c95sewardj      case Iop_F64toF16: vex_printf("F64toF16"); return;
3463738bfcea70600334c830de5421adc0204890c95sewardj      case Iop_F16toF32: vex_printf("F16toF32"); return;
3473738bfcea70600334c830de5421adc0204890c95sewardj      case Iop_F32toF16: vex_printf("F32toF16"); return;
3483738bfcea70600334c830de5421adc0204890c95sewardj
34944ce46d5945ed83d96695d280510cc2a858894dcsewardj      case Iop_QAdd32S: vex_printf("QAdd32S"); return;
35044ce46d5945ed83d96695d280510cc2a858894dcsewardj      case Iop_QSub32S: vex_printf("QSub32S"); return;
351e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_Add16x2:   vex_printf("Add16x2"); return;
352e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_Sub16x2:   vex_printf("Sub16x2"); return;
353e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QAdd16Sx2: vex_printf("QAdd16Sx2"); return;
354e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QAdd16Ux2: vex_printf("QAdd16Ux2"); return;
355e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QSub16Sx2: vex_printf("QSub16Sx2"); return;
356e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QSub16Ux2: vex_printf("QSub16Ux2"); return;
357e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HAdd16Ux2: vex_printf("HAdd16Ux2"); return;
358e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HAdd16Sx2: vex_printf("HAdd16Sx2"); return;
359e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HSub16Ux2: vex_printf("HSub16Ux2"); return;
360e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HSub16Sx2: vex_printf("HSub16Sx2"); return;
361e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj
362e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_Add8x4:   vex_printf("Add8x4"); return;
363e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_Sub8x4:   vex_printf("Sub8x4"); return;
364e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QAdd8Sx4: vex_printf("QAdd8Sx4"); return;
365e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QAdd8Ux4: vex_printf("QAdd8Ux4"); return;
366e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QSub8Sx4: vex_printf("QSub8Sx4"); return;
367e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QSub8Ux4: vex_printf("QSub8Ux4"); return;
368e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HAdd8Ux4: vex_printf("HAdd8Ux4"); return;
369e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HAdd8Sx4: vex_printf("HAdd8Sx4"); return;
370e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HSub8Ux4: vex_printf("HSub8Ux4"); return;
371e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HSub8Sx4: vex_printf("HSub8Sx4"); return;
372310d6b2d02c3b22a8e496f3e26f3e9b3eb616ea5sewardj      case Iop_Sad8Ux4:  vex_printf("Sad8Ux4"); return;
373e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj
374e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_CmpNEZ16x2: vex_printf("CmpNEZ16x2"); return;
375e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_CmpNEZ8x4:  vex_printf("CmpNEZ8x4"); return;
376e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj
37746de4076882d6a44ff0f76bd8b70c3d89b050293sewardj      case Iop_CmpF64:    vex_printf("CmpF64"); return;
37846de4076882d6a44ff0f76bd8b70c3d89b050293sewardj
3796c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_F64toI16S: vex_printf("F64toI16S"); return;
3806c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_F64toI32S: vex_printf("F64toI32S"); return;
3816c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_F64toI64S: vex_printf("F64toI64S"); return;
3824aa412af1d8166cc11f39a6e721df49431d23618sewardj      case Iop_F64toI64U: vex_printf("F64toI64U"); return;
3831c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_F32toI32U: vex_printf("F32toI32U");  return;
3841c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_F32toI64U: vex_printf("F32toI64U");  return;
3856c299f3acab617581ea504e45fbb6cab24c2b29fsewardj
3866c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_F64toI32U: vex_printf("F64toI32U"); return;
3873bca906f6e715c544eb49c278bedef093c14c0d7sewardj
3886c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_I32StoF64: vex_printf("I32StoF64"); return;
3896c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_I64StoF64: vex_printf("I64StoF64"); return;
39066d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj      case Iop_I64UtoF64: vex_printf("I64UtoF64"); return;
3911c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_I32UtoF32: vex_printf("I32UtoF32"); return;
39266d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj      case Iop_I64UtoF32: vex_printf("I64UtoF32"); return;
3936c299f3acab617581ea504e45fbb6cab24c2b29fsewardj
3946c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_I32UtoF64: vex_printf("I32UtoF64"); return;
395cfded9ab7c059881ecdbe967ddfcc1ce207986casewardj
39689cd09353a584000edaaa61558b27253bdea7452sewardj      case Iop_F32toF64: vex_printf("F32toF64"); return;
39789cd09353a584000edaaa61558b27253bdea7452sewardj      case Iop_F64toF32: vex_printf("F64toF32"); return;
398bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj
399b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_RoundF64toInt: vex_printf("RoundF64toInt"); return;
400d15b597a8a006b3fe136cbf6cdf5b46ed532a4d8sewardj      case Iop_RoundF32toInt: vex_printf("RoundF32toInt"); return;
401b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_RoundF64toF32: vex_printf("RoundF64toF32"); return;
4023bca906f6e715c544eb49c278bedef093c14c0d7sewardj
40317442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_ReinterpF64asI64: vex_printf("ReinterpF64asI64"); return;
40417442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_ReinterpI64asF64: vex_printf("ReinterpI64asF64"); return;
405fc1b541264539587f12721ca0b73ef04580ed2bdsewardj      case Iop_ReinterpF32asI32: vex_printf("ReinterpF32asI32"); return;
406fd22645d1e2445a568dda9ae665bd3a1315dea58sewardj      case Iop_ReinterpI32asF32: vex_printf("ReinterpI32asF32"); return;
40717442fe8094d0f82266e5a05509f62cac8f7539esewardj
408228c7c859d0133bc05d435eadac764a7341375c6sewardj      case Iop_I32UtoFx4: vex_printf("I32UtoFx4"); return;
409228c7c859d0133bc05d435eadac764a7341375c6sewardj      case Iop_I32StoFx4: vex_printf("I32StoFx4"); return;
410f294eb389e8e703e2d4476aea7ca579a160a0a89cerion
4112fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32toF16x4: vex_printf("F32toF16x4"); return;
4122fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F16toF32x4: vex_printf("F16toF32x4"); return;
4132fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
4141ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Fx4: vex_printf("RSqrtEst32Fx4"); return;
4151ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Ux4: vex_printf("RSqrtEst32Ux4"); return;
4161ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Fx2: vex_printf("RSqrtEst32Fx2"); return;
4171ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Ux2: vex_printf("RSqrtEst32Ux2"); return;
4182fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
419228c7c859d0133bc05d435eadac764a7341375c6sewardj      case Iop_QFtoI32Ux4_RZ: vex_printf("QFtoI32Ux4_RZ"); return;
420228c7c859d0133bc05d435eadac764a7341375c6sewardj      case Iop_QFtoI32Sx4_RZ: vex_printf("QFtoI32Sx4_RZ"); return;
421f294eb389e8e703e2d4476aea7ca579a160a0a89cerion
4222fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_FtoI32Ux4_RZ: vex_printf("FtoI32Ux4_RZ"); return;
4232fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_FtoI32Sx4_RZ: vex_printf("FtoI32Sx4_RZ"); return;
4242fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
4252fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_I32UtoFx2: vex_printf("I32UtoFx2"); return;
4262fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_I32StoFx2: vex_printf("I32StoFx2"); return;
4272fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
4282fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_FtoI32Ux2_RZ: vex_printf("FtoI32Ux2_RZ"); return;
4292fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_FtoI32Sx2_RZ: vex_printf("FtoI32Sx2_RZ"); return;
4302fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
431228c7c859d0133bc05d435eadac764a7341375c6sewardj      case Iop_RoundF32x4_RM: vex_printf("RoundF32x4_RM"); return;
432228c7c859d0133bc05d435eadac764a7341375c6sewardj      case Iop_RoundF32x4_RP: vex_printf("RoundF32x4_RP"); return;
433228c7c859d0133bc05d435eadac764a7341375c6sewardj      case Iop_RoundF32x4_RN: vex_printf("RoundF32x4_RN"); return;
434228c7c859d0133bc05d435eadac764a7341375c6sewardj      case Iop_RoundF32x4_RZ: vex_printf("RoundF32x4_RZ"); return;
435f294eb389e8e703e2d4476aea7ca579a160a0a89cerion
4362fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs8x8: vex_printf("Abs8x8"); return;
4372fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs16x4: vex_printf("Abs16x4"); return;
4382fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs32x2: vex_printf("Abs32x2"); return;
43938a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Add8x8: vex_printf("Add8x8"); return;
44038a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Add16x4: vex_printf("Add16x4"); return;
44138a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Add32x2: vex_printf("Add32x2"); return;
44238a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QAdd8Ux8: vex_printf("QAdd8Ux8"); return;
44338a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QAdd16Ux4: vex_printf("QAdd16Ux4"); return;
4442fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd32Ux2: vex_printf("QAdd32Ux2"); return;
4452fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd64Ux1: vex_printf("QAdd64Ux1"); return;
44638a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QAdd8Sx8: vex_printf("QAdd8Sx8"); return;
44738a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QAdd16Sx4: vex_printf("QAdd16Sx4"); return;
4482fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd32Sx2: vex_printf("QAdd32Sx2"); return;
4492fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd64Sx1: vex_printf("QAdd64Sx1"); return;
4502fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd8x8: vex_printf("PwAdd8x8"); return;
4512fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd16x4: vex_printf("PwAdd16x4"); return;
4522fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd32x2: vex_printf("PwAdd32x2"); return;
4532fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd32Fx2: vex_printf("PwAdd32Fx2"); return;
4542fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL8Ux8: vex_printf("PwAddL8Ux8"); return;
4552fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL16Ux4: vex_printf("PwAddL16Ux4"); return;
4562fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL32Ux2: vex_printf("PwAddL32Ux2"); return;
4572fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL8Sx8: vex_printf("PwAddL8Sx8"); return;
4582fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL16Sx4: vex_printf("PwAddL16Sx4"); return;
4592fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL32Sx2: vex_printf("PwAddL32Sx2"); return;
46038a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Sub8x8: vex_printf("Sub8x8"); return;
46138a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Sub16x4: vex_printf("Sub16x4"); return;
46238a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Sub32x2: vex_printf("Sub32x2"); return;
46338a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QSub8Ux8: vex_printf("QSub8Ux8"); return;
46438a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QSub16Ux4: vex_printf("QSub16Ux4"); return;
4652fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub32Ux2: vex_printf("QSub32Ux2"); return;
4662fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub64Ux1: vex_printf("QSub64Ux1"); return;
46738a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QSub8Sx8: vex_printf("QSub8Sx8"); return;
46838a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QSub16Sx4: vex_printf("QSub16Sx4"); return;
4692fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub32Sx2: vex_printf("QSub32Sx2"); return;
4702fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub64Sx1: vex_printf("QSub64Sx1"); return;
4712fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mul8x8: vex_printf("Mul8x8"); return;
47238a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Mul16x4: vex_printf("Mul16x4"); return;
473d166e2874e0d9a9e567a281d7f1f6e8ef8127196sewardj      case Iop_Mul32x2: vex_printf("Mul32x2"); return;
4742fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mul32Fx2: vex_printf("Mul32Fx2"); return;
4752fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PolynomialMul8x8: vex_printf("PolynomialMul8x8"); return;
47638a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_MulHi16Ux4: vex_printf("MulHi16Ux4"); return;
47738a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_MulHi16Sx4: vex_printf("MulHi16Sx4"); return;
4782fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QDMulHi16Sx4: vex_printf("QDMulHi16Sx4"); return;
4792fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QDMulHi32Sx2: vex_printf("QDMulHi32Sx2"); return;
4802fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QRDMulHi16Sx4: vex_printf("QRDMulHi16Sx4"); return;
4812fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QRDMulHi32Sx2: vex_printf("QRDMulHi32Sx2"); return;
48251d012a3533e6c8c0a378dbca05a6ee3e4bd81absewardj      case Iop_QDMull16Sx4: vex_printf("QDMull16Sx4"); return;
48351d012a3533e6c8c0a378dbca05a6ee3e4bd81absewardj      case Iop_QDMull32Sx2: vex_printf("QDMull32Sx2"); return;
48438a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Avg8Ux8: vex_printf("Avg8Ux8"); return;
48538a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Avg16Ux4: vex_printf("Avg16Ux4"); return;
4862fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Max8Sx8: vex_printf("Max8Sx8"); return;
48738a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Max16Sx4: vex_printf("Max16Sx4"); return;
4882fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Max32Sx2: vex_printf("Max32Sx2"); return;
48938a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Max8Ux8: vex_printf("Max8Ux8"); return;
4902fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Max16Ux4: vex_printf("Max16Ux4"); return;
4912fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Max32Ux2: vex_printf("Max32Ux2"); return;
4922fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Min8Sx8: vex_printf("Min8Sx8"); return;
49338a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Min16Sx4: vex_printf("Min16Sx4"); return;
4942fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Min32Sx2: vex_printf("Min32Sx2"); return;
49538a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Min8Ux8: vex_printf("Min8Ux8"); return;
4962fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Min16Ux4: vex_printf("Min16Ux4"); return;
4972fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Min32Ux2: vex_printf("Min32Ux2"); return;
4982fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax8Sx8: vex_printf("PwMax8Sx8"); return;
4992fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax16Sx4: vex_printf("PwMax16Sx4"); return;
5002fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax32Sx2: vex_printf("PwMax32Sx2"); return;
5012fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax8Ux8: vex_printf("PwMax8Ux8"); return;
5022fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax16Ux4: vex_printf("PwMax16Ux4"); return;
5032fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax32Ux2: vex_printf("PwMax32Ux2"); return;
5042fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin8Sx8: vex_printf("PwMin8Sx8"); return;
5052fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin16Sx4: vex_printf("PwMin16Sx4"); return;
5062fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin32Sx2: vex_printf("PwMin32Sx2"); return;
5072fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin8Ux8: vex_printf("PwMin8Ux8"); return;
5082fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin16Ux4: vex_printf("PwMin16Ux4"); return;
5092fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin32Ux2: vex_printf("PwMin32Ux2"); return;
51038a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_CmpEQ8x8: vex_printf("CmpEQ8x8"); return;
51138a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_CmpEQ16x4: vex_printf("CmpEQ16x4"); return;
51238a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_CmpEQ32x2: vex_printf("CmpEQ32x2"); return;
5132fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CmpGT8Ux8: vex_printf("CmpGT8Ux8"); return;
5142fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CmpGT16Ux4: vex_printf("CmpGT16Ux4"); return;
5152fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CmpGT32Ux2: vex_printf("CmpGT32Ux2"); return;
51638a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_CmpGT8Sx8: vex_printf("CmpGT8Sx8"); return;
51738a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_CmpGT16Sx4: vex_printf("CmpGT16Sx4"); return;
51838a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_CmpGT32Sx2: vex_printf("CmpGT32Sx2"); return;
5192fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Cnt8x8: vex_printf("Cnt8x8"); return;
520a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Clz8x8: vex_printf("Clz8x8"); return;
521a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Clz16x4: vex_printf("Clz16x4"); return;
522a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Clz32x2: vex_printf("Clz32x2"); return;
523a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Cls8x8: vex_printf("Cls8x8"); return;
524a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Cls16x4: vex_printf("Cls16x4"); return;
525a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Cls32x2: vex_printf("Cls32x2"); return;
526d166e2874e0d9a9e567a281d7f1f6e8ef8127196sewardj      case Iop_ShlN8x8: vex_printf("ShlN8x8"); return;
52738a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_ShlN16x4: vex_printf("ShlN16x4"); return;
52838a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_ShlN32x2: vex_printf("ShlN32x2"); return;
5292fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_ShrN8x8: vex_printf("ShrN8x8"); return;
53038a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_ShrN16x4: vex_printf("ShrN16x4"); return;
53138a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_ShrN32x2: vex_printf("ShrN32x2"); return;
532d71ba837242cc470f622335b1c650bce8886a533sewardj      case Iop_SarN8x8: vex_printf("SarN8x8"); return;
53338a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_SarN16x4: vex_printf("SarN16x4"); return;
53438a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_SarN32x2: vex_printf("SarN32x2"); return;
5355f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin16Sto8Ux8: vex_printf("QNarrowBin16Sto8Ux8"); return;
5365f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin16Sto8Sx8: vex_printf("QNarrowBin16Sto8Sx8"); return;
5375f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin32Sto16Sx4: vex_printf("QNarrowBin32Sto16Sx4"); return;
53848ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_QNarrowBin64Sto32Sx4: vex_printf("QNarrowBin64Sto32Sx4"); return;
53948ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_QNarrowBin64Uto32Ux4: vex_printf("QNarrowBin64Uto32Ux4"); return;
540ad2c9ea0c360fced134b2dd0d4b28c0be3639cfbsewardj      case Iop_NarrowBin16to8x8: vex_printf("NarrowBin16to8x8"); return;
541ad2c9ea0c360fced134b2dd0d4b28c0be3639cfbsewardj      case Iop_NarrowBin32to16x4: vex_printf("NarrowBin32to16x4"); return;
5420c74bb5aa3240f693df0568d578baabf0c376dc4carll      case Iop_NarrowBin64to32x4: vex_printf("NarrowBin64to32x4"); return;
54338a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_InterleaveHI8x8: vex_printf("InterleaveHI8x8"); return;
54438a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_InterleaveHI16x4: vex_printf("InterleaveHI16x4"); return;
54538a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_InterleaveHI32x2: vex_printf("InterleaveHI32x2"); return;
54638a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_InterleaveLO8x8: vex_printf("InterleaveLO8x8"); return;
54738a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_InterleaveLO16x4: vex_printf("InterleaveLO16x4"); return;
54838a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_InterleaveLO32x2: vex_printf("InterleaveLO32x2"); return;
5492fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatOddLanes8x8: vex_printf("CatOddLanes8x8"); return;
550d166e2874e0d9a9e567a281d7f1f6e8ef8127196sewardj      case Iop_CatOddLanes16x4: vex_printf("CatOddLanes16x4"); return;
5512fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatEvenLanes8x8: vex_printf("CatEvenLanes8x8"); return;
552d166e2874e0d9a9e567a281d7f1f6e8ef8127196sewardj      case Iop_CatEvenLanes16x4: vex_printf("CatEvenLanes16x4"); return;
5532fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes8x8: vex_printf("InterleaveOddLanes8x8"); return;
5542fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes16x4: vex_printf("InterleaveOddLanes16x4"); return;
5552fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveEvenLanes8x8: vex_printf("InterleaveEvenLanes8x8"); return;
5562fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveEvenLanes16x4: vex_printf("InterleaveEvenLanes16x4"); return;
5572fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shl8x8: vex_printf("Shl8x8"); return;
5582fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shl16x4: vex_printf("Shl16x4"); return;
5592fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shl32x2: vex_printf("Shl32x2"); return;
5602fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shr8x8: vex_printf("Shr8x8"); return;
5612fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shr16x4: vex_printf("Shr16x4"); return;
5622fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shr32x2: vex_printf("Shr32x2"); return;
5632fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QShl8x8: vex_printf("QShl8x8"); return;
5642fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QShl16x4: vex_printf("QShl16x4"); return;
5652fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QShl32x2: vex_printf("QShl32x2"); return;
5662fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QShl64x1: vex_printf("QShl64x1"); return;
5672fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSal8x8: vex_printf("QSal8x8"); return;
5682fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSal16x4: vex_printf("QSal16x4"); return;
5692fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSal32x2: vex_printf("QSal32x2"); return;
5702fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSal64x1: vex_printf("QSal64x1"); return;
5711dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU8x8: vex_printf("QShlNsatUU8x8"); return;
5721dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU16x4: vex_printf("QShlNsatUU16x4"); return;
5731dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU32x2: vex_printf("QShlNsatUU32x2"); return;
5741dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU64x1: vex_printf("QShlNsatUU64x1"); return;
5751dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU8x8: vex_printf("QShlNsatSU8x8"); return;
5761dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU16x4: vex_printf("QShlNsatSU16x4"); return;
5771dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU32x2: vex_printf("QShlNsatSU32x2"); return;
5781dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU64x1: vex_printf("QShlNsatSU64x1"); return;
5791dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS8x8: vex_printf("QShlNsatSS8x8"); return;
5801dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS16x4: vex_printf("QShlNsatSS16x4"); return;
5811dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS32x2: vex_printf("QShlNsatSS32x2"); return;
5821dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS64x1: vex_printf("QShlNsatSS64x1"); return;
5832fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sar8x8: vex_printf("Sar8x8"); return;
5842fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sar16x4: vex_printf("Sar16x4"); return;
5852fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sar32x2: vex_printf("Sar32x2"); return;
5862fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal8x8: vex_printf("Sal8x8"); return;
5872fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal16x4: vex_printf("Sal16x4"); return;
5882fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal32x2: vex_printf("Sal32x2"); return;
5892fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal64x1: vex_printf("Sal64x1"); return;
590228c7c859d0133bc05d435eadac764a7341375c6sewardj      case Iop_Perm8x8: vex_printf("Perm8x8"); return;
591336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn16_x4: vex_printf("Reverse8sIn16_x4"); return;
592336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn32_x2: vex_printf("Reverse8sIn32_x2"); return;
593336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse16sIn32_x2: vex_printf("Reverse16sIn32_x2"); return;
594336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn64_x1: vex_printf("Reverse8sIn64_x1"); return;
595336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse16sIn64_x1: vex_printf("Reverse16sIn64_x1"); return;
596336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse32sIn64_x1: vex_printf("Reverse32sIn64_x1"); return;
5972fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs32Fx2: vex_printf("Abs32Fx2"); return;
598e13074c2c1321d069fb95806bdce64f9a3512341sewardj      case Iop_GetMSBs8x8: vex_printf("GetMSBs8x8"); return;
59978a20592024c096430f630006412fec063568bfdsewardj      case Iop_GetMSBs8x16: vex_printf("GetMSBs8x16"); return;
60038a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj
6011806918ae2783af5808f00876581e01c7b650a0dsewardj      case Iop_CmpNEZ32x2: vex_printf("CmpNEZ32x2"); return;
6021806918ae2783af5808f00876581e01c7b650a0dsewardj      case Iop_CmpNEZ16x4: vex_printf("CmpNEZ16x4"); return;
6031806918ae2783af5808f00876581e01c7b650a0dsewardj      case Iop_CmpNEZ8x8:  vex_printf("CmpNEZ8x8"); return;
6041806918ae2783af5808f00876581e01c7b650a0dsewardj
6051e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_Add32Fx4:  vex_printf("Add32Fx4"); return;
6062fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Add32Fx2:  vex_printf("Add32Fx2"); return;
6071e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_Add32F0x4: vex_printf("Add32F0x4"); return;
608636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Add64Fx2:  vex_printf("Add64Fx2"); return;
609636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Add64F0x2: vex_printf("Add64F0x2"); return;
6101e6ad745ebafd0524da1da27a4b85524fa84f777sewardj
611176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj      case Iop_Div32Fx4:  vex_printf("Div32Fx4"); return;
612176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj      case Iop_Div32F0x4: vex_printf("Div32F0x4"); return;
613636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Div64Fx2:  vex_printf("Div64Fx2"); return;
614636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Div64F0x2: vex_printf("Div64F0x2"); return;
615176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj
6168eb7ae8df9e152f0f99d1abbc68f2fee77ac2d04sewardj      case Iop_Max32Fx8:  vex_printf("Max32Fx8"); return;
617176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj      case Iop_Max32Fx4:  vex_printf("Max32Fx4"); return;
6182fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Max32Fx2:  vex_printf("Max32Fx2"); return;
6192fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax32Fx4:  vex_printf("PwMax32Fx4"); return;
6202fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax32Fx2:  vex_printf("PwMax32Fx2"); return;
621176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj      case Iop_Max32F0x4: vex_printf("Max32F0x4"); return;
6228eb7ae8df9e152f0f99d1abbc68f2fee77ac2d04sewardj      case Iop_Max64Fx4:  vex_printf("Max64Fx4"); return;
623636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Max64Fx2:  vex_printf("Max64Fx2"); return;
624636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Max64F0x2: vex_printf("Max64F0x2"); return;
625176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj
6268eb7ae8df9e152f0f99d1abbc68f2fee77ac2d04sewardj      case Iop_Min32Fx8:  vex_printf("Min32Fx8"); return;
627176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj      case Iop_Min32Fx4:  vex_printf("Min32Fx4"); return;
6282fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Min32Fx2:  vex_printf("Min32Fx2"); return;
6292fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin32Fx4:  vex_printf("PwMin32Fx4"); return;
6302fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin32Fx2:  vex_printf("PwMin32Fx2"); return;
631176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj      case Iop_Min32F0x4: vex_printf("Min32F0x4"); return;
6328eb7ae8df9e152f0f99d1abbc68f2fee77ac2d04sewardj      case Iop_Min64Fx4:  vex_printf("Min64Fx4"); return;
633636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Min64Fx2:  vex_printf("Min64Fx2"); return;
634636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Min64F0x2: vex_printf("Min64F0x2"); return;
635176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj
6369636b44102bd3f79cba764576f34931d7b584d9esewardj      case Iop_Mul32Fx4:  vex_printf("Mul32Fx4"); return;
6379636b44102bd3f79cba764576f34931d7b584d9esewardj      case Iop_Mul32F0x4: vex_printf("Mul32F0x4"); return;
638636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Mul64Fx2:  vex_printf("Mul64Fx2"); return;
639636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Mul64F0x2: vex_printf("Mul64F0x2"); return;
6409636b44102bd3f79cba764576f34931d7b584d9esewardj
6411ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32Ux2: vex_printf("RecipEst32Ux2"); return;
6421ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32Fx2: vex_printf("RecipEst32Fx2"); return;
6431ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32Fx4: vex_printf("RecipEst32Fx4"); return;
6441ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32Fx8: vex_printf("RecipEst32Fx8"); return;
6451ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32Ux4: vex_printf("RecipEst32Ux4"); return;
6461ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32F0x4: vex_printf("RecipEst32F0x4"); return;
6471ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipStep32Fx2: vex_printf("RecipStep32Fx2"); return;
6481ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipStep32Fx4: vex_printf("RecipStep32Fx4"); return;
64989cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RecipEst64Fx2: vex_printf("RecipEst64Fx2"); return;
65089cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RecipStep64Fx2: vex_printf("RecipStep64Fx2"); return;
65189cefe4bb6a35343636d47f9888409a4e877fd5esewardj
6522fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs32Fx4:  vex_printf("Abs32Fx4"); return;
653fab09143fb77b43e626ee73eeb375820e275d7bcsewardj      case Iop_Abs64Fx2:  vex_printf("Abs64Fx2"); return;
6541ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtStep32Fx4:  vex_printf("RSqrtStep32Fx4"); return;
65589cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RSqrtStep64Fx2:  vex_printf("RSqrtStep64Fx2"); return;
6561ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtStep32Fx2:  vex_printf("RSqrtStep32Fx2"); return;
65789cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RSqrtEst64Fx2: vex_printf("RSqrtEst64Fx2"); return;
6580bd7ce6ae95b61bd9781f6a70f0132681a7b6387sewardj
6591ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32F0x4: vex_printf("RSqrtEst32F0x4"); return;
6601ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Fx8: vex_printf("RSqrtEst32Fx8"); return;
661c1e7dfc9370ee70f7e9f52294c764d4233619927sewardj
662636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Sqrt32Fx4:  vex_printf("Sqrt32Fx4"); return;
663636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Sqrt32F0x4: vex_printf("Sqrt32F0x4"); return;
664636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Sqrt64Fx2:  vex_printf("Sqrt64Fx2"); return;
665636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Sqrt64F0x2: vex_printf("Sqrt64F0x2"); return;
66666becf3fea6d533e71963a59f9d68cbac2325ff7sewardj      case Iop_Sqrt32Fx8:  vex_printf("Sqrt32Fx8"); return;
66766becf3fea6d533e71963a59f9d68cbac2325ff7sewardj      case Iop_Sqrt64Fx4:  vex_printf("Sqrt64Fx4"); return;
66866becf3fea6d533e71963a59f9d68cbac2325ff7sewardj
669c1e7dfc9370ee70f7e9f52294c764d4233619927sewardj      case Iop_Sub32Fx4:  vex_printf("Sub32Fx4"); return;
6702fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sub32Fx2:  vex_printf("Sub32Fx2"); return;
671c1e7dfc9370ee70f7e9f52294c764d4233619927sewardj      case Iop_Sub32F0x4: vex_printf("Sub32F0x4"); return;
672636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Sub64Fx2:  vex_printf("Sub64Fx2"); return;
673636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Sub64F0x2: vex_printf("Sub64F0x2"); return;
674c1e7dfc9370ee70f7e9f52294c764d4233619927sewardj
6751e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpEQ32Fx4: vex_printf("CmpEQ32Fx4"); return;
6761e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpLT32Fx4: vex_printf("CmpLT32Fx4"); return;
6771e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpLE32Fx4: vex_printf("CmpLE32Fx4"); return;
678206c36410bd92f385b972e36a3a40e38675294e2cerion      case Iop_CmpGT32Fx4: vex_printf("CmpGT32Fx4"); return;
679206c36410bd92f385b972e36a3a40e38675294e2cerion      case Iop_CmpGE32Fx4: vex_printf("CmpGE32Fx4"); return;
6801e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpUN32Fx4: vex_printf("CmpUN32Fx4"); return;
681636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpEQ64Fx2: vex_printf("CmpEQ64Fx2"); return;
682636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpLT64Fx2: vex_printf("CmpLT64Fx2"); return;
683636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpLE64Fx2: vex_printf("CmpLE64Fx2"); return;
684636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpUN64Fx2: vex_printf("CmpUN64Fx2"); return;
6852fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CmpGT32Fx2: vex_printf("CmpGT32Fx2"); return;
6862fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CmpEQ32Fx2: vex_printf("CmpEQ32Fx2"); return;
6872fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CmpGE32Fx2: vex_printf("CmpGE32Fx2"); return;
6881e6ad745ebafd0524da1da27a4b85524fa84f777sewardj
6891e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpEQ32F0x4: vex_printf("CmpEQ32F0x4"); return;
6901e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpLT32F0x4: vex_printf("CmpLT32F0x4"); return;
6911e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpLE32F0x4: vex_printf("CmpLE32F0x4"); return;
6921e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpUN32F0x4: vex_printf("CmpUN32F0x4"); return;
693636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpEQ64F0x2: vex_printf("CmpEQ64F0x2"); return;
694636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpLT64F0x2: vex_printf("CmpLT64F0x2"); return;
695636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpLE64F0x2: vex_printf("CmpLE64F0x2"); return;
696636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpUN64F0x2: vex_printf("CmpUN64F0x2"); return;
697c9a43665879a03886b27a65b68af2a2c11b04f59sewardj
698fab09143fb77b43e626ee73eeb375820e275d7bcsewardj      case Iop_Neg64Fx2: vex_printf("Neg64Fx2"); return;
6992fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Neg32Fx4: vex_printf("Neg32Fx4"); return;
7002fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Neg32Fx2: vex_printf("Neg32Fx2"); return;
7012fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
702f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_V128to64:   vex_printf("V128to64");   return;
703f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_V128HIto64: vex_printf("V128HIto64"); return;
704f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_64HLtoV128: vex_printf("64HLtoV128"); return;
705c9a43665879a03886b27a65b68af2a2c11b04f59sewardj
706f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_64UtoV128:   vex_printf("64UtoV128"); return;
707f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_SetV128lo64: vex_printf("SetV128lo64"); return;
708ecde697ac84d29709ec34f8eb12753f9da32d451sewardj
709ecde697ac84d29709ec34f8eb12753f9da32d451sewardj      case Iop_ZeroHI64ofV128:  vex_printf("ZeroHI64ofV128"); return;
710ecde697ac84d29709ec34f8eb12753f9da32d451sewardj      case Iop_ZeroHI96ofV128:  vex_printf("ZeroHI96ofV128"); return;
711ecde697ac84d29709ec34f8eb12753f9da32d451sewardj      case Iop_ZeroHI112ofV128: vex_printf("ZeroHI112ofV128"); return;
712ecde697ac84d29709ec34f8eb12753f9da32d451sewardj      case Iop_ZeroHI120ofV128: vex_printf("ZeroHI120ofV128"); return;
713129b3d9da92af2ad2c58ffacb977aa5766211f08sewardj
714f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_32UtoV128:   vex_printf("32UtoV128"); return;
715f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_V128to32:    vex_printf("V128to32"); return;
716f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_SetV128lo32: vex_printf("SetV128lo32"); return;
717a0037df4751e5a2da33c417a1548770ffad51a95sewardj
718f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Dup8x16: vex_printf("Dup8x16"); return;
719f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Dup16x8: vex_printf("Dup16x8"); return;
720f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Dup32x4: vex_printf("Dup32x4"); return;
7212fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Dup8x8: vex_printf("Dup8x8"); return;
7222fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Dup16x4: vex_printf("Dup16x4"); return;
7232fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Dup32x2: vex_printf("Dup32x2"); return;
724f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion
725f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_NotV128:    vex_printf("NotV128"); return;
726f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_AndV128:    vex_printf("AndV128"); return;
727f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_OrV128:     vex_printf("OrV128");  return;
728f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_XorV128:    vex_printf("XorV128"); return;
7291806918ae2783af5808f00876581e01c7b650a0dsewardj
7302e38386d2f5902feed6ec276c2c2292a137717b9sewardj      case Iop_CmpNEZ8x16: vex_printf("CmpNEZ8x16"); return;
7312e38386d2f5902feed6ec276c2c2292a137717b9sewardj      case Iop_CmpNEZ16x8: vex_printf("CmpNEZ16x8"); return;
73270f676d62218657de2d230d495ccd775909e107dsewardj      case Iop_CmpNEZ32x4: vex_printf("CmpNEZ32x4"); return;
733109ffdbb31ff652ae83d0ad400966f68c46cd4f1sewardj      case Iop_CmpNEZ64x2: vex_printf("CmpNEZ64x2"); return;
734164f9275c465cd09ecd09276b8542282f5def250sewardj
7352fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs8x16: vex_printf("Abs8x16"); return;
7362fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs16x8: vex_printf("Abs16x8"); return;
7372fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs32x4: vex_printf("Abs32x4"); return;
73825523c41e75eeb10894d60452d8e69ef8bf30244sewardj      case Iop_Abs64x2: vex_printf("Abs64x2"); return;
7392fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
740164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Add8x16:   vex_printf("Add8x16"); return;
741164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Add16x8:   vex_printf("Add16x8"); return;
742164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Add32x4:   vex_printf("Add32x4"); return;
743164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Add64x2:   vex_printf("Add64x2"); return;
744164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_QAdd8Ux16: vex_printf("QAdd8Ux16"); return;
745164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_QAdd16Ux8: vex_printf("QAdd16Ux8"); return;
746f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_QAdd32Ux4: vex_printf("QAdd32Ux4"); return;
747164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_QAdd8Sx16: vex_printf("QAdd8Sx16"); return;
748164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_QAdd16Sx8: vex_printf("QAdd16Sx8"); return;
749f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_QAdd32Sx4: vex_printf("QAdd32Sx4"); return;
7502fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd64Ux2: vex_printf("QAdd64Ux2"); return;
7512fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd64Sx2: vex_printf("QAdd64Sx2"); return;
752f7003bc89eb8b671eae3a9d730e024936b950583sewardj
753f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtUSsatSS8x16: vex_printf("QAddExtUSsatSS8x16"); return;
754f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtUSsatSS16x8: vex_printf("QAddExtUSsatSS16x8"); return;
755f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtUSsatSS32x4: vex_printf("QAddExtUSsatSS32x4"); return;
756f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtUSsatSS64x2: vex_printf("QAddExtUSsatSS64x2"); return;
757f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtSUsatUU8x16: vex_printf("QAddExtSUsatUU8x16"); return;
758f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtSUsatUU16x8: vex_printf("QAddExtSUsatUU16x8"); return;
759f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtSUsatUU32x4: vex_printf("QAddExtSUsatUU32x4"); return;
760f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtSUsatUU64x2: vex_printf("QAddExtSUsatUU64x2"); return;
761f7003bc89eb8b671eae3a9d730e024936b950583sewardj
7622fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd8x16: vex_printf("PwAdd8x16"); return;
7632fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd16x8: vex_printf("PwAdd16x8"); return;
7642fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd32x4: vex_printf("PwAdd32x4"); return;
7652fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL8Ux16: vex_printf("PwAddL8Ux16"); return;
7662fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL16Ux8: vex_printf("PwAddL16Ux8"); return;
7672fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL32Ux4: vex_printf("PwAddL32Ux4"); return;
7682fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL8Sx16: vex_printf("PwAddL8Sx16"); return;
7692fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL16Sx8: vex_printf("PwAddL16Sx8"); return;
7702fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL32Sx4: vex_printf("PwAddL32Sx4"); return;
771164f9275c465cd09ecd09276b8542282f5def250sewardj
772164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Sub8x16:   vex_printf("Sub8x16"); return;
773164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Sub16x8:   vex_printf("Sub16x8"); return;
774164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Sub32x4:   vex_printf("Sub32x4"); return;
775164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Sub64x2:   vex_printf("Sub64x2"); return;
776164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_QSub8Ux16: vex_printf("QSub8Ux16"); return;
777164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_QSub16Ux8: vex_printf("QSub16Ux8"); return;
778f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_QSub32Ux4: vex_printf("QSub32Ux4"); return;
779164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_QSub8Sx16: vex_printf("QSub8Sx16"); return;
780164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_QSub16Sx8: vex_printf("QSub16Sx8"); return;
781f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_QSub32Sx4: vex_printf("QSub32Sx4"); return;
7822fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub64Ux2: vex_printf("QSub64Ux2"); return;
7832fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub64Sx2: vex_printf("QSub64Sx2"); return;
784164f9275c465cd09ecd09276b8542282f5def250sewardj
7852fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mul8x16:    vex_printf("Mul8x16"); return;
786164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Mul16x8:    vex_printf("Mul16x8"); return;
7872fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mul32x4:    vex_printf("Mul32x4"); return;
7882fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mull8Ux8:    vex_printf("Mull8Ux8"); return;
7892fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mull8Sx8:    vex_printf("Mull8Sx8"); return;
7902fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mull16Ux4:    vex_printf("Mull16Ux4"); return;
7912fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mull16Sx4:    vex_printf("Mull16Sx4"); return;
7922fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mull32Ux2:    vex_printf("Mull32Ux2"); return;
7932fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mull32Sx2:    vex_printf("Mull32Sx2"); return;
7942fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PolynomialMul8x16: vex_printf("PolynomialMul8x16"); return;
7952fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PolynomialMull8x8: vex_printf("PolynomialMull8x8"); return;
796164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_MulHi16Ux8: vex_printf("MulHi16Ux8"); return;
797f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_MulHi32Ux4: vex_printf("MulHi32Ux4"); return;
798164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_MulHi16Sx8: vex_printf("MulHi16Sx8"); return;
799f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_MulHi32Sx4: vex_printf("MulHi32Sx4"); return;
8002fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QDMulHi16Sx8: vex_printf("QDMulHi16Sx8"); return;
8012fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QDMulHi32Sx4: vex_printf("QDMulHi32Sx4"); return;
8022fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QRDMulHi16Sx8: vex_printf("QRDMulHi16Sx8"); return;
8032fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QRDMulHi32Sx4: vex_printf("QRDMulHi32Sx4"); return;
804164f9275c465cd09ecd09276b8542282f5def250sewardj
8051ac656a3b8eead55eeb0fb9090efec1c6719f989cerion      case Iop_MullEven8Ux16: vex_printf("MullEven8Ux16"); return;
8061ac656a3b8eead55eeb0fb9090efec1c6719f989cerion      case Iop_MullEven16Ux8: vex_printf("MullEven16Ux8"); return;
80748ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_MullEven32Ux4: vex_printf("MullEven32Ux4"); return;
8081ac656a3b8eead55eeb0fb9090efec1c6719f989cerion      case Iop_MullEven8Sx16: vex_printf("MullEven8Sx16"); return;
8091ac656a3b8eead55eeb0fb9090efec1c6719f989cerion      case Iop_MullEven16Sx8: vex_printf("MullEven16Sx8"); return;
81048ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_MullEven32Sx4: vex_printf("MullEven32Sx4"); return;
8111ac656a3b8eead55eeb0fb9090efec1c6719f989cerion
8127deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_PolynomialMulAdd8x16:
8137deaf9552b546b847528cf39b38898fb7742b5f5carll         vex_printf("PolynomialMulAdd8x16"); return;
8147deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_PolynomialMulAdd16x8:
8157deaf9552b546b847528cf39b38898fb7742b5f5carll         vex_printf("PolynomialMulAdd16x8"); return;
8167deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_PolynomialMulAdd32x4:
8177deaf9552b546b847528cf39b38898fb7742b5f5carll         vex_printf("PolynomialMulAdd32x4"); return;
8187deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_PolynomialMulAdd64x2:
8197deaf9552b546b847528cf39b38898fb7742b5f5carll         vex_printf("PolynomialMulAdd64x2"); return;
8207deaf9552b546b847528cf39b38898fb7742b5f5carll
821164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Avg8Ux16: vex_printf("Avg8Ux16"); return;
822164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Avg16Ux8: vex_printf("Avg16Ux8"); return;
823f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Avg32Ux4: vex_printf("Avg32Ux4"); return;
824f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Avg8Sx16: vex_printf("Avg8Sx16"); return;
825f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Avg16Sx8: vex_printf("Avg16Sx8"); return;
826f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Avg32Sx4: vex_printf("Avg32Sx4"); return;
827164f9275c465cd09ecd09276b8542282f5def250sewardj
828f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Max8Sx16: vex_printf("Max8Sx16"); return;
829164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Max16Sx8: vex_printf("Max16Sx8"); return;
830f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Max32Sx4: vex_printf("Max32Sx4"); return;
83148ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Max64Sx2: vex_printf("Max64Sx2"); return;
832164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Max8Ux16: vex_printf("Max8Ux16"); return;
833f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Max16Ux8: vex_printf("Max16Ux8"); return;
834f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Max32Ux4: vex_printf("Max32Ux4"); return;
83548ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Max64Ux2: vex_printf("Max64Ux2"); return;
836f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion
837f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Min8Sx16: vex_printf("Min8Sx16"); return;
838164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Min16Sx8: vex_printf("Min16Sx8"); return;
839f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Min32Sx4: vex_printf("Min32Sx4"); return;
84048ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Min64Sx2: vex_printf("Min64Sx2"); return;
841164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Min8Ux16: vex_printf("Min8Ux16"); return;
842f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Min16Ux8: vex_printf("Min16Ux8"); return;
843f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Min32Ux4: vex_printf("Min32Ux4"); return;
84448ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Min64Ux2: vex_printf("Min64Ux2"); return;
845164f9275c465cd09ecd09276b8542282f5def250sewardj
846164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_CmpEQ8x16:  vex_printf("CmpEQ8x16"); return;
847164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_CmpEQ16x8:  vex_printf("CmpEQ16x8"); return;
848164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_CmpEQ32x4:  vex_printf("CmpEQ32x4"); return;
849d881562f1d18ab33038dab4a1b24823dba3422c0sewardj      case Iop_CmpEQ64x2:  vex_printf("CmpEQ64x2"); return;
850164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_CmpGT8Sx16: vex_printf("CmpGT8Sx16"); return;
851164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_CmpGT16Sx8: vex_printf("CmpGT16Sx8"); return;
852164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_CmpGT32Sx4: vex_printf("CmpGT32Sx4"); return;
85369d98e3853a63e578e039894e2ef00ca6f9878c8sewardj      case Iop_CmpGT64Sx2: vex_printf("CmpGT64Sx2"); return;
854f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_CmpGT8Ux16: vex_printf("CmpGT8Ux16"); return;
855f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_CmpGT16Ux8: vex_printf("CmpGT16Ux8"); return;
856f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_CmpGT32Ux4: vex_printf("CmpGT32Ux4"); return;
85748ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_CmpGT64Ux2: vex_printf("CmpGT64Ux2"); return;
858f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion
8592fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Cnt8x16: vex_printf("Cnt8x16"); return;
860a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Clz8x16: vex_printf("Clz8x16"); return;
861a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Clz16x8: vex_printf("Clz16x8"); return;
862a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Clz32x4: vex_printf("Clz32x4"); return;
8637deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_Clz64x2: vex_printf("Clz64x2"); return;
864a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Cls8x16: vex_printf("Cls8x16"); return;
865a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Cls16x8: vex_printf("Cls16x8"); return;
866a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Cls32x4: vex_printf("Cls32x4"); return;
8672fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
868f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_ShlV128: vex_printf("ShlV128"); return;
869f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_ShrV128: vex_printf("ShrV128"); return;
870164f9275c465cd09ecd09276b8542282f5def250sewardj
8712a4b8459fa6ccd298263990296b955a36e313398cerion      case Iop_ShlN8x16: vex_printf("ShlN8x16"); return;
872164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_ShlN16x8: vex_printf("ShlN16x8"); return;
873164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_ShlN32x4: vex_printf("ShlN32x4"); return;
874164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_ShlN64x2: vex_printf("ShlN64x2"); return;
8752a4b8459fa6ccd298263990296b955a36e313398cerion      case Iop_ShrN8x16: vex_printf("ShrN8x16"); return;
876164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_ShrN16x8: vex_printf("ShrN16x8"); return;
877164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_ShrN32x4: vex_printf("ShrN32x4"); return;
878164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_ShrN64x2: vex_printf("ShrN64x2"); return;
8792a4b8459fa6ccd298263990296b955a36e313398cerion      case Iop_SarN8x16: vex_printf("SarN8x16"); return;
880164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_SarN16x8: vex_printf("SarN16x8"); return;
881164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_SarN32x4: vex_printf("SarN32x4"); return;
8822fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_SarN64x2: vex_printf("SarN64x2"); return;
883164f9275c465cd09ecd09276b8542282f5def250sewardj
884f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Shl8x16: vex_printf("Shl8x16"); return;
885f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Shl16x8: vex_printf("Shl16x8"); return;
886f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Shl32x4: vex_printf("Shl32x4"); return;
8872fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shl64x2: vex_printf("Shl64x2"); return;
8882fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSal8x16: vex_printf("QSal8x16"); return;
8892fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSal16x8: vex_printf("QSal16x8"); return;
8902fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSal32x4: vex_printf("QSal32x4"); return;
8912fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSal64x2: vex_printf("QSal64x2"); return;
8922fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QShl8x16: vex_printf("QShl8x16"); return;
8932fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QShl16x8: vex_printf("QShl16x8"); return;
8942fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QShl32x4: vex_printf("QShl32x4"); return;
8952fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QShl64x2: vex_printf("QShl64x2"); return;
8961dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS8x16: vex_printf("QShlNsatSS8x16"); return;
8971dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS16x8: vex_printf("QShlNsatSS16x8"); return;
8981dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS32x4: vex_printf("QShlNsatSS32x4"); return;
8991dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS64x2: vex_printf("QShlNsatSS64x2"); return;
9001dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU8x16: vex_printf("QShlNsatUU8x16"); return;
9011dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU16x8: vex_printf("QShlNsatUU16x8"); return;
9021dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU32x4: vex_printf("QShlNsatUU32x4"); return;
9031dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU64x2: vex_printf("QShlNsatUU64x2"); return;
9041dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU8x16: vex_printf("QShlNsatSU8x16"); return;
9051dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU16x8: vex_printf("QShlNsatSU16x8"); return;
9061dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU32x4: vex_printf("QShlNsatSU32x4"); return;
9071dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU64x2: vex_printf("QShlNsatSU64x2"); return;
908f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Shr8x16: vex_printf("Shr8x16"); return;
909f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Shr16x8: vex_printf("Shr16x8"); return;
910f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Shr32x4: vex_printf("Shr32x4"); return;
9112fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shr64x2: vex_printf("Shr64x2"); return;
912f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Sar8x16: vex_printf("Sar8x16"); return;
913f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Sar16x8: vex_printf("Sar16x8"); return;
914f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Sar32x4: vex_printf("Sar32x4"); return;
9152fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sar64x2: vex_printf("Sar64x2"); return;
9162fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal8x16: vex_printf("Sal8x16"); return;
9172fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal16x8: vex_printf("Sal16x8"); return;
9182fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal32x4: vex_printf("Sal32x4"); return;
9192fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal64x2: vex_printf("Sal64x2"); return;
9201bee561912427ca8f8998c89b62d86ba2ee49732sewardj      case Iop_Rol8x16: vex_printf("Rol8x16"); return;
9211bee561912427ca8f8998c89b62d86ba2ee49732sewardj      case Iop_Rol16x8: vex_printf("Rol16x8"); return;
9221bee561912427ca8f8998c89b62d86ba2ee49732sewardj      case Iop_Rol32x4: vex_printf("Rol32x4"); return;
92348ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Rol64x2: vex_printf("Rol64x2"); return;
924f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion
9251297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQsh8x16: vex_printf("QandUQsh8x16"); return;
9261297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQsh16x8: vex_printf("QandUQsh16x8"); return;
9271297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQsh32x4: vex_printf("QandUQsh32x4"); return;
9281297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQsh64x2: vex_printf("QandUQsh64x2"); return;
9291297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQsh8x16: vex_printf("QandSQsh8x16"); return;
9301297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQsh16x8: vex_printf("QandSQsh16x8"); return;
9311297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQsh32x4: vex_printf("QandSQsh32x4"); return;
9321297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQsh64x2: vex_printf("QandSQsh64x2"); return;
9331297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQRsh8x16: vex_printf("QandUQRsh8x16"); return;
9341297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQRsh16x8: vex_printf("QandUQRsh16x8"); return;
9351297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQRsh32x4: vex_printf("QandUQRsh32x4"); return;
9361297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQRsh64x2: vex_printf("QandUQRsh64x2"); return;
9371297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQRsh8x16: vex_printf("QandSQRsh8x16"); return;
9381297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQRsh16x8: vex_printf("QandSQRsh16x8"); return;
9391297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQRsh32x4: vex_printf("QandSQRsh32x4"); return;
9401297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQRsh64x2: vex_printf("QandSQRsh64x2"); return;
9411297218cbc3c4b2da8537cca6e815afa57f255c3sewardj
942a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh8Sx16: vex_printf("Sh8Sx16"); return;
943a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh16Sx8: vex_printf("Sh16Sx8"); return;
944a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh32Sx4: vex_printf("Sh32Sx4"); return;
945a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh64Sx2: vex_printf("Sh64Sx2"); return;
946a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh8Ux16: vex_printf("Sh8Ux16"); return;
947a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh16Ux8: vex_printf("Sh16Ux8"); return;
948a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh32Ux4: vex_printf("Sh32Ux4"); return;
949a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh64Ux2: vex_printf("Sh64Ux2"); return;
950a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh8Sx16: vex_printf("Rsh8Sx16"); return;
951a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh16Sx8: vex_printf("Rsh16Sx8"); return;
952a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh32Sx4: vex_printf("Rsh32Sx4"); return;
953a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh64Sx2: vex_printf("Rsh64Sx2"); return;
954a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh8Ux16: vex_printf("Rsh8Ux16"); return;
955a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh16Ux8: vex_printf("Rsh16Ux8"); return;
956a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh32Ux4: vex_printf("Rsh32Ux4"); return;
957a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh64Ux2: vex_printf("Rsh64Ux2"); return;
958a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj
959ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQShrNnarrow16Uto8Ux8:
960ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQShrNnarrow16Uto8Ux8"); return;
961ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQShrNnarrow32Uto16Ux4:
962ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQShrNnarrow32Uto16Ux4"); return;
963ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQShrNnarrow64Uto32Ux2:
964ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQShrNnarrow64Uto32Ux2"); return;
965ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow16Sto8Sx8:
966ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQSarNnarrow16Sto8Sx8"); return;
967ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow32Sto16Sx4:
968ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQSarNnarrow32Sto16Sx4"); return;
969ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow64Sto32Sx2:
970ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQSarNnarrow64Sto32Sx2"); return;
971ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow16Sto8Ux8:
972ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQSarNnarrow16Sto8Ux8"); return;
973ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow32Sto16Ux4:
974ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQSarNnarrow32Sto16Ux4"); return;
975ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow64Sto32Ux2:
976ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQSarNnarrow64Sto32Ux2"); return;
977ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRShrNnarrow16Uto8Ux8:
978ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQRShrNnarrow16Uto8Ux8"); return;
979ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRShrNnarrow32Uto16Ux4:
980ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQRShrNnarrow32Uto16Ux4"); return;
981ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRShrNnarrow64Uto32Ux2:
982ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQRShrNnarrow64Uto32Ux2"); return;
983ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow16Sto8Sx8:
984ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQRSarNnarrow16Sto8Sx8"); return;
985ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow32Sto16Sx4:
986ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQRSarNnarrow32Sto16Sx4"); return;
987ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow64Sto32Sx2:
988ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQRSarNnarrow64Sto32Sx2"); return;
989ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow16Sto8Ux8:
990ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQRSarNnarrow16Sto8Ux8"); return;
991ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow32Sto16Ux4:
992ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQRSarNnarrow32Sto16Ux4"); return;
993ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow64Sto32Ux2:
994ecedd989304126b77b8ff91044b8dde0e987c67asewardj         vex_printf("QandQRSarNnarrow64Sto32Ux2"); return;
995ecedd989304126b77b8ff91044b8dde0e987c67asewardj
9965f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_NarrowBin16to8x16:    vex_printf("NarrowBin16to8x16"); return;
9975f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_NarrowBin32to16x8:    vex_printf("NarrowBin32to16x8"); return;
9985f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin16Uto8Ux16: vex_printf("QNarrowBin16Uto8Ux16"); return;
9995f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin32Sto16Ux8: vex_printf("QNarrowBin32Sto16Ux8"); return;
10005f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin16Sto8Ux16: vex_printf("QNarrowBin16Sto8Ux16"); return;
10015f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin32Uto16Ux8: vex_printf("QNarrowBin32Uto16Ux8"); return;
10025f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin16Sto8Sx16: vex_printf("QNarrowBin16Sto8Sx16"); return;
10035f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin32Sto16Sx8: vex_printf("QNarrowBin32Sto16Sx8"); return;
10045f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_NarrowUn16to8x8:     vex_printf("NarrowUn16to8x8");  return;
10055f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_NarrowUn32to16x4:    vex_printf("NarrowUn32to16x4"); return;
10065f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_NarrowUn64to32x2:    vex_printf("NarrowUn64to32x2"); return;
10075f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn16Uto8Ux8:  vex_printf("QNarrowUn16Uto8Ux8");  return;
10085f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn32Uto16Ux4: vex_printf("QNarrowUn32Uto16Ux4"); return;
10095f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn64Uto32Ux2: vex_printf("QNarrowUn64Uto32Ux2"); return;
10105f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn16Sto8Sx8:  vex_printf("QNarrowUn16Sto8Sx8");  return;
10115f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn32Sto16Sx4: vex_printf("QNarrowUn32Sto16Sx4"); return;
10125f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn64Sto32Sx2: vex_printf("QNarrowUn64Sto32Sx2"); return;
10135f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn16Sto8Ux8:  vex_printf("QNarrowUn16Sto8Ux8");  return;
10145f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn32Sto16Ux4: vex_printf("QNarrowUn32Sto16Ux4"); return;
10155f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn64Sto32Ux2: vex_printf("QNarrowUn64Sto32Ux2"); return;
10165f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen8Uto16x8:  vex_printf("Widen8Uto16x8");  return;
10175f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen16Uto32x4: vex_printf("Widen16Uto32x4"); return;
10185f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen32Uto64x2: vex_printf("Widen32Uto64x2"); return;
10195f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen8Sto16x8:  vex_printf("Widen8Sto16x8");  return;
10205f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen16Sto32x4: vex_printf("Widen16Sto32x4"); return;
10215f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen32Sto64x2: vex_printf("Widen32Sto64x2"); return;
1022164f9275c465cd09ecd09276b8542282f5def250sewardj
1023164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveHI8x16: vex_printf("InterleaveHI8x16"); return;
1024164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveHI16x8: vex_printf("InterleaveHI16x8"); return;
1025164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveHI32x4: vex_printf("InterleaveHI32x4"); return;
1026164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveHI64x2: vex_printf("InterleaveHI64x2"); return;
1027164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveLO8x16: vex_printf("InterleaveLO8x16"); return;
1028164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveLO16x8: vex_printf("InterleaveLO16x8"); return;
1029164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveLO32x4: vex_printf("InterleaveLO32x4"); return;
1030164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveLO64x2: vex_printf("InterleaveLO64x2"); return;
1031164f9275c465cd09ecd09276b8542282f5def250sewardj
10322fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatOddLanes8x16: vex_printf("CatOddLanes8x16"); return;
10332fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatOddLanes16x8: vex_printf("CatOddLanes16x8"); return;
10342fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatOddLanes32x4: vex_printf("CatOddLanes32x4"); return;
10352fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatEvenLanes8x16: vex_printf("CatEvenLanes8x16"); return;
10362fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatEvenLanes16x8: vex_printf("CatEvenLanes16x8"); return;
10372fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatEvenLanes32x4: vex_printf("CatEvenLanes32x4"); return;
10382fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
10392fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes8x16: vex_printf("InterleaveOddLanes8x16"); return;
10402fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes16x8: vex_printf("InterleaveOddLanes16x8"); return;
10412fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes32x4: vex_printf("InterleaveOddLanes32x4"); return;
10422fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveEvenLanes8x16: vex_printf("InterleaveEvenLanes8x16"); return;
10432fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveEvenLanes16x8: vex_printf("InterleaveEvenLanes16x8"); return;
10442fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveEvenLanes32x4: vex_printf("InterleaveEvenLanes32x4"); return;
10452fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
10462fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem8x16: vex_printf("GetElem8x16"); return;
10472fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem16x8: vex_printf("GetElem16x8"); return;
10482fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem32x4: vex_printf("GetElem32x4"); return;
10492fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem64x2: vex_printf("GetElem64x2"); return;
10502fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
10512fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem8x8: vex_printf("GetElem8x8"); return;
10522fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem16x4: vex_printf("GetElem16x4"); return;
10532fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem32x2: vex_printf("GetElem32x2"); return;
10542fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_SetElem8x8: vex_printf("SetElem8x8"); return;
10552fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_SetElem16x4: vex_printf("SetElem16x4"); return;
10562fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_SetElem32x2: vex_printf("SetElem32x2"); return;
10572fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
1058e6b9bd927408d9a7b0a95a9d930b387659f65218sewardj      case Iop_Slice64: vex_printf("Slice64"); return;
1059e6b9bd927408d9a7b0a95a9d930b387659f65218sewardj      case Iop_SliceV128: vex_printf("SliceV128"); return;
10602fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
1061dc1f91317b466ccabbe21bf0feda19658d5b614bsewardj      case Iop_Perm8x16: vex_printf("Perm8x16"); return;
1062d8bca7e48c8b3ad028878ab501197ba701df43e5sewardj      case Iop_Perm32x4: vex_printf("Perm32x4"); return;
1063336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn16_x8: vex_printf("Reverse8sIn16_x8"); return;
1064336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn32_x4: vex_printf("Reverse8sIn32_x4"); return;
1065336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse16sIn32_x4: vex_printf("Reverse16sIn32_x4"); return;
1066336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn64_x2: vex_printf("Reverse8sIn64_x2"); return;
1067336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse16sIn64_x2: vex_printf("Reverse16sIn64_x2"); return;
1068336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse32sIn64_x2: vex_printf("Reverse32sIn64_x2"); return;
1069715d162596c384614565879bf8d1b44bb9901d5bsewardj      case Iop_Reverse1sIn8_x16: vex_printf("Reverse1sIn8_x16"); return;
10702fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
10712fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32ToFixed32Ux4_RZ: vex_printf("F32ToFixed32Ux4_RZ"); return;
10722fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32ToFixed32Sx4_RZ: vex_printf("F32ToFixed32Sx4_RZ"); return;
10732fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Fixed32UToF32x4_RN: vex_printf("Fixed32UToF32x4_RN"); return;
10742fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Fixed32SToF32x4_RN: vex_printf("Fixed32SToF32x4_RN"); return;
10752fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32ToFixed32Ux2_RZ: vex_printf("F32ToFixed32Ux2_RZ"); return;
10762fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32ToFixed32Sx2_RZ: vex_printf("F32ToFixed32Sx2_RZ"); return;
10772fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Fixed32UToF32x2_RN: vex_printf("Fixed32UToF32x2_RN"); return;
10782fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Fixed32SToF32x2_RN: vex_printf("Fixed32SToF32x2_RN"); return;
1079f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion
108026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D32toD64:  vex_printf("D32toD64");   return;
108126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D64toD32:  vex_printf("D64toD32");   return;
1082c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_AddD64:  vex_printf("AddD64");   return;
1083c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_SubD64:  vex_printf("SubD64");   return;
1084c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_MulD64:  vex_printf("MulD64");   return;
1085c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_DivD64:  vex_printf("DivD64");   return;
108626217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_ShlD64:  vex_printf("ShlD64"); return;
108726217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_ShrD64:  vex_printf("ShrD64"); return;
1088b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D64toI32S:  vex_printf("D64toI32S");  return;
1089b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D64toI32U:  vex_printf("D64toI32U");  return;
109026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D64toI64S:  vex_printf("D64toI64S");  return;
1091b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D64toI64U:  vex_printf("D64toI64U");  return;
1092b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I32StoD64:  vex_printf("I32StoD64");  return;
1093b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I32UtoD64:  vex_printf("I32UtoD64");  return;
109426217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_I64StoD64:  vex_printf("I64StoD64");  return;
1095b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I64UtoD64:  vex_printf("I64UtoD64");  return;
1096b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I32StoD128: vex_printf("I32StoD128"); return;
1097b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I32UtoD128: vex_printf("I32UtoD128"); return;
109826217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_I64StoD128: vex_printf("I64StoD128"); return;
1099b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I64UtoD128: vex_printf("I64UtoD128"); return;
110026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D64toD128:  vex_printf("D64toD128");  return;
110126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D128toD64:  vex_printf("D128toD64");  return;
1102b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D128toI32S: vex_printf("D128toI32S"); return;
1103b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D128toI32U: vex_printf("D128toI32U"); return;
110426217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D128toI64S: vex_printf("D128toI64S"); return;
1105b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D128toI64U: vex_printf("D128toI64U"); return;
1106b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F32toD32:   vex_printf("F32toD32");   return;
1107b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F32toD64:   vex_printf("F32toD64");   return;
1108b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F32toD128:  vex_printf("F32toD128");  return;
1109b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F64toD32:   vex_printf("F64toD32");   return;
111037c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian      case Iop_F64toD64:   vex_printf("F64toD64");   return;
111137c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian      case Iop_F64toD128:  vex_printf("F64toD128");  return;
1112b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F128toD32:  vex_printf("F128toD32");  return;
1113b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F128toD64:  vex_printf("F128toD64");  return;
111437c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian      case Iop_F128toD128: vex_printf("F128toD128"); return;
1115b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D32toF32:   vex_printf("D32toF32");   return;
1116b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D32toF64:   vex_printf("D32toF64");   return;
1117b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D32toF128:  vex_printf("D32toF128");  return;
1118b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D64toF32:   vex_printf("D64toF32");   return;
1119b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D64toF64:   vex_printf("D64toF64");   return;
1120b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D64toF128:  vex_printf("D64toF128");  return;
1121b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D128toF32:  vex_printf("D128toF32");  return;
1122b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D128toF64:  vex_printf("D128toF64");  return;
112337c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian      case Iop_D128toF128: vex_printf("D128toF128"); return;
1124c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_AddD128: vex_printf("AddD128");  return;
1125c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_SubD128: vex_printf("SubD128");  return;
1126c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_MulD128: vex_printf("MulD128");  return;
1127c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_DivD128: vex_printf("DivD128");  return;
112826217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_ShlD128: vex_printf("ShlD128");  return;
112926217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_ShrD128: vex_printf("ShrD128");  return;
11301297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_RoundD64toInt:  vex_printf("RoundD64toInt");  return;
11311297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_RoundD128toInt: vex_printf("RoundD128toInt"); return;
11321297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QuantizeD64:    vex_printf("QuantizeD64");    return;
11331297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QuantizeD128:   vex_printf("QuantizeD128");   return;
11341297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_ExtractExpD64:  vex_printf("ExtractExpD64");  return;
11351297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_ExtractExpD128: vex_printf("ExtractExpD128"); return;
11361297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_ExtractSigD64:  vex_printf("ExtractSigD64");  return;
11371297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_ExtractSigD128: vex_printf("ExtractSigD128"); return;
11381297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_InsertExpD64:   vex_printf("InsertExpD64");   return;
11391297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_InsertExpD128:  vex_printf("InsertExpD128");  return;
114020c6bca02d9b3c985607b4639ffc70eb504cc237florian      case Iop_CmpD64:         vex_printf("CmpD64");     return;
114120c6bca02d9b3c985607b4639ffc70eb504cc237florian      case Iop_CmpD128:        vex_printf("CmpD128");    return;
114220c6bca02d9b3c985607b4639ffc70eb504cc237florian      case Iop_CmpExpD64:      vex_printf("CmpExpD64");  return;
114320c6bca02d9b3c985607b4639ffc70eb504cc237florian      case Iop_CmpExpD128:     vex_printf("CmpExpD128"); return;
114420c6bca02d9b3c985607b4639ffc70eb504cc237florian      case Iop_D64HLtoD128: vex_printf("D64HLtoD128");   return;
114520c6bca02d9b3c985607b4639ffc70eb504cc237florian      case Iop_D128HItoD64: vex_printf("D128HItoD64");   return;
114620c6bca02d9b3c985607b4639ffc70eb504cc237florian      case Iop_D128LOtoD64: vex_printf("D128LOtoD64");   return;
11471297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_SignificanceRoundD64: vex_printf("SignificanceRoundD64");
1148cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj         return;
11491297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_SignificanceRoundD128: vex_printf("SignificanceRoundD128");
1150cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj         return;
1151cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_ReinterpI64asD64: vex_printf("ReinterpI64asD64"); return;
11525eff1c502e995d1f9668cc9def72d5db59f21b13sewardj      case Iop_ReinterpD64asI64: vex_printf("ReinterpD64asI64"); return;
1153c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Iop_V256to64_0: vex_printf("V256to64_0"); return;
1154c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Iop_V256to64_1: vex_printf("V256to64_1"); return;
1155c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Iop_V256to64_2: vex_printf("V256to64_2"); return;
1156c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Iop_V256to64_3: vex_printf("V256to64_3"); return;
1157c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Iop_64x4toV256: vex_printf("64x4toV256"); return;
11584b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj      case Iop_V256toV128_0: vex_printf("V256toV128_0"); return;
11594b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj      case Iop_V256toV128_1: vex_printf("V256toV128_1"); return;
11604b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj      case Iop_V128HLtoV256: vex_printf("V128HLtoV256"); return;
116156c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_DPBtoBCD: vex_printf("DPBtoBCD"); return;
116256c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_BCDtoDPB: vex_printf("BCDtoDPB"); return;
116356c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_Add64Fx4: vex_printf("Add64Fx4"); return;
116456c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_Sub64Fx4: vex_printf("Sub64Fx4"); return;
116556c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_Mul64Fx4: vex_printf("Mul64Fx4"); return;
116656c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_Div64Fx4: vex_printf("Div64Fx4"); return;
116756c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_Add32Fx8: vex_printf("Add32Fx8"); return;
116856c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_Sub32Fx8: vex_printf("Sub32Fx8"); return;
116956c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_Mul32Fx8: vex_printf("Mul32Fx8"); return;
117056c30311864565c853457b4398d96588cdf141fdsewardj      case Iop_Div32Fx8: vex_printf("Div32Fx8"); return;
11714b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj      case Iop_AndV256: vex_printf("AndV256"); return;
11722a2bda92787a9daef62737e54f3a1752920a0ecfsewardj      case Iop_OrV256:  vex_printf("OrV256"); return;
11734b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj      case Iop_XorV256: vex_printf("XorV256"); return;
11742a2bda92787a9daef62737e54f3a1752920a0ecfsewardj      case Iop_NotV256: vex_printf("NotV256"); return;
117523db8a0f3aadf513afc9e7bb8bbde5634fc84137sewardj      case Iop_CmpNEZ64x4: vex_printf("CmpNEZ64x4"); return;
117623db8a0f3aadf513afc9e7bb8bbde5634fc84137sewardj      case Iop_CmpNEZ32x8: vex_printf("CmpNEZ32x8"); return;
1177cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpNEZ16x16: vex_printf("CmpNEZ16x16"); return;
1178cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpNEZ8x32: vex_printf("CmpNEZ8x32"); return;
1179cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
1180cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Add8x32:   vex_printf("Add8x32"); return;
1181cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Add16x16:  vex_printf("Add16x16"); return;
1182cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Add32x8:   vex_printf("Add32x8"); return;
1183cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Add64x4:   vex_printf("Add64x4"); return;
1184cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Sub8x32:   vex_printf("Sub8x32"); return;
1185cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Sub16x16:  vex_printf("Sub16x16"); return;
1186cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Sub32x8:   vex_printf("Sub32x8"); return;
1187cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Sub64x4:   vex_printf("Sub64x4"); return;
1188cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QAdd8Ux32: vex_printf("QAdd8Ux32"); return;
1189cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QAdd16Ux16: vex_printf("QAdd16Ux16"); return;
1190cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QAdd8Sx32: vex_printf("QAdd8Sx32"); return;
1191cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QAdd16Sx16: vex_printf("QAdd16Sx16"); return;
1192cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QSub8Ux32: vex_printf("QSub8Ux32"); return;
1193cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QSub16Ux16: vex_printf("QSub16Ux16"); return;
1194cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QSub8Sx32: vex_printf("QSub8Sx32"); return;
1195cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QSub16Sx16: vex_printf("QSub16Sx16"); return;
1196cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
1197cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Mul16x16:    vex_printf("Mul16x16"); return;
1198cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Mul32x8:     vex_printf("Mul32x8"); return;
1199cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_MulHi16Ux16: vex_printf("MulHi16Ux16"); return;
1200cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_MulHi16Sx16: vex_printf("MulHi16Sx16"); return;
1201cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
1202cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Avg8Ux32:  vex_printf("Avg8Ux32"); return;
1203cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Avg16Ux16: vex_printf("Avg16Ux16"); return;
1204cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
1205cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Max8Sx32:  vex_printf("Max8Sx32"); return;
1206cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Max16Sx16: vex_printf("Max16Sx16"); return;
1207cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Max32Sx8:  vex_printf("Max32Sx8"); return;
1208cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Max8Ux32:  vex_printf("Max8Ux32"); return;
1209cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Max16Ux16: vex_printf("Max16Ux16"); return;
1210cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Max32Ux8:  vex_printf("Max32Ux8"); return;
1211cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
1212cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Min8Sx32:  vex_printf("Min8Sx32"); return;
1213cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Min16Sx16: vex_printf("Min16Sx16"); return;
1214cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Min32Sx8:  vex_printf("Min32Sx8"); return;
1215cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Min8Ux32:  vex_printf("Min8Ux32"); return;
1216cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Min16Ux16: vex_printf("Min16Ux16"); return;
1217cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Min32Ux8:  vex_printf("Min32Ux8"); return;
1218cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
1219cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpEQ8x32:   vex_printf("CmpEQ8x32"); return;
1220cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpEQ16x16:  vex_printf("CmpEQ16x16"); return;
1221cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpEQ32x8:   vex_printf("CmpEQ32x8"); return;
1222cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpEQ64x4:   vex_printf("CmpEQ64x4"); return;
1223cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpGT8Sx32:  vex_printf("CmpGT8Sx32"); return;
1224cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpGT16Sx16: vex_printf("CmpGT16Sx16"); return;
1225cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpGT32Sx8:  vex_printf("CmpGT32Sx8"); return;
1226cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpGT64Sx4:  vex_printf("CmpGT64Sx4"); return;
1227cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
1228cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShlN16x16:  vex_printf("ShlN16x16"); return;
1229cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShlN32x8:   vex_printf("ShlN32x8"); return;
1230cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShlN64x4:   vex_printf("ShlN64x4"); return;
1231cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShrN16x16:  vex_printf("ShrN16x16"); return;
1232cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShrN32x8:   vex_printf("ShrN32x8"); return;
1233cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShrN64x4:   vex_printf("ShrN64x4"); return;
1234cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_SarN16x16:  vex_printf("SarN16x16"); return;
1235cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_SarN32x8:   vex_printf("SarN32x8"); return;
1236cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
1237cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Perm32x8:   vex_printf("Perm32x8"); return;
1238cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
12397deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_CipherV128:   vex_printf("CipherV128"); return;
12407deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_CipherLV128:  vex_printf("CipherLV128"); return;
12417deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_NCipherV128:  vex_printf("NCipherV128"); return;
12427deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_NCipherLV128: vex_printf("NCipherLV128"); return;
12437deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_CipherSV128:  vex_printf("CipherSV128"); return;
12447deaf9552b546b847528cf39b38898fb7742b5f5carll
12457deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_SHA256:  vex_printf("SHA256"); return;
12467deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_SHA512:  vex_printf("SHA512"); return;
12477deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_BCDAdd:  vex_printf("BCDAdd"); return;
12487deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_BCDSub:  vex_printf("BCDSub"); return;
12497deaf9552b546b847528cf39b38898fb7742b5f5carll
125060c6bac19ffe055cabab554e7877d73096a8bf17carll      case Iop_PwBitMtxXpose64x2: vex_printf("BitMatrixTranspose64x2"); return;
125160c6bac19ffe055cabab554e7877d73096a8bf17carll
1252c9a43665879a03886b27a65b68af2a2c11b04f59sewardj      default: vpanic("ppIROp(1)");
125341f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj   }
12541fb8c92e9b0882ebbd53c04c69ebad7efb1cd3d8sewardj
12551fb8c92e9b0882ebbd53c04c69ebad7efb1cd3d8sewardj   vassert(str);
125641f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj   switch (op - base) {
1257ecbaee7106e4336492ca6f11c69ebcb3cf6fa821sewardj      case 0: vex_printf("%s",str); vex_printf("8"); break;
1258ecbaee7106e4336492ca6f11c69ebcb3cf6fa821sewardj      case 1: vex_printf("%s",str); vex_printf("16"); break;
1259ecbaee7106e4336492ca6f11c69ebcb3cf6fa821sewardj      case 2: vex_printf("%s",str); vex_printf("32"); break;
1260ecbaee7106e4336492ca6f11c69ebcb3cf6fa821sewardj      case 3: vex_printf("%s",str); vex_printf("64"); break;
126141f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj      default: vpanic("ppIROp(2)");
126241f43bcdee3e150a74a2e8c8e3b5bc5f5fda3215sewardj   }
1263ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
1264ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
12650b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRExpr ( const IRExpr* e )
1266ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj{
1267e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj  Int i;
1268e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj  switch (e->tag) {
1269443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardj    case Iex_Binder:
1270443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardj      vex_printf("BIND-%d", e->Iex.Binder.binder);
1271443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardj      break;
1272e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj    case Iex_Get:
1273c9a43665879a03886b27a65b68af2a2c11b04f59sewardj      vex_printf( "GET:" );
1274fbcaf3312f39fb73d54821636c6168db76245f61sewardj      ppIRType(e->Iex.Get.ty);
1275c9a43665879a03886b27a65b68af2a2c11b04f59sewardj      vex_printf("(%d)", e->Iex.Get.offset);
1276ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj      break;
1277bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj    case Iex_GetI:
12782d3f77c12d2911173fd182d0b6e954196dee9135sewardj      vex_printf( "GETI" );
1279dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      ppIRRegArray(e->Iex.GetI.descr);
12802d3f77c12d2911173fd182d0b6e954196dee9135sewardj      vex_printf("[");
1281eeac841fbfcadbc19e97c7ef56bfa3354ba78637sewardj      ppIRExpr(e->Iex.GetI.ix);
12822d3f77c12d2911173fd182d0b6e954196dee9135sewardj      vex_printf(",%d]", e->Iex.GetI.bias);
1283bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj      break;
1284dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj    case Iex_RdTmp:
1285dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      ppIRTemp(e->Iex.RdTmp.tmp);
1286ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj      break;
128796d7cc3e7d54ad5af2af2821223b21f9a8516a59florian    case Iex_Qop: {
12880b70efae27eafd60bc7ea9a3955605d55a681651florian      const IRQop *qop = e->Iex.Qop.details;
128996d7cc3e7d54ad5af2af2821223b21f9a8516a59florian      ppIROp(qop->op);
129040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      vex_printf( "(" );
129196d7cc3e7d54ad5af2af2821223b21f9a8516a59florian      ppIRExpr(qop->arg1);
129240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      vex_printf( "," );
129396d7cc3e7d54ad5af2af2821223b21f9a8516a59florian      ppIRExpr(qop->arg2);
129440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      vex_printf( "," );
129596d7cc3e7d54ad5af2af2821223b21f9a8516a59florian      ppIRExpr(qop->arg3);
129640c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      vex_printf( "," );
129796d7cc3e7d54ad5af2af2821223b21f9a8516a59florian      ppIRExpr(qop->arg4);
129840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      vex_printf( ")" );
129940c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      break;
130096d7cc3e7d54ad5af2af2821223b21f9a8516a59florian    }
1301420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian    case Iex_Triop: {
13020b70efae27eafd60bc7ea9a3955605d55a681651florian      const IRTriop *triop = e->Iex.Triop.details;
1303420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian      ppIROp(triop->op);
1304b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      vex_printf( "(" );
1305420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian      ppIRExpr(triop->arg1);
1306b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      vex_printf( "," );
1307420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian      ppIRExpr(triop->arg2);
1308b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      vex_printf( "," );
1309420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian      ppIRExpr(triop->arg3);
1310b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      vex_printf( ")" );
1311b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      break;
1312420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian    }
1313e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj    case Iex_Binop:
131435421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      ppIROp(e->Iex.Binop.op);
131535421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      vex_printf( "(" );
131635421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      ppIRExpr(e->Iex.Binop.arg1);
131735421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      vex_printf( "," );
131835421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      ppIRExpr(e->Iex.Binop.arg2);
131935421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      vex_printf( ")" );
1320ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj      break;
1321e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj    case Iex_Unop:
132235421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      ppIROp(e->Iex.Unop.op);
132335421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      vex_printf( "(" );
132435421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      ppIRExpr(e->Iex.Unop.arg);
132535421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      vex_printf( ")" );
1326ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj      break;
1327af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj    case Iex_Load:
1328e768e92e054cde495849a5c842a477d287677f78sewardj      vex_printf( "LD%s:", e->Iex.Load.end==Iend_LE ? "le" : "be" );
1329af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      ppIRType(e->Iex.Load.ty);
1330e05c42c99a8e01d05096482afdaa3e7460265dc2sewardj      vex_printf( "(" );
1331af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      ppIRExpr(e->Iex.Load.addr);
133235421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      vex_printf( ")" );
1333ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj      break;
1334e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj    case Iex_Const:
133535421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      ppIRConst(e->Iex.Const.con);
1336ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj      break;
1337e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj    case Iex_CCall:
13388ea867b06de73d909c29e243407713c291c8414esewardj      ppIRCallee(e->Iex.CCall.cee);
13398ea867b06de73d909c29e243407713c291c8414esewardj      vex_printf("(");
1340e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj      for (i = 0; e->Iex.CCall.args[i] != NULL; i++) {
134174142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj        IRExpr* arg = e->Iex.CCall.args[i];
13429041956f39c57e265122ed0a71061dea1e554edcflorian        ppIRExpr(arg);
13439041956f39c57e265122ed0a71061dea1e554edcflorian
134474142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj        if (e->Iex.CCall.args[i+1] != NULL) {
1345e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj          vex_printf(",");
134674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj        }
1347e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj      }
1348e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj      vex_printf("):");
1349e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj      ppIRType(e->Iex.CCall.retty);
1350e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj      break;
135199dd03e04a6914d90d5fee727d61d76905334becflorian    case Iex_ITE:
135299dd03e04a6914d90d5fee727d61d76905334becflorian      vex_printf("ITE(");
135399dd03e04a6914d90d5fee727d61d76905334becflorian      ppIRExpr(e->Iex.ITE.cond);
1354eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj      vex_printf(",");
135599dd03e04a6914d90d5fee727d61d76905334becflorian      ppIRExpr(e->Iex.ITE.iftrue);
1356eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj      vex_printf(",");
135799dd03e04a6914d90d5fee727d61d76905334becflorian      ppIRExpr(e->Iex.ITE.iffalse);
1358eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj      vex_printf(")");
1359eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj      break;
13609041956f39c57e265122ed0a71061dea1e554edcflorian    case Iex_VECRET:
13619041956f39c57e265122ed0a71061dea1e554edcflorian      vex_printf("VECRET");
13629041956f39c57e265122ed0a71061dea1e554edcflorian      break;
13639041956f39c57e265122ed0a71061dea1e554edcflorian    case Iex_BBPTR:
13649041956f39c57e265122ed0a71061dea1e554edcflorian      vex_printf("BBPTR");
13659041956f39c57e265122ed0a71061dea1e554edcflorian      break;
1366ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj    default:
1367909c06d691898bb673cf2ab107412131bde07d9asewardj      vpanic("ppIRExpr");
1368ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj  }
1369ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
1370ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
137117442fe8094d0f82266e5a05509f62cac8f7539esewardjvoid ppIREffect ( IREffect fx )
137217442fe8094d0f82266e5a05509f62cac8f7539esewardj{
137317442fe8094d0f82266e5a05509f62cac8f7539esewardj   switch (fx) {
137417442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ifx_None:   vex_printf("noFX"); return;
137517442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ifx_Read:   vex_printf("RdFX"); return;
137617442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ifx_Write:  vex_printf("WrFX"); return;
137717442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ifx_Modify: vex_printf("MoFX"); return;
137817442fe8094d0f82266e5a05509f62cac8f7539esewardj      default: vpanic("ppIREffect");
137917442fe8094d0f82266e5a05509f62cac8f7539esewardj   }
138017442fe8094d0f82266e5a05509f62cac8f7539esewardj}
138117442fe8094d0f82266e5a05509f62cac8f7539esewardj
13820b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRDirty ( const IRDirty* d )
138317442fe8094d0f82266e5a05509f62cac8f7539esewardj{
138417442fe8094d0f82266e5a05509f62cac8f7539esewardj   Int i;
138592d168d0f2a985ed9f7ae4e6bba9565a13921b31sewardj   if (d->tmp != IRTemp_INVALID) {
13864b861de5057856808ec69590f0f0f7c301493272sewardj      ppIRTemp(d->tmp);
13874b861de5057856808ec69590f0f0f7c301493272sewardj      vex_printf(" = ");
13884b861de5057856808ec69590f0f0f7c301493272sewardj   }
1389b8385d891bddf9016250435f47c06ac44ec921bfsewardj   vex_printf("DIRTY ");
1390b8385d891bddf9016250435f47c06ac44ec921bfsewardj   ppIRExpr(d->guard);
139117442fe8094d0f82266e5a05509f62cac8f7539esewardj   if (d->mFx != Ifx_None) {
139249651f4b59b1ab7e0e70cccd34001630eafbe957sewardj      vex_printf(" ");
139317442fe8094d0f82266e5a05509f62cac8f7539esewardj      ppIREffect(d->mFx);
139417442fe8094d0f82266e5a05509f62cac8f7539esewardj      vex_printf("-mem(");
139517442fe8094d0f82266e5a05509f62cac8f7539esewardj      ppIRExpr(d->mAddr);
139649651f4b59b1ab7e0e70cccd34001630eafbe957sewardj      vex_printf(",%d)", d->mSize);
139717442fe8094d0f82266e5a05509f62cac8f7539esewardj   }
139817442fe8094d0f82266e5a05509f62cac8f7539esewardj   for (i = 0; i < d->nFxState; i++) {
139949651f4b59b1ab7e0e70cccd34001630eafbe957sewardj      vex_printf(" ");
140017442fe8094d0f82266e5a05509f62cac8f7539esewardj      ppIREffect(d->fxState[i].fx);
1401c9069f2908814843e9a4da00da9c8905440195a6sewardj      vex_printf("-gst(%u,%u", (UInt)d->fxState[i].offset,
1402c9069f2908814843e9a4da00da9c8905440195a6sewardj                               (UInt)d->fxState[i].size);
1403c9069f2908814843e9a4da00da9c8905440195a6sewardj      if (d->fxState[i].nRepeats > 0) {
1404c9069f2908814843e9a4da00da9c8905440195a6sewardj         vex_printf(",reps%u,step%u", (UInt)d->fxState[i].nRepeats,
1405c9069f2908814843e9a4da00da9c8905440195a6sewardj                                      (UInt)d->fxState[i].repeatLen);
1406c9069f2908814843e9a4da00da9c8905440195a6sewardj      }
1407c9069f2908814843e9a4da00da9c8905440195a6sewardj      vex_printf(")");
140817442fe8094d0f82266e5a05509f62cac8f7539esewardj   }
1409c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   vex_printf(" ::: ");
14108ea867b06de73d909c29e243407713c291c8414esewardj   ppIRCallee(d->cee);
14118ea867b06de73d909c29e243407713c291c8414esewardj   vex_printf("(");
141217442fe8094d0f82266e5a05509f62cac8f7539esewardj   for (i = 0; d->args[i] != NULL; i++) {
141374142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj      IRExpr* arg = d->args[i];
14149041956f39c57e265122ed0a71061dea1e554edcflorian      ppIRExpr(arg);
14159041956f39c57e265122ed0a71061dea1e554edcflorian
141617442fe8094d0f82266e5a05509f62cac8f7539esewardj      if (d->args[i+1] != NULL) {
141717442fe8094d0f82266e5a05509f62cac8f7539esewardj         vex_printf(",");
141817442fe8094d0f82266e5a05509f62cac8f7539esewardj      }
141917442fe8094d0f82266e5a05509f62cac8f7539esewardj   }
142017442fe8094d0f82266e5a05509f62cac8f7539esewardj   vex_printf(")");
142117442fe8094d0f82266e5a05509f62cac8f7539esewardj}
142217442fe8094d0f82266e5a05509f62cac8f7539esewardj
14230b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRCAS ( const IRCAS* cas )
1424e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj{
1425e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   /* Print even structurally invalid constructions, as an aid to
1426e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      debugging. */
1427e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   if (cas->oldHi != IRTemp_INVALID) {
1428e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      ppIRTemp(cas->oldHi);
1429e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      vex_printf(",");
1430e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   }
1431e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   ppIRTemp(cas->oldLo);
1432e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   vex_printf(" = CAS%s(", cas->end==Iend_LE ? "le" : "be" );
1433e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   ppIRExpr(cas->addr);
1434e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   vex_printf("::");
1435e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   if (cas->expdHi) {
1436e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      ppIRExpr(cas->expdHi);
1437e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      vex_printf(",");
1438e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   }
1439e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   ppIRExpr(cas->expdLo);
1440e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   vex_printf("->");
1441e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   if (cas->dataHi) {
1442e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      ppIRExpr(cas->dataHi);
1443e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      vex_printf(",");
1444e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   }
1445e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   ppIRExpr(cas->dataLo);
1446e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   vex_printf(")");
1447e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj}
1448e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj
14490b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRPutI ( const IRPutI* puti )
1450d6f38b3f822f7d57adfc0da3410995d85d6a4597florian{
1451d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   vex_printf( "PUTI" );
1452d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   ppIRRegArray(puti->descr);
1453d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   vex_printf("[");
1454d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   ppIRExpr(puti->ix);
1455d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   vex_printf(",%d] = ", puti->bias);
1456d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   ppIRExpr(puti->data);
1457d6f38b3f822f7d57adfc0da3410995d85d6a4597florian}
1458d6f38b3f822f7d57adfc0da3410995d85d6a4597florian
14590b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRStoreG ( const IRStoreG* sg )
1460cfe046e178666280b87da998b1b52ecda03ecd89sewardj{
1461cfe046e178666280b87da998b1b52ecda03ecd89sewardj   vex_printf("if (");
1462cfe046e178666280b87da998b1b52ecda03ecd89sewardj   ppIRExpr(sg->guard);
1463d8a2bcb35f34b91f8e4596f115071cefcceb9b14sewardj   vex_printf(") { ST%s(", sg->end==Iend_LE ? "le" : "be");
1464cfe046e178666280b87da998b1b52ecda03ecd89sewardj   ppIRExpr(sg->addr);
1465cfe046e178666280b87da998b1b52ecda03ecd89sewardj   vex_printf(") = ");
1466cfe046e178666280b87da998b1b52ecda03ecd89sewardj   ppIRExpr(sg->data);
1467d8a2bcb35f34b91f8e4596f115071cefcceb9b14sewardj   vex_printf(" }");
1468cfe046e178666280b87da998b1b52ecda03ecd89sewardj}
1469cfe046e178666280b87da998b1b52ecda03ecd89sewardj
1470cfe046e178666280b87da998b1b52ecda03ecd89sewardjvoid ppIRLoadGOp ( IRLoadGOp cvt )
1471cfe046e178666280b87da998b1b52ecda03ecd89sewardj{
1472cfe046e178666280b87da998b1b52ecda03ecd89sewardj   switch (cvt) {
1473cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case ILGop_INVALID: vex_printf("ILGop_INVALID"); break;
1474802bbae6cf8fbc3b6309514b84372f24147fa64esewardj      case ILGop_Ident64: vex_printf("Ident64"); break;
1475cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case ILGop_Ident32: vex_printf("Ident32"); break;
1476cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case ILGop_16Uto32: vex_printf("16Uto32"); break;
1477cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case ILGop_16Sto32: vex_printf("16Sto32"); break;
1478cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case ILGop_8Uto32:  vex_printf("8Uto32"); break;
1479cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case ILGop_8Sto32:  vex_printf("8Sto32"); break;
1480cfe046e178666280b87da998b1b52ecda03ecd89sewardj      default: vpanic("ppIRLoadGOp");
1481cfe046e178666280b87da998b1b52ecda03ecd89sewardj   }
1482cfe046e178666280b87da998b1b52ecda03ecd89sewardj}
1483cfe046e178666280b87da998b1b52ecda03ecd89sewardj
14840b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRLoadG ( const IRLoadG* lg )
1485cfe046e178666280b87da998b1b52ecda03ecd89sewardj{
1486cfe046e178666280b87da998b1b52ecda03ecd89sewardj   ppIRTemp(lg->dst);
1487cfe046e178666280b87da998b1b52ecda03ecd89sewardj   vex_printf(" = if-strict (");
1488cfe046e178666280b87da998b1b52ecda03ecd89sewardj   ppIRExpr(lg->guard);
1489cfe046e178666280b87da998b1b52ecda03ecd89sewardj   vex_printf(") ");
1490cfe046e178666280b87da998b1b52ecda03ecd89sewardj   ppIRLoadGOp(lg->cvt);
1491cfe046e178666280b87da998b1b52ecda03ecd89sewardj   vex_printf("(LD%s(", lg->end==Iend_LE ? "le" : "be");
1492cfe046e178666280b87da998b1b52ecda03ecd89sewardj   ppIRExpr(lg->addr);
1493cfe046e178666280b87da998b1b52ecda03ecd89sewardj   vex_printf(")) else ");
1494cfe046e178666280b87da998b1b52ecda03ecd89sewardj   ppIRExpr(lg->alt);
1495cfe046e178666280b87da998b1b52ecda03ecd89sewardj}
1496cfe046e178666280b87da998b1b52ecda03ecd89sewardj
1497893aadad7f29f7801ce26cb7575c16e90bd3767fsewardjvoid ppIRJumpKind ( IRJumpKind kind )
1498893aadad7f29f7801ce26cb7575c16e90bd3767fsewardj{
1499893aadad7f29f7801ce26cb7575c16e90bd3767fsewardj   switch (kind) {
1500a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Boring:        vex_printf("Boring"); break;
1501a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Call:          vex_printf("Call"); break;
1502a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Ret:           vex_printf("Return"); break;
1503a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_ClientReq:     vex_printf("ClientReq"); break;
1504a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Yield:         vex_printf("Yield"); break;
1505a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_EmWarn:        vex_printf("EmWarn"); break;
1506a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_EmFail:        vex_printf("EmFail"); break;
1507a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_NoDecode:      vex_printf("NoDecode"); break;
1508a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_MapFail:       vex_printf("MapFail"); break;
150905f5e0172384dd2983fb16fbb7deebd74d71cd35sewardj      case Ijk_InvalICache:   vex_printf("InvalICache"); break;
151065902992da28822e4753594c7b72f7cb177fe3a6sewardj      case Ijk_FlushDCache:   vex_printf("FlushDCache"); break;
1511a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_NoRedir:       vex_printf("NoRedir"); break;
15120e006f25d4016d7845bd016b65b5d2676a4e8c92dejanj      case Ijk_SigILL:        vex_printf("SigILL"); break;
1513a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_SigTRAP:       vex_printf("SigTRAP"); break;
1514a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_SigSEGV:       vex_printf("SigSEGV"); break;
1515a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_SigBUS:        vex_printf("SigBUS"); break;
1516a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_SigFPE_IntDiv: vex_printf("SigFPE_IntDiv"); break;
1517a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_SigFPE_IntOvf: vex_printf("SigFPE_IntOvf"); break;
1518a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Sys_syscall:   vex_printf("Sys_syscall"); break;
1519a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Sys_int32:     vex_printf("Sys_int32"); break;
1520a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Sys_int128:    vex_printf("Sys_int128"); break;
1521a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Sys_int129:    vex_printf("Sys_int129"); break;
1522a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Sys_int130:    vex_printf("Sys_int130"); break;
1523a6a1986ba221f6c827662b57a7e4ef8206093475petarj      case Ijk_Sys_sysenter:  vex_printf("Sys_sysenter"); break;
1524a6a1986ba221f6c827662b57a7e4ef8206093475petarj      default:                vpanic("ppIRJumpKind");
1525893aadad7f29f7801ce26cb7575c16e90bd3767fsewardj   }
1526893aadad7f29f7801ce26cb7575c16e90bd3767fsewardj}
1527893aadad7f29f7801ce26cb7575c16e90bd3767fsewardj
1528c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardjvoid ppIRMBusEvent ( IRMBusEvent event )
1529c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj{
1530c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj   switch (event) {
15316d615ba78d168bb4319120fff5ce83d3f7433022sewardj      case Imbe_Fence:
15326d615ba78d168bb4319120fff5ce83d3f7433022sewardj         vex_printf("Fence"); break;
15336d615ba78d168bb4319120fff5ce83d3f7433022sewardj      case Imbe_CancelReservation:
15346d615ba78d168bb4319120fff5ce83d3f7433022sewardj         vex_printf("CancelReservation"); break;
15356d615ba78d168bb4319120fff5ce83d3f7433022sewardj      default:
15366d615ba78d168bb4319120fff5ce83d3f7433022sewardj         vpanic("ppIRMBusEvent");
1537c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj   }
1538c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj}
1539c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj
15400b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRStmt ( const IRStmt* s )
1541ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj{
1542d2445f60726580b450eca68ab40c568f9df338e2sewardj   if (!s) {
1543d2445f60726580b450eca68ab40c568f9df338e2sewardj      vex_printf("!!! IRStmt* which is NULL !!!");
1544d2445f60726580b450eca68ab40c568f9df338e2sewardj      return;
1545d2445f60726580b450eca68ab40c568f9df338e2sewardj   }
154617442fe8094d0f82266e5a05509f62cac8f7539esewardj   switch (s->tag) {
1547d2445f60726580b450eca68ab40c568f9df338e2sewardj      case Ist_NoOp:
1548d2445f60726580b450eca68ab40c568f9df338e2sewardj         vex_printf("IR-NoOp");
1549d2445f60726580b450eca68ab40c568f9df338e2sewardj         break;
1550f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj      case Ist_IMark:
1551dcd6d236c9aef7d4c84369d4c51f6b92ac910127florian         vex_printf( "------ IMark(0x%lx, %u, %u) ------",
15522f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj                     s->Ist.IMark.addr, s->Ist.IMark.len,
15532f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj                     (UInt)s->Ist.IMark.delta);
1554f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj         break;
15555a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj      case Ist_AbiHint:
15565a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj         vex_printf("====== AbiHint(");
15575a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj         ppIRExpr(s->Ist.AbiHint.base);
1558478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj         vex_printf(", %d, ", s->Ist.AbiHint.len);
1559478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj         ppIRExpr(s->Ist.AbiHint.nia);
1560478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj         vex_printf(") ======");
15615a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj         break;
156217442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ist_Put:
156317442fe8094d0f82266e5a05509f62cac8f7539esewardj         vex_printf( "PUT(%d) = ", s->Ist.Put.offset);
15646d07636436a548a3e14dc2ca7cbd454e2b8d5c89sewardj         ppIRExpr(s->Ist.Put.data);
156517442fe8094d0f82266e5a05509f62cac8f7539esewardj         break;
156617442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ist_PutI:
1567d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         ppIRPutI(s->Ist.PutI.details);
156817442fe8094d0f82266e5a05509f62cac8f7539esewardj         break;
1569dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      case Ist_WrTmp:
1570dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         ppIRTemp(s->Ist.WrTmp.tmp);
157117442fe8094d0f82266e5a05509f62cac8f7539esewardj         vex_printf( " = " );
1572dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         ppIRExpr(s->Ist.WrTmp.data);
157317442fe8094d0f82266e5a05509f62cac8f7539esewardj         break;
1574af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      case Ist_Store:
1575af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         vex_printf( "ST%s(", s->Ist.Store.end==Iend_LE ? "le" : "be" );
1576af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         ppIRExpr(s->Ist.Store.addr);
157717442fe8094d0f82266e5a05509f62cac8f7539esewardj         vex_printf( ") = ");
1578af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         ppIRExpr(s->Ist.Store.data);
1579e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         break;
1580cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_StoreG:
1581cfe046e178666280b87da998b1b52ecda03ecd89sewardj         ppIRStoreG(s->Ist.StoreG.details);
1582cfe046e178666280b87da998b1b52ecda03ecd89sewardj         break;
1583cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_LoadG:
1584cfe046e178666280b87da998b1b52ecda03ecd89sewardj         ppIRLoadG(s->Ist.LoadG.details);
1585cfe046e178666280b87da998b1b52ecda03ecd89sewardj         break;
1586e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      case Ist_CAS:
1587e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         ppIRCAS(s->Ist.CAS.details);
158817442fe8094d0f82266e5a05509f62cac8f7539esewardj         break;
1589e768e92e054cde495849a5c842a477d287677f78sewardj      case Ist_LLSC:
1590e768e92e054cde495849a5c842a477d287677f78sewardj         if (s->Ist.LLSC.storedata == NULL) {
1591e768e92e054cde495849a5c842a477d287677f78sewardj            ppIRTemp(s->Ist.LLSC.result);
1592e768e92e054cde495849a5c842a477d287677f78sewardj            vex_printf(" = LD%s-Linked(",
1593e768e92e054cde495849a5c842a477d287677f78sewardj                       s->Ist.LLSC.end==Iend_LE ? "le" : "be");
1594e768e92e054cde495849a5c842a477d287677f78sewardj            ppIRExpr(s->Ist.LLSC.addr);
1595e768e92e054cde495849a5c842a477d287677f78sewardj            vex_printf(")");
1596e768e92e054cde495849a5c842a477d287677f78sewardj         } else {
1597e768e92e054cde495849a5c842a477d287677f78sewardj            ppIRTemp(s->Ist.LLSC.result);
1598e768e92e054cde495849a5c842a477d287677f78sewardj            vex_printf(" = ( ST%s-Cond(",
1599e768e92e054cde495849a5c842a477d287677f78sewardj                       s->Ist.LLSC.end==Iend_LE ? "le" : "be");
1600e768e92e054cde495849a5c842a477d287677f78sewardj            ppIRExpr(s->Ist.LLSC.addr);
1601e768e92e054cde495849a5c842a477d287677f78sewardj            vex_printf(") = ");
1602e768e92e054cde495849a5c842a477d287677f78sewardj            ppIRExpr(s->Ist.LLSC.storedata);
1603e768e92e054cde495849a5c842a477d287677f78sewardj            vex_printf(" )");
1604e768e92e054cde495849a5c842a477d287677f78sewardj         }
1605e768e92e054cde495849a5c842a477d287677f78sewardj         break;
160617442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ist_Dirty:
160717442fe8094d0f82266e5a05509f62cac8f7539esewardj         ppIRDirty(s->Ist.Dirty.details);
160817442fe8094d0f82266e5a05509f62cac8f7539esewardj         break;
1609c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj      case Ist_MBE:
1610c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj         vex_printf("IR-");
1611c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj         ppIRMBusEvent(s->Ist.MBE.event);
16123e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj         break;
161317442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ist_Exit:
161417442fe8094d0f82266e5a05509f62cac8f7539esewardj         vex_printf( "if (" );
16150276d4b776bf2152d2ba6bbaec9b150e65d926eesewardj         ppIRExpr(s->Ist.Exit.guard);
1616c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj         vex_printf( ") { PUT(%d) = ", s->Ist.Exit.offsIP);
161717442fe8094d0f82266e5a05509f62cac8f7539esewardj         ppIRConst(s->Ist.Exit.dst);
1618c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj         vex_printf("; exit-");
1619c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj         ppIRJumpKind(s->Ist.Exit.jk);
1620c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj         vex_printf(" } ");
162117442fe8094d0f82266e5a05509f62cac8f7539esewardj         break;
162217442fe8094d0f82266e5a05509f62cac8f7539esewardj      default:
162317442fe8094d0f82266e5a05509f62cac8f7539esewardj         vpanic("ppIRStmt");
162417442fe8094d0f82266e5a05509f62cac8f7539esewardj   }
1625ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
1626ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
16270b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRTypeEnv ( const IRTypeEnv* env )
16280b70efae27eafd60bc7ea9a3955605d55a681651florian{
1629c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   UInt i;
1630e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   for (i = 0; i < env->types_used; i++) {
1631c97096c44637ae5775ed305b19f16f0b505f17d8sewardj      if (i % 8 == 0)
163235421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj         vex_printf( "   ");
1633e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      ppIRTemp(i);
163435421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      vex_printf( ":");
1635e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      ppIRType(env->types[i]);
1636c97096c44637ae5775ed305b19f16f0b505f17d8sewardj      if (i % 8 == 7)
163735421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj         vex_printf( "\n");
1638c97096c44637ae5775ed305b19f16f0b505f17d8sewardj      else
163935421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj         vex_printf( "   ");
1640c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   }
1641e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   if (env->types_used > 0 && env->types_used % 8 != 7)
164235421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      vex_printf( "\n");
1643c97096c44637ae5775ed305b19f16f0b505f17d8sewardj}
1644c97096c44637ae5775ed305b19f16f0b505f17d8sewardj
16450b70efae27eafd60bc7ea9a3955605d55a681651florianvoid ppIRSB ( const IRSB* bb )
1646ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj{
1647d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   Int i;
1648dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   vex_printf("IRSB {\n");
164935421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj   ppIRTypeEnv(bb->tyenv);
1650354392111e47edc50442ea5095fa2367d9cc206fsewardj   vex_printf("\n");
1651d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   for (i = 0; i < bb->stmts_used; i++) {
1652d2445f60726580b450eca68ab40c568f9df338e2sewardj      vex_printf( "   ");
1653d2445f60726580b450eca68ab40c568f9df338e2sewardj      ppIRStmt(bb->stmts[i]);
165435421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj      vex_printf( "\n");
1655ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj   }
1656c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   vex_printf( "   PUT(%d) = ", bb->offsIP );
1657e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   ppIRExpr( bb->next );
1658c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   vex_printf( "; exit-");
1659c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   ppIRJumpKind(bb->jumpkind);
1660354392111e47edc50442ea5095fa2367d9cc206fsewardj   vex_printf( "\n}\n");
1661ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
1662ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
1663ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
1664ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj/*---------------------------------------------------------------*/
1665ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj/*--- Constructors                                            ---*/
1666ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj/*---------------------------------------------------------------*/
1667ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
1668c97096c44637ae5775ed305b19f16f0b505f17d8sewardj
1669c97096c44637ae5775ed305b19f16f0b505f17d8sewardj/* Constructors -- IRConst */
1670c97096c44637ae5775ed305b19f16f0b505f17d8sewardj
1671ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardjIRConst* IRConst_U1 ( Bool bit )
1672b8e7586be6001ff697d561160e089b0232784896sewardj{
1673d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst));
1674ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj   c->tag     = Ico_U1;
1675ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj   c->Ico.U1  = bit;
16764b861de5057856808ec69590f0f0f7c301493272sewardj   /* call me paranoid; I don't care :-) */
16774b861de5057856808ec69590f0f0f7c301493272sewardj   vassert(bit == False || bit == True);
1678b8e7586be6001ff697d561160e089b0232784896sewardj   return c;
1679b8e7586be6001ff697d561160e089b0232784896sewardj}
1680c97096c44637ae5775ed305b19f16f0b505f17d8sewardjIRConst* IRConst_U8 ( UChar u8 )
1681c97096c44637ae5775ed305b19f16f0b505f17d8sewardj{
1682d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst));
1683c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   c->tag     = Ico_U8;
1684c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   c->Ico.U8  = u8;
1685c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   return c;
1686c97096c44637ae5775ed305b19f16f0b505f17d8sewardj}
1687c97096c44637ae5775ed305b19f16f0b505f17d8sewardjIRConst* IRConst_U16 ( UShort u16 )
1688c97096c44637ae5775ed305b19f16f0b505f17d8sewardj{
1689d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst));
1690c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   c->tag     = Ico_U16;
1691c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   c->Ico.U16 = u16;
1692c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   return c;
1693c97096c44637ae5775ed305b19f16f0b505f17d8sewardj}
1694c97096c44637ae5775ed305b19f16f0b505f17d8sewardjIRConst* IRConst_U32 ( UInt u32 )
1695c97096c44637ae5775ed305b19f16f0b505f17d8sewardj{
1696d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst));
1697c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   c->tag     = Ico_U32;
1698c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   c->Ico.U32 = u32;
1699c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   return c;
1700c97096c44637ae5775ed305b19f16f0b505f17d8sewardj}
1701c97096c44637ae5775ed305b19f16f0b505f17d8sewardjIRConst* IRConst_U64 ( ULong u64 )
1702c97096c44637ae5775ed305b19f16f0b505f17d8sewardj{
1703d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst));
1704c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   c->tag     = Ico_U64;
1705c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   c->Ico.U64 = u64;
1706c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   return c;
1707c97096c44637ae5775ed305b19f16f0b505f17d8sewardj}
17082019a976f07ff418dde2dfc7cc74667ef66d7764sewardjIRConst* IRConst_F32 ( Float f32 )
17092019a976f07ff418dde2dfc7cc74667ef66d7764sewardj{
1710d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst));
17112019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   c->tag     = Ico_F32;
17122019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   c->Ico.F32 = f32;
17132019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   return c;
17142019a976f07ff418dde2dfc7cc74667ef66d7764sewardj}
17152019a976f07ff418dde2dfc7cc74667ef66d7764sewardjIRConst* IRConst_F32i ( UInt f32i )
17162019a976f07ff418dde2dfc7cc74667ef66d7764sewardj{
1717d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c  = LibVEX_Alloc_inline(sizeof(IRConst));
17182019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   c->tag      = Ico_F32i;
17192019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   c->Ico.F32i = f32i;
17202019a976f07ff418dde2dfc7cc74667ef66d7764sewardj   return c;
17212019a976f07ff418dde2dfc7cc74667ef66d7764sewardj}
1722a58ea668d4725b87a146cf43cc48b8ea6ead84casewardjIRConst* IRConst_F64 ( Double f64 )
1723a58ea668d4725b87a146cf43cc48b8ea6ead84casewardj{
1724d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst));
1725a58ea668d4725b87a146cf43cc48b8ea6ead84casewardj   c->tag     = Ico_F64;
1726a58ea668d4725b87a146cf43cc48b8ea6ead84casewardj   c->Ico.F64 = f64;
1727a58ea668d4725b87a146cf43cc48b8ea6ead84casewardj   return c;
1728a58ea668d4725b87a146cf43cc48b8ea6ead84casewardj}
172917442fe8094d0f82266e5a05509f62cac8f7539esewardjIRConst* IRConst_F64i ( ULong f64i )
1730207557ab2ea38239b670785c976b89d50bbb0eccsewardj{
1731d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c  = LibVEX_Alloc_inline(sizeof(IRConst));
173217442fe8094d0f82266e5a05509f62cac8f7539esewardj   c->tag      = Ico_F64i;
173317442fe8094d0f82266e5a05509f62cac8f7539esewardj   c->Ico.F64i = f64i;
1734207557ab2ea38239b670785c976b89d50bbb0eccsewardj   return c;
1735207557ab2ea38239b670785c976b89d50bbb0eccsewardj}
17361e6ad745ebafd0524da1da27a4b85524fa84f777sewardjIRConst* IRConst_V128 ( UShort con )
17371e6ad745ebafd0524da1da27a4b85524fa84f777sewardj{
1738d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c  = LibVEX_Alloc_inline(sizeof(IRConst));
17391e6ad745ebafd0524da1da27a4b85524fa84f777sewardj   c->tag      = Ico_V128;
17401e6ad745ebafd0524da1da27a4b85524fa84f777sewardj   c->Ico.V128 = con;
17411e6ad745ebafd0524da1da27a4b85524fa84f777sewardj   return c;
17421e6ad745ebafd0524da1da27a4b85524fa84f777sewardj}
174337a505b5a6814921fcfff1eac950a9ef7651e42bsewardjIRConst* IRConst_V256 ( UInt con )
174437a505b5a6814921fcfff1eac950a9ef7651e42bsewardj{
1745d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRConst* c  = LibVEX_Alloc_inline(sizeof(IRConst));
174637a505b5a6814921fcfff1eac950a9ef7651e42bsewardj   c->tag      = Ico_V256;
174737a505b5a6814921fcfff1eac950a9ef7651e42bsewardj   c->Ico.V256 = con;
174837a505b5a6814921fcfff1eac950a9ef7651e42bsewardj   return c;
174937a505b5a6814921fcfff1eac950a9ef7651e42bsewardj}
1750c97096c44637ae5775ed305b19f16f0b505f17d8sewardj
17518ea867b06de73d909c29e243407713c291c8414esewardj/* Constructors -- IRCallee */
17528ea867b06de73d909c29e243407713c291c8414esewardj
17531ff4756e1731485e6bf3cd96717cd8398daec1f2florianIRCallee* mkIRCallee ( Int regparms, const HChar* name, void* addr )
17548ea867b06de73d909c29e243407713c291c8414esewardj{
1755d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRCallee* ce = LibVEX_Alloc_inline(sizeof(IRCallee));
175677352545d8416a36a4e6310aaea6b0205508aea2sewardj   ce->regparms = regparms;
175777352545d8416a36a4e6310aaea6b0205508aea2sewardj   ce->name     = name;
175877352545d8416a36a4e6310aaea6b0205508aea2sewardj   ce->addr     = addr;
175943c56461a667ca81fe29f1db01450d6ff1d62949sewardj   ce->mcx_mask = 0;
176077352545d8416a36a4e6310aaea6b0205508aea2sewardj   vassert(regparms >= 0 && regparms <= 3);
17618ea867b06de73d909c29e243407713c291c8414esewardj   vassert(name != NULL);
17628ea867b06de73d909c29e243407713c291c8414esewardj   vassert(addr != 0);
17638ea867b06de73d909c29e243407713c291c8414esewardj   return ce;
17648ea867b06de73d909c29e243407713c291c8414esewardj}
17658ea867b06de73d909c29e243407713c291c8414esewardj
17668ea867b06de73d909c29e243407713c291c8414esewardj
1767dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj/* Constructors -- IRRegArray */
1768ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
1769dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardjIRRegArray* mkIRRegArray ( Int base, IRType elemTy, Int nElems )
17702d3f77c12d2911173fd182d0b6e954196dee9135sewardj{
1771d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRRegArray* arr = LibVEX_Alloc_inline(sizeof(IRRegArray));
1772dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   arr->base       = base;
1773dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   arr->elemTy     = elemTy;
1774dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   arr->nElems     = nElems;
17752d3f77c12d2911173fd182d0b6e954196dee9135sewardj   vassert(!(arr->base < 0 || arr->base > 10000 /* somewhat arbitrary */));
1776ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj   vassert(!(arr->elemTy == Ity_I1));
17772d3f77c12d2911173fd182d0b6e954196dee9135sewardj   vassert(!(arr->nElems <= 0 || arr->nElems > 500 /* somewhat arbitrary */));
17782d3f77c12d2911173fd182d0b6e954196dee9135sewardj   return arr;
17792d3f77c12d2911173fd182d0b6e954196dee9135sewardj}
17802d3f77c12d2911173fd182d0b6e954196dee9135sewardj
17812d3f77c12d2911173fd182d0b6e954196dee9135sewardj
17822d3f77c12d2911173fd182d0b6e954196dee9135sewardj/* Constructors -- IRExpr */
17832d3f77c12d2911173fd182d0b6e954196dee9135sewardj
1784443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardjIRExpr* IRExpr_Binder ( Int binder ) {
1785d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e            = LibVEX_Alloc_inline(sizeof(IRExpr));
1786443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardj   e->tag               = Iex_Binder;
1787443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardj   e->Iex.Binder.binder = binder;
1788443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardj   return e;
1789443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardj}
1790fbcaf3312f39fb73d54821636c6168db76245f61sewardjIRExpr* IRExpr_Get ( Int off, IRType ty ) {
1791d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e         = LibVEX_Alloc_inline(sizeof(IRExpr));
1792e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->tag            = Iex_Get;
1793e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->Iex.Get.offset = off;
1794fbcaf3312f39fb73d54821636c6168db76245f61sewardj   e->Iex.Get.ty     = ty;
1795e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return e;
1796ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
1797dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardjIRExpr* IRExpr_GetI ( IRRegArray* descr, IRExpr* ix, Int bias ) {
1798d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e         = LibVEX_Alloc_inline(sizeof(IRExpr));
17992d3f77c12d2911173fd182d0b6e954196dee9135sewardj   e->tag            = Iex_GetI;
18002d3f77c12d2911173fd182d0b6e954196dee9135sewardj   e->Iex.GetI.descr = descr;
1801eeac841fbfcadbc19e97c7ef56bfa3354ba78637sewardj   e->Iex.GetI.ix    = ix;
18022d3f77c12d2911173fd182d0b6e954196dee9135sewardj   e->Iex.GetI.bias  = bias;
1803d1725d18b61bf7912a9099686179faef5815dba1sewardj   return e;
1804d1725d18b61bf7912a9099686179faef5815dba1sewardj}
1805dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardjIRExpr* IRExpr_RdTmp ( IRTemp tmp ) {
1806d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e        = LibVEX_Alloc_inline(sizeof(IRExpr));
1807dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   e->tag           = Iex_RdTmp;
1808dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   e->Iex.RdTmp.tmp = tmp;
1809e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return e;
1810ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
181140c802659108a96bb87cbc1a30b7b77e2abd0829sewardjIRExpr* IRExpr_Qop ( IROp op, IRExpr* arg1, IRExpr* arg2,
181240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                              IRExpr* arg3, IRExpr* arg4 ) {
1813d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e       = LibVEX_Alloc_inline(sizeof(IRExpr));
1814d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRQop*  qop     = LibVEX_Alloc_inline(sizeof(IRQop));
181596d7cc3e7d54ad5af2af2821223b21f9a8516a59florian   qop->op         = op;
181696d7cc3e7d54ad5af2af2821223b21f9a8516a59florian   qop->arg1       = arg1;
181796d7cc3e7d54ad5af2af2821223b21f9a8516a59florian   qop->arg2       = arg2;
181896d7cc3e7d54ad5af2af2821223b21f9a8516a59florian   qop->arg3       = arg3;
181996d7cc3e7d54ad5af2af2821223b21f9a8516a59florian   qop->arg4       = arg4;
182040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj   e->tag          = Iex_Qop;
182196d7cc3e7d54ad5af2af2821223b21f9a8516a59florian   e->Iex.Qop.details = qop;
182240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj   return e;
182340c802659108a96bb87cbc1a30b7b77e2abd0829sewardj}
1824b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardjIRExpr* IRExpr_Triop  ( IROp op, IRExpr* arg1,
1825b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj                                 IRExpr* arg2, IRExpr* arg3 ) {
1826d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr*  e         = LibVEX_Alloc_inline(sizeof(IRExpr));
1827d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRTriop* triop     = LibVEX_Alloc_inline(sizeof(IRTriop));
1828420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian   triop->op         = op;
1829420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian   triop->arg1       = arg1;
1830420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian   triop->arg2       = arg2;
1831420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian   triop->arg3       = arg3;
1832b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj   e->tag            = Iex_Triop;
1833420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian   e->Iex.Triop.details = triop;
1834b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj   return e;
1835b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj}
1836c97096c44637ae5775ed305b19f16f0b505f17d8sewardjIRExpr* IRExpr_Binop ( IROp op, IRExpr* arg1, IRExpr* arg2 ) {
1837d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e         = LibVEX_Alloc_inline(sizeof(IRExpr));
1838e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->tag            = Iex_Binop;
1839e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->Iex.Binop.op   = op;
1840e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->Iex.Binop.arg1 = arg1;
1841e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->Iex.Binop.arg2 = arg2;
1842e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return e;
1843ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
1844c97096c44637ae5775ed305b19f16f0b505f17d8sewardjIRExpr* IRExpr_Unop ( IROp op, IRExpr* arg ) {
1845d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e       = LibVEX_Alloc_inline(sizeof(IRExpr));
1846e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->tag          = Iex_Unop;
1847e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->Iex.Unop.op  = op;
1848e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->Iex.Unop.arg = arg;
1849e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return e;
1850ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
1851e768e92e054cde495849a5c842a477d287677f78sewardjIRExpr* IRExpr_Load ( IREndness end, IRType ty, IRExpr* addr ) {
1852d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e        = LibVEX_Alloc_inline(sizeof(IRExpr));
1853af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj   e->tag           = Iex_Load;
1854af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj   e->Iex.Load.end  = end;
1855af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj   e->Iex.Load.ty   = ty;
1856af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj   e->Iex.Load.addr = addr;
1857af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj   vassert(end == Iend_LE || end == Iend_BE);
1858e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return e;
1859ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
1860c97096c44637ae5775ed305b19f16f0b505f17d8sewardjIRExpr* IRExpr_Const ( IRConst* con ) {
1861d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e        = LibVEX_Alloc_inline(sizeof(IRExpr));
1862e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->tag           = Iex_Const;
1863e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   e->Iex.Const.con = con;
1864e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return e;
1865ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
18668ea867b06de73d909c29e243407713c291c8414esewardjIRExpr* IRExpr_CCall ( IRCallee* cee, IRType retty, IRExpr** args ) {
1867d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e          = LibVEX_Alloc_inline(sizeof(IRExpr));
1868e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj   e->tag             = Iex_CCall;
18698ea867b06de73d909c29e243407713c291c8414esewardj   e->Iex.CCall.cee   = cee;
1870e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj   e->Iex.CCall.retty = retty;
1871e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj   e->Iex.CCall.args  = args;
1872e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj   return e;
1873e87b4840dc364d8203ccd3d6eeda348695cb4b8asewardj}
187499dd03e04a6914d90d5fee727d61d76905334becflorianIRExpr* IRExpr_ITE ( IRExpr* cond, IRExpr* iftrue, IRExpr* iffalse ) {
1875d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e          = LibVEX_Alloc_inline(sizeof(IRExpr));
187699dd03e04a6914d90d5fee727d61d76905334becflorian   e->tag             = Iex_ITE;
187799dd03e04a6914d90d5fee727d61d76905334becflorian   e->Iex.ITE.cond    = cond;
187899dd03e04a6914d90d5fee727d61d76905334becflorian   e->Iex.ITE.iftrue  = iftrue;
187999dd03e04a6914d90d5fee727d61d76905334becflorian   e->Iex.ITE.iffalse = iffalse;
1880eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj   return e;
1881eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj}
18829041956f39c57e265122ed0a71061dea1e554edcflorianIRExpr* IRExpr_VECRET ( void ) {
1883d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e = LibVEX_Alloc_inline(sizeof(IRExpr));
18849041956f39c57e265122ed0a71061dea1e554edcflorian   e->tag    = Iex_VECRET;
18859041956f39c57e265122ed0a71061dea1e554edcflorian   return e;
18869041956f39c57e265122ed0a71061dea1e554edcflorian}
18879041956f39c57e265122ed0a71061dea1e554edcflorianIRExpr* IRExpr_BBPTR ( void ) {
1888d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr* e = LibVEX_Alloc_inline(sizeof(IRExpr));
18899041956f39c57e265122ed0a71061dea1e554edcflorian   e->tag    = Iex_BBPTR;
18909041956f39c57e265122ed0a71061dea1e554edcflorian   return e;
18919041956f39c57e265122ed0a71061dea1e554edcflorian}
1892e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj
1893e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj
1894c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj/* Constructors for NULL-terminated IRExpr expression vectors,
1895c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   suitable for use as arg lists in clean/dirty helper calls. */
1896c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj
1897c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardjIRExpr** mkIRExprVec_0 ( void ) {
1898d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr** vec = LibVEX_Alloc_inline(1 * sizeof(IRExpr*));
1899c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   vec[0] = NULL;
1900c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   return vec;
1901c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj}
1902c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardjIRExpr** mkIRExprVec_1 ( IRExpr* arg1 ) {
1903d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr** vec = LibVEX_Alloc_inline(2 * sizeof(IRExpr*));
1904c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   vec[0] = arg1;
1905c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   vec[1] = NULL;
1906c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   return vec;
1907c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj}
1908c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardjIRExpr** mkIRExprVec_2 ( IRExpr* arg1, IRExpr* arg2 ) {
1909d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr** vec = LibVEX_Alloc_inline(3 * sizeof(IRExpr*));
1910c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   vec[0] = arg1;
1911c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   vec[1] = arg2;
1912c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   vec[2] = NULL;
1913c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj   return vec;
1914c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj}
1915f96552617c82834ece36184e674e249faa899b2fsewardjIRExpr** mkIRExprVec_3 ( IRExpr* arg1, IRExpr* arg2, IRExpr* arg3 ) {
1916d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr** vec = LibVEX_Alloc_inline(4 * sizeof(IRExpr*));
1917f96552617c82834ece36184e674e249faa899b2fsewardj   vec[0] = arg1;
1918f96552617c82834ece36184e674e249faa899b2fsewardj   vec[1] = arg2;
1919f96552617c82834ece36184e674e249faa899b2fsewardj   vec[2] = arg3;
1920f96552617c82834ece36184e674e249faa899b2fsewardj   vec[3] = NULL;
1921f96552617c82834ece36184e674e249faa899b2fsewardj   return vec;
1922f96552617c82834ece36184e674e249faa899b2fsewardj}
192378ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardjIRExpr** mkIRExprVec_4 ( IRExpr* arg1, IRExpr* arg2, IRExpr* arg3,
192478ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj                         IRExpr* arg4 ) {
1925d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr** vec = LibVEX_Alloc_inline(5 * sizeof(IRExpr*));
1926f96552617c82834ece36184e674e249faa899b2fsewardj   vec[0] = arg1;
1927f96552617c82834ece36184e674e249faa899b2fsewardj   vec[1] = arg2;
1928f96552617c82834ece36184e674e249faa899b2fsewardj   vec[2] = arg3;
1929f96552617c82834ece36184e674e249faa899b2fsewardj   vec[3] = arg4;
1930f96552617c82834ece36184e674e249faa899b2fsewardj   vec[4] = NULL;
1931f96552617c82834ece36184e674e249faa899b2fsewardj   return vec;
1932f96552617c82834ece36184e674e249faa899b2fsewardj}
193378ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardjIRExpr** mkIRExprVec_5 ( IRExpr* arg1, IRExpr* arg2, IRExpr* arg3,
193478ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj                         IRExpr* arg4, IRExpr* arg5 ) {
1935d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr** vec = LibVEX_Alloc_inline(6 * sizeof(IRExpr*));
1936f32c67d5eab8bcc5762ce67801f88b55c8f1cd05sewardj   vec[0] = arg1;
1937f32c67d5eab8bcc5762ce67801f88b55c8f1cd05sewardj   vec[1] = arg2;
1938f32c67d5eab8bcc5762ce67801f88b55c8f1cd05sewardj   vec[2] = arg3;
1939f32c67d5eab8bcc5762ce67801f88b55c8f1cd05sewardj   vec[3] = arg4;
1940f32c67d5eab8bcc5762ce67801f88b55c8f1cd05sewardj   vec[4] = arg5;
1941f32c67d5eab8bcc5762ce67801f88b55c8f1cd05sewardj   vec[5] = NULL;
1942f32c67d5eab8bcc5762ce67801f88b55c8f1cd05sewardj   return vec;
1943f32c67d5eab8bcc5762ce67801f88b55c8f1cd05sewardj}
194478ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardjIRExpr** mkIRExprVec_6 ( IRExpr* arg1, IRExpr* arg2, IRExpr* arg3,
194578ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj                         IRExpr* arg4, IRExpr* arg5, IRExpr* arg6 ) {
1946d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr** vec = LibVEX_Alloc_inline(7 * sizeof(IRExpr*));
194778ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[0] = arg1;
194878ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[1] = arg2;
194978ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[2] = arg3;
195078ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[3] = arg4;
195178ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[4] = arg5;
195278ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[5] = arg6;
195378ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[6] = NULL;
195478ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   return vec;
195578ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj}
195678ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardjIRExpr** mkIRExprVec_7 ( IRExpr* arg1, IRExpr* arg2, IRExpr* arg3,
195778ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj                         IRExpr* arg4, IRExpr* arg5, IRExpr* arg6,
195878ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj                         IRExpr* arg7 ) {
1959d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr** vec = LibVEX_Alloc_inline(8 * sizeof(IRExpr*));
196078ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[0] = arg1;
196178ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[1] = arg2;
196278ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[2] = arg3;
196378ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[3] = arg4;
196478ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[4] = arg5;
196578ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[5] = arg6;
196678ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[6] = arg7;
196778ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   vec[7] = NULL;
196878ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj   return vec;
196978ec32b319ab7b3b82711d9e8b58bc10ee6fe366sewardj}
19702fdd41628b79039a9586c7a601cc7ddcd376fccfsewardjIRExpr** mkIRExprVec_8 ( IRExpr* arg1, IRExpr* arg2, IRExpr* arg3,
19712fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj                         IRExpr* arg4, IRExpr* arg5, IRExpr* arg6,
19722fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj                         IRExpr* arg7, IRExpr* arg8 ) {
1973d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRExpr** vec = LibVEX_Alloc_inline(9 * sizeof(IRExpr*));
19742fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   vec[0] = arg1;
19752fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   vec[1] = arg2;
19762fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   vec[2] = arg3;
19772fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   vec[3] = arg4;
19782fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   vec[4] = arg5;
19792fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   vec[5] = arg6;
19802fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   vec[6] = arg7;
19812fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   vec[7] = arg8;
19822fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   vec[8] = NULL;
19832fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj   return vec;
19842fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj}
1985c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj
1986c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardj
198717442fe8094d0f82266e5a05509f62cac8f7539esewardj/* Constructors -- IRDirty */
198817442fe8094d0f82266e5a05509f62cac8f7539esewardj
1989c5fc7aa465504e5d5ad2d1820a84b4c143775655sewardjIRDirty* emptyIRDirty ( void ) {
1990d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRDirty* d = LibVEX_Alloc_inline(sizeof(IRDirty));
19918ea867b06de73d909c29e243407713c291c8414esewardj   d->cee      = NULL;
1992b8385d891bddf9016250435f47c06ac44ec921bfsewardj   d->guard    = NULL;
199317442fe8094d0f82266e5a05509f62cac8f7539esewardj   d->args     = NULL;
199492d168d0f2a985ed9f7ae4e6bba9565a13921b31sewardj   d->tmp      = IRTemp_INVALID;
199517442fe8094d0f82266e5a05509f62cac8f7539esewardj   d->mFx      = Ifx_None;
199617442fe8094d0f82266e5a05509f62cac8f7539esewardj   d->mAddr    = NULL;
199717442fe8094d0f82266e5a05509f62cac8f7539esewardj   d->mSize    = 0;
199817442fe8094d0f82266e5a05509f62cac8f7539esewardj   d->nFxState = 0;
199917442fe8094d0f82266e5a05509f62cac8f7539esewardj   return d;
200017442fe8094d0f82266e5a05509f62cac8f7539esewardj}
200117442fe8094d0f82266e5a05509f62cac8f7539esewardj
200217442fe8094d0f82266e5a05509f62cac8f7539esewardj
2003e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj/* Constructors -- IRCAS */
2004e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj
2005e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardjIRCAS* mkIRCAS ( IRTemp oldHi, IRTemp oldLo,
2006e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                 IREndness end, IRExpr* addr,
2007e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                 IRExpr* expdHi, IRExpr* expdLo,
2008e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                 IRExpr* dataHi, IRExpr* dataLo ) {
2009d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRCAS* cas = LibVEX_Alloc_inline(sizeof(IRCAS));
2010e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   cas->oldHi  = oldHi;
2011e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   cas->oldLo  = oldLo;
2012e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   cas->end    = end;
2013e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   cas->addr   = addr;
2014e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   cas->expdHi = expdHi;
2015e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   cas->expdLo = expdLo;
2016e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   cas->dataHi = dataHi;
2017e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   cas->dataLo = dataLo;
2018e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   return cas;
2019e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj}
2020e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj
2021e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj
2022d6f38b3f822f7d57adfc0da3410995d85d6a4597florian/* Constructors -- IRPutI */
2023d6f38b3f822f7d57adfc0da3410995d85d6a4597florian
2024d6f38b3f822f7d57adfc0da3410995d85d6a4597florianIRPutI* mkIRPutI ( IRRegArray* descr, IRExpr* ix,
2025d6f38b3f822f7d57adfc0da3410995d85d6a4597florian                   Int bias, IRExpr* data )
2026d6f38b3f822f7d57adfc0da3410995d85d6a4597florian{
2027d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRPutI* puti = LibVEX_Alloc_inline(sizeof(IRPutI));
2028d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   puti->descr  = descr;
2029d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   puti->ix     = ix;
2030d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   puti->bias   = bias;
2031d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   puti->data   = data;
2032d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   return puti;
2033d6f38b3f822f7d57adfc0da3410995d85d6a4597florian}
2034d6f38b3f822f7d57adfc0da3410995d85d6a4597florian
2035d6f38b3f822f7d57adfc0da3410995d85d6a4597florian
2036cfe046e178666280b87da998b1b52ecda03ecd89sewardj/* Constructors -- IRStoreG and IRLoadG */
2037cfe046e178666280b87da998b1b52ecda03ecd89sewardj
2038cfe046e178666280b87da998b1b52ecda03ecd89sewardjIRStoreG* mkIRStoreG ( IREndness end,
2039cfe046e178666280b87da998b1b52ecda03ecd89sewardj                       IRExpr* addr, IRExpr* data, IRExpr* guard )
2040cfe046e178666280b87da998b1b52ecda03ecd89sewardj{
2041d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStoreG* sg = LibVEX_Alloc_inline(sizeof(IRStoreG));
2042cfe046e178666280b87da998b1b52ecda03ecd89sewardj   sg->end      = end;
2043cfe046e178666280b87da998b1b52ecda03ecd89sewardj   sg->addr     = addr;
2044cfe046e178666280b87da998b1b52ecda03ecd89sewardj   sg->data     = data;
2045cfe046e178666280b87da998b1b52ecda03ecd89sewardj   sg->guard    = guard;
2046cfe046e178666280b87da998b1b52ecda03ecd89sewardj   return sg;
2047cfe046e178666280b87da998b1b52ecda03ecd89sewardj}
2048cfe046e178666280b87da998b1b52ecda03ecd89sewardj
2049cfe046e178666280b87da998b1b52ecda03ecd89sewardjIRLoadG* mkIRLoadG ( IREndness end, IRLoadGOp cvt,
2050cfe046e178666280b87da998b1b52ecda03ecd89sewardj                     IRTemp dst, IRExpr* addr, IRExpr* alt, IRExpr* guard )
2051cfe046e178666280b87da998b1b52ecda03ecd89sewardj{
2052d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRLoadG* lg = LibVEX_Alloc_inline(sizeof(IRLoadG));
2053cfe046e178666280b87da998b1b52ecda03ecd89sewardj   lg->end     = end;
2054cfe046e178666280b87da998b1b52ecda03ecd89sewardj   lg->cvt     = cvt;
2055cfe046e178666280b87da998b1b52ecda03ecd89sewardj   lg->dst     = dst;
2056cfe046e178666280b87da998b1b52ecda03ecd89sewardj   lg->addr    = addr;
2057cfe046e178666280b87da998b1b52ecda03ecd89sewardj   lg->alt     = alt;
2058cfe046e178666280b87da998b1b52ecda03ecd89sewardj   lg->guard   = guard;
2059cfe046e178666280b87da998b1b52ecda03ecd89sewardj   return lg;
2060cfe046e178666280b87da998b1b52ecda03ecd89sewardj}
2061cfe046e178666280b87da998b1b52ecda03ecd89sewardj
2062cfe046e178666280b87da998b1b52ecda03ecd89sewardj
2063e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj/* Constructors -- IRStmt */
2064e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj
2065d2445f60726580b450eca68ab40c568f9df338e2sewardjIRStmt* IRStmt_NoOp ( void )
2066d2445f60726580b450eca68ab40c568f9df338e2sewardj{
2067d2445f60726580b450eca68ab40c568f9df338e2sewardj   /* Just use a single static closure. */
2068d2445f60726580b450eca68ab40c568f9df338e2sewardj   static IRStmt static_closure;
2069d2445f60726580b450eca68ab40c568f9df338e2sewardj   static_closure.tag = Ist_NoOp;
2070d2445f60726580b450eca68ab40c568f9df338e2sewardj   return &static_closure;
2071d2445f60726580b450eca68ab40c568f9df338e2sewardj}
2072dcd6d236c9aef7d4c84369d4c51f6b92ac910127florianIRStmt* IRStmt_IMark ( Addr addr, UInt len, UChar delta ) {
2073d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s          = LibVEX_Alloc_inline(sizeof(IRStmt));
20742f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj   s->tag             = Ist_IMark;
20752f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj   s->Ist.IMark.addr  = addr;
20762f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj   s->Ist.IMark.len   = len;
20772f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj   s->Ist.IMark.delta = delta;
2078f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj   return s;
2079f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj}
2080478646f54befaba01cbceb40fd5e46cdf562fdb5sewardjIRStmt* IRStmt_AbiHint ( IRExpr* base, Int len, IRExpr* nia ) {
2081d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s           = LibVEX_Alloc_inline(sizeof(IRStmt));
20825a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj   s->tag              = Ist_AbiHint;
20835a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj   s->Ist.AbiHint.base = base;
20845a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj   s->Ist.AbiHint.len  = len;
2085478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj   s->Ist.AbiHint.nia  = nia;
20865a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj   return s;
20875a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj}
20886d07636436a548a3e14dc2ca7cbd454e2b8d5c89sewardjIRStmt* IRStmt_Put ( Int off, IRExpr* data ) {
2089d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s         = LibVEX_Alloc_inline(sizeof(IRStmt));
2090e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   s->tag            = Ist_Put;
2091e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   s->Ist.Put.offset = off;
20926d07636436a548a3e14dc2ca7cbd454e2b8d5c89sewardj   s->Ist.Put.data   = data;
2093e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return s;
2094ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
2095d6f38b3f822f7d57adfc0da3410995d85d6a4597florianIRStmt* IRStmt_PutI ( IRPutI* details ) {
2096d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s          = LibVEX_Alloc_inline(sizeof(IRStmt));
2097d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   s->tag             = Ist_PutI;
2098d6f38b3f822f7d57adfc0da3410995d85d6a4597florian   s->Ist.PutI.details = details;
2099d1725d18b61bf7912a9099686179faef5815dba1sewardj   return s;
2100d1725d18b61bf7912a9099686179faef5815dba1sewardj}
2101dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardjIRStmt* IRStmt_WrTmp ( IRTemp tmp, IRExpr* data ) {
2102d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s         = LibVEX_Alloc_inline(sizeof(IRStmt));
2103dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   s->tag            = Ist_WrTmp;
2104dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   s->Ist.WrTmp.tmp  = tmp;
2105dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   s->Ist.WrTmp.data = data;
2106e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return s;
2107ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
2108e768e92e054cde495849a5c842a477d287677f78sewardjIRStmt* IRStmt_Store ( IREndness end, IRExpr* addr, IRExpr* data ) {
2109d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s         = LibVEX_Alloc_inline(sizeof(IRStmt));
2110e768e92e054cde495849a5c842a477d287677f78sewardj   s->tag            = Ist_Store;
2111e768e92e054cde495849a5c842a477d287677f78sewardj   s->Ist.Store.end  = end;
2112e768e92e054cde495849a5c842a477d287677f78sewardj   s->Ist.Store.addr = addr;
2113e768e92e054cde495849a5c842a477d287677f78sewardj   s->Ist.Store.data = data;
2114af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj   vassert(end == Iend_LE || end == Iend_BE);
2115e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return s;
2116ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
2117cfe046e178666280b87da998b1b52ecda03ecd89sewardjIRStmt* IRStmt_StoreG ( IREndness end, IRExpr* addr, IRExpr* data,
2118cfe046e178666280b87da998b1b52ecda03ecd89sewardj                        IRExpr* guard ) {
2119d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s             = LibVEX_Alloc_inline(sizeof(IRStmt));
2120cfe046e178666280b87da998b1b52ecda03ecd89sewardj   s->tag                = Ist_StoreG;
2121cfe046e178666280b87da998b1b52ecda03ecd89sewardj   s->Ist.StoreG.details = mkIRStoreG(end, addr, data, guard);
2122cfe046e178666280b87da998b1b52ecda03ecd89sewardj   vassert(end == Iend_LE || end == Iend_BE);
2123cfe046e178666280b87da998b1b52ecda03ecd89sewardj   return s;
2124cfe046e178666280b87da998b1b52ecda03ecd89sewardj}
2125cfe046e178666280b87da998b1b52ecda03ecd89sewardjIRStmt* IRStmt_LoadG ( IREndness end, IRLoadGOp cvt, IRTemp dst,
2126cfe046e178666280b87da998b1b52ecda03ecd89sewardj                       IRExpr* addr, IRExpr* alt, IRExpr* guard ) {
2127d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s            = LibVEX_Alloc_inline(sizeof(IRStmt));
2128cfe046e178666280b87da998b1b52ecda03ecd89sewardj   s->tag               = Ist_LoadG;
2129cfe046e178666280b87da998b1b52ecda03ecd89sewardj   s->Ist.LoadG.details = mkIRLoadG(end, cvt, dst, addr, alt, guard);
2130cfe046e178666280b87da998b1b52ecda03ecd89sewardj   return s;
2131cfe046e178666280b87da998b1b52ecda03ecd89sewardj}
2132e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardjIRStmt* IRStmt_CAS ( IRCAS* cas ) {
2133d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s          = LibVEX_Alloc_inline(sizeof(IRStmt));
2134e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   s->tag             = Ist_CAS;
2135e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   s->Ist.CAS.details = cas;
2136e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   return s;
2137e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj}
2138e768e92e054cde495849a5c842a477d287677f78sewardjIRStmt* IRStmt_LLSC ( IREndness end,
2139e768e92e054cde495849a5c842a477d287677f78sewardj                      IRTemp result, IRExpr* addr, IRExpr* storedata ) {
2140d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s = LibVEX_Alloc_inline(sizeof(IRStmt));
2141e768e92e054cde495849a5c842a477d287677f78sewardj   s->tag                = Ist_LLSC;
2142e768e92e054cde495849a5c842a477d287677f78sewardj   s->Ist.LLSC.end       = end;
2143e768e92e054cde495849a5c842a477d287677f78sewardj   s->Ist.LLSC.result    = result;
2144e768e92e054cde495849a5c842a477d287677f78sewardj   s->Ist.LLSC.addr      = addr;
2145e768e92e054cde495849a5c842a477d287677f78sewardj   s->Ist.LLSC.storedata = storedata;
2146e768e92e054cde495849a5c842a477d287677f78sewardj   return s;
2147e768e92e054cde495849a5c842a477d287677f78sewardj}
214817442fe8094d0f82266e5a05509f62cac8f7539esewardjIRStmt* IRStmt_Dirty ( IRDirty* d )
214917442fe8094d0f82266e5a05509f62cac8f7539esewardj{
2150d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s            = LibVEX_Alloc_inline(sizeof(IRStmt));
215117442fe8094d0f82266e5a05509f62cac8f7539esewardj   s->tag               = Ist_Dirty;
215217442fe8094d0f82266e5a05509f62cac8f7539esewardj   s->Ist.Dirty.details = d;
215317442fe8094d0f82266e5a05509f62cac8f7539esewardj   return s;
215417442fe8094d0f82266e5a05509f62cac8f7539esewardj}
2155c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardjIRStmt* IRStmt_MBE ( IRMBusEvent event )
21563e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj{
2157d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s        = LibVEX_Alloc_inline(sizeof(IRStmt));
2158c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj   s->tag           = Ist_MBE;
2159c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj   s->Ist.MBE.event = event;
2160c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj   return s;
21613e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj}
2162c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardjIRStmt* IRStmt_Exit ( IRExpr* guard, IRJumpKind jk, IRConst* dst,
2163c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj                      Int offsIP ) {
2164d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRStmt* s          = LibVEX_Alloc_inline(sizeof(IRStmt));
2165c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   s->tag             = Ist_Exit;
2166c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   s->Ist.Exit.guard  = guard;
2167c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   s->Ist.Exit.jk     = jk;
2168c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   s->Ist.Exit.dst    = dst;
2169c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   s->Ist.Exit.offsIP = offsIP;
217064e1d656188ead7ec5af83b3fb3effef02ae73ecsewardj   return s;
217164e1d656188ead7ec5af83b3fb3effef02ae73ecsewardj}
2172e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj
2173695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2174695cff9303ef5dc8079117acfd632b44edb1f010sewardj/* Constructors -- IRTypeEnv */
2175695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2176695cff9303ef5dc8079117acfd632b44edb1f010sewardjIRTypeEnv* emptyIRTypeEnv ( void )
2177695cff9303ef5dc8079117acfd632b44edb1f010sewardj{
2178d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRTypeEnv* env   = LibVEX_Alloc_inline(sizeof(IRTypeEnv));
2179d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   env->types       = LibVEX_Alloc_inline(8 * sizeof(IRType));
2180695cff9303ef5dc8079117acfd632b44edb1f010sewardj   env->types_size  = 8;
2181695cff9303ef5dc8079117acfd632b44edb1f010sewardj   env->types_used  = 0;
2182695cff9303ef5dc8079117acfd632b44edb1f010sewardj   return env;
2183695cff9303ef5dc8079117acfd632b44edb1f010sewardj}
2184695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2185695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2186dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj/* Constructors -- IRSB */
2187e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj
2188dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardjIRSB* emptyIRSB ( void )
2189d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj{
2190d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRSB* bb       = LibVEX_Alloc_inline(sizeof(IRSB));
2191d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   bb->tyenv      = emptyIRTypeEnv();
2192d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   bb->stmts_used = 0;
2193d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   bb->stmts_size = 8;
2194d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   bb->stmts      = LibVEX_Alloc_inline(bb->stmts_size * sizeof(IRStmt*));
2195d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   bb->next       = NULL;
2196d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   bb->jumpkind   = Ijk_Boring;
2197c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   bb->offsIP     = 0;
2198e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj   return bb;
2199ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj}
2200ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
2201695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2202695cff9303ef5dc8079117acfd632b44edb1f010sewardj/*---------------------------------------------------------------*/
2203695cff9303ef5dc8079117acfd632b44edb1f010sewardj/*--- (Deep) copy constructors.  These make complete copies   ---*/
2204695cff9303ef5dc8079117acfd632b44edb1f010sewardj/*--- the original, which can be modified without affecting   ---*/
2205695cff9303ef5dc8079117acfd632b44edb1f010sewardj/*--- the original.                                           ---*/
2206695cff9303ef5dc8079117acfd632b44edb1f010sewardj/*---------------------------------------------------------------*/
2207695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2208695cff9303ef5dc8079117acfd632b44edb1f010sewardj/* Copying IR Expr vectors (for call args). */
2209695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2210695cff9303ef5dc8079117acfd632b44edb1f010sewardj/* Shallow copy of an IRExpr vector */
2211695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2212dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardjIRExpr** shallowCopyIRExprVec ( IRExpr** vec )
2213d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj{
2214695cff9303ef5dc8079117acfd632b44edb1f010sewardj   Int      i;
2215695cff9303ef5dc8079117acfd632b44edb1f010sewardj   IRExpr** newvec;
2216695cff9303ef5dc8079117acfd632b44edb1f010sewardj   for (i = 0; vec[i]; i++)
2217695cff9303ef5dc8079117acfd632b44edb1f010sewardj      ;
2218d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   newvec = LibVEX_Alloc_inline((i+1)*sizeof(IRExpr*));
2219695cff9303ef5dc8079117acfd632b44edb1f010sewardj   for (i = 0; vec[i]; i++)
2220695cff9303ef5dc8079117acfd632b44edb1f010sewardj      newvec[i] = vec[i];
2221695cff9303ef5dc8079117acfd632b44edb1f010sewardj   newvec[i] = NULL;
2222695cff9303ef5dc8079117acfd632b44edb1f010sewardj   return newvec;
2223695cff9303ef5dc8079117acfd632b44edb1f010sewardj}
2224695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2225695cff9303ef5dc8079117acfd632b44edb1f010sewardj/* Deep copy of an IRExpr vector */
2226695cff9303ef5dc8079117acfd632b44edb1f010sewardj
22270b70efae27eafd60bc7ea9a3955605d55a681651florianIRExpr** deepCopyIRExprVec ( IRExpr *const * vec )
2228695cff9303ef5dc8079117acfd632b44edb1f010sewardj{
2229695cff9303ef5dc8079117acfd632b44edb1f010sewardj   Int      i;
22300b70efae27eafd60bc7ea9a3955605d55a681651florian   IRExpr** newvec;
22310b70efae27eafd60bc7ea9a3955605d55a681651florian   for (i = 0; vec[i]; i++)
22320b70efae27eafd60bc7ea9a3955605d55a681651florian      ;
2233d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   newvec = LibVEX_Alloc_inline((i+1)*sizeof(IRExpr*));
22340b70efae27eafd60bc7ea9a3955605d55a681651florian   for (i = 0; vec[i]; i++)
22350b70efae27eafd60bc7ea9a3955605d55a681651florian      newvec[i] = deepCopyIRExpr(vec[i]);
22360b70efae27eafd60bc7ea9a3955605d55a681651florian   newvec[i] = NULL;
2237695cff9303ef5dc8079117acfd632b44edb1f010sewardj   return newvec;
2238695cff9303ef5dc8079117acfd632b44edb1f010sewardj}
2239695cff9303ef5dc8079117acfd632b44edb1f010sewardj
2240695cff9303ef5dc8079117acfd632b44edb1f010sewardj/* Deep copy constructors for all heap-allocated IR types follow. */
2241695cff9303ef5dc8079117acfd632b44edb1f010sewardj
22420b70efae27eafd60bc7ea9a3955605d55a681651florianIRConst* deepCopyIRConst ( const IRConst* c )
2243695cff9303ef5dc8079117acfd632b44edb1f010sewardj{
2244695cff9303ef5dc8079117acfd632b44edb1f010sewardj   switch (c->tag) {
2245ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj      case Ico_U1:   return IRConst_U1(c->Ico.U1);
2246695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ico_U8:   return IRConst_U8(c->Ico.U8);
2247695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ico_U16:  return IRConst_U16(c->Ico.U16);
2248695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ico_U32:  return IRConst_U32(c->Ico.U32);
2249695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ico_U64:  return IRConst_U64(c->Ico.U64);
22502019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ico_F32:  return IRConst_F32(c->Ico.F32);
22512019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ico_F32i: return IRConst_F32i(c->Ico.F32i);
2252695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ico_F64:  return IRConst_F64(c->Ico.F64);
2253695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ico_F64i: return IRConst_F64i(c->Ico.F64i);
22541e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Ico_V128: return IRConst_V128(c->Ico.V128);
2255e74ce2eac51a090a67d28d4801aa51ec52efc7dfflorian      case Ico_V256: return IRConst_V256(c->Ico.V256);
2256dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      default: vpanic("deepCopyIRConst");
2257d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   }
2258695cff9303ef5dc8079117acfd632b44edb1f010sewardj}
2259695cff9303ef5dc8079117acfd632b44edb1f010sewardj
22600b70efae27eafd60bc7ea9a3955605d55a681651florianIRCallee* deepCopyIRCallee ( const IRCallee* ce )
22618ea867b06de73d909c29e243407713c291c8414esewardj{
226243c56461a667ca81fe29f1db01450d6ff1d62949sewardj   IRCallee* ce2 = mkIRCallee(ce->regparms, ce->name, ce->addr);
226343c56461a667ca81fe29f1db01450d6ff1d62949sewardj   ce2->mcx_mask = ce->mcx_mask;
226443c56461a667ca81fe29f1db01450d6ff1d62949sewardj   return ce2;
22658ea867b06de73d909c29e243407713c291c8414esewardj}
22668ea867b06de73d909c29e243407713c291c8414esewardj
22670b70efae27eafd60bc7ea9a3955605d55a681651florianIRRegArray* deepCopyIRRegArray ( const IRRegArray* d )
2268695cff9303ef5dc8079117acfd632b44edb1f010sewardj{
2269dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   return mkIRRegArray(d->base, d->elemTy, d->nElems);
2270695cff9303ef5dc8079117acfd632b44edb1f010sewardj}
2271695cff9303ef5dc8079117acfd632b44edb1f010sewardj
22720b70efae27eafd60bc7ea9a3955605d55a681651florianIRExpr* deepCopyIRExpr ( const IRExpr* e )
2273695cff9303ef5dc8079117acfd632b44edb1f010sewardj{
2274695cff9303ef5dc8079117acfd632b44edb1f010sewardj   switch (e->tag) {
2275695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Iex_Get:
2276695cff9303ef5dc8079117acfd632b44edb1f010sewardj         return IRExpr_Get(e->Iex.Get.offset, e->Iex.Get.ty);
2277695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Iex_GetI:
2278dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         return IRExpr_GetI(deepCopyIRRegArray(e->Iex.GetI.descr),
2279dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                            deepCopyIRExpr(e->Iex.GetI.ix),
2280695cff9303ef5dc8079117acfd632b44edb1f010sewardj                            e->Iex.GetI.bias);
2281dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      case Iex_RdTmp:
2282dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         return IRExpr_RdTmp(e->Iex.RdTmp.tmp);
228396d7cc3e7d54ad5af2af2821223b21f9a8516a59florian      case Iex_Qop: {
22840b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRQop* qop = e->Iex.Qop.details;
228596d7cc3e7d54ad5af2af2821223b21f9a8516a59florian
228696d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         return IRExpr_Qop(qop->op,
228796d7cc3e7d54ad5af2af2821223b21f9a8516a59florian                           deepCopyIRExpr(qop->arg1),
228896d7cc3e7d54ad5af2af2821223b21f9a8516a59florian                           deepCopyIRExpr(qop->arg2),
228996d7cc3e7d54ad5af2af2821223b21f9a8516a59florian                           deepCopyIRExpr(qop->arg3),
229096d7cc3e7d54ad5af2af2821223b21f9a8516a59florian                           deepCopyIRExpr(qop->arg4));
229196d7cc3e7d54ad5af2af2821223b21f9a8516a59florian      }
2292420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian      case Iex_Triop:  {
22930b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRTriop *triop = e->Iex.Triop.details;
2294420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian
2295420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         return IRExpr_Triop(triop->op,
2296420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian                             deepCopyIRExpr(triop->arg1),
2297420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian                             deepCopyIRExpr(triop->arg2),
2298420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian                             deepCopyIRExpr(triop->arg3));
2299420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian      }
2300695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Iex_Binop:
2301695cff9303ef5dc8079117acfd632b44edb1f010sewardj         return IRExpr_Binop(e->Iex.Binop.op,
2302dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                             deepCopyIRExpr(e->Iex.Binop.arg1),
2303dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                             deepCopyIRExpr(e->Iex.Binop.arg2));
2304695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Iex_Unop:
2305695cff9303ef5dc8079117acfd632b44edb1f010sewardj         return IRExpr_Unop(e->Iex.Unop.op,
2306dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                            deepCopyIRExpr(e->Iex.Unop.arg));
2307af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      case Iex_Load:
2308e768e92e054cde495849a5c842a477d287677f78sewardj         return IRExpr_Load(e->Iex.Load.end,
2309af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj                            e->Iex.Load.ty,
2310dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                            deepCopyIRExpr(e->Iex.Load.addr));
2311695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Iex_Const:
2312dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         return IRExpr_Const(deepCopyIRConst(e->Iex.Const.con));
2313695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Iex_CCall:
2314dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         return IRExpr_CCall(deepCopyIRCallee(e->Iex.CCall.cee),
2315695cff9303ef5dc8079117acfd632b44edb1f010sewardj                             e->Iex.CCall.retty,
2316dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                             deepCopyIRExprVec(e->Iex.CCall.args));
2317695cff9303ef5dc8079117acfd632b44edb1f010sewardj
231899dd03e04a6914d90d5fee727d61d76905334becflorian      case Iex_ITE:
231999dd03e04a6914d90d5fee727d61d76905334becflorian         return IRExpr_ITE(deepCopyIRExpr(e->Iex.ITE.cond),
232099dd03e04a6914d90d5fee727d61d76905334becflorian                           deepCopyIRExpr(e->Iex.ITE.iftrue),
232199dd03e04a6914d90d5fee727d61d76905334becflorian                           deepCopyIRExpr(e->Iex.ITE.iffalse));
23229041956f39c57e265122ed0a71061dea1e554edcflorian      case Iex_VECRET:
23239041956f39c57e265122ed0a71061dea1e554edcflorian         return IRExpr_VECRET();
23249041956f39c57e265122ed0a71061dea1e554edcflorian
23259041956f39c57e265122ed0a71061dea1e554edcflorian      case Iex_BBPTR:
23269041956f39c57e265122ed0a71061dea1e554edcflorian         return IRExpr_BBPTR();
23279041956f39c57e265122ed0a71061dea1e554edcflorian
2328e74ce2eac51a090a67d28d4801aa51ec52efc7dfflorian      case Iex_Binder:
2329e74ce2eac51a090a67d28d4801aa51ec52efc7dfflorian         return IRExpr_Binder(e->Iex.Binder.binder);
2330e74ce2eac51a090a67d28d4801aa51ec52efc7dfflorian
2331695cff9303ef5dc8079117acfd632b44edb1f010sewardj      default:
2332dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         vpanic("deepCopyIRExpr");
2333695cff9303ef5dc8079117acfd632b44edb1f010sewardj   }
2334695cff9303ef5dc8079117acfd632b44edb1f010sewardj}
2335695cff9303ef5dc8079117acfd632b44edb1f010sewardj
23360b70efae27eafd60bc7ea9a3955605d55a681651florianIRDirty* deepCopyIRDirty ( const IRDirty* d )
2337695cff9303ef5dc8079117acfd632b44edb1f010sewardj{
2338695cff9303ef5dc8079117acfd632b44edb1f010sewardj   Int      i;
2339695cff9303ef5dc8079117acfd632b44edb1f010sewardj   IRDirty* d2 = emptyIRDirty();
2340dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   d2->cee   = deepCopyIRCallee(d->cee);
2341dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   d2->guard = deepCopyIRExpr(d->guard);
2342dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   d2->args  = deepCopyIRExprVec(d->args);
2343695cff9303ef5dc8079117acfd632b44edb1f010sewardj   d2->tmp   = d->tmp;
2344695cff9303ef5dc8079117acfd632b44edb1f010sewardj   d2->mFx   = d->mFx;
2345dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   d2->mAddr = d->mAddr==NULL ? NULL : deepCopyIRExpr(d->mAddr);
2346695cff9303ef5dc8079117acfd632b44edb1f010sewardj   d2->mSize = d->mSize;
2347695cff9303ef5dc8079117acfd632b44edb1f010sewardj   d2->nFxState = d->nFxState;
2348695cff9303ef5dc8079117acfd632b44edb1f010sewardj   for (i = 0; i < d2->nFxState; i++)
2349695cff9303ef5dc8079117acfd632b44edb1f010sewardj      d2->fxState[i] = d->fxState[i];
2350695cff9303ef5dc8079117acfd632b44edb1f010sewardj   return d2;
2351695cff9303ef5dc8079117acfd632b44edb1f010sewardj}
2352695cff9303ef5dc8079117acfd632b44edb1f010sewardj
23530b70efae27eafd60bc7ea9a3955605d55a681651florianIRCAS* deepCopyIRCAS ( const IRCAS* cas )
2354e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj{
2355e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   return mkIRCAS( cas->oldHi, cas->oldLo, cas->end,
2356e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                   deepCopyIRExpr(cas->addr),
235705a2c3811513cf82ad0e47129bdfe21f75070246sewardj                   cas->expdHi==NULL ? NULL : deepCopyIRExpr(cas->expdHi),
2358e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                   deepCopyIRExpr(cas->expdLo),
235905a2c3811513cf82ad0e47129bdfe21f75070246sewardj                   cas->dataHi==NULL ? NULL : deepCopyIRExpr(cas->dataHi),
2360e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                   deepCopyIRExpr(cas->dataLo) );
2361e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj}
2362e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj
23630b70efae27eafd60bc7ea9a3955605d55a681651florianIRPutI* deepCopyIRPutI ( const IRPutI * puti )
2364d6f38b3f822f7d57adfc0da3410995d85d6a4597florian{
2365d6f38b3f822f7d57adfc0da3410995d85d6a4597florian  return mkIRPutI( deepCopyIRRegArray(puti->descr),
2366d6f38b3f822f7d57adfc0da3410995d85d6a4597florian                   deepCopyIRExpr(puti->ix),
2367d6f38b3f822f7d57adfc0da3410995d85d6a4597florian                   puti->bias,
2368d6f38b3f822f7d57adfc0da3410995d85d6a4597florian                   deepCopyIRExpr(puti->data));
2369d6f38b3f822f7d57adfc0da3410995d85d6a4597florian}
2370d6f38b3f822f7d57adfc0da3410995d85d6a4597florian
23710b70efae27eafd60bc7ea9a3955605d55a681651florianIRStmt* deepCopyIRStmt ( const IRStmt* s )
2372695cff9303ef5dc8079117acfd632b44edb1f010sewardj{
2373695cff9303ef5dc8079117acfd632b44edb1f010sewardj   switch (s->tag) {
2374d2445f60726580b450eca68ab40c568f9df338e2sewardj      case Ist_NoOp:
2375d2445f60726580b450eca68ab40c568f9df338e2sewardj         return IRStmt_NoOp();
23765a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj      case Ist_AbiHint:
2377dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         return IRStmt_AbiHint(deepCopyIRExpr(s->Ist.AbiHint.base),
2378478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj                               s->Ist.AbiHint.len,
2379478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj                               deepCopyIRExpr(s->Ist.AbiHint.nia));
2380f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj      case Ist_IMark:
23812f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj         return IRStmt_IMark(s->Ist.IMark.addr,
23822f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj                             s->Ist.IMark.len,
23832f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj                             s->Ist.IMark.delta);
2384695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ist_Put:
2385695cff9303ef5dc8079117acfd632b44edb1f010sewardj         return IRStmt_Put(s->Ist.Put.offset,
2386dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                           deepCopyIRExpr(s->Ist.Put.data));
2387695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ist_PutI:
2388d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         return IRStmt_PutI(deepCopyIRPutI(s->Ist.PutI.details));
2389dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      case Ist_WrTmp:
2390dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         return IRStmt_WrTmp(s->Ist.WrTmp.tmp,
2391dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                             deepCopyIRExpr(s->Ist.WrTmp.data));
2392af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      case Ist_Store:
2393af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         return IRStmt_Store(s->Ist.Store.end,
2394dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                             deepCopyIRExpr(s->Ist.Store.addr),
2395dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj                             deepCopyIRExpr(s->Ist.Store.data));
2396cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_StoreG: {
23970b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRStoreG* sg = s->Ist.StoreG.details;
2398cfe046e178666280b87da998b1b52ecda03ecd89sewardj         return IRStmt_StoreG(sg->end,
2399cfe046e178666280b87da998b1b52ecda03ecd89sewardj                              deepCopyIRExpr(sg->addr),
2400cfe046e178666280b87da998b1b52ecda03ecd89sewardj                              deepCopyIRExpr(sg->data),
2401cfe046e178666280b87da998b1b52ecda03ecd89sewardj                              deepCopyIRExpr(sg->guard));
2402cfe046e178666280b87da998b1b52ecda03ecd89sewardj      }
2403cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_LoadG: {
24040b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRLoadG* lg = s->Ist.LoadG.details;
2405cfe046e178666280b87da998b1b52ecda03ecd89sewardj         return IRStmt_LoadG(lg->end, lg->cvt, lg->dst,
2406cfe046e178666280b87da998b1b52ecda03ecd89sewardj                             deepCopyIRExpr(lg->addr),
2407cfe046e178666280b87da998b1b52ecda03ecd89sewardj                             deepCopyIRExpr(lg->alt),
2408cfe046e178666280b87da998b1b52ecda03ecd89sewardj                             deepCopyIRExpr(lg->guard));
2409cfe046e178666280b87da998b1b52ecda03ecd89sewardj      }
2410e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      case Ist_CAS:
2411e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         return IRStmt_CAS(deepCopyIRCAS(s->Ist.CAS.details));
2412e768e92e054cde495849a5c842a477d287677f78sewardj      case Ist_LLSC:
2413e768e92e054cde495849a5c842a477d287677f78sewardj         return IRStmt_LLSC(s->Ist.LLSC.end,
2414e768e92e054cde495849a5c842a477d287677f78sewardj                            s->Ist.LLSC.result,
2415e768e92e054cde495849a5c842a477d287677f78sewardj                            deepCopyIRExpr(s->Ist.LLSC.addr),
2416e768e92e054cde495849a5c842a477d287677f78sewardj                            s->Ist.LLSC.storedata
2417e768e92e054cde495849a5c842a477d287677f78sewardj                               ? deepCopyIRExpr(s->Ist.LLSC.storedata)
2418e768e92e054cde495849a5c842a477d287677f78sewardj                               : NULL);
2419695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ist_Dirty:
2420dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         return IRStmt_Dirty(deepCopyIRDirty(s->Ist.Dirty.details));
2421c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj      case Ist_MBE:
2422c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj         return IRStmt_MBE(s->Ist.MBE.event);
2423695cff9303ef5dc8079117acfd632b44edb1f010sewardj      case Ist_Exit:
2424dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         return IRStmt_Exit(deepCopyIRExpr(s->Ist.Exit.guard),
2425893aadad7f29f7801ce26cb7575c16e90bd3767fsewardj                            s->Ist.Exit.jk,
2426c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj                            deepCopyIRConst(s->Ist.Exit.dst),
2427c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj                            s->Ist.Exit.offsIP);
2428695cff9303ef5dc8079117acfd632b44edb1f010sewardj      default:
2429dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         vpanic("deepCopyIRStmt");
2430695cff9303ef5dc8079117acfd632b44edb1f010sewardj   }
2431695cff9303ef5dc8079117acfd632b44edb1f010sewardj}
2432695cff9303ef5dc8079117acfd632b44edb1f010sewardj
24330b70efae27eafd60bc7ea9a3955605d55a681651florianIRTypeEnv* deepCopyIRTypeEnv ( const IRTypeEnv* src )
2434695cff9303ef5dc8079117acfd632b44edb1f010sewardj{
2435695cff9303ef5dc8079117acfd632b44edb1f010sewardj   Int        i;
2436d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   IRTypeEnv* dst = LibVEX_Alloc_inline(sizeof(IRTypeEnv));
2437695cff9303ef5dc8079117acfd632b44edb1f010sewardj   dst->types_size = src->types_size;
2438695cff9303ef5dc8079117acfd632b44edb1f010sewardj   dst->types_used = src->types_used;
2439d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   dst->types = LibVEX_Alloc_inline(dst->types_size * sizeof(IRType));
2440695cff9303ef5dc8079117acfd632b44edb1f010sewardj   for (i = 0; i < src->types_used; i++)
2441695cff9303ef5dc8079117acfd632b44edb1f010sewardj      dst->types[i] = src->types[i];
2442695cff9303ef5dc8079117acfd632b44edb1f010sewardj   return dst;
2443695cff9303ef5dc8079117acfd632b44edb1f010sewardj}
2444695cff9303ef5dc8079117acfd632b44edb1f010sewardj
24450b70efae27eafd60bc7ea9a3955605d55a681651florianIRSB* deepCopyIRSB ( const IRSB* bb )
2446695cff9303ef5dc8079117acfd632b44edb1f010sewardj{
2447695cff9303ef5dc8079117acfd632b44edb1f010sewardj   Int      i;
2448695cff9303ef5dc8079117acfd632b44edb1f010sewardj   IRStmt** sts2;
2449dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   IRSB* bb2 = deepCopyIRSBExceptStmts(bb);
2450695cff9303ef5dc8079117acfd632b44edb1f010sewardj   bb2->stmts_used = bb2->stmts_size = bb->stmts_used;
2451d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   sts2 = LibVEX_Alloc_inline(bb2->stmts_used * sizeof(IRStmt*));
2452695cff9303ef5dc8079117acfd632b44edb1f010sewardj   for (i = 0; i < bb2->stmts_used; i++)
2453dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      sts2[i] = deepCopyIRStmt(bb->stmts[i]);
2454c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   bb2->stmts = sts2;
24556f2f2834ca8098c5e0373cecb704e054f5b318e7sewardj   return bb2;
24566f2f2834ca8098c5e0373cecb704e054f5b318e7sewardj}
24576f2f2834ca8098c5e0373cecb704e054f5b318e7sewardj
24580b70efae27eafd60bc7ea9a3955605d55a681651florianIRSB* deepCopyIRSBExceptStmts ( const IRSB* bb )
24596f2f2834ca8098c5e0373cecb704e054f5b318e7sewardj{
2460dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   IRSB* bb2     = emptyIRSB();
2461dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   bb2->tyenv    = deepCopyIRTypeEnv(bb->tyenv);
2462dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   bb2->next     = deepCopyIRExpr(bb->next);
2463695cff9303ef5dc8079117acfd632b44edb1f010sewardj   bb2->jumpkind = bb->jumpkind;
2464c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   bb2->offsIP   = bb->offsIP;
2465695cff9303ef5dc8079117acfd632b44edb1f010sewardj   return bb2;
2466d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj}
2467d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj
2468ec6ad593611ccd69f797e3add4d23a5f31aa84d6sewardj
2469c97096c44637ae5775ed305b19f16f0b505f17d8sewardj/*---------------------------------------------------------------*/
24706efd4a18cf32c322e03351176873cef33f1fe67esewardj/*--- Primop types                                            ---*/
24716efd4a18cf32c322e03351176873cef33f1fe67esewardj/*---------------------------------------------------------------*/
24726efd4a18cf32c322e03351176873cef33f1fe67esewardj
24736efd4a18cf32c322e03351176873cef33f1fe67esewardjstatic
2474b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardjvoid typeOfPrimop ( IROp op,
2475b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj                    /*OUTs*/
2476b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj                    IRType* t_dst,
247740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                    IRType* t_arg1, IRType* t_arg2,
247840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                    IRType* t_arg3, IRType* t_arg4 )
24796efd4a18cf32c322e03351176873cef33f1fe67esewardj{
2480b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj#  define UNARY(_ta1,_td)                                      \
24816efd4a18cf32c322e03351176873cef33f1fe67esewardj      *t_dst = (_td); *t_arg1 = (_ta1); break
2482b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj#  define BINARY(_ta1,_ta2,_td)                                \
24836efd4a18cf32c322e03351176873cef33f1fe67esewardj     *t_dst = (_td); *t_arg1 = (_ta1); *t_arg2 = (_ta2); break
2484b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj#  define TERNARY(_ta1,_ta2,_ta3,_td)                          \
2485b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj     *t_dst = (_td); *t_arg1 = (_ta1);                         \
2486b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj     *t_arg2 = (_ta2); *t_arg3 = (_ta3); break
248740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj#  define QUATERNARY(_ta1,_ta2,_ta3,_ta4,_td)                  \
248840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj     *t_dst = (_td); *t_arg1 = (_ta1);                         \
248940c802659108a96bb87cbc1a30b7b77e2abd0829sewardj     *t_arg2 = (_ta2); *t_arg3 = (_ta3);                       \
249040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj     *t_arg4 = (_ta4); break
2491b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj#  define COMPARISON(_ta)                                      \
2492ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj     *t_dst = Ity_I1; *t_arg1 = *t_arg2 = (_ta); break;
2493b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj#  define UNARY_COMPARISON(_ta)                                \
24940033ddccac6f90789fe2e78e86b8a649931d77b4sewardj     *t_dst = Ity_I1; *t_arg1 = (_ta); break;
24956efd4a18cf32c322e03351176873cef33f1fe67esewardj
2496b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj   /* Rounding mode values are always Ity_I32, encoded as per
2497b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      IRRoundingMode */
2498b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj   const IRType ity_RMode = Ity_I32;
2499b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj
25006efd4a18cf32c322e03351176873cef33f1fe67esewardj   *t_dst  = Ity_INVALID;
25016efd4a18cf32c322e03351176873cef33f1fe67esewardj   *t_arg1 = Ity_INVALID;
25026efd4a18cf32c322e03351176873cef33f1fe67esewardj   *t_arg2 = Ity_INVALID;
2503b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj   *t_arg3 = Ity_INVALID;
250440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj   *t_arg4 = Ity_INVALID;
25056efd4a18cf32c322e03351176873cef33f1fe67esewardj   switch (op) {
250617442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_Add8: case Iop_Sub8: case Iop_Mul8:
250717442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_Or8:  case Iop_And8: case Iop_Xor8:
2508b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I8,Ity_I8, Ity_I8);
25096efd4a18cf32c322e03351176873cef33f1fe67esewardj
251017442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_Add16: case Iop_Sub16: case Iop_Mul16:
251117442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_Or16:  case Iop_And16: case Iop_Xor16:
2512b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I16,Ity_I16, Ity_I16);
25136efd4a18cf32c322e03351176873cef33f1fe67esewardj
2514b51f0f4f33256638ed953156a2635aa739b232f1sewardj      case Iop_CmpORD32U:
2515b51f0f4f33256638ed953156a2635aa739b232f1sewardj      case Iop_CmpORD32S:
251617442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_Add32: case Iop_Sub32: case Iop_Mul32:
251717442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_Or32:  case Iop_And32: case Iop_Xor32:
2518478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj      case Iop_Max32U:
251944ce46d5945ed83d96695d280510cc2a858894dcsewardj      case Iop_QAdd32S: case Iop_QSub32S:
2520e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_Add16x2: case Iop_Sub16x2:
2521e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QAdd16Sx2: case Iop_QAdd16Ux2:
2522e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QSub16Sx2: case Iop_QSub16Ux2:
2523e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HAdd16Ux2: case Iop_HAdd16Sx2:
2524e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HSub16Ux2: case Iop_HSub16Sx2:
2525e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_Add8x4: case Iop_Sub8x4:
2526e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QAdd8Sx4: case Iop_QAdd8Ux4:
2527e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_QSub8Sx4: case Iop_QSub8Ux4:
2528e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HAdd8Ux4: case Iop_HAdd8Sx4:
2529e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_HSub8Ux4: case Iop_HSub8Sx4:
2530310d6b2d02c3b22a8e496f3e26f3e9b3eb616ea5sewardj      case Iop_Sad8Ux4:
2531b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I32,Ity_I32, Ity_I32);
25326efd4a18cf32c322e03351176873cef33f1fe67esewardj
253317442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_Add64: case Iop_Sub64: case Iop_Mul64:
253417442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_Or64:  case Iop_And64: case Iop_Xor64:
25352831b00c4950d6c2b061def05fd67528fe132ececerion      case Iop_CmpORD64U:
25362831b00c4950d6c2b061def05fd67528fe132ececerion      case Iop_CmpORD64S:
253738a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Avg8Ux8: case Iop_Avg16Ux4:
253838a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Add8x8: case Iop_Add16x4: case Iop_Add32x2:
25392fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Add32Fx2: case Iop_Sub32Fx2:
254038a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_CmpEQ8x8: case Iop_CmpEQ16x4: case Iop_CmpEQ32x2:
254138a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_CmpGT8Sx8: case Iop_CmpGT16Sx4: case Iop_CmpGT32Sx2:
25422fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CmpGT8Ux8: case Iop_CmpGT16Ux4: case Iop_CmpGT32Ux2:
25432fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CmpGT32Fx2: case Iop_CmpEQ32Fx2: case Iop_CmpGE32Fx2:
254438a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_InterleaveHI8x8: case Iop_InterleaveLO8x8:
254538a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_InterleaveHI16x4: case Iop_InterleaveLO16x4:
254638a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_InterleaveHI32x2: case Iop_InterleaveLO32x2:
25472fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatOddLanes8x8: case Iop_CatEvenLanes8x8:
2548d166e2874e0d9a9e567a281d7f1f6e8ef8127196sewardj      case Iop_CatOddLanes16x4: case Iop_CatEvenLanes16x4:
25492fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes8x8: case Iop_InterleaveEvenLanes8x8:
25502fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes16x4: case Iop_InterleaveEvenLanes16x4:
2551d166e2874e0d9a9e567a281d7f1f6e8ef8127196sewardj      case Iop_Perm8x8:
25522fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Max8Ux8: case Iop_Max16Ux4: case Iop_Max32Ux2:
25532fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Max8Sx8: case Iop_Max16Sx4: case Iop_Max32Sx2:
25542fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Max32Fx2: case Iop_Min32Fx2:
25552fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax32Fx2: case Iop_PwMin32Fx2:
25562fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Min8Ux8: case Iop_Min16Ux4: case Iop_Min32Ux2:
25572fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Min8Sx8: case Iop_Min16Sx4: case Iop_Min32Sx2:
25582fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax8Ux8: case Iop_PwMax16Ux4: case Iop_PwMax32Ux2:
25592fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax8Sx8: case Iop_PwMax16Sx4: case Iop_PwMax32Sx2:
25602fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin8Ux8: case Iop_PwMin16Ux4: case Iop_PwMin32Ux2:
25612fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMin8Sx8: case Iop_PwMin16Sx4: case Iop_PwMin32Sx2:
25622fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mul8x8: case Iop_Mul16x4: case Iop_Mul32x2:
25632fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mul32Fx2:
25642fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PolynomialMul8x8:
2565d166e2874e0d9a9e567a281d7f1f6e8ef8127196sewardj      case Iop_MulHi16Sx4: case Iop_MulHi16Ux4:
25662fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QDMulHi16Sx4: case Iop_QDMulHi32Sx2:
25672fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QRDMulHi16Sx4: case Iop_QRDMulHi32Sx2:
256838a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QAdd8Sx8: case Iop_QAdd16Sx4:
25692fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd32Sx2: case Iop_QAdd64Sx1:
257038a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QAdd8Ux8: case Iop_QAdd16Ux4:
25712fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd32Ux2: case Iop_QAdd64Ux1:
25722fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd8x8: case Iop_PwAdd16x4: case Iop_PwAdd32x2:
25732fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd32Fx2:
25745f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin32Sto16Sx4:
25755f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin16Sto8Sx8: case Iop_QNarrowBin16Sto8Ux8:
2576ad2c9ea0c360fced134b2dd0d4b28c0be3639cfbsewardj      case Iop_NarrowBin16to8x8: case Iop_NarrowBin32to16x4:
257738a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_Sub8x8: case Iop_Sub16x4: case Iop_Sub32x2:
257838a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QSub8Sx8: case Iop_QSub16Sx4:
25792fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub32Sx2: case Iop_QSub64Sx1:
258038a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj      case Iop_QSub8Ux8: case Iop_QSub16Ux4:
25812fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub32Ux2: case Iop_QSub64Ux1:
25822fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shl8x8: case Iop_Shl16x4: case Iop_Shl32x2:
25832fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shr8x8: case Iop_Shr16x4: case Iop_Shr32x2:
25842fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sar8x8: case Iop_Sar16x4: case Iop_Sar32x2:
25852fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal8x8: case Iop_Sal16x4: case Iop_Sal32x2: case Iop_Sal64x1:
25862fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QShl8x8: case Iop_QShl16x4: case Iop_QShl32x2: case Iop_QShl64x1:
25872fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSal8x8: case Iop_QSal16x4: case Iop_QSal32x2: case Iop_QSal64x1:
25881ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipStep32Fx2:
25891ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtStep32Fx2:
2590b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I64,Ity_I64, Ity_I64);
259138a3f868aebe4ade7279d7168e0efb6a98eaed5fsewardj
2592d166e2874e0d9a9e567a281d7f1f6e8ef8127196sewardj      case Iop_ShlN32x2: case Iop_ShlN16x4: case Iop_ShlN8x8:
25932fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_ShrN32x2: case Iop_ShrN16x4: case Iop_ShrN8x8:
2594d71ba837242cc470f622335b1c650bce8886a533sewardj      case Iop_SarN32x2: case Iop_SarN16x4: case Iop_SarN8x8:
25951dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU8x8:  case Iop_QShlNsatUU16x4:
25961dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU32x2: case Iop_QShlNsatUU64x1:
25971dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU8x8:  case Iop_QShlNsatSU16x4:
25981dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU32x2: case Iop_QShlNsatSU64x1:
25991dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS8x8:  case Iop_QShlNsatSS16x4:
26001dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS32x2: case Iop_QShlNsatSS64x1:
2601b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I64,Ity_I8, Ity_I64);
26026efd4a18cf32c322e03351176873cef33f1fe67esewardj
26036efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iop_Shl8: case Iop_Shr8: case Iop_Sar8:
2604b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I8,Ity_I8, Ity_I8);
26056efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iop_Shl16: case Iop_Shr16: case Iop_Sar16:
2606b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I16,Ity_I8, Ity_I16);
26076efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iop_Shl32: case Iop_Shr32: case Iop_Sar32:
2608b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I32,Ity_I8, Ity_I32);
26096efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iop_Shl64: case Iop_Shr64: case Iop_Sar64:
2610b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I64,Ity_I8, Ity_I64);
26116efd4a18cf32c322e03351176873cef33f1fe67esewardj
2612eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_Not8:
2613b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I8, Ity_I8);
2614eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_Not16:
2615b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I16, Ity_I16);
2616eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_Not32:
2617e2ea17600e3bbdc4cc0edcd2a03f7d1142666f37sewardj      case Iop_CmpNEZ16x2: case Iop_CmpNEZ8x4:
2618b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I32, Ity_I32);
26191806918ae2783af5808f00876581e01c7b650a0dsewardj
26200033ddccac6f90789fe2e78e86b8a649931d77b4sewardj      case Iop_Not64:
26211806918ae2783af5808f00876581e01c7b650a0dsewardj      case Iop_CmpNEZ32x2: case Iop_CmpNEZ16x4: case Iop_CmpNEZ8x8:
26222fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Cnt8x8:
2623a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Clz8x8: case Iop_Clz16x4: case Iop_Clz32x2:
2624a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Cls8x8: case Iop_Cls16x4: case Iop_Cls32x2:
26252fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL8Ux8: case Iop_PwAddL16Ux4: case Iop_PwAddL32Ux2:
26262fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL8Sx8: case Iop_PwAddL16Sx4: case Iop_PwAddL32Sx2:
2627336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn64_x1: case Iop_Reverse16sIn64_x1:
2628336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse32sIn64_x1:
2629336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn32_x2: case Iop_Reverse16sIn32_x2:
2630336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn16_x4:
26312fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_FtoI32Sx2_RZ: case Iop_FtoI32Ux2_RZ:
26322fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_I32StoFx2: case Iop_I32UtoFx2:
26331ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32Ux2: case Iop_RecipEst32Fx2:
26342fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs32Fx2:
26351ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Fx2:
26361ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Ux2:
26372fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Neg32Fx2:
26382fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Abs8x8: case Iop_Abs16x4: case Iop_Abs32x2:
2639b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I64, Ity_I64);
26406efd4a18cf32c322e03351176873cef33f1fe67esewardj
26416efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iop_CmpEQ8: case Iop_CmpNE8:
2642e13074c2c1321d069fb95806bdce64f9a3512341sewardj      case Iop_CasCmpEQ8: case Iop_CasCmpNE8: case Iop_ExpCmpNE8:
26436efd4a18cf32c322e03351176873cef33f1fe67esewardj         COMPARISON(Ity_I8);
26446efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iop_CmpEQ16: case Iop_CmpNE16:
2645e13074c2c1321d069fb95806bdce64f9a3512341sewardj      case Iop_CasCmpEQ16: case Iop_CasCmpNE16: case Iop_ExpCmpNE16:
26466efd4a18cf32c322e03351176873cef33f1fe67esewardj         COMPARISON(Ity_I16);
26476efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iop_CmpEQ32: case Iop_CmpNE32:
2648e13074c2c1321d069fb95806bdce64f9a3512341sewardj      case Iop_CasCmpEQ32: case Iop_CasCmpNE32: case Iop_ExpCmpNE32:
264917442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_CmpLT32S: case Iop_CmpLE32S:
265017442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_CmpLT32U: case Iop_CmpLE32U:
26516efd4a18cf32c322e03351176873cef33f1fe67esewardj         COMPARISON(Ity_I32);
26526efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iop_CmpEQ64: case Iop_CmpNE64:
2653e13074c2c1321d069fb95806bdce64f9a3512341sewardj      case Iop_CasCmpEQ64: case Iop_CasCmpNE64: case Iop_ExpCmpNE64:
26549854007808ab24cad3f971eab63face1cb1e6089sewardj      case Iop_CmpLT64S: case Iop_CmpLE64S:
26559854007808ab24cad3f971eab63face1cb1e6089sewardj      case Iop_CmpLT64U: case Iop_CmpLE64U:
26566efd4a18cf32c322e03351176873cef33f1fe67esewardj         COMPARISON(Ity_I64);
26576efd4a18cf32c322e03351176873cef33f1fe67esewardj
26580033ddccac6f90789fe2e78e86b8a649931d77b4sewardj      case Iop_CmpNEZ8:  UNARY_COMPARISON(Ity_I8);
26590033ddccac6f90789fe2e78e86b8a649931d77b4sewardj      case Iop_CmpNEZ16: UNARY_COMPARISON(Ity_I16);
26600033ddccac6f90789fe2e78e86b8a649931d77b4sewardj      case Iop_CmpNEZ32: UNARY_COMPARISON(Ity_I32);
26610033ddccac6f90789fe2e78e86b8a649931d77b4sewardj      case Iop_CmpNEZ64: UNARY_COMPARISON(Ity_I64);
26620033ddccac6f90789fe2e78e86b8a649931d77b4sewardj
2663eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_Left8:  UNARY(Ity_I8, Ity_I8);
2664eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_Left16: UNARY(Ity_I16,Ity_I16);
2665eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_CmpwNEZ32: case Iop_Left32: UNARY(Ity_I32,Ity_I32);
2666eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj      case Iop_CmpwNEZ64: case Iop_Left64: UNARY(Ity_I64,Ity_I64);
266778a20592024c096430f630006412fec063568bfdsewardj
266878a20592024c096430f630006412fec063568bfdsewardj      case Iop_GetMSBs8x8:  UNARY(Ity_I64, Ity_I8);
266978a20592024c096430f630006412fec063568bfdsewardj      case Iop_GetMSBs8x16: UNARY(Ity_V128, Ity_I16);
2670eb17e49565dd7867a56c8ba6e45fdca01a576bb3sewardj
2671b81f8b3e9110a5608094b8ec1a5c6d3c30a8e5aesewardj      case Iop_MullU8: case Iop_MullS8:
2672b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I8,Ity_I8, Ity_I16);
2673b81f8b3e9110a5608094b8ec1a5c6d3c30a8e5aesewardj      case Iop_MullU16: case Iop_MullS16:
2674b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I16,Ity_I16, Ity_I32);
26756d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj      case Iop_MullU32: case Iop_MullS32:
2676b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I32,Ity_I32, Ity_I64);
26779b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Iop_MullU64: case Iop_MullS64:
2678b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I64,Ity_I64, Ity_I128);
26796d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj
268017442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_Clz32: case Iop_Ctz32:
2681b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I32, Ity_I32);
2682ce646f23d71ac432c340667387aa4a5ce7d18099sewardj
2683f53b7359a342e7d79090615169c6583a1a75fbcesewardj      case Iop_Clz64: case Iop_Ctz64:
2684b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I64, Ity_I64);
2685f53b7359a342e7d79090615169c6583a1a75fbcesewardj
2686e71e56a90e91ce37b0ee846a4ff94493d59f2095sewardj      case Iop_DivU32: case Iop_DivS32: case Iop_DivU32E: case Iop_DivS32E:
2687b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I32,Ity_I32, Ity_I32);
26885c8a0cbfd7fd3b506f6ba1cb25a6aa20efb59dcbcerion
2689e71e56a90e91ce37b0ee846a4ff94493d59f2095sewardj      case Iop_DivU64: case Iop_DivS64: case Iop_DivS64E: case Iop_DivU64E:
2690b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I64,Ity_I64, Ity_I64);
2691f0de28cf1a762b0d6f74c93d3532c89a230673bbcerion
269217442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_DivModU64to32: case Iop_DivModS64to32:
2693b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I64,Ity_I32, Ity_I64);
26946d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj
2695343b9d0f6be20948ab2f4fe87de55835f96fe30asewardj      case Iop_DivModU128to64: case Iop_DivModS128to64:
2696b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I128,Ity_I64, Ity_I128);
2697343b9d0f6be20948ab2f4fe87de55835f96fe30asewardj
26982019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_DivModS64to64:
26992019a976f07ff418dde2dfc7cc74667ef66d7764sewardj         BINARY(Ity_I64,Ity_I64, Ity_I128);
27002019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
2701b81f8b3e9110a5608094b8ec1a5c6d3c30a8e5aesewardj      case Iop_16HIto8: case Iop_16to8:
2702b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I16, Ity_I8);
2703b81f8b3e9110a5608094b8ec1a5c6d3c30a8e5aesewardj      case Iop_8HLto16:
2704b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I8,Ity_I8, Ity_I16);
2705b81f8b3e9110a5608094b8ec1a5c6d3c30a8e5aesewardj
27068c7f1abe9e022f6382634efea09c9cac89ec6336sewardj      case Iop_32HIto16: case Iop_32to16:
2707b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I32, Ity_I16);
27088c7f1abe9e022f6382634efea09c9cac89ec6336sewardj      case Iop_16HLto32:
2709b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I16,Ity_I16, Ity_I32);
27108c7f1abe9e022f6382634efea09c9cac89ec6336sewardj
27118c7f1abe9e022f6382634efea09c9cac89ec6336sewardj      case Iop_64HIto32: case Iop_64to32:
2712b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I64, Ity_I32);
27136d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj      case Iop_32HLto64:
2714b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I32,Ity_I32, Ity_I64);
27156d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj
27169b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Iop_128HIto64: case Iop_128to64:
2717b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I128, Ity_I64);
27189b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Iop_64HLto128:
2719b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_I64,Ity_I64, Ity_I128);
27209b96767debeeb1f78378f0e7e295fe6762c64002sewardj
2721b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_Not1:   UNARY(Ity_I1, Ity_I1);
2722b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_1Uto8:  UNARY(Ity_I1, Ity_I8);
2723b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_1Sto8:  UNARY(Ity_I1, Ity_I8);
2724b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_1Sto16: UNARY(Ity_I1, Ity_I16);
2725b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_1Uto32: case Iop_1Sto32: UNARY(Ity_I1, Ity_I32);
2726b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_1Sto64: case Iop_1Uto64: UNARY(Ity_I1, Ity_I64);
2727b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_32to1:  UNARY(Ity_I32, Ity_I1);
2728b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_64to1:  UNARY(Ity_I64, Ity_I1);
272917442fe8094d0f82266e5a05509f62cac8f7539esewardj
273017442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_8Uto32: case Iop_8Sto32:
2731b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I8, Ity_I32);
273217442fe8094d0f82266e5a05509f62cac8f7539esewardj
273317442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_8Uto16: case Iop_8Sto16:
2734b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I8, Ity_I16);
273517442fe8094d0f82266e5a05509f62cac8f7539esewardj
273617442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_16Uto32: case Iop_16Sto32:
2737b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I16, Ity_I32);
273817442fe8094d0f82266e5a05509f62cac8f7539esewardj
273917442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Iop_32Sto64: case Iop_32Uto64:
2740b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I32, Ity_I64);
274117442fe8094d0f82266e5a05509f62cac8f7539esewardj
2742291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_8Uto64: case Iop_8Sto64:
2743b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I8, Ity_I64);
2744291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj
2745291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj      case Iop_16Uto64: case Iop_16Sto64:
2746291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj         UNARY(Ity_I16, Ity_I64);
2747b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_64to16:
2748b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_I64, Ity_I16);
2749291a7e8fa181da2b707a2a7d51fbdccb17908f87sewardj
2750b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_32to8: UNARY(Ity_I32, Ity_I8);
2751b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_64to8: UNARY(Ity_I64, Ity_I8);
2752b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj
2753b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_AddF64:    case Iop_SubF64:
2754b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_MulF64:    case Iop_DivF64:
2755b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_AddF64r32: case Iop_SubF64r32:
2756b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_MulF64r32: case Iop_DivF64r32:
2757b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_F64);
2758b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj
27596c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_AddF32: case Iop_SubF32:
27606c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_MulF32: case Iop_DivF32:
27616c299f3acab617581ea504e45fbb6cab24c2b29fsewardj         TERNARY(ity_RMode,Ity_F32,Ity_F32, Ity_F32);
27626c299f3acab617581ea504e45fbb6cab24c2b29fsewardj
2763b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_NegF64: case Iop_AbsF64:
2764b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_F64, Ity_F64);
2765b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj
27666c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_NegF32: case Iop_AbsF32:
27676c299f3acab617581ea504e45fbb6cab24c2b29fsewardj         UNARY(Ity_F32, Ity_F32);
27686c299f3acab617581ea504e45fbb6cab24c2b29fsewardj
2769b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_SqrtF64:
277089cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RecpExpF64:
2771b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(ity_RMode,Ity_F64, Ity_F64);
277217442fe8094d0f82266e5a05509f62cac8f7539esewardj
27736c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_SqrtF32:
2774d15b597a8a006b3fe136cbf6cdf5b46ed532a4d8sewardj      case Iop_RoundF32toInt:
277589cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RecpExpF32:
27766c299f3acab617581ea504e45fbb6cab24c2b29fsewardj         BINARY(ity_RMode,Ity_F32, Ity_F32);
27776c299f3acab617581ea504e45fbb6cab24c2b29fsewardj
27782019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_CmpF32:
27792019a976f07ff418dde2dfc7cc74667ef66d7764sewardj         BINARY(Ity_F32,Ity_F32, Ity_I32);
27802019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
2781bdc7d215ca35fbf5213549560fc3bd8967f60f6dsewardj      case Iop_CmpF64:
2782b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_F64,Ity_F64, Ity_I32);
27838f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj
27842019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_CmpF128:
27852019a976f07ff418dde2dfc7cc74667ef66d7764sewardj         BINARY(Ity_F128,Ity_F128, Ity_I32);
27862019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
27876c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_F64toI16S: BINARY(ity_RMode,Ity_F64, Ity_I16);
27886c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_F64toI32S: BINARY(ity_RMode,Ity_F64, Ity_I32);
27894aa412af1d8166cc11f39a6e721df49431d23618sewardj      case Iop_F64toI64S: case Iop_F64toI64U:
27904aa412af1d8166cc11f39a6e721df49431d23618sewardj         BINARY(ity_RMode,Ity_F64, Ity_I64);
27916c299f3acab617581ea504e45fbb6cab24c2b29fsewardj
27926c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_F64toI32U: BINARY(ity_RMode,Ity_F64, Ity_I32);
27936c299f3acab617581ea504e45fbb6cab24c2b29fsewardj
27946c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_I32StoF64: UNARY(Ity_I32, Ity_F64);
27956c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_I64StoF64: BINARY(ity_RMode,Ity_I64, Ity_F64);
279666d5ef2c2a31fb52cdd4f02304489e30268ea13fsewardj      case Iop_I64UtoF64: BINARY(ity_RMode,Ity_I64, Ity_F64);
279795d6f3a3957232f97e6c680dd49de38cdeb9a1ffsewardj      case Iop_I64UtoF32: BINARY(ity_RMode,Ity_I64, Ity_F32);
27988f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj
27996c299f3acab617581ea504e45fbb6cab24c2b29fsewardj      case Iop_I32UtoF64: UNARY(Ity_I32, Ity_F64);
28003bca906f6e715c544eb49c278bedef093c14c0d7sewardj
28012019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F32toI32S: BINARY(ity_RMode,Ity_F32, Ity_I32);
28022019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F32toI64S: BINARY(ity_RMode,Ity_F32, Ity_I64);
28031c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_F32toI32U: BINARY(ity_RMode,Ity_F32, Ity_I32);
28041c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_F32toI64U: BINARY(ity_RMode,Ity_F32, Ity_I64);
28052019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
28061c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_I32UtoF32: BINARY(ity_RMode,Ity_I32, Ity_F32);
28072019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_I32StoF32: BINARY(ity_RMode,Ity_I32, Ity_F32);
28082019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_I64StoF32: BINARY(ity_RMode,Ity_I64, Ity_F32);
28092019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
2810b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_F32toF64: UNARY(Ity_F32, Ity_F64);
28113738bfcea70600334c830de5421adc0204890c95sewardj      case Iop_F16toF64: UNARY(Ity_F16, Ity_F64);
28123738bfcea70600334c830de5421adc0204890c95sewardj      case Iop_F16toF32: UNARY(Ity_F16, Ity_F32);
28133738bfcea70600334c830de5421adc0204890c95sewardj
2814b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_F64toF32: BINARY(ity_RMode,Ity_F64, Ity_F32);
28153738bfcea70600334c830de5421adc0204890c95sewardj      case Iop_F64toF16: BINARY(ity_RMode,Ity_F64, Ity_F16);
28163738bfcea70600334c830de5421adc0204890c95sewardj      case Iop_F32toF16: BINARY(ity_RMode,Ity_F32, Ity_F16);
28174cb918d355cef4e7640d374346852db4556f3524sewardj
2818b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_ReinterpI64asF64: UNARY(Ity_I64, Ity_F64);
2819b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_ReinterpF64asI64: UNARY(Ity_F64, Ity_I64);
2820b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_ReinterpI32asF32: UNARY(Ity_I32, Ity_F32);
2821fc1b541264539587f12721ca0b73ef04580ed2bdsewardj      case Iop_ReinterpF32asI32: UNARY(Ity_F32, Ity_I32);
28228f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj
2823b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_AtanF64: case Iop_Yl2xF64:  case Iop_Yl2xp1F64:
2824b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_ScaleF64: case Iop_PRemF64: case Iop_PRem1F64:
2825b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_F64);
2826b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj
2827b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_PRemC3210F64: case Iop_PRem1C3210F64:
2828b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         TERNARY(ity_RMode,Ity_F64,Ity_F64, Ity_I32);
2829b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj
2830b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_SinF64: case Iop_CosF64: case Iop_TanF64:
2831b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_2xm1F64:
2832b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_RoundF64toInt: BINARY(ity_RMode,Ity_F64, Ity_F64);
2833b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj
283440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      case Iop_MAddF64: case Iop_MSubF64:
283540c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      case Iop_MAddF64r32: case Iop_MSubF64r32:
283640c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         QUATERNARY(ity_RMode,Ity_F64,Ity_F64,Ity_F64, Ity_F64);
283740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj
28381ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst5GoodF64:
28390f1ef86a99d5129e04ed188e44d16a344d2bc42asewardj      case Iop_RoundF64toF64_NEAREST: case Iop_RoundF64toF64_NegINF:
28400f1ef86a99d5129e04ed188e44d16a344d2bc42asewardj      case Iop_RoundF64toF64_PosINF: case Iop_RoundF64toF64_ZERO:
2841b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_F64, Ity_F64);
2842b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_RoundF64toF32:
2843b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(ity_RMode,Ity_F64, Ity_F64);
2844b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_TruncF64asF32:
2845b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_F64, Ity_F32);
2846bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj
2847f294eb389e8e703e2d4476aea7ca579a160a0a89cerion      case Iop_I32UtoFx4:
2848f294eb389e8e703e2d4476aea7ca579a160a0a89cerion      case Iop_I32StoFx4:
2849f294eb389e8e703e2d4476aea7ca579a160a0a89cerion      case Iop_QFtoI32Ux4_RZ:
2850f294eb389e8e703e2d4476aea7ca579a160a0a89cerion      case Iop_QFtoI32Sx4_RZ:
28512fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_FtoI32Ux4_RZ:
28522fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_FtoI32Sx4_RZ:
2853f294eb389e8e703e2d4476aea7ca579a160a0a89cerion      case Iop_RoundF32x4_RM:
2854f294eb389e8e703e2d4476aea7ca579a160a0a89cerion      case Iop_RoundF32x4_RP:
2855f294eb389e8e703e2d4476aea7ca579a160a0a89cerion      case Iop_RoundF32x4_RN:
2856f294eb389e8e703e2d4476aea7ca579a160a0a89cerion      case Iop_RoundF32x4_RZ:
2857fab09143fb77b43e626ee73eeb375820e275d7bcsewardj      case Iop_Abs64Fx2: case Iop_Abs32Fx4:
28581ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Fx4:
28591ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Ux4:
2860f294eb389e8e703e2d4476aea7ca579a160a0a89cerion         UNARY(Ity_V128, Ity_V128);
2861f294eb389e8e703e2d4476aea7ca579a160a0a89cerion
28624b21c3de6dabbe17c7f4cc1c4748c5491267c158sewardj      case Iop_Sqrt64Fx2:
28634b21c3de6dabbe17c7f4cc1c4748c5491267c158sewardj      case Iop_Sqrt32Fx4:
28644b21c3de6dabbe17c7f4cc1c4748c5491267c158sewardj         BINARY(ity_RMode,Ity_V128, Ity_V128);
28654b21c3de6dabbe17c7f4cc1c4748c5491267c158sewardj
28665f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_64HLtoV128:
28675f438dd73072211989c6d496845bdc9b777ecbecsewardj         BINARY(Ity_I64,Ity_I64, Ity_V128);
28685f438dd73072211989c6d496845bdc9b777ecbecsewardj
28692fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_V128to64: case Iop_V128HIto64:
28705f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_NarrowUn16to8x8:
28715f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_NarrowUn32to16x4:
28725f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_NarrowUn64to32x2:
28735f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn16Uto8Ux8:
28745f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn32Uto16Ux4:
28755f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn64Uto32Ux2:
28765f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn16Sto8Sx8:
28775f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn32Sto16Sx4:
28785f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn64Sto32Sx2:
28795f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn16Sto8Ux8:
28805f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn32Sto16Ux4:
28815f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowUn64Sto32Ux2:
28822fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32toF16x4:
2883b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         UNARY(Ity_V128, Ity_I64);
2884c9a43665879a03886b27a65b68af2a2c11b04f59sewardj
28855f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen8Uto16x8:
28865f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen16Uto32x4:
28875f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen32Uto64x2:
28885f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen8Sto16x8:
28895f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen16Sto32x4:
28905f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_Widen32Sto64x2:
28912fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F16toF32x4:
28922fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         UNARY(Ity_I64, Ity_V128);
28932fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
2894b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_V128to32:    UNARY(Ity_V128, Ity_I32);
2895b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_32UtoV128:   UNARY(Ity_I32, Ity_V128);
2896b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_64UtoV128:   UNARY(Ity_I64, Ity_V128);
2897b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_SetV128lo32: BINARY(Ity_V128,Ity_I32, Ity_V128);
2898b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_SetV128lo64: BINARY(Ity_V128,Ity_I64, Ity_V128);
2899129b3d9da92af2ad2c58ffacb977aa5766211f08sewardj
2900b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_Dup8x16: UNARY(Ity_I8, Ity_V128);
2901b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_Dup16x8: UNARY(Ity_I16, Ity_V128);
2902b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_Dup32x4: UNARY(Ity_I32, Ity_V128);
29032fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Dup8x8:  UNARY(Ity_I8, Ity_I64);
29042fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Dup16x4: UNARY(Ity_I16, Ity_I64);
29052fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Dup32x2: UNARY(Ity_I32, Ity_I64);
2906f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion
29071e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpEQ32Fx4: case Iop_CmpLT32Fx4:
2908636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpEQ64Fx2: case Iop_CmpLT64Fx2:
29091e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpLE32Fx4: case Iop_CmpUN32Fx4:
2910636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpLE64Fx2: case Iop_CmpUN64Fx2:
2911206c36410bd92f385b972e36a3a40e38675294e2cerion      case Iop_CmpGT32Fx4: case Iop_CmpGE32Fx4:
29121e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpEQ32F0x4: case Iop_CmpLT32F0x4:
2913636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpEQ64F0x2: case Iop_CmpLT64F0x2:
29141e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Iop_CmpLE32F0x4: case Iop_CmpUN32F0x4:
2915636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_CmpLE64F0x2: case Iop_CmpUN64F0x2:
29169571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Add32F0x4:
29179571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Add64F0x2:
29189571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Div32F0x4:
29199571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Div64F0x2:
2920176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj      case Iop_Max32Fx4: case Iop_Max32F0x4:
29212fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwMax32Fx4: case Iop_PwMin32Fx4:
2922636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Max64Fx2: case Iop_Max64F0x2:
2923176a59c6eec21f8a0e8dbafdf85bb9af8109b0c6sewardj      case Iop_Min32Fx4: case Iop_Min32F0x4:
2924636ad762e49597ef608323f27c7b8eb66962cd90sewardj      case Iop_Min64Fx2: case Iop_Min64F0x2:
29259571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Mul32F0x4:
29269571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Mul64F0x2:
29279571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Sub32F0x4:
29289571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Sub64F0x2:
2929f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_AndV128: case Iop_OrV128: case Iop_XorV128:
2930164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Add8x16:   case Iop_Add16x8:
2931164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Add32x4:   case Iop_Add64x2:
29322fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd8Ux16: case Iop_QAdd16Ux8:
2933a5a6b75098f4c9bc11d6d7e3e03d97636d73261esewardj      case Iop_QAdd32Ux4: case Iop_QAdd64Ux2:
29342fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd8Sx16: case Iop_QAdd16Sx8:
29352fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QAdd32Sx4: case Iop_QAdd64Sx2:
2936f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtUSsatSS8x16: case Iop_QAddExtUSsatSS16x8:
2937f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtUSsatSS32x4: case Iop_QAddExtUSsatSS64x2:
2938f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtSUsatUU8x16: case Iop_QAddExtSUsatUU16x8:
2939f7003bc89eb8b671eae3a9d730e024936b950583sewardj      case Iop_QAddExtSUsatUU32x4: case Iop_QAddExtSUsatUU64x2:
29402fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAdd8x16: case Iop_PwAdd16x8: case Iop_PwAdd32x4:
2941164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Sub8x16:   case Iop_Sub16x8:
2942164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_Sub32x4:   case Iop_Sub64x2:
29432fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub8Ux16: case Iop_QSub16Ux8:
2944a5a6b75098f4c9bc11d6d7e3e03d97636d73261esewardj      case Iop_QSub32Ux4: case Iop_QSub64Ux2:
29452fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub8Sx16: case Iop_QSub16Sx8:
29462fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QSub32Sx4: case Iop_QSub64Sx2:
29472fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mul8x16: case Iop_Mul16x8: case Iop_Mul32x4:
29482fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PolynomialMul8x16:
29497deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_PolynomialMulAdd8x16: case Iop_PolynomialMulAdd16x8:
29507deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_PolynomialMulAdd32x4: case Iop_PolynomialMulAdd64x2:
2951f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_MulHi16Ux8: case Iop_MulHi32Ux4:
2952f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_MulHi16Sx8: case Iop_MulHi32Sx4:
29532fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QDMulHi16Sx8: case Iop_QDMulHi32Sx4:
29542fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_QRDMulHi16Sx8: case Iop_QRDMulHi32Sx4:
295548ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_MullEven8Ux16: case Iop_MullEven16Ux8: case Iop_MullEven32Ux4:
295648ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_MullEven8Sx16: case Iop_MullEven16Sx8: case Iop_MullEven32Sx4:
2957f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Avg8Ux16: case Iop_Avg16Ux8: case Iop_Avg32Ux4:
2958f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Avg8Sx16: case Iop_Avg16Sx8: case Iop_Avg32Sx4:
2959f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Max8Sx16: case Iop_Max16Sx8: case Iop_Max32Sx4:
296048ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Max64Sx2:
2961f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Max8Ux16: case Iop_Max16Ux8: case Iop_Max32Ux4:
296248ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Max64Ux2:
2963f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Min8Sx16: case Iop_Min16Sx8: case Iop_Min32Sx4:
296448ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Min64Sx2:
2965f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_Min8Ux16: case Iop_Min16Ux8: case Iop_Min32Ux4:
296648ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Min64Ux2:
2967164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_CmpEQ8x16:  case Iop_CmpEQ16x8:  case Iop_CmpEQ32x4:
2968d881562f1d18ab33038dab4a1b24823dba3422c0sewardj      case Iop_CmpEQ64x2:
2969164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_CmpGT8Sx16: case Iop_CmpGT16Sx8: case Iop_CmpGT32Sx4:
297069d98e3853a63e578e039894e2ef00ca6f9878c8sewardj      case Iop_CmpGT64Sx2:
2971f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_CmpGT8Ux16: case Iop_CmpGT16Ux8: case Iop_CmpGT32Ux4:
297248ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_CmpGT64Ux2:
29732fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shl8x16: case Iop_Shl16x8: case Iop_Shl32x4: case Iop_Shl64x2:
29745f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QShl8x16: case Iop_QShl16x8:
29755f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QShl32x4: case Iop_QShl64x2:
29765f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QSal8x16: case Iop_QSal16x8:
29775f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QSal32x4: case Iop_QSal64x2:
29782fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Shr8x16: case Iop_Shr16x8: case Iop_Shr32x4: case Iop_Shr64x2:
29792fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sar8x16: case Iop_Sar16x8: case Iop_Sar32x4: case Iop_Sar64x2:
29802fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Sal8x16: case Iop_Sal16x8: case Iop_Sal32x4: case Iop_Sal64x2:
298148ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_Rol8x16: case Iop_Rol16x8: case Iop_Rol32x4:case Iop_Rol64x2:
29825f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin16Sto8Ux16: case Iop_QNarrowBin32Sto16Ux8:
29835f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin16Sto8Sx16: case Iop_QNarrowBin32Sto16Sx8:
29845f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_QNarrowBin16Uto8Ux16: case Iop_QNarrowBin32Uto16Ux8:
298548ae46b56cef87c90638b25d6b2462c475033da8carll      case Iop_QNarrowBin64Sto32Sx4: case Iop_QNarrowBin64Uto32Ux4:
29865f438dd73072211989c6d496845bdc9b777ecbecsewardj      case Iop_NarrowBin16to8x16:   case Iop_NarrowBin32to16x8:
29870c74bb5aa3240f693df0568d578baabf0c376dc4carll      case Iop_NarrowBin64to32x4:
2988164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveHI8x16: case Iop_InterleaveHI16x8:
2989164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveHI32x4: case Iop_InterleaveHI64x2:
29902fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveLO8x16: case Iop_InterleaveLO16x8:
2991164f9275c465cd09ecd09276b8542282f5def250sewardj      case Iop_InterleaveLO32x4: case Iop_InterleaveLO64x2:
29922fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatOddLanes8x16: case Iop_CatEvenLanes8x16:
29932fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatOddLanes16x8: case Iop_CatEvenLanes16x8:
29942fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_CatOddLanes32x4: case Iop_CatEvenLanes32x4:
29952fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes8x16: case Iop_InterleaveEvenLanes8x16:
29962fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes16x8: case Iop_InterleaveEvenLanes16x8:
29972fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_InterleaveOddLanes32x4: case Iop_InterleaveEvenLanes32x4:
2998d8bca7e48c8b3ad028878ab501197ba701df43e5sewardj      case Iop_Perm8x16: case Iop_Perm32x4:
299989cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RecipStep32Fx4: case Iop_RecipStep64Fx2:
300089cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RSqrtStep32Fx4: case Iop_RSqrtStep64Fx2:
30017deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_CipherV128:
30027deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_CipherLV128:
30037deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_NCipherV128:
30047deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_NCipherLV128:
3005a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh8Sx16: case Iop_Sh16Sx8:
3006a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh32Sx4: case Iop_Sh64Sx2:
3007a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh8Ux16: case Iop_Sh16Ux8:
3008a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Sh32Ux4: case Iop_Sh64Ux2:
3009a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh8Sx16: case Iop_Rsh16Sx8:
3010a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh32Sx4: case Iop_Rsh64Sx2:
3011a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh8Ux16: case Iop_Rsh16Ux8:
3012a6b61f00e85d3f9a51a216487941a55c700af0c6sewardj      case Iop_Rsh32Ux4: case Iop_Rsh64Ux2:
3013b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_V128,Ity_V128, Ity_V128);
3014c9a43665879a03886b27a65b68af2a2c11b04f59sewardj
30152fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PolynomialMull8x8:
30162fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mull8Ux8: case Iop_Mull8Sx8:
30172fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mull16Ux4: case Iop_Mull16Sx4:
30182fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Mull32Ux2: case Iop_Mull32Sx2:
30192fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_I64, Ity_I64, Ity_V128);
30202fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
3021f0c1c58d6e47608ce166058997f795f1d7d45127sewardj      case Iop_NotV128:
30221ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32Fx4: case Iop_RecipEst32F0x4:
302389cefe4bb6a35343636d47f9888409a4e877fd5esewardj      case Iop_RecipEst64Fx2: case Iop_RSqrtEst64Fx2:
30241ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32Ux4:
30251ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32F0x4:
30264b21c3de6dabbe17c7f4cc1c4748c5491267c158sewardj      case Iop_Sqrt32F0x4:
30274b21c3de6dabbe17c7f4cc1c4748c5491267c158sewardj      case Iop_Sqrt64F0x2:
30282e38386d2f5902feed6ec276c2c2292a137717b9sewardj      case Iop_CmpNEZ8x16: case Iop_CmpNEZ16x8:
3029109ffdbb31ff652ae83d0ad400966f68c46cd4f1sewardj      case Iop_CmpNEZ32x4: case Iop_CmpNEZ64x2:
30302fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Cnt8x16:
3031a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Clz8x16: case Iop_Clz16x8: case Iop_Clz32x4: case Iop_Clz64x2:
3032a8c7b0f2ac208ed08763d0873131962a65669d58sewardj      case Iop_Cls8x16: case Iop_Cls16x8: case Iop_Cls32x4:
30332fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL8Ux16: case Iop_PwAddL16Ux8: case Iop_PwAddL32Ux4:
30342fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_PwAddL8Sx16: case Iop_PwAddL16Sx8: case Iop_PwAddL32Sx4:
3035336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn64_x2: case Iop_Reverse16sIn64_x2:
3036336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse32sIn64_x2:
3037336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn32_x4: case Iop_Reverse16sIn32_x4:
3038336803528188cd4fe8b4fcfa7c48ca1056811046sewardj      case Iop_Reverse8sIn16_x8:
3039715d162596c384614565879bf8d1b44bb9901d5bsewardj      case Iop_Reverse1sIn8_x16:
3040fab09143fb77b43e626ee73eeb375820e275d7bcsewardj      case Iop_Neg64Fx2: case Iop_Neg32Fx4:
304125523c41e75eeb10894d60452d8e69ef8bf30244sewardj      case Iop_Abs8x16: case Iop_Abs16x8: case Iop_Abs32x4: case Iop_Abs64x2:
30427deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_CipherSV128:
304360c6bac19ffe055cabab554e7877d73096a8bf17carll      case Iop_PwBitMtxXpose64x2:
3044ecde697ac84d29709ec34f8eb12753f9da32d451sewardj      case Iop_ZeroHI64ofV128:  case Iop_ZeroHI96ofV128:
3045ecde697ac84d29709ec34f8eb12753f9da32d451sewardj      case Iop_ZeroHI112ofV128: case Iop_ZeroHI120ofV128:
30460bd7ce6ae95b61bd9781f6a70f0132681a7b6387sewardj         UNARY(Ity_V128, Ity_V128);
30470bd7ce6ae95b61bd9781f6a70f0132681a7b6387sewardj
3048f887b3e44be206c5aad8039dc33e8e3102aaae7ecerion      case Iop_ShlV128: case Iop_ShrV128:
3049b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_ShlN8x16: case Iop_ShlN16x8:
3050b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_ShlN32x4: case Iop_ShlN64x2:
3051b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_ShrN8x16: case Iop_ShrN16x8:
3052b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iop_ShrN32x4: case Iop_ShrN64x2:
30532fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_SarN8x16: case Iop_SarN16x8:
30542fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_SarN32x4: case Iop_SarN64x2:
30551dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU8x16: case Iop_QShlNsatUU16x8:
30561dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatUU32x4: case Iop_QShlNsatUU64x2:
30571dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU8x16: case Iop_QShlNsatSU16x8:
30581dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSU32x4: case Iop_QShlNsatSU64x2:
30591dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS8x16: case Iop_QShlNsatSS16x8:
30601dd3ec1c8a8d28f1d81f42a599b390595466c805sewardj      case Iop_QShlNsatSS32x4: case Iop_QShlNsatSS64x2:
30617deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_SHA256:    case Iop_SHA512:
3062ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQShrNnarrow16Uto8Ux8:
3063ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQShrNnarrow32Uto16Ux4:
3064ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQShrNnarrow64Uto32Ux2:
3065ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow16Sto8Sx8:
3066ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow32Sto16Sx4:
3067ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow64Sto32Sx2:
3068ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow16Sto8Ux8:
3069ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow32Sto16Ux4:
3070ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQSarNnarrow64Sto32Ux2:
3071ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRShrNnarrow16Uto8Ux8:
3072ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRShrNnarrow32Uto16Ux4:
3073ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRShrNnarrow64Uto32Ux2:
3074ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow16Sto8Sx8:
3075ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow32Sto16Sx4:
3076ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow64Sto32Sx2:
3077ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow16Sto8Ux8:
3078ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow32Sto16Ux4:
3079ecedd989304126b77b8ff91044b8dde0e987c67asewardj      case Iop_QandQRSarNnarrow64Sto32Ux2:
3080b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         BINARY(Ity_V128,Ity_I8, Ity_V128);
3081164f9275c465cd09ecd09276b8542282f5def250sewardj
30822fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32ToFixed32Ux4_RZ:
30832fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32ToFixed32Sx4_RZ:
30842fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Fixed32UToF32x4_RN:
30852fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Fixed32SToF32x4_RN:
30862fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_V128, Ity_I8, Ity_V128);
30872fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
30882fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32ToFixed32Ux2_RZ:
30892fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_F32ToFixed32Sx2_RZ:
30902fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Fixed32UToF32x2_RN:
30912fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_Fixed32SToF32x2_RN:
30922fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_I64, Ity_I8, Ity_I64);
30932fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
30942fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem8x16:
30952fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_V128, Ity_I8, Ity_I8);
30962fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem16x8:
30972fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_V128, Ity_I8, Ity_I16);
30982fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem32x4:
30992fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_V128, Ity_I8, Ity_I32);
31002fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem64x2:
31012fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_V128, Ity_I8, Ity_I64);
31022fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem8x8:
31032fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_I64, Ity_I8, Ity_I8);
31042fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem16x4:
31052fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_I64, Ity_I8, Ity_I16);
31062fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_GetElem32x2:
31072fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_I64, Ity_I8, Ity_I32);
31082fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_SetElem8x8:
31092fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         TERNARY(Ity_I64, Ity_I8, Ity_I8, Ity_I64);
31102fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_SetElem16x4:
31112fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         TERNARY(Ity_I64, Ity_I8, Ity_I16, Ity_I64);
31122fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj      case Iop_SetElem32x2:
31132fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         TERNARY(Ity_I64, Ity_I8, Ity_I32, Ity_I64);
31142fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
3115e6b9bd927408d9a7b0a95a9d930b387659f65218sewardj      case Iop_Slice64:
31162fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         TERNARY(Ity_I64, Ity_I64, Ity_I8, Ity_I64);
3117e6b9bd927408d9a7b0a95a9d930b387659f65218sewardj      case Iop_SliceV128:
31182fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         TERNARY(Ity_V128, Ity_V128, Ity_I8, Ity_V128);
31192fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
31207deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_BCDAdd:
31217deaf9552b546b847528cf39b38898fb7742b5f5carll      case Iop_BCDSub:
31227deaf9552b546b847528cf39b38898fb7742b5f5carll         TERNARY(Ity_V128,Ity_V128, Ity_I8, Ity_V128);
312351d012a3533e6c8c0a378dbca05a6ee3e4bd81absewardj      case Iop_QDMull16Sx4: case Iop_QDMull32Sx2:
31242fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj         BINARY(Ity_I64, Ity_I64, Ity_V128);
31252fdd41628b79039a9586c7a601cc7ddcd376fccfsewardj
31269571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      /* s390 specific */
31272019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_MAddF32:
31282019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_MSubF32:
31292019a976f07ff418dde2dfc7cc74667ef66d7764sewardj         QUATERNARY(ity_RMode,Ity_F32,Ity_F32,Ity_F32, Ity_F32);
31302019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
31312019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F64HLtoF128:
31322019a976f07ff418dde2dfc7cc74667ef66d7764sewardj        BINARY(Ity_F64,Ity_F64, Ity_F128);
31332019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
31342019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128HItoF64:
31352019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128LOtoF64:
31362019a976f07ff418dde2dfc7cc74667ef66d7764sewardj        UNARY(Ity_F128, Ity_F64);
31372019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
31382019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_AddF128:
31392019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_SubF128:
31402019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_MulF128:
31412019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_DivF128:
31422019a976f07ff418dde2dfc7cc74667ef66d7764sewardj         TERNARY(ity_RMode,Ity_F128,Ity_F128, Ity_F128);
31432019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
31449571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Add64Fx2: case Iop_Sub64Fx2:
31459571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Mul64Fx2: case Iop_Div64Fx2:
31469571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Add32Fx4: case Iop_Sub32Fx4:
31479571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Mul32Fx4: case Iop_Div32Fx4:
31489571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj         TERNARY(ity_RMode,Ity_V128,Ity_V128, Ity_V128);
31499571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj
31509571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Add64Fx4: case Iop_Sub64Fx4:
31519571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Mul64Fx4: case Iop_Div64Fx4:
31529571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Add32Fx8: case Iop_Sub32Fx8:
31539571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj      case Iop_Mul32Fx8: case Iop_Div32Fx8:
31549571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj         TERNARY(ity_RMode,Ity_V256,Ity_V256, Ity_V256);
31559571dc05739e7980539cfd9dbc4e9ca19324e6d6sewardj
31562019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_NegF128:
31572019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_AbsF128:
31582019a976f07ff418dde2dfc7cc74667ef66d7764sewardj         UNARY(Ity_F128, Ity_F128);
31592019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
31602019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_SqrtF128:
31612019a976f07ff418dde2dfc7cc74667ef66d7764sewardj         BINARY(ity_RMode,Ity_F128, Ity_F128);
31622019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
31632019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_I32StoF128: UNARY(Ity_I32, Ity_F128);
31642019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_I64StoF128: UNARY(Ity_I64, Ity_F128);
31652019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
31661c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_I32UtoF128: UNARY(Ity_I32, Ity_F128);
31671c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_I64UtoF128: UNARY(Ity_I64, Ity_F128);
31681c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian
31692019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128toI32S: BINARY(ity_RMode,Ity_F128, Ity_I32);
31702019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128toI64S: BINARY(ity_RMode,Ity_F128, Ity_I64);
31712019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
31721c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_F128toI32U: BINARY(ity_RMode,Ity_F128, Ity_I32);
31731c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian      case Iop_F128toI64U: BINARY(ity_RMode,Ity_F128, Ity_I64);
31741c8f7ff5e4682f2ea5c33b514881d97e5dbc11ebflorian
31752019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F32toF128: UNARY(Ity_F32, Ity_F128);
31762019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F64toF128: UNARY(Ity_F64, Ity_F128);
31772019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
31782019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128toF32: BINARY(ity_RMode,Ity_F128, Ity_F32);
31792019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Iop_F128toF64: BINARY(ity_RMode,Ity_F128, Ity_F64);
31802019a976f07ff418dde2dfc7cc74667ef66d7764sewardj
318126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D32toD64:
31826dd9f27bcfe90b456b514fe18ea877daeb60e097florian         UNARY(Ity_D32, Ity_D64);
31836dd9f27bcfe90b456b514fe18ea877daeb60e097florian
3184cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_ExtractExpD64:
3185cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         UNARY(Ity_D64, Ity_I64);
318626217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj
31874bbd3ecf31fdd592d2114e148821ea8150e77e4aflorian      case Iop_ExtractSigD64:
31884bbd3ecf31fdd592d2114e148821ea8150e77e4aflorian         UNARY(Ity_D64, Ity_I64);
31894bbd3ecf31fdd592d2114e148821ea8150e77e4aflorian
3190cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_InsertExpD64:
3191cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         BINARY(Ity_I64,Ity_D64, Ity_D64);
3192cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
3193cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_ExtractExpD128:
3194cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         UNARY(Ity_D128, Ity_I64);
3195cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
3196cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll      case Iop_ExtractSigD128:
31974bbd3ecf31fdd592d2114e148821ea8150e77e4aflorian        UNARY(Ity_D128, Ity_I64);
31984bbd3ecf31fdd592d2114e148821ea8150e77e4aflorian
3199cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_InsertExpD128:
3200cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         BINARY(Ity_I64,Ity_D128, Ity_D128);
3201cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
320226217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D64toD128:
320326217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj         UNARY(Ity_D64, Ity_D128);
320426217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj
32055eff1c502e995d1f9668cc9def72d5db59f21b13sewardj      case Iop_ReinterpD64asI64:
32065eff1c502e995d1f9668cc9def72d5db59f21b13sewardj	UNARY(Ity_D64, Ity_I64);
32075eff1c502e995d1f9668cc9def72d5db59f21b13sewardj
3208cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_ReinterpI64asD64:
3209cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj         UNARY(Ity_I64, Ity_D64);
3210cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
3211cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_RoundD64toInt:
3212cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj         BINARY(ity_RMode,Ity_D64, Ity_D64);
3213cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
3214cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_RoundD128toInt:
3215cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj         BINARY(ity_RMode,Ity_D128, Ity_D128);
3216cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
3217b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I32StoD128:
3218b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I32UtoD128:
3219b17e16fb3709b8282646009caffa2ead7bcf363fflorian         UNARY(Ity_I32, Ity_D128);
3220b17e16fb3709b8282646009caffa2ead7bcf363fflorian
3221cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll      case Iop_I64StoD128:
3222cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         UNARY(Ity_I64, Ity_D128);
322326217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj
3224b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I64UtoD128:
3225b17e16fb3709b8282646009caffa2ead7bcf363fflorian         UNARY(Ity_I64, Ity_D128);
3226b17e16fb3709b8282646009caffa2ead7bcf363fflorian
32274c96e61dd85c172b999d6afc88ce6640aeba9962sewardj      case Iop_DPBtoBCD:
32284c96e61dd85c172b999d6afc88ce6640aeba9962sewardj      case Iop_BCDtoDPB:
32294c96e61dd85c172b999d6afc88ce6640aeba9962sewardj         UNARY(Ity_I64, Ity_I64);
32304c96e61dd85c172b999d6afc88ce6640aeba9962sewardj
3231c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_D128HItoD64:
3232c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_D128LOtoD64:
3233c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj         UNARY(Ity_D128, Ity_D64);
3234c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj
323526217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D128toI64S:
3236cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         BINARY(ity_RMode, Ity_D128, Ity_I64);
323726217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj
3238b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D128toI64U:
3239b17e16fb3709b8282646009caffa2ead7bcf363fflorian         BINARY(ity_RMode, Ity_D128, Ity_I64);
3240b17e16fb3709b8282646009caffa2ead7bcf363fflorian
3241b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D128toI32S:
3242b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D128toI32U:
3243b17e16fb3709b8282646009caffa2ead7bcf363fflorian         BINARY(ity_RMode, Ity_D128, Ity_I32);
3244b17e16fb3709b8282646009caffa2ead7bcf363fflorian
3245c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_D64HLtoD128:
324626217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj         BINARY(Ity_D64, Ity_D64, Ity_D128);
324726217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj
324826217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_ShlD64:
324926217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_ShrD64:
325026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj         BINARY(Ity_D64, Ity_I8, Ity_D64 );
325126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj
32526dd9f27bcfe90b456b514fe18ea877daeb60e097florian      case Iop_D64toD32:
32536dd9f27bcfe90b456b514fe18ea877daeb60e097florian         BINARY(ity_RMode, Ity_D64, Ity_D32);
32546dd9f27bcfe90b456b514fe18ea877daeb60e097florian
3255b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D64toI32S:
3256b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D64toI32U:
3257b17e16fb3709b8282646009caffa2ead7bcf363fflorian         BINARY(ity_RMode, Ity_D64, Ity_I32);
3258b17e16fb3709b8282646009caffa2ead7bcf363fflorian
325926217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D64toI64S:
3260cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         BINARY(ity_RMode, Ity_D64, Ity_I64);
326126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj
3262b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_D64toI64U:
3263b17e16fb3709b8282646009caffa2ead7bcf363fflorian         BINARY(ity_RMode, Ity_D64, Ity_I64);
3264b17e16fb3709b8282646009caffa2ead7bcf363fflorian
3265b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I32StoD64:
3266b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I32UtoD64:
3267b17e16fb3709b8282646009caffa2ead7bcf363fflorian         UNARY(Ity_I32, Ity_D64);
3268b17e16fb3709b8282646009caffa2ead7bcf363fflorian
3269cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll      case Iop_I64StoD64:
3270cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         BINARY(ity_RMode, Ity_I64, Ity_D64);
327126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj
3272b17e16fb3709b8282646009caffa2ead7bcf363fflorian      case Iop_I64UtoD64:
3273b17e16fb3709b8282646009caffa2ead7bcf363fflorian         BINARY(ity_RMode, Ity_I64, Ity_D64);
3274b17e16fb3709b8282646009caffa2ead7bcf363fflorian
3275b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F32toD32:
3276b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_F32, Ity_D32);
3277b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3278b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F32toD64:
3279b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_F32, Ity_D64);
3280b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3281b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F32toD128:
3282b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_F32, Ity_D128);
3283b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3284b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F64toD32:
3285b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_F64, Ity_D32);
3286b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
328737c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian      case Iop_F64toD64:
328837c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian         BINARY(ity_RMode, Ity_F64, Ity_D64);
328937c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian
329037c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian      case Iop_F64toD128:
329137c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian         BINARY(ity_RMode, Ity_F64, Ity_D128);
329237c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian
3293b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F128toD32:
3294b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_F128, Ity_D32);
3295b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3296b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_F128toD64:
3297b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_F128, Ity_D64);
329837c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian
329937c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian      case Iop_F128toD128:
330037c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian         BINARY(ity_RMode, Ity_F128, Ity_D128);
330137c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian
3302b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D32toF32:
3303b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_D32, Ity_F32);
3304b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3305b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D32toF64:
3306b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_D32, Ity_F64);
3307b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3308b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D32toF128:
3309b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_D32, Ity_F128);
3310b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3311b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D64toF32:
3312b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_D64, Ity_F32);
3313b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3314b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D64toF64:
3315b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_D64, Ity_F64);
3316b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3317b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D64toF128:
3318b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_D64, Ity_F128);
3319b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3320b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D128toF32:
3321b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_D128, Ity_F32);
3322b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
3323b22838d88488f42a46a6d01f5df441c391fb3bbaflorian      case Iop_D128toF64:
3324b22838d88488f42a46a6d01f5df441c391fb3bbaflorian         BINARY(ity_RMode, Ity_D128, Ity_F64);
3325b22838d88488f42a46a6d01f5df441c391fb3bbaflorian
332637c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian      case Iop_D128toF128:
332737c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian         BINARY(ity_RMode, Ity_D128, Ity_F128);
332837c57f396b7a6dc1fc3a7e59e85bbf7eac627a88florian
3329cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_CmpD64:
333020c6bca02d9b3c985607b4639ffc70eb504cc237florian      case Iop_CmpExpD64:
3331cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj         BINARY(Ity_D64,Ity_D64, Ity_I32);
3332cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
3333cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_CmpD128:
333420c6bca02d9b3c985607b4639ffc70eb504cc237florian      case Iop_CmpExpD128:
3335cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj         BINARY(Ity_D128,Ity_D128, Ity_I32);
3336cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
3337cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_QuantizeD64:
3338cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj         TERNARY(ity_RMode,Ity_D64,Ity_D64, Ity_D64);
3339cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
3340cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll      case Iop_SignificanceRoundD64:
3341cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         TERNARY(ity_RMode, Ity_I8,Ity_D64, Ity_D64);
3342cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll
3343cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj      case Iop_QuantizeD128:
3344cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj         TERNARY(ity_RMode,Ity_D128,Ity_D128, Ity_D128);
3345cdc376dcb5a4560b0a35d4abcb2146c499756f0dsewardj
3346cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll      case Iop_SignificanceRoundD128:
3347cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll         TERNARY(ity_RMode, Ity_I8,Ity_D128, Ity_D128);
3348cea07ccbe9aa9b5fd8e9b318471c6c74aa147acbcarll
334926217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_ShlD128:
335026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_ShrD128:
335126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj         BINARY(Ity_D128, Ity_I8, Ity_D128 );
3352c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj
3353c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_AddD64:
3354c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_SubD64:
3355c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_MulD64:
3356c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_DivD64:
3357c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj         TERNARY( ity_RMode, Ity_D64, Ity_D64, Ity_D64 );
3358c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj
335926217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj      case Iop_D128toD64:
336026217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj         BINARY( ity_RMode, Ity_D128, Ity_D64 );
336126217b09205cc1801b842ba5ba8f0d83aabca1b4sewardj
3362c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_AddD128:
3363c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_SubD128:
3364c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_MulD128:
3365c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Iop_DivD128:
3366c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj         TERNARY(ity_RMode,Ity_D128,Ity_D128, Ity_D128);
3367c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj
3368c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Iop_V256to64_0: case Iop_V256to64_1:
3369c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Iop_V256to64_2: case Iop_V256to64_3:
3370c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj         UNARY(Ity_V256, Ity_I64);
3371c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj
3372c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Iop_64x4toV256:
3373c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj         QUATERNARY(Ity_I64, Ity_I64, Ity_I64, Ity_I64, Ity_V256);
3374c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj
33752a2bda92787a9daef62737e54f3a1752920a0ecfsewardj      case Iop_AndV256:  case Iop_OrV256:
33764b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj      case Iop_XorV256:
33778eb7ae8df9e152f0f99d1abbc68f2fee77ac2d04sewardj      case Iop_Max32Fx8: case Iop_Min32Fx8:
33788eb7ae8df9e152f0f99d1abbc68f2fee77ac2d04sewardj      case Iop_Max64Fx4: case Iop_Min64Fx4:
3379cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Add8x32:  case Iop_Add16x16:
3380cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Add32x8:  case Iop_Add64x4:
3381cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Sub8x32:  case Iop_Sub16x16:
3382cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Sub32x8:  case Iop_Sub64x4:
3383cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Mul16x16: case Iop_Mul32x8:
3384cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_MulHi16Ux16: case Iop_MulHi16Sx16:
3385cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Avg8Ux32: case Iop_Avg16Ux16:
3386cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Max8Sx32: case Iop_Max16Sx16: case Iop_Max32Sx8:
3387cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Max8Ux32: case Iop_Max16Ux16: case Iop_Max32Ux8:
3388cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Min8Sx32: case Iop_Min16Sx16: case Iop_Min32Sx8:
3389cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Min8Ux32: case Iop_Min16Ux16: case Iop_Min32Ux8:
3390cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpEQ8x32:  case Iop_CmpEQ16x16:
3391cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpEQ32x8:  case Iop_CmpEQ64x4:
3392cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpGT8Sx32: case Iop_CmpGT16Sx16:
3393cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpGT32Sx8: case Iop_CmpGT64Sx4:
3394cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QAdd8Ux32: case Iop_QAdd16Ux16:
3395cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QAdd8Sx32: case Iop_QAdd16Sx16:
3396cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QSub8Ux32: case Iop_QSub16Ux16:
3397cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_QSub8Sx32: case Iop_QSub16Sx16:
3398cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_Perm32x8:
339956c30311864565c853457b4398d96588cdf141fdsewardj         BINARY(Ity_V256,Ity_V256, Ity_V256);
340056c30311864565c853457b4398d96588cdf141fdsewardj
34014b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj      case Iop_V256toV128_1: case Iop_V256toV128_0:
34024b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj         UNARY(Ity_V256, Ity_V128);
34034b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj
34041297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQsh8x16:  case Iop_QandUQsh16x8:
34051297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQsh32x4:  case Iop_QandUQsh64x2:
34061297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQsh8x16:  case Iop_QandSQsh16x8:
34071297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQsh32x4:  case Iop_QandSQsh64x2:
34081297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQRsh8x16: case Iop_QandUQRsh16x8:
34091297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandUQRsh32x4: case Iop_QandUQRsh64x2:
34101297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQRsh8x16: case Iop_QandSQRsh16x8:
34111297218cbc3c4b2da8537cca6e815afa57f255c3sewardj      case Iop_QandSQRsh32x4: case Iop_QandSQRsh64x2:
34124b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj      case Iop_V128HLtoV256:
34134b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj         BINARY(Ity_V128,Ity_V128, Ity_V256);
34144b1cc83949a6a6aa05ad24420f6b64a82f7a7857sewardj
34152a2bda92787a9daef62737e54f3a1752920a0ecfsewardj      case Iop_NotV256:
34161ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RSqrtEst32Fx8:
341766becf3fea6d533e71963a59f9d68cbac2325ff7sewardj      case Iop_Sqrt32Fx8:
341866becf3fea6d533e71963a59f9d68cbac2325ff7sewardj      case Iop_Sqrt64Fx4:
34191ddee21008ffdb2ac7f8e6a73445f150f753606fsewardj      case Iop_RecipEst32Fx8:
3420cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_CmpNEZ8x32: case Iop_CmpNEZ16x16:
342123db8a0f3aadf513afc9e7bb8bbde5634fc84137sewardj      case Iop_CmpNEZ64x4: case Iop_CmpNEZ32x8:
34222a2bda92787a9daef62737e54f3a1752920a0ecfsewardj         UNARY(Ity_V256, Ity_V256);
34232a2bda92787a9daef62737e54f3a1752920a0ecfsewardj
3424cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShlN16x16: case Iop_ShlN32x8:
3425cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShlN64x4:
3426cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShrN16x16: case Iop_ShrN32x8:
3427cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_ShrN64x4:
3428cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj      case Iop_SarN16x16: case Iop_SarN32x8:
3429cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj         BINARY(Ity_V256,Ity_I8, Ity_V256);
3430cc3d219c3120150c9ab67f1f4850be0f39a9499csewardj
34316efd4a18cf32c322e03351176873cef33f1fe67esewardj      default:
34326efd4a18cf32c322e03351176873cef33f1fe67esewardj         ppIROp(op);
34336efd4a18cf32c322e03351176873cef33f1fe67esewardj         vpanic("typeOfPrimop");
34346efd4a18cf32c322e03351176873cef33f1fe67esewardj   }
34356efd4a18cf32c322e03351176873cef33f1fe67esewardj#  undef UNARY
34366efd4a18cf32c322e03351176873cef33f1fe67esewardj#  undef BINARY
3437b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj#  undef TERNARY
34386efd4a18cf32c322e03351176873cef33f1fe67esewardj#  undef COMPARISON
34390033ddccac6f90789fe2e78e86b8a649931d77b4sewardj#  undef UNARY_COMPARISON
34406efd4a18cf32c322e03351176873cef33f1fe67esewardj}
34416efd4a18cf32c322e03351176873cef33f1fe67esewardj
34426efd4a18cf32c322e03351176873cef33f1fe67esewardj
34436efd4a18cf32c322e03351176873cef33f1fe67esewardj/*---------------------------------------------------------------*/
3444695cff9303ef5dc8079117acfd632b44edb1f010sewardj/*--- Helper functions for the IR -- IR Basic Blocks          ---*/
3445c97096c44637ae5775ed305b19f16f0b505f17d8sewardj/*---------------------------------------------------------------*/
3446c97096c44637ae5775ed305b19f16f0b505f17d8sewardj
3447dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardjvoid addStmtToIRSB ( IRSB* bb, IRStmt* st )
3448c97096c44637ae5775ed305b19f16f0b505f17d8sewardj{
3449695cff9303ef5dc8079117acfd632b44edb1f010sewardj   Int i;
3450695cff9303ef5dc8079117acfd632b44edb1f010sewardj   if (bb->stmts_used == bb->stmts_size) {
3451d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian      IRStmt** stmts2 = LibVEX_Alloc_inline(2 * bb->stmts_size * sizeof(IRStmt*));
3452695cff9303ef5dc8079117acfd632b44edb1f010sewardj      for (i = 0; i < bb->stmts_size; i++)
3453695cff9303ef5dc8079117acfd632b44edb1f010sewardj         stmts2[i] = bb->stmts[i];
3454695cff9303ef5dc8079117acfd632b44edb1f010sewardj      bb->stmts = stmts2;
3455695cff9303ef5dc8079117acfd632b44edb1f010sewardj      bb->stmts_size *= 2;
3456695cff9303ef5dc8079117acfd632b44edb1f010sewardj   }
3457695cff9303ef5dc8079117acfd632b44edb1f010sewardj   vassert(bb->stmts_used < bb->stmts_size);
3458695cff9303ef5dc8079117acfd632b44edb1f010sewardj   bb->stmts[bb->stmts_used] = st;
3459695cff9303ef5dc8079117acfd632b44edb1f010sewardj   bb->stmts_used++;
3460c97096c44637ae5775ed305b19f16f0b505f17d8sewardj}
3461c97096c44637ae5775ed305b19f16f0b505f17d8sewardj
3462d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj
3463695cff9303ef5dc8079117acfd632b44edb1f010sewardj/*---------------------------------------------------------------*/
3464695cff9303ef5dc8079117acfd632b44edb1f010sewardj/*--- Helper functions for the IR -- IR Type Environments     ---*/
3465695cff9303ef5dc8079117acfd632b44edb1f010sewardj/*---------------------------------------------------------------*/
3466d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj
3467d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj/* Allocate a new IRTemp, given its type. */
3468c97096c44637ae5775ed305b19f16f0b505f17d8sewardj
3469e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardjIRTemp newIRTemp ( IRTypeEnv* env, IRType ty )
3470c97096c44637ae5775ed305b19f16f0b505f17d8sewardj{
347135421a3cfd43bc829d27ee15bd34bbc7cb690805sewardj   vassert(env);
3472e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   vassert(env->types_used >= 0);
3473e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   vassert(env->types_size >= 0);
3474e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   vassert(env->types_used <= env->types_size);
3475e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   if (env->types_used < env->types_size) {
3476e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      env->types[env->types_used] = ty;
3477e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      return env->types_used++;
3478c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   } else {
3479c97096c44637ae5775ed305b19f16f0b505f17d8sewardj      Int i;
3480e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      Int new_size = env->types_size==0 ? 8 : 2*env->types_size;
3481e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      IRType* new_types
3482d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian         = LibVEX_Alloc_inline(new_size * sizeof(IRType));
3483e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      for (i = 0; i < env->types_used; i++)
3484e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj         new_types[i] = env->types[i];
3485e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      env->types      = new_types;
3486e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      env->types_size = new_size;
3487e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj      return newIRTemp(env, ty);
3488c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   }
3489c97096c44637ae5775ed305b19f16f0b505f17d8sewardj}
3490c97096c44637ae5775ed305b19f16f0b505f17d8sewardj
3491c97096c44637ae5775ed305b19f16f0b505f17d8sewardj
349217442fe8094d0f82266e5a05509f62cac8f7539esewardj/*---------------------------------------------------------------*/
349317442fe8094d0f82266e5a05509f62cac8f7539esewardj/*--- Helper functions for the IR -- finding types of exprs   ---*/
349417442fe8094d0f82266e5a05509f62cac8f7539esewardj/*---------------------------------------------------------------*/
349517442fe8094d0f82266e5a05509f62cac8f7539esewardj
3496edeb4c430bcc8af0c399466ddad8fa1c3e3e5fb0sewardjinline
34970b70efae27eafd60bc7ea9a3955605d55a681651florianIRType typeOfIRTemp ( const IRTypeEnv* env, IRTemp tmp )
3498c97096c44637ae5775ed305b19f16f0b505f17d8sewardj{
3499e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   vassert(tmp >= 0);
3500e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   vassert(tmp < env->types_used);
3501e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   return env->types[tmp];
3502c97096c44637ae5775ed305b19f16f0b505f17d8sewardj}
3503e3d0d2ea7b2161ae4f627882be33902ce5f3f8besewardj
35040b70efae27eafd60bc7ea9a3955605d55a681651florianIRType typeOfIRConst ( const IRConst* con )
35056efd4a18cf32c322e03351176873cef33f1fe67esewardj{
35066efd4a18cf32c322e03351176873cef33f1fe67esewardj   switch (con->tag) {
3507ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj      case Ico_U1:    return Ity_I1;
3508207557ab2ea38239b670785c976b89d50bbb0eccsewardj      case Ico_U8:    return Ity_I8;
3509207557ab2ea38239b670785c976b89d50bbb0eccsewardj      case Ico_U16:   return Ity_I16;
3510207557ab2ea38239b670785c976b89d50bbb0eccsewardj      case Ico_U32:   return Ity_I32;
3511207557ab2ea38239b670785c976b89d50bbb0eccsewardj      case Ico_U64:   return Ity_I64;
35122019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ico_F32:   return Ity_F32;
35132019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ico_F32i:  return Ity_F32;
3514207557ab2ea38239b670785c976b89d50bbb0eccsewardj      case Ico_F64:   return Ity_F64;
351517442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ico_F64i:  return Ity_F64;
35161e6ad745ebafd0524da1da27a4b85524fa84f777sewardj      case Ico_V128:  return Ity_V128;
351737a505b5a6814921fcfff1eac950a9ef7651e42bsewardj      case Ico_V256:  return Ity_V256;
35186efd4a18cf32c322e03351176873cef33f1fe67esewardj      default: vpanic("typeOfIRConst");
35196efd4a18cf32c322e03351176873cef33f1fe67esewardj   }
35206efd4a18cf32c322e03351176873cef33f1fe67esewardj}
35216efd4a18cf32c322e03351176873cef33f1fe67esewardj
3522cfe046e178666280b87da998b1b52ecda03ecd89sewardjvoid typeOfIRLoadGOp ( IRLoadGOp cvt,
3523cfe046e178666280b87da998b1b52ecda03ecd89sewardj                       /*OUT*/IRType* t_res, /*OUT*/IRType* t_arg )
3524cfe046e178666280b87da998b1b52ecda03ecd89sewardj{
3525cfe046e178666280b87da998b1b52ecda03ecd89sewardj   switch (cvt) {
3526802bbae6cf8fbc3b6309514b84372f24147fa64esewardj      case ILGop_Ident64:
3527802bbae6cf8fbc3b6309514b84372f24147fa64esewardj         *t_res = Ity_I64; *t_arg = Ity_I64; break;
3528cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case ILGop_Ident32:
3529cfe046e178666280b87da998b1b52ecda03ecd89sewardj         *t_res = Ity_I32; *t_arg = Ity_I32; break;
3530cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case ILGop_16Uto32: case ILGop_16Sto32:
3531cfe046e178666280b87da998b1b52ecda03ecd89sewardj         *t_res = Ity_I32; *t_arg = Ity_I16; break;
3532cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case ILGop_8Uto32: case ILGop_8Sto32:
3533cfe046e178666280b87da998b1b52ecda03ecd89sewardj         *t_res = Ity_I32; *t_arg = Ity_I8; break;
3534cfe046e178666280b87da998b1b52ecda03ecd89sewardj      default:
3535cfe046e178666280b87da998b1b52ecda03ecd89sewardj         vpanic("typeOfIRLoadGOp");
3536cfe046e178666280b87da998b1b52ecda03ecd89sewardj   }
3537cfe046e178666280b87da998b1b52ecda03ecd89sewardj}
3538cfe046e178666280b87da998b1b52ecda03ecd89sewardj
35390b70efae27eafd60bc7ea9a3955605d55a681651florianIRType typeOfIRExpr ( const IRTypeEnv* tyenv, const IRExpr* e )
3540c97096c44637ae5775ed305b19f16f0b505f17d8sewardj{
354140c802659108a96bb87cbc1a30b7b77e2abd0829sewardj   IRType t_dst, t_arg1, t_arg2, t_arg3, t_arg4;
3542edeb4c430bcc8af0c399466ddad8fa1c3e3e5fb0sewardj start:
3543c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   switch (e->tag) {
3544af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      case Iex_Load:
3545af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         return e->Iex.Load.ty;
3546fbcaf3312f39fb73d54821636c6168db76245f61sewardj      case Iex_Get:
3547fbcaf3312f39fb73d54821636c6168db76245f61sewardj         return e->Iex.Get.ty;
3548bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj      case Iex_GetI:
35492d3f77c12d2911173fd182d0b6e954196dee9135sewardj         return e->Iex.GetI.descr->elemTy;
3550dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      case Iex_RdTmp:
3551dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         return typeOfIRTemp(tyenv, e->Iex.RdTmp.tmp);
3552c97096c44637ae5775ed305b19f16f0b505f17d8sewardj      case Iex_Const:
3553695cff9303ef5dc8079117acfd632b44edb1f010sewardj         return typeOfIRConst(e->Iex.Const.con);
355440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      case Iex_Qop:
355596d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         typeOfPrimop(e->Iex.Qop.details->op,
355640c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                      &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4);
355740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         return t_dst;
3558b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iex_Triop:
3559420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         typeOfPrimop(e->Iex.Triop.details->op,
356040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                      &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4);
3561b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         return t_dst;
3562c97096c44637ae5775ed305b19f16f0b505f17d8sewardj      case Iex_Binop:
356340c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         typeOfPrimop(e->Iex.Binop.op,
356440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                      &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4);
35656efd4a18cf32c322e03351176873cef33f1fe67esewardj         return t_dst;
35666efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iex_Unop:
356740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         typeOfPrimop(e->Iex.Unop.op,
356840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                      &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4);
35696efd4a18cf32c322e03351176873cef33f1fe67esewardj         return t_dst;
35706efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iex_CCall:
35716efd4a18cf32c322e03351176873cef33f1fe67esewardj         return e->Iex.CCall.retty;
357299dd03e04a6914d90d5fee727d61d76905334becflorian      case Iex_ITE:
357399dd03e04a6914d90d5fee727d61d76905334becflorian         e = e->Iex.ITE.iffalse;
3574edeb4c430bcc8af0c399466ddad8fa1c3e3e5fb0sewardj         goto start;
357599dd03e04a6914d90d5fee727d61d76905334becflorian         /* return typeOfIRExpr(tyenv, e->Iex.ITE.iffalse); */
3576443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardj      case Iex_Binder:
3577443cd9d34617dd7608e5dd4b4b0b4674d4f433e7sewardj         vpanic("typeOfIRExpr: Binder is not a valid expression");
35789041956f39c57e265122ed0a71061dea1e554edcflorian      case Iex_VECRET:
35799041956f39c57e265122ed0a71061dea1e554edcflorian         vpanic("typeOfIRExpr: VECRET is not a valid expression");
35809041956f39c57e265122ed0a71061dea1e554edcflorian      case Iex_BBPTR:
35819041956f39c57e265122ed0a71061dea1e554edcflorian         vpanic("typeOfIRExpr: BBPTR is not a valid expression");
3582c97096c44637ae5775ed305b19f16f0b505f17d8sewardj      default:
35836efd4a18cf32c322e03351176873cef33f1fe67esewardj         ppIRExpr(e);
35846efd4a18cf32c322e03351176873cef33f1fe67esewardj         vpanic("typeOfIRExpr");
3585c97096c44637ae5775ed305b19f16f0b505f17d8sewardj   }
3586c97096c44637ae5775ed305b19f16f0b505f17d8sewardj}
3587887a11a609f3e61d2ae8fe4e67f176207715da7esewardj
35886d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj/* Is this any value actually in the enumeration 'IRType' ? */
3589496a58d130a28ac3a5ba33c9012dabbe61dc852csewardjBool isPlausibleIRType ( IRType ty )
35906d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj{
35916d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj   switch (ty) {
3592ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj      case Ity_INVALID: case Ity_I1:
35939b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_I8: case Ity_I16: case Ity_I32:
35949b96767debeeb1f78378f0e7e295fe6762c64002sewardj      case Ity_I64: case Ity_I128:
35953738bfcea70600334c830de5421adc0204890c95sewardj      case Ity_F16: case Ity_F32: case Ity_F64: case Ity_F128:
3596c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Ity_D32: case Ity_D64: case Ity_D128:
3597c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Ity_V128: case Ity_V256:
35986d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj         return True;
35996d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj      default:
36006d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj         return False;
36016d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj   }
36026d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj}
36036d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj
36046efd4a18cf32c322e03351176873cef33f1fe67esewardj
3605887a11a609f3e61d2ae8fe4e67f176207715da7esewardj/*---------------------------------------------------------------*/
3606cf7879021370aabcccb1a9347244fcc7d5680141sewardj/*--- Sanity checking -- FLATNESS                             ---*/
3607cf7879021370aabcccb1a9347244fcc7d5680141sewardj/*---------------------------------------------------------------*/
3608cf7879021370aabcccb1a9347244fcc7d5680141sewardj
3609cf7879021370aabcccb1a9347244fcc7d5680141sewardj/* Check that the canonical flatness constraints hold on an
3610cf7879021370aabcccb1a9347244fcc7d5680141sewardj   IRStmt. The only place where any expression is allowed to be
3611cf7879021370aabcccb1a9347244fcc7d5680141sewardj   non-atomic is the RHS of IRStmt_Tmp. */
3612cf7879021370aabcccb1a9347244fcc7d5680141sewardj
3613cf7879021370aabcccb1a9347244fcc7d5680141sewardj/* Relies on:
3614cf7879021370aabcccb1a9347244fcc7d5680141sewardj   inline static Bool isAtom ( IRExpr* e ) {
3615dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      return e->tag == Iex_RdTmp || e->tag == Iex_Const;
3616cf7879021370aabcccb1a9347244fcc7d5680141sewardj   }
3617cf7879021370aabcccb1a9347244fcc7d5680141sewardj*/
3618cf7879021370aabcccb1a9347244fcc7d5680141sewardj
36190b70efae27eafd60bc7ea9a3955605d55a681651florianstatic inline Bool isIRAtom_or_VECRET_or_BBPTR ( const IRExpr* e )
36200b70efae27eafd60bc7ea9a3955605d55a681651florian{
36219041956f39c57e265122ed0a71061dea1e554edcflorian  if (isIRAtom(e)) {
36229041956f39c57e265122ed0a71061dea1e554edcflorian    return True;
36239041956f39c57e265122ed0a71061dea1e554edcflorian  }
36249041956f39c57e265122ed0a71061dea1e554edcflorian
36259041956f39c57e265122ed0a71061dea1e554edcflorian  return UNLIKELY(is_IRExpr_VECRET_or_BBPTR(e));
362674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj}
362774142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj
36280b70efae27eafd60bc7ea9a3955605d55a681651florianBool isFlatIRStmt ( const IRStmt* st )
3629cf7879021370aabcccb1a9347244fcc7d5680141sewardj{
3630cf7879021370aabcccb1a9347244fcc7d5680141sewardj   Int      i;
36310b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRExpr*  e;
36320b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRQop*   qop;
36330b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRTriop* triop;
3634cf7879021370aabcccb1a9347244fcc7d5680141sewardj
3635cf7879021370aabcccb1a9347244fcc7d5680141sewardj   switch (st->tag) {
36365a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj      case Ist_AbiHint:
3637478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj         return isIRAtom(st->Ist.AbiHint.base)
3638478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj                && isIRAtom(st->Ist.AbiHint.nia);
3639cf7879021370aabcccb1a9347244fcc7d5680141sewardj      case Ist_Put:
3640496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj         return isIRAtom(st->Ist.Put.data);
36410b70efae27eafd60bc7ea9a3955605d55a681651florian      case Ist_PutI: {
36420b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRPutI *puti = st->Ist.PutI.details;
3643d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         return toBool( isIRAtom(puti->ix)
3644d6f38b3f822f7d57adfc0da3410995d85d6a4597florian                        && isIRAtom(puti->data) );
36450b70efae27eafd60bc7ea9a3955605d55a681651florian      }
3646dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      case Ist_WrTmp:
3647cf7879021370aabcccb1a9347244fcc7d5680141sewardj         /* This is the only interesting case.  The RHS can be any
3648cf7879021370aabcccb1a9347244fcc7d5680141sewardj            expression, *but* all its subexpressions *must* be
3649cf7879021370aabcccb1a9347244fcc7d5680141sewardj            atoms. */
3650dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         e = st->Ist.WrTmp.data;
3651cf7879021370aabcccb1a9347244fcc7d5680141sewardj         switch (e->tag) {
3652cf7879021370aabcccb1a9347244fcc7d5680141sewardj            case Iex_Binder: return True;
3653cf7879021370aabcccb1a9347244fcc7d5680141sewardj            case Iex_Get:    return True;
3654496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj            case Iex_GetI:   return isIRAtom(e->Iex.GetI.ix);
3655dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj            case Iex_RdTmp:  return True;
365696d7cc3e7d54ad5af2af2821223b21f9a8516a59florian            case Iex_Qop:    qop = e->Iex.Qop.details;
365796d7cc3e7d54ad5af2af2821223b21f9a8516a59florian                             return toBool(
365896d7cc3e7d54ad5af2af2821223b21f9a8516a59florian                                    isIRAtom(qop->arg1)
365996d7cc3e7d54ad5af2af2821223b21f9a8516a59florian                                    && isIRAtom(qop->arg2)
366096d7cc3e7d54ad5af2af2821223b21f9a8516a59florian                                    && isIRAtom(qop->arg3)
366196d7cc3e7d54ad5af2af2821223b21f9a8516a59florian                                    && isIRAtom(qop->arg4));
3662420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian            case Iex_Triop:  triop = e->Iex.Triop.details;
3663420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian                             return toBool(
3664420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian                                    isIRAtom(triop->arg1)
3665420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian                                    && isIRAtom(triop->arg2)
3666420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian                                    && isIRAtom(triop->arg3));
3667a98bf499383d95b92038450b4ef47f8cf1901148sewardj            case Iex_Binop:  return toBool(
3668496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj                                    isIRAtom(e->Iex.Binop.arg1)
3669496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj                                    && isIRAtom(e->Iex.Binop.arg2));
3670496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj            case Iex_Unop:   return isIRAtom(e->Iex.Unop.arg);
3671af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj            case Iex_Load:   return isIRAtom(e->Iex.Load.addr);
3672cf7879021370aabcccb1a9347244fcc7d5680141sewardj            case Iex_Const:  return True;
3673cf7879021370aabcccb1a9347244fcc7d5680141sewardj            case Iex_CCall:  for (i = 0; e->Iex.CCall.args[i]; i++)
3674496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj                                if (!isIRAtom(e->Iex.CCall.args[i]))
3675cf7879021370aabcccb1a9347244fcc7d5680141sewardj                                   return False;
3676cf7879021370aabcccb1a9347244fcc7d5680141sewardj                             return True;
367799dd03e04a6914d90d5fee727d61d76905334becflorian            case Iex_ITE:    return toBool (
367899dd03e04a6914d90d5fee727d61d76905334becflorian                                    isIRAtom(e->Iex.ITE.cond)
367999dd03e04a6914d90d5fee727d61d76905334becflorian                                    && isIRAtom(e->Iex.ITE.iftrue)
368099dd03e04a6914d90d5fee727d61d76905334becflorian                                    && isIRAtom(e->Iex.ITE.iffalse));
3681cf7879021370aabcccb1a9347244fcc7d5680141sewardj            default:         vpanic("isFlatIRStmt(e)");
3682cf7879021370aabcccb1a9347244fcc7d5680141sewardj         }
3683cf7879021370aabcccb1a9347244fcc7d5680141sewardj         /*notreached*/
3684cf7879021370aabcccb1a9347244fcc7d5680141sewardj         vassert(0);
3685af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      case Ist_Store:
3686af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         return toBool( isIRAtom(st->Ist.Store.addr)
3687af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj                        && isIRAtom(st->Ist.Store.data) );
3688cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_StoreG: {
36890b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRStoreG* sg = st->Ist.StoreG.details;
3690cfe046e178666280b87da998b1b52ecda03ecd89sewardj         return toBool( isIRAtom(sg->addr)
3691cfe046e178666280b87da998b1b52ecda03ecd89sewardj                        && isIRAtom(sg->data) && isIRAtom(sg->guard) );
3692cfe046e178666280b87da998b1b52ecda03ecd89sewardj      }
3693cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_LoadG: {
36940b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRLoadG* lg = st->Ist.LoadG.details;
3695cfe046e178666280b87da998b1b52ecda03ecd89sewardj         return toBool( isIRAtom(lg->addr)
3696cfe046e178666280b87da998b1b52ecda03ecd89sewardj                        && isIRAtom(lg->alt) && isIRAtom(lg->guard) );
3697cfe046e178666280b87da998b1b52ecda03ecd89sewardj      }
36980b70efae27eafd60bc7ea9a3955605d55a681651florian      case Ist_CAS: {
36990b70efae27eafd60bc7ea9a3955605d55a681651florian        const IRCAS* cas = st->Ist.CAS.details;
3700e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         return toBool( isIRAtom(cas->addr)
3701e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                        && (cas->expdHi ? isIRAtom(cas->expdHi) : True)
3702e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                        && isIRAtom(cas->expdLo)
3703e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                        && (cas->dataHi ? isIRAtom(cas->dataHi) : True)
3704e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                        && isIRAtom(cas->dataLo) );
37050b70efae27eafd60bc7ea9a3955605d55a681651florian      }
3706e768e92e054cde495849a5c842a477d287677f78sewardj      case Ist_LLSC:
3707e768e92e054cde495849a5c842a477d287677f78sewardj         return toBool( isIRAtom(st->Ist.LLSC.addr)
3708e768e92e054cde495849a5c842a477d287677f78sewardj                        && (st->Ist.LLSC.storedata
3709e768e92e054cde495849a5c842a477d287677f78sewardj                               ? isIRAtom(st->Ist.LLSC.storedata) : True) );
37100b70efae27eafd60bc7ea9a3955605d55a681651florian      case Ist_Dirty: {
37110b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRDirty* di = st->Ist.Dirty.details;
3712496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj         if (!isIRAtom(di->guard))
3713cf7879021370aabcccb1a9347244fcc7d5680141sewardj            return False;
3714cf7879021370aabcccb1a9347244fcc7d5680141sewardj         for (i = 0; di->args[i]; i++)
371574142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            if (!isIRAtom_or_VECRET_or_BBPTR(di->args[i]))
3716cf7879021370aabcccb1a9347244fcc7d5680141sewardj               return False;
3717496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj         if (di->mAddr && !isIRAtom(di->mAddr))
3718cf7879021370aabcccb1a9347244fcc7d5680141sewardj            return False;
3719cf7879021370aabcccb1a9347244fcc7d5680141sewardj         return True;
37200b70efae27eafd60bc7ea9a3955605d55a681651florian      }
3721d2445f60726580b450eca68ab40c568f9df338e2sewardj      case Ist_NoOp:
3722f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj      case Ist_IMark:
3723c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj      case Ist_MBE:
37243e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj         return True;
3725cf7879021370aabcccb1a9347244fcc7d5680141sewardj      case Ist_Exit:
3726496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj         return isIRAtom(st->Ist.Exit.guard);
3727cf7879021370aabcccb1a9347244fcc7d5680141sewardj      default:
3728cf7879021370aabcccb1a9347244fcc7d5680141sewardj         vpanic("isFlatIRStmt(st)");
3729cf7879021370aabcccb1a9347244fcc7d5680141sewardj   }
3730cf7879021370aabcccb1a9347244fcc7d5680141sewardj}
3731cf7879021370aabcccb1a9347244fcc7d5680141sewardj
3732cf7879021370aabcccb1a9347244fcc7d5680141sewardj
3733cf7879021370aabcccb1a9347244fcc7d5680141sewardj/*---------------------------------------------------------------*/
3734e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj/*--- Sanity checking                                         ---*/
3735e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj/*---------------------------------------------------------------*/
3736e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj
3737e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj/* Checks:
3738e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj
3739e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   Everything is type-consistent.  No ill-typed anything.
3740354392111e47edc50442ea5095fa2367d9cc206fsewardj   The target address at the end of the BB is a 32- or 64-
3741354392111e47edc50442ea5095fa2367d9cc206fsewardj   bit expression, depending on the guest's word size.
3742e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj
3743e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj   Each temp is assigned only once, before its uses.
3744c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj*/
3745c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj
3746c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardjstatic inline Int countArgs ( IRExpr** args )
3747c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj{
3748c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj   Int i;
3749c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj   for (i = 0; args[i]; i++)
3750c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj      ;
3751c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj   return i;
3752c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj}
3753e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj
3754354392111e47edc50442ea5095fa2367d9cc206fsewardjstatic
3755354392111e47edc50442ea5095fa2367d9cc206fsewardj__attribute((noreturn))
37560b70efae27eafd60bc7ea9a3955605d55a681651florianvoid sanityCheckFail ( const IRSB* bb, const IRStmt* stmt, const HChar* what )
3757354392111e47edc50442ea5095fa2367d9cc206fsewardj{
3758354392111e47edc50442ea5095fa2367d9cc206fsewardj   vex_printf("\nIR SANITY CHECK FAILURE\n\n");
3759dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   ppIRSB(bb);
3760354392111e47edc50442ea5095fa2367d9cc206fsewardj   if (stmt) {
3761354392111e47edc50442ea5095fa2367d9cc206fsewardj      vex_printf("\nIN STATEMENT:\n\n");
3762354392111e47edc50442ea5095fa2367d9cc206fsewardj      ppIRStmt(stmt);
3763354392111e47edc50442ea5095fa2367d9cc206fsewardj   }
3764354392111e47edc50442ea5095fa2367d9cc206fsewardj   vex_printf("\n\nERROR = %s\n\n", what );
3765354392111e47edc50442ea5095fa2367d9cc206fsewardj   vpanic("sanityCheckFail: exiting due to bad IR");
3766354392111e47edc50442ea5095fa2367d9cc206fsewardj}
3767e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj
37680b70efae27eafd60bc7ea9a3955605d55a681651florianstatic Bool saneIRRegArray ( const IRRegArray* arr )
37692d3f77c12d2911173fd182d0b6e954196dee9135sewardj{
37702d3f77c12d2911173fd182d0b6e954196dee9135sewardj   if (arr->base < 0 || arr->base > 10000 /* somewhat arbitrary */)
37712d3f77c12d2911173fd182d0b6e954196dee9135sewardj      return False;
3772ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj   if (arr->elemTy == Ity_I1)
37732d3f77c12d2911173fd182d0b6e954196dee9135sewardj      return False;
37742d3f77c12d2911173fd182d0b6e954196dee9135sewardj   if (arr->nElems <= 0 || arr->nElems > 500 /* somewhat arbitrary */)
37752d3f77c12d2911173fd182d0b6e954196dee9135sewardj      return False;
37762d3f77c12d2911173fd182d0b6e954196dee9135sewardj   return True;
37772d3f77c12d2911173fd182d0b6e954196dee9135sewardj}
37782d3f77c12d2911173fd182d0b6e954196dee9135sewardj
37790b70efae27eafd60bc7ea9a3955605d55a681651florianstatic Bool saneIRCallee ( const IRCallee* cee )
37808ea867b06de73d909c29e243407713c291c8414esewardj{
37818ea867b06de73d909c29e243407713c291c8414esewardj   if (cee->name == NULL)
37828ea867b06de73d909c29e243407713c291c8414esewardj      return False;
37838ea867b06de73d909c29e243407713c291c8414esewardj   if (cee->addr == 0)
37848ea867b06de73d909c29e243407713c291c8414esewardj      return False;
378577352545d8416a36a4e6310aaea6b0205508aea2sewardj   if (cee->regparms < 0 || cee->regparms > 3)
37868ea867b06de73d909c29e243407713c291c8414esewardj      return False;
37878ea867b06de73d909c29e243407713c291c8414esewardj   return True;
37888ea867b06de73d909c29e243407713c291c8414esewardj}
37898ea867b06de73d909c29e243407713c291c8414esewardj
37900b70efae27eafd60bc7ea9a3955605d55a681651florianstatic Bool saneIRConst ( const IRConst* con )
379149bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj{
379249bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj   switch (con->tag) {
379349bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj      case Ico_U1:
3794a98bf499383d95b92038450b4ef47f8cf1901148sewardj         return toBool( con->Ico.U1 == True || con->Ico.U1 == False );
379549bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj      default:
379649bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj         /* Is there anything we can meaningfully check?  I don't
379749bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj            think so. */
379849bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj         return True;
379949bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj   }
380049bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj}
3801e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj
3802354392111e47edc50442ea5095fa2367d9cc206fsewardj/* Traverse a Stmt/Expr, inspecting IRTemp uses.  Report any out of
3803354392111e47edc50442ea5095fa2367d9cc206fsewardj   range ones.  Report any which are read and for which the current
3804354392111e47edc50442ea5095fa2367d9cc206fsewardj   def_count is zero. */
3805354392111e47edc50442ea5095fa2367d9cc206fsewardj
3806354392111e47edc50442ea5095fa2367d9cc206fsewardjstatic
38070b70efae27eafd60bc7ea9a3955605d55a681651florianvoid useBeforeDef_Temp ( const IRSB* bb, const IRStmt* stmt, IRTemp tmp,
38080b70efae27eafd60bc7ea9a3955605d55a681651florian                         Int* def_counts )
380917442fe8094d0f82266e5a05509f62cac8f7539esewardj{
381017442fe8094d0f82266e5a05509f62cac8f7539esewardj   if (tmp < 0 || tmp >= bb->tyenv->types_used)
381117442fe8094d0f82266e5a05509f62cac8f7539esewardj      sanityCheckFail(bb,stmt, "out of range Temp in IRExpr");
381217442fe8094d0f82266e5a05509f62cac8f7539esewardj   if (def_counts[tmp] < 1)
381317442fe8094d0f82266e5a05509f62cac8f7539esewardj      sanityCheckFail(bb,stmt, "IRTemp use before def in IRExpr");
381417442fe8094d0f82266e5a05509f62cac8f7539esewardj}
381517442fe8094d0f82266e5a05509f62cac8f7539esewardj
381617442fe8094d0f82266e5a05509f62cac8f7539esewardjstatic
38170b70efae27eafd60bc7ea9a3955605d55a681651florianvoid useBeforeDef_Expr ( const IRSB* bb, const IRStmt* stmt,
38180b70efae27eafd60bc7ea9a3955605d55a681651florian                         const IRExpr* expr, Int* def_counts )
3819e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj{
3820354392111e47edc50442ea5095fa2367d9cc206fsewardj   Int i;
3821354392111e47edc50442ea5095fa2367d9cc206fsewardj   switch (expr->tag) {
3822354392111e47edc50442ea5095fa2367d9cc206fsewardj      case Iex_Get:
3823354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
3824bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj      case Iex_GetI:
3825eeac841fbfcadbc19e97c7ef56bfa3354ba78637sewardj         useBeforeDef_Expr(bb,stmt,expr->Iex.GetI.ix,def_counts);
3826bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj         break;
3827dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      case Iex_RdTmp:
3828dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         useBeforeDef_Temp(bb,stmt,expr->Iex.RdTmp.tmp,def_counts);
3829354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
383096d7cc3e7d54ad5af2af2821223b21f9a8516a59florian      case Iex_Qop: {
38310b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRQop* qop = expr->Iex.Qop.details;
383296d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         useBeforeDef_Expr(bb,stmt,qop->arg1,def_counts);
383396d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         useBeforeDef_Expr(bb,stmt,qop->arg2,def_counts);
383496d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         useBeforeDef_Expr(bb,stmt,qop->arg3,def_counts);
383596d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         useBeforeDef_Expr(bb,stmt,qop->arg4,def_counts);
383640c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         break;
383796d7cc3e7d54ad5af2af2821223b21f9a8516a59florian      }
3838420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian      case Iex_Triop: {
38390b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRTriop* triop = expr->Iex.Triop.details;
3840420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         useBeforeDef_Expr(bb,stmt,triop->arg1,def_counts);
3841420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         useBeforeDef_Expr(bb,stmt,triop->arg2,def_counts);
3842420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         useBeforeDef_Expr(bb,stmt,triop->arg3,def_counts);
3843b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         break;
3844420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian      }
3845354392111e47edc50442ea5095fa2367d9cc206fsewardj      case Iex_Binop:
3846354392111e47edc50442ea5095fa2367d9cc206fsewardj         useBeforeDef_Expr(bb,stmt,expr->Iex.Binop.arg1,def_counts);
3847354392111e47edc50442ea5095fa2367d9cc206fsewardj         useBeforeDef_Expr(bb,stmt,expr->Iex.Binop.arg2,def_counts);
3848354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
3849354392111e47edc50442ea5095fa2367d9cc206fsewardj      case Iex_Unop:
3850354392111e47edc50442ea5095fa2367d9cc206fsewardj         useBeforeDef_Expr(bb,stmt,expr->Iex.Unop.arg,def_counts);
3851354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
3852af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      case Iex_Load:
3853af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         useBeforeDef_Expr(bb,stmt,expr->Iex.Load.addr,def_counts);
3854354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
3855354392111e47edc50442ea5095fa2367d9cc206fsewardj      case Iex_Const:
3856354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
3857354392111e47edc50442ea5095fa2367d9cc206fsewardj      case Iex_CCall:
385874142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         for (i = 0; expr->Iex.CCall.args[i]; i++) {
38590b70efae27eafd60bc7ea9a3955605d55a681651florian            const IRExpr* arg = expr->Iex.CCall.args[i];
38609041956f39c57e265122ed0a71061dea1e554edcflorian            if (UNLIKELY(is_IRExpr_VECRET_or_BBPTR(arg))) {
386174142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               /* These aren't allowed in CCall lists.  Let's detect
386274142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                  and throw them out here, though, rather than
386374142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                  segfaulting a bit later on. */
386474142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               sanityCheckFail(bb,stmt, "IRExprP__* value in CCall arg list");
386574142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            } else {
386674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               useBeforeDef_Expr(bb,stmt,arg,def_counts);
386774142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            }
386874142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         }
3869354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
387099dd03e04a6914d90d5fee727d61d76905334becflorian      case Iex_ITE:
387199dd03e04a6914d90d5fee727d61d76905334becflorian         useBeforeDef_Expr(bb,stmt,expr->Iex.ITE.cond,def_counts);
387299dd03e04a6914d90d5fee727d61d76905334becflorian         useBeforeDef_Expr(bb,stmt,expr->Iex.ITE.iftrue,def_counts);
387399dd03e04a6914d90d5fee727d61d76905334becflorian         useBeforeDef_Expr(bb,stmt,expr->Iex.ITE.iffalse,def_counts);
3874eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj         break;
3875eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj      default:
3876eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj         vpanic("useBeforeDef_Expr");
3877354392111e47edc50442ea5095fa2367d9cc206fsewardj   }
3878354392111e47edc50442ea5095fa2367d9cc206fsewardj}
3879354392111e47edc50442ea5095fa2367d9cc206fsewardj
3880354392111e47edc50442ea5095fa2367d9cc206fsewardjstatic
38810b70efae27eafd60bc7ea9a3955605d55a681651florianvoid useBeforeDef_Stmt ( const IRSB* bb, const IRStmt* stmt, Int* def_counts )
3882354392111e47edc50442ea5095fa2367d9cc206fsewardj{
3883cfe046e178666280b87da998b1b52ecda03ecd89sewardj   Int       i;
38840b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRDirty*  d;
38850b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRCAS*    cas;
38860b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRPutI*   puti;
38870b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRLoadG*  lg;
38880b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRStoreG* sg;
3889354392111e47edc50442ea5095fa2367d9cc206fsewardj   switch (stmt->tag) {
3890f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj      case Ist_IMark:
3891f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj         break;
38925a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj      case Ist_AbiHint:
38935a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj         useBeforeDef_Expr(bb,stmt,stmt->Ist.AbiHint.base,def_counts);
3894478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj         useBeforeDef_Expr(bb,stmt,stmt->Ist.AbiHint.nia,def_counts);
38955a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj         break;
3896354392111e47edc50442ea5095fa2367d9cc206fsewardj      case Ist_Put:
38976d07636436a548a3e14dc2ca7cbd454e2b8d5c89sewardj         useBeforeDef_Expr(bb,stmt,stmt->Ist.Put.data,def_counts);
3898354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
3899d1725d18b61bf7912a9099686179faef5815dba1sewardj      case Ist_PutI:
3900d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         puti = stmt->Ist.PutI.details;
3901d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         useBeforeDef_Expr(bb,stmt,puti->ix,def_counts);
3902d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         useBeforeDef_Expr(bb,stmt,puti->data,def_counts);
3903d1725d18b61bf7912a9099686179faef5815dba1sewardj         break;
3904dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      case Ist_WrTmp:
3905dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         useBeforeDef_Expr(bb,stmt,stmt->Ist.WrTmp.data,def_counts);
3906354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
3907af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      case Ist_Store:
3908af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         useBeforeDef_Expr(bb,stmt,stmt->Ist.Store.addr,def_counts);
3909af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         useBeforeDef_Expr(bb,stmt,stmt->Ist.Store.data,def_counts);
3910354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
3911cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_StoreG:
3912cfe046e178666280b87da998b1b52ecda03ecd89sewardj         sg = stmt->Ist.StoreG.details;
3913cfe046e178666280b87da998b1b52ecda03ecd89sewardj         useBeforeDef_Expr(bb,stmt,sg->addr,def_counts);
3914cfe046e178666280b87da998b1b52ecda03ecd89sewardj         useBeforeDef_Expr(bb,stmt,sg->data,def_counts);
3915cfe046e178666280b87da998b1b52ecda03ecd89sewardj         useBeforeDef_Expr(bb,stmt,sg->guard,def_counts);
3916cfe046e178666280b87da998b1b52ecda03ecd89sewardj         break;
3917cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_LoadG:
3918cfe046e178666280b87da998b1b52ecda03ecd89sewardj         lg = stmt->Ist.LoadG.details;
3919cfe046e178666280b87da998b1b52ecda03ecd89sewardj         useBeforeDef_Expr(bb,stmt,lg->addr,def_counts);
3920cfe046e178666280b87da998b1b52ecda03ecd89sewardj         useBeforeDef_Expr(bb,stmt,lg->alt,def_counts);
3921cfe046e178666280b87da998b1b52ecda03ecd89sewardj         useBeforeDef_Expr(bb,stmt,lg->guard,def_counts);
3922cfe046e178666280b87da998b1b52ecda03ecd89sewardj         break;
3923e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      case Ist_CAS:
3924e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         cas = stmt->Ist.CAS.details;
3925e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         useBeforeDef_Expr(bb,stmt,cas->addr,def_counts);
3926e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (cas->expdHi)
3927e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            useBeforeDef_Expr(bb,stmt,cas->expdHi,def_counts);
3928e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         useBeforeDef_Expr(bb,stmt,cas->expdLo,def_counts);
3929e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (cas->dataHi)
3930e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            useBeforeDef_Expr(bb,stmt,cas->dataHi,def_counts);
3931e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         useBeforeDef_Expr(bb,stmt,cas->dataLo,def_counts);
3932e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         break;
3933e768e92e054cde495849a5c842a477d287677f78sewardj      case Ist_LLSC:
3934e768e92e054cde495849a5c842a477d287677f78sewardj         useBeforeDef_Expr(bb,stmt,stmt->Ist.LLSC.addr,def_counts);
3935e768e92e054cde495849a5c842a477d287677f78sewardj         if (stmt->Ist.LLSC.storedata != NULL)
3936e768e92e054cde495849a5c842a477d287677f78sewardj            useBeforeDef_Expr(bb,stmt,stmt->Ist.LLSC.storedata,def_counts);
3937e768e92e054cde495849a5c842a477d287677f78sewardj         break;
393817442fe8094d0f82266e5a05509f62cac8f7539esewardj      case Ist_Dirty:
393917442fe8094d0f82266e5a05509f62cac8f7539esewardj         d = stmt->Ist.Dirty.details;
394074142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         for (i = 0; d->args[i] != NULL; i++) {
394174142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            IRExpr* arg = d->args[i];
39429041956f39c57e265122ed0a71061dea1e554edcflorian            if (UNLIKELY(is_IRExpr_VECRET_or_BBPTR(arg))) {
394374142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               /* This is ensured by isFlatIRStmt */
39449041956f39c57e265122ed0a71061dea1e554edcflorian              ;
394574142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            } else {
394674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               useBeforeDef_Expr(bb,stmt,arg,def_counts);
394774142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            }
394874142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         }
394917442fe8094d0f82266e5a05509f62cac8f7539esewardj         if (d->mFx != Ifx_None)
395017442fe8094d0f82266e5a05509f62cac8f7539esewardj            useBeforeDef_Expr(bb,stmt,d->mAddr,def_counts);
395117442fe8094d0f82266e5a05509f62cac8f7539esewardj         break;
3952d2445f60726580b450eca68ab40c568f9df338e2sewardj      case Ist_NoOp:
3953c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj      case Ist_MBE:
39543e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj         break;
3955354392111e47edc50442ea5095fa2367d9cc206fsewardj      case Ist_Exit:
39560276d4b776bf2152d2ba6bbaec9b150e65d926eesewardj         useBeforeDef_Expr(bb,stmt,stmt->Ist.Exit.guard,def_counts);
3957354392111e47edc50442ea5095fa2367d9cc206fsewardj         break;
3958354392111e47edc50442ea5095fa2367d9cc206fsewardj      default:
3959354392111e47edc50442ea5095fa2367d9cc206fsewardj         vpanic("useBeforeDef_Stmt");
3960354392111e47edc50442ea5095fa2367d9cc206fsewardj   }
3961354392111e47edc50442ea5095fa2367d9cc206fsewardj}
3962354392111e47edc50442ea5095fa2367d9cc206fsewardj
39636efd4a18cf32c322e03351176873cef33f1fe67esewardjstatic
39640b70efae27eafd60bc7ea9a3955605d55a681651florianvoid tcExpr ( const IRSB* bb, const IRStmt* stmt, const IRExpr* expr,
39650b70efae27eafd60bc7ea9a3955605d55a681651florian              IRType gWordTy )
39666efd4a18cf32c322e03351176873cef33f1fe67esewardj{
39676efd4a18cf32c322e03351176873cef33f1fe67esewardj   Int        i;
396840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj   IRType     t_dst, t_arg1, t_arg2, t_arg3, t_arg4;
39690b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRTypeEnv* tyenv = bb->tyenv;
39706efd4a18cf32c322e03351176873cef33f1fe67esewardj   switch (expr->tag) {
39716efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iex_Get:
3972dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      case Iex_RdTmp:
39736efd4a18cf32c322e03351176873cef33f1fe67esewardj         break;
3974bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj      case Iex_GetI:
3975eeac841fbfcadbc19e97c7ef56bfa3354ba78637sewardj         tcExpr(bb,stmt, expr->Iex.GetI.ix, gWordTy );
3976eeac841fbfcadbc19e97c7ef56bfa3354ba78637sewardj         if (typeOfIRExpr(tyenv,expr->Iex.GetI.ix) != Ity_I32)
3977eeac841fbfcadbc19e97c7ef56bfa3354ba78637sewardj            sanityCheckFail(bb,stmt,"IRExpr.GetI.ix: not :: Ity_I32");
3978dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         if (!saneIRRegArray(expr->Iex.GetI.descr))
39792d3f77c12d2911173fd182d0b6e954196dee9135sewardj            sanityCheckFail(bb,stmt,"IRExpr.GetI.descr: invalid descr");
3980bb53f8ccc58873ffe18bef04ba2a8d24fdc244b9sewardj         break;
398140c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      case Iex_Qop: {
398240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         IRType ttarg1, ttarg2, ttarg3, ttarg4;
39830b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRQop* qop = expr->Iex.Qop.details;
398496d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         tcExpr(bb,stmt, qop->arg1, gWordTy );
398596d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         tcExpr(bb,stmt, qop->arg2, gWordTy );
398696d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         tcExpr(bb,stmt, qop->arg3, gWordTy );
398796d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         tcExpr(bb,stmt, qop->arg4, gWordTy );
398896d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         typeOfPrimop(qop->op,
398940c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                      &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4);
399040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         if (t_arg1 == Ity_INVALID || t_arg2 == Ity_INVALID
399140c802659108a96bb87cbc1a30b7b77e2abd0829sewardj             || t_arg3 == Ity_INVALID || t_arg4 == Ity_INVALID) {
399240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(" op name: " );
399396d7cc3e7d54ad5af2af2821223b21f9a8516a59florian            ppIROp(qop->op);
399440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf("\n");
399540c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            sanityCheckFail(bb,stmt,
399640c802659108a96bb87cbc1a30b7b77e2abd0829sewardj               "Iex.Qop: wrong arity op\n"
399740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj               "... name of op precedes BB printout\n");
399840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         }
399996d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         ttarg1 = typeOfIRExpr(tyenv, qop->arg1);
400096d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         ttarg2 = typeOfIRExpr(tyenv, qop->arg2);
400196d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         ttarg3 = typeOfIRExpr(tyenv, qop->arg3);
400296d7cc3e7d54ad5af2af2821223b21f9a8516a59florian         ttarg4 = typeOfIRExpr(tyenv, qop->arg4);
400340c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         if (t_arg1 != ttarg1 || t_arg2 != ttarg2
400440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj             || t_arg3 != ttarg3 || t_arg4 != ttarg4) {
400540c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(" op name: ");
400696d7cc3e7d54ad5af2af2821223b21f9a8516a59florian            ppIROp(qop->op);
400740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf("\n");
400840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(" op type is (");
400940c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            ppIRType(t_arg1);
401040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(",");
401140c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            ppIRType(t_arg2);
401240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(",");
401340c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            ppIRType(t_arg3);
401440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(",");
401540c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            ppIRType(t_arg4);
401640c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(") -> ");
401740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            ppIRType (t_dst);
401840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf("\narg tys are (");
401940c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            ppIRType(ttarg1);
402040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(",");
402140c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            ppIRType(ttarg2);
402240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(",");
402340c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            ppIRType(ttarg3);
402440c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(",");
402540c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            ppIRType(ttarg4);
402640c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            vex_printf(")\n");
402740c802659108a96bb87cbc1a30b7b77e2abd0829sewardj            sanityCheckFail(bb,stmt,
402840c802659108a96bb87cbc1a30b7b77e2abd0829sewardj               "Iex.Qop: arg tys don't match op tys\n"
402940c802659108a96bb87cbc1a30b7b77e2abd0829sewardj               "... additional details precede BB printout\n");
403040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         }
403140c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         break;
403240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj      }
4033b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      case Iex_Triop: {
4034b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         IRType ttarg1, ttarg2, ttarg3;
40350b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRTriop *triop = expr->Iex.Triop.details;
4036420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         tcExpr(bb,stmt, triop->arg1, gWordTy );
4037420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         tcExpr(bb,stmt, triop->arg2, gWordTy );
4038420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         tcExpr(bb,stmt, triop->arg3, gWordTy );
4039420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         typeOfPrimop(triop->op,
404040c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                      &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4);
4041b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         if (t_arg1 == Ity_INVALID || t_arg2 == Ity_INVALID
404240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj             || t_arg3 == Ity_INVALID || t_arg4 != Ity_INVALID) {
4043b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf(" op name: " );
4044420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian            ppIROp(triop->op);
4045b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf("\n");
4046b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            sanityCheckFail(bb,stmt,
4047b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj               "Iex.Triop: wrong arity op\n"
4048b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj               "... name of op precedes BB printout\n");
4049b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         }
4050420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         ttarg1 = typeOfIRExpr(tyenv, triop->arg1);
4051420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         ttarg2 = typeOfIRExpr(tyenv, triop->arg2);
4052420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian         ttarg3 = typeOfIRExpr(tyenv, triop->arg3);
4053b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         if (t_arg1 != ttarg1 || t_arg2 != ttarg2 || t_arg3 != ttarg3) {
4054b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf(" op name: ");
4055420bfa9e0f6bc49d7682d334aa61189b4d50f7b8florian            ppIROp(triop->op);
4056b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf("\n");
4057b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf(" op type is (");
4058b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            ppIRType(t_arg1);
4059b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf(",");
4060b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            ppIRType(t_arg2);
4061b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf(",");
4062b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            ppIRType(t_arg3);
4063b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf(") -> ");
4064b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            ppIRType (t_dst);
4065b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf("\narg tys are (");
4066b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            ppIRType(ttarg1);
4067b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf(",");
4068b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            ppIRType(ttarg2);
4069b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf(",");
4070b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            ppIRType(ttarg3);
4071b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            vex_printf(")\n");
4072b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj            sanityCheckFail(bb,stmt,
4073b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj               "Iex.Triop: arg tys don't match op tys\n"
4074b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj               "... additional details precede BB printout\n");
4075b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         }
4076b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         break;
4077b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj      }
40786d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj      case Iex_Binop: {
40796d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj         IRType ttarg1, ttarg2;
40806efd4a18cf32c322e03351176873cef33f1fe67esewardj         tcExpr(bb,stmt, expr->Iex.Binop.arg1, gWordTy );
40816efd4a18cf32c322e03351176873cef33f1fe67esewardj         tcExpr(bb,stmt, expr->Iex.Binop.arg2, gWordTy );
408240c802659108a96bb87cbc1a30b7b77e2abd0829sewardj         typeOfPrimop(expr->Iex.Binop.op,
408340c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                      &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4);
4084b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         if (t_arg1 == Ity_INVALID || t_arg2 == Ity_INVALID
408540c802659108a96bb87cbc1a30b7b77e2abd0829sewardj             || t_arg3 != Ity_INVALID || t_arg4 != Ity_INVALID) {
40868f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj            vex_printf(" op name: " );
40878f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj            ppIROp(expr->Iex.Binop.op);
40888f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj            vex_printf("\n");
40898f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj            sanityCheckFail(bb,stmt,
40908f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj               "Iex.Binop: wrong arity op\n"
40918f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj               "... name of op precedes BB printout\n");
40928f3debf52b76a050bc84997a0358c4aa86dfc88dsewardj         }
40936d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj         ttarg1 = typeOfIRExpr(tyenv, expr->Iex.Binop.arg1);
40946d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj         ttarg2 = typeOfIRExpr(tyenv, expr->Iex.Binop.arg2);
40956d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj         if (t_arg1 != ttarg1 || t_arg2 != ttarg2) {
40966d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            vex_printf(" op name: ");
40976d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            ppIROp(expr->Iex.Binop.op);
40986d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            vex_printf("\n");
40996d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            vex_printf(" op type is (");
41006d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            ppIRType(t_arg1);
41016d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            vex_printf(",");
41026d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            ppIRType(t_arg2);
41036d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            vex_printf(") -> ");
41046d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            ppIRType (t_dst);
41056d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            vex_printf("\narg tys are (");
41066d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            ppIRType(ttarg1);
41076d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            vex_printf(",");
41086d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            ppIRType(ttarg2);
41096d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            vex_printf(")\n");
41106d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj            sanityCheckFail(bb,stmt,
41116d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj               "Iex.Binop: arg tys don't match op tys\n"
41126d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj               "... additional details precede BB printout\n");
4113695cff9303ef5dc8079117acfd632b44edb1f010sewardj         }
41146efd4a18cf32c322e03351176873cef33f1fe67esewardj         break;
41156d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj      }
41166efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iex_Unop:
41176efd4a18cf32c322e03351176873cef33f1fe67esewardj         tcExpr(bb,stmt, expr->Iex.Unop.arg, gWordTy );
4118a60e843c6cbc97d65b04825873f1b25c28125e49florian         typeOfPrimop(expr->Iex.Unop.op,
411940c802659108a96bb87cbc1a30b7b77e2abd0829sewardj                      &t_dst, &t_arg1, &t_arg2, &t_arg3, &t_arg4);
4120b183b8571b4ec98866ce2b3653a9d066cf5f16f4sewardj         if (t_arg1 == Ity_INVALID || t_arg2 != Ity_INVALID
412140c802659108a96bb87cbc1a30b7b77e2abd0829sewardj             || t_arg3 != Ity_INVALID || t_arg4 != Ity_INVALID)
41226efd4a18cf32c322e03351176873cef33f1fe67esewardj            sanityCheckFail(bb,stmt,"Iex.Unop: wrong arity op");
41236efd4a18cf32c322e03351176873cef33f1fe67esewardj         if (t_arg1 != typeOfIRExpr(tyenv, expr->Iex.Unop.arg))
41246efd4a18cf32c322e03351176873cef33f1fe67esewardj            sanityCheckFail(bb,stmt,"Iex.Unop: arg ty doesn't match op ty");
41256efd4a18cf32c322e03351176873cef33f1fe67esewardj         break;
4126af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      case Iex_Load:
4127af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         tcExpr(bb,stmt, expr->Iex.Load.addr, gWordTy);
4128af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         if (typeOfIRExpr(tyenv, expr->Iex.Load.addr) != gWordTy)
4129af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj            sanityCheckFail(bb,stmt,"Iex.Load.addr: not :: guest word type");
4130af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         if (expr->Iex.Load.end != Iend_LE && expr->Iex.Load.end != Iend_BE)
4131af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj            sanityCheckFail(bb,stmt,"Iex.Load.end: bogus endianness");
41326efd4a18cf32c322e03351176873cef33f1fe67esewardj         break;
41336efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iex_CCall:
4134c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj         if (!saneIRCallee(expr->Iex.CCall.cee))
4135c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj            sanityCheckFail(bb,stmt,"Iex.CCall.cee: bad IRCallee");
4136cf7879021370aabcccb1a9347244fcc7d5680141sewardj         if (expr->Iex.CCall.cee->regparms > countArgs(expr->Iex.CCall.args))
4137c13e2ed41c999b5da6f02e0e514735a4b607f7afsewardj            sanityCheckFail(bb,stmt,"Iex.CCall.cee: #regparms > #args");
413843c56461a667ca81fe29f1db01450d6ff1d62949sewardj         for (i = 0; expr->Iex.CCall.args[i]; i++) {
413943c56461a667ca81fe29f1db01450d6ff1d62949sewardj            if (i >= 32)
414043c56461a667ca81fe29f1db01450d6ff1d62949sewardj               sanityCheckFail(bb,stmt,"Iex.CCall: > 32 args");
414174142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            IRExpr* arg = expr->Iex.CCall.args[i];
41429041956f39c57e265122ed0a71061dea1e554edcflorian            if (UNLIKELY(is_IRExpr_VECRET_or_BBPTR(arg)))
414374142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               sanityCheckFail(bb,stmt,"Iex.CCall.args: is VECRET/BBPTR");
414474142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            tcExpr(bb,stmt, arg, gWordTy);
414543c56461a667ca81fe29f1db01450d6ff1d62949sewardj         }
4146ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj         if (expr->Iex.CCall.retty == Ity_I1)
4147ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj            sanityCheckFail(bb,stmt,"Iex.CCall.retty: cannot return :: Ity_I1");
41486efd4a18cf32c322e03351176873cef33f1fe67esewardj         for (i = 0; expr->Iex.CCall.args[i]; i++)
4149ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj            if (typeOfIRExpr(tyenv, expr->Iex.CCall.args[i]) == Ity_I1)
4150ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj               sanityCheckFail(bb,stmt,"Iex.CCall.arg: arg :: Ity_I1");
41516efd4a18cf32c322e03351176873cef33f1fe67esewardj         break;
41526efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Iex_Const:
415349bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj         if (!saneIRConst(expr->Iex.Const.con))
415449bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj            sanityCheckFail(bb,stmt,"Iex.Const.con: invalid const");
41556efd4a18cf32c322e03351176873cef33f1fe67esewardj         break;
415699dd03e04a6914d90d5fee727d61d76905334becflorian      case Iex_ITE:
415799dd03e04a6914d90d5fee727d61d76905334becflorian         tcExpr(bb,stmt, expr->Iex.ITE.cond, gWordTy);
415899dd03e04a6914d90d5fee727d61d76905334becflorian         tcExpr(bb,stmt, expr->Iex.ITE.iftrue, gWordTy);
415999dd03e04a6914d90d5fee727d61d76905334becflorian         tcExpr(bb,stmt, expr->Iex.ITE.iffalse, gWordTy);
416099dd03e04a6914d90d5fee727d61d76905334becflorian         if (typeOfIRExpr(tyenv, expr->Iex.ITE.cond) != Ity_I1)
416199dd03e04a6914d90d5fee727d61d76905334becflorian            sanityCheckFail(bb,stmt,"Iex.ITE.cond: cond :: Ity_I1");
416299dd03e04a6914d90d5fee727d61d76905334becflorian         if (typeOfIRExpr(tyenv, expr->Iex.ITE.iftrue)
416399dd03e04a6914d90d5fee727d61d76905334becflorian             != typeOfIRExpr(tyenv, expr->Iex.ITE.iffalse))
416499dd03e04a6914d90d5fee727d61d76905334becflorian            sanityCheckFail(bb,stmt,"Iex.ITE: iftrue/iffalse mismatch");
4165eeb9ef8549a9c4aa15cbfbda52e20703d778fc61sewardj         break;
416674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj      default:
41676efd4a18cf32c322e03351176873cef33f1fe67esewardj         vpanic("tcExpr");
41686efd4a18cf32c322e03351176873cef33f1fe67esewardj   }
41696efd4a18cf32c322e03351176873cef33f1fe67esewardj}
41706efd4a18cf32c322e03351176873cef33f1fe67esewardj
41716efd4a18cf32c322e03351176873cef33f1fe67esewardj
41726efd4a18cf32c322e03351176873cef33f1fe67esewardjstatic
41730b70efae27eafd60bc7ea9a3955605d55a681651florianvoid tcStmt ( const IRSB* bb, const IRStmt* stmt, IRType gWordTy )
41746efd4a18cf32c322e03351176873cef33f1fe67esewardj{
417517442fe8094d0f82266e5a05509f62cac8f7539esewardj   Int        i;
4176e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj   IRType     tyExpd, tyData;
41770b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRTypeEnv* tyenv = bb->tyenv;
41786efd4a18cf32c322e03351176873cef33f1fe67esewardj   switch (stmt->tag) {
4179f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj      case Ist_IMark:
4180f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj         /* Somewhat heuristic, but rule out totally implausible
41812f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj            instruction sizes and deltas. */
41820de80192f57cd132b31b233c65734de04939ce65sewardj         if (stmt->Ist.IMark.len > 24)
4183f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj            sanityCheckFail(bb,stmt,"IRStmt.IMark.len: implausible");
41842f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj         if (stmt->Ist.IMark.delta > 1)
41852f10aa6f4e9ea78030c46cce9b073b19c63c0f60sewardj            sanityCheckFail(bb,stmt,"IRStmt.IMark.delta: implausible");
4186f168931fd8a8256c020c9b90d5f2e05f1e6c48c7sewardj         break;
41875a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj      case Ist_AbiHint:
41885a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj         if (typeOfIRExpr(tyenv, stmt->Ist.AbiHint.base) != gWordTy)
41895a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj            sanityCheckFail(bb,stmt,"IRStmt.AbiHint.base: "
41905a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj                                    "not :: guest word type");
4191478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj         if (typeOfIRExpr(tyenv, stmt->Ist.AbiHint.nia) != gWordTy)
4192478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj            sanityCheckFail(bb,stmt,"IRStmt.AbiHint.nia: "
4193478646f54befaba01cbceb40fd5e46cdf562fdb5sewardj                                    "not :: guest word type");
41945a9ffab9150b7cca31d44d48da998d011bbe8e6asewardj         break;
41956efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Ist_Put:
41966d07636436a548a3e14dc2ca7cbd454e2b8d5c89sewardj         tcExpr( bb, stmt, stmt->Ist.Put.data, gWordTy );
4197ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj         if (typeOfIRExpr(tyenv,stmt->Ist.Put.data) == Ity_I1)
4198ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj            sanityCheckFail(bb,stmt,"IRStmt.Put.data: cannot Put :: Ity_I1");
41992d3f77c12d2911173fd182d0b6e954196dee9135sewardj         break;
42000b70efae27eafd60bc7ea9a3955605d55a681651florian      case Ist_PutI:{
42010b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRPutI* puti = stmt->Ist.PutI.details;
4202d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         tcExpr( bb, stmt, puti->data, gWordTy );
4203d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         tcExpr( bb, stmt, puti->ix, gWordTy );
4204d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         if (typeOfIRExpr(tyenv,puti->data) == Ity_I1)
4205ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj            sanityCheckFail(bb,stmt,"IRStmt.PutI.data: cannot PutI :: Ity_I1");
4206d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         if (typeOfIRExpr(tyenv,puti->data)
4207d6f38b3f822f7d57adfc0da3410995d85d6a4597florian             != puti->descr->elemTy)
42086d07636436a548a3e14dc2ca7cbd454e2b8d5c89sewardj            sanityCheckFail(bb,stmt,"IRStmt.PutI.data: data ty != elem ty");
4209d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         if (typeOfIRExpr(tyenv,puti->ix) != Ity_I32)
4210eeac841fbfcadbc19e97c7ef56bfa3354ba78637sewardj            sanityCheckFail(bb,stmt,"IRStmt.PutI.ix: not :: Ity_I32");
4211d6f38b3f822f7d57adfc0da3410995d85d6a4597florian         if (!saneIRRegArray(puti->descr))
42122d3f77c12d2911173fd182d0b6e954196dee9135sewardj            sanityCheckFail(bb,stmt,"IRStmt.PutI.descr: invalid descr");
42132d3f77c12d2911173fd182d0b6e954196dee9135sewardj         break;
42140b70efae27eafd60bc7ea9a3955605d55a681651florian      }
4215dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      case Ist_WrTmp:
4216dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         tcExpr( bb, stmt, stmt->Ist.WrTmp.data, gWordTy );
4217dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         if (typeOfIRTemp(tyenv, stmt->Ist.WrTmp.tmp)
4218dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj             != typeOfIRExpr(tyenv, stmt->Ist.WrTmp.data))
4219cfe046e178666280b87da998b1b52ecda03ecd89sewardj            sanityCheckFail(bb,stmt,
4220cfe046e178666280b87da998b1b52ecda03ecd89sewardj                            "IRStmt.Put.Tmp: tmp and expr do not match");
42216efd4a18cf32c322e03351176873cef33f1fe67esewardj         break;
4222af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj      case Ist_Store:
4223af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         tcExpr( bb, stmt, stmt->Ist.Store.addr, gWordTy );
4224af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         tcExpr( bb, stmt, stmt->Ist.Store.data, gWordTy );
4225af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         if (typeOfIRExpr(tyenv, stmt->Ist.Store.addr) != gWordTy)
4226cfe046e178666280b87da998b1b52ecda03ecd89sewardj            sanityCheckFail(bb,stmt,
4227cfe046e178666280b87da998b1b52ecda03ecd89sewardj                            "IRStmt.Store.addr: not :: guest word type");
4228af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         if (typeOfIRExpr(tyenv, stmt->Ist.Store.data) == Ity_I1)
4229cfe046e178666280b87da998b1b52ecda03ecd89sewardj            sanityCheckFail(bb,stmt,
4230cfe046e178666280b87da998b1b52ecda03ecd89sewardj                            "IRStmt.Store.data: cannot Store :: Ity_I1");
4231af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj         if (stmt->Ist.Store.end != Iend_LE && stmt->Ist.Store.end != Iend_BE)
4232af1cecaf9c96f99381dda16f41d286fc3e4d220asewardj            sanityCheckFail(bb,stmt,"Ist.Store.end: bogus endianness");
4233e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         break;
4234cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_StoreG: {
42350b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRStoreG* sg = stmt->Ist.StoreG.details;
4236cfe046e178666280b87da998b1b52ecda03ecd89sewardj         tcExpr( bb, stmt, sg->addr, gWordTy );
4237cfe046e178666280b87da998b1b52ecda03ecd89sewardj         tcExpr( bb, stmt, sg->data, gWordTy );
4238cfe046e178666280b87da998b1b52ecda03ecd89sewardj         tcExpr( bb, stmt, sg->guard, gWordTy );
4239cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (typeOfIRExpr(tyenv, sg->addr) != gWordTy)
4240cfe046e178666280b87da998b1b52ecda03ecd89sewardj            sanityCheckFail(bb,stmt,"IRStmtG...addr: not :: guest word type");
4241cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (typeOfIRExpr(tyenv, sg->data) == Ity_I1)
4242cfe046e178666280b87da998b1b52ecda03ecd89sewardj            sanityCheckFail(bb,stmt,"IRStmtG...data: cannot Store :: Ity_I1");
4243cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (typeOfIRExpr(tyenv, sg->guard) != Ity_I1)
4244cfe046e178666280b87da998b1b52ecda03ecd89sewardj            sanityCheckFail(bb,stmt,"IRStmtG...guard: not :: Ity_I1");
4245cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (sg->end != Iend_LE && sg->end != Iend_BE)
4246cfe046e178666280b87da998b1b52ecda03ecd89sewardj            sanityCheckFail(bb,stmt,"IRStmtG...end: bogus endianness");
4247cfe046e178666280b87da998b1b52ecda03ecd89sewardj         break;
4248cfe046e178666280b87da998b1b52ecda03ecd89sewardj      }
4249cfe046e178666280b87da998b1b52ecda03ecd89sewardj      case Ist_LoadG: {
42500b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRLoadG* lg = stmt->Ist.LoadG.details;
4251cfe046e178666280b87da998b1b52ecda03ecd89sewardj         tcExpr( bb, stmt, lg->addr, gWordTy );
4252cfe046e178666280b87da998b1b52ecda03ecd89sewardj         tcExpr( bb, stmt, lg->alt, gWordTy );
4253cfe046e178666280b87da998b1b52ecda03ecd89sewardj         tcExpr( bb, stmt, lg->guard, gWordTy );
4254cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (typeOfIRExpr(tyenv, lg->guard) != Ity_I1)
4255cfe046e178666280b87da998b1b52ecda03ecd89sewardj            sanityCheckFail(bb,stmt,"IRStmt.LoadG.guard: not :: Ity_I1");
4256cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (typeOfIRExpr(tyenv, lg->addr) != gWordTy)
4257cfe046e178666280b87da998b1b52ecda03ecd89sewardj              sanityCheckFail(bb,stmt,"IRStmt.LoadG.addr: not "
4258cfe046e178666280b87da998b1b52ecda03ecd89sewardj                                      ":: guest word type");
4259cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (typeOfIRExpr(tyenv, lg->alt) != typeOfIRTemp(tyenv, lg->dst))
4260cfe046e178666280b87da998b1b52ecda03ecd89sewardj             sanityCheckFail(bb,stmt,"IRStmt.LoadG: dst/alt type mismatch");
4261cfe046e178666280b87da998b1b52ecda03ecd89sewardj         IRTemp cvtRes = Ity_INVALID, cvtArg = Ity_INVALID;
4262cfe046e178666280b87da998b1b52ecda03ecd89sewardj         typeOfIRLoadGOp(lg->cvt, &cvtRes, &cvtArg);
4263cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (cvtRes != typeOfIRTemp(tyenv, lg->dst))
4264cfe046e178666280b87da998b1b52ecda03ecd89sewardj            sanityCheckFail(bb,stmt,"IRStmt.LoadG: dst/loaded type mismatch");
4265cfe046e178666280b87da998b1b52ecda03ecd89sewardj         break;
4266cfe046e178666280b87da998b1b52ecda03ecd89sewardj      }
42670b70efae27eafd60bc7ea9a3955605d55a681651florian      case Ist_CAS: {
42680b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRCAS* cas = stmt->Ist.CAS.details;
4269e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         /* make sure it's definitely either a CAS or a DCAS */
4270e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (cas->oldHi == IRTemp_INVALID
4271e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj             && cas->expdHi == NULL && cas->dataHi == NULL) {
4272e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            /* fine; it's a single cas */
4273e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         }
4274e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         else
4275e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (cas->oldHi != IRTemp_INVALID
4276e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj             && cas->expdHi != NULL && cas->dataHi != NULL) {
4277e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            /* fine; it's a double cas */
4278e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         }
4279e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         else {
4280e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            /* it's some el-mutanto hybrid */
4281e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            goto bad_cas;
4282e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         }
4283e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         /* check the address type */
4284e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         tcExpr( bb, stmt, cas->addr, gWordTy );
4285e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (typeOfIRExpr(tyenv, cas->addr) != gWordTy) goto bad_cas;
4286e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         /* check types on the {old,expd,data}Lo components agree */
4287e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         tyExpd = typeOfIRExpr(tyenv, cas->expdLo);
4288e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         tyData = typeOfIRExpr(tyenv, cas->dataLo);
4289e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (tyExpd != tyData) goto bad_cas;
4290e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (tyExpd != typeOfIRTemp(tyenv, cas->oldLo))
4291e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            goto bad_cas;
4292e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         /* check the base element type is sane */
4293e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (tyExpd == Ity_I8 || tyExpd == Ity_I16 || tyExpd == Ity_I32
4294e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj             || (gWordTy == Ity_I64 && tyExpd == Ity_I64)) {
4295e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            /* fine */
4296e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         } else {
4297e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            goto bad_cas;
4298e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         }
4299e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         /* If it's a DCAS, check types on the {old,expd,data}Hi
4300e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            components too */
4301e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (cas->oldHi != IRTemp_INVALID) {
4302e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            tyExpd = typeOfIRExpr(tyenv, cas->expdHi);
4303e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            tyData = typeOfIRExpr(tyenv, cas->dataHi);
4304e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            if (tyExpd != tyData) goto bad_cas;
4305e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            if (tyExpd != typeOfIRTemp(tyenv, cas->oldHi))
4306e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj               goto bad_cas;
4307e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            /* and finally check that oldLo and oldHi have the same
4308e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj               type.  This forces equivalence amongst all 6 types. */
4309e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            if (typeOfIRTemp(tyenv, cas->oldHi)
4310e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                != typeOfIRTemp(tyenv, cas->oldLo))
4311e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj               goto bad_cas;
4312e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         }
4313e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         break;
4314e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         bad_cas:
4315e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         sanityCheckFail(bb,stmt,"IRStmt.CAS: ill-formed");
43166efd4a18cf32c322e03351176873cef33f1fe67esewardj         break;
43170b70efae27eafd60bc7ea9a3955605d55a681651florian      }
4318e768e92e054cde495849a5c842a477d287677f78sewardj      case Ist_LLSC: {
4319e768e92e054cde495849a5c842a477d287677f78sewardj         IRType tyRes;
4320e768e92e054cde495849a5c842a477d287677f78sewardj         if (typeOfIRExpr(tyenv, stmt->Ist.LLSC.addr) != gWordTy)
4321e768e92e054cde495849a5c842a477d287677f78sewardj            sanityCheckFail(bb,stmt,"IRStmt.LLSC.addr: not :: guest word type");
4322e768e92e054cde495849a5c842a477d287677f78sewardj         if (stmt->Ist.LLSC.end != Iend_LE && stmt->Ist.LLSC.end != Iend_BE)
4323e768e92e054cde495849a5c842a477d287677f78sewardj            sanityCheckFail(bb,stmt,"Ist.LLSC.end: bogus endianness");
4324e768e92e054cde495849a5c842a477d287677f78sewardj         tyRes = typeOfIRTemp(tyenv, stmt->Ist.LLSC.result);
4325e768e92e054cde495849a5c842a477d287677f78sewardj         if (stmt->Ist.LLSC.storedata == NULL) {
4326e768e92e054cde495849a5c842a477d287677f78sewardj            /* it's a LL */
4327ff7f5b7ec308d0a2608be80ea9654184baa97272sewardj            if (tyRes != Ity_I64 && tyRes != Ity_I32
4328ff7f5b7ec308d0a2608be80ea9654184baa97272sewardj                && tyRes != Ity_I16 && tyRes != Ity_I8)
4329e768e92e054cde495849a5c842a477d287677f78sewardj               sanityCheckFail(bb,stmt,"Ist.LLSC(LL).result :: bogus");
4330e768e92e054cde495849a5c842a477d287677f78sewardj         } else {
4331e768e92e054cde495849a5c842a477d287677f78sewardj            /* it's a SC */
4332e768e92e054cde495849a5c842a477d287677f78sewardj            if (tyRes != Ity_I1)
4333e768e92e054cde495849a5c842a477d287677f78sewardj               sanityCheckFail(bb,stmt,"Ist.LLSC(SC).result: not :: Ity_I1");
4334e768e92e054cde495849a5c842a477d287677f78sewardj            tyData = typeOfIRExpr(tyenv, stmt->Ist.LLSC.storedata);
4335ff7f5b7ec308d0a2608be80ea9654184baa97272sewardj            if (tyData != Ity_I64 && tyData != Ity_I32
4336ff7f5b7ec308d0a2608be80ea9654184baa97272sewardj                && tyData != Ity_I16 && tyData != Ity_I8)
43376c299f3acab617581ea504e45fbb6cab24c2b29fsewardj               sanityCheckFail(bb,stmt,
43386c299f3acab617581ea504e45fbb6cab24c2b29fsewardj                               "Ist.LLSC(SC).result :: storedata bogus");
4339e768e92e054cde495849a5c842a477d287677f78sewardj         }
4340e768e92e054cde495849a5c842a477d287677f78sewardj         break;
4341e768e92e054cde495849a5c842a477d287677f78sewardj      }
434274142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj      case Ist_Dirty: {
434317442fe8094d0f82266e5a05509f62cac8f7539esewardj         /* Mostly check for various kinds of ill-formed dirty calls. */
43440b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRDirty* d = stmt->Ist.Dirty.details;
43458ea867b06de73d909c29e243407713c291c8414esewardj         if (d->cee == NULL) goto bad_dirty;
43468ea867b06de73d909c29e243407713c291c8414esewardj         if (!saneIRCallee(d->cee)) goto bad_dirty;
4347cf7879021370aabcccb1a9347244fcc7d5680141sewardj         if (d->cee->regparms > countArgs(d->args)) goto bad_dirty;
434817442fe8094d0f82266e5a05509f62cac8f7539esewardj         if (d->mFx == Ifx_None) {
434917442fe8094d0f82266e5a05509f62cac8f7539esewardj            if (d->mAddr != NULL || d->mSize != 0)
435017442fe8094d0f82266e5a05509f62cac8f7539esewardj               goto bad_dirty;
435117442fe8094d0f82266e5a05509f62cac8f7539esewardj         } else {
435217442fe8094d0f82266e5a05509f62cac8f7539esewardj            if (d->mAddr == NULL || d->mSize == 0)
435317442fe8094d0f82266e5a05509f62cac8f7539esewardj               goto bad_dirty;
435417442fe8094d0f82266e5a05509f62cac8f7539esewardj         }
435517442fe8094d0f82266e5a05509f62cac8f7539esewardj         if (d->nFxState < 0 || d->nFxState > VEX_N_FXSTATE)
435617442fe8094d0f82266e5a05509f62cac8f7539esewardj            goto bad_dirty;
435717442fe8094d0f82266e5a05509f62cac8f7539esewardj         for (i = 0; i < d->nFxState; i++) {
435817442fe8094d0f82266e5a05509f62cac8f7539esewardj            if (d->fxState[i].fx == Ifx_None) goto bad_dirty;
435917442fe8094d0f82266e5a05509f62cac8f7539esewardj            if (d->fxState[i].size <= 0) goto bad_dirty;
4360c9069f2908814843e9a4da00da9c8905440195a6sewardj            if (d->fxState[i].nRepeats == 0) {
4361c9069f2908814843e9a4da00da9c8905440195a6sewardj               if (d->fxState[i].repeatLen != 0) goto bad_dirty;
4362c9069f2908814843e9a4da00da9c8905440195a6sewardj            } else {
4363c9069f2908814843e9a4da00da9c8905440195a6sewardj               if (d->fxState[i].repeatLen <= d->fxState[i].size)
4364c9069f2908814843e9a4da00da9c8905440195a6sewardj                  goto bad_dirty;
4365c9069f2908814843e9a4da00da9c8905440195a6sewardj               /* the % is safe because of the .size check above */
4366c9069f2908814843e9a4da00da9c8905440195a6sewardj               if ((d->fxState[i].repeatLen % d->fxState[i].size) != 0)
4367c9069f2908814843e9a4da00da9c8905440195a6sewardj                  goto bad_dirty;
4368c9069f2908814843e9a4da00da9c8905440195a6sewardj            }
436917442fe8094d0f82266e5a05509f62cac8f7539esewardj         }
437044ab8f7b1561fe509a6ec34f3c4b6ccd4efec168florian         /* check guard */
4371b8385d891bddf9016250435f47c06ac44ec921bfsewardj         if (d->guard == NULL) goto bad_dirty;
437249bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj         tcExpr( bb, stmt, d->guard, gWordTy );
4373ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj         if (typeOfIRExpr(tyenv, d->guard) != Ity_I1)
4374ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj            sanityCheckFail(bb,stmt,"IRStmt.Dirty.guard not :: Ity_I1");
437544ab8f7b1561fe509a6ec34f3c4b6ccd4efec168florian         /* check types, minimally */
437674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         IRType retTy = Ity_INVALID;
437774142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         if (d->tmp != IRTemp_INVALID) {
437874142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            retTy = typeOfIRTemp(tyenv, d->tmp);
437974142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            if (retTy == Ity_I1)
438074142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               sanityCheckFail(bb,stmt,"IRStmt.Dirty.dst :: Ity_I1");
438174142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         }
438274142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         UInt nVECRETs = 0, nBBPTRs = 0;
438317442fe8094d0f82266e5a05509f62cac8f7539esewardj         for (i = 0; d->args[i] != NULL; i++) {
438443c56461a667ca81fe29f1db01450d6ff1d62949sewardj            if (i >= 32)
438543c56461a667ca81fe29f1db01450d6ff1d62949sewardj               sanityCheckFail(bb,stmt,"IRStmt.Dirty: > 32 args");
43860b70efae27eafd60bc7ea9a3955605d55a681651florian            const IRExpr* arg = d->args[i];
43879041956f39c57e265122ed0a71061dea1e554edcflorian            if (UNLIKELY(arg->tag == Iex_VECRET)) {
43889041956f39c57e265122ed0a71061dea1e554edcflorian               nVECRETs++;
43899041956f39c57e265122ed0a71061dea1e554edcflorian            } else if (UNLIKELY(arg->tag == Iex_BBPTR)) {
43909041956f39c57e265122ed0a71061dea1e554edcflorian               nBBPTRs++;
439174142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            } else {
439274142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               if (typeOfIRExpr(tyenv, arg) == Ity_I1)
439374142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                  sanityCheckFail(bb,stmt,"IRStmt.Dirty.arg[i] :: Ity_I1");
439474142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            }
439574142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            if (nBBPTRs > 1) {
439674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               sanityCheckFail(bb,stmt,"IRStmt.Dirty.args: > 1 BBPTR arg");
439774142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            }
439874142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            if (nVECRETs == 1) {
439974142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               /* Fn must return V128 or V256. */
440074142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               if (retTy != Ity_V128 && retTy != Ity_V256)
440174142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                  sanityCheckFail(bb,stmt,
440274142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                                  "IRStmt.Dirty.args: VECRET present, "
440374142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                                  "but fn does not return V128 or V256");
440474142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            } else if (nVECRETs == 0) {
440574142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               /* Fn must not return V128 or V256 */
440674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               if (retTy == Ity_V128 || retTy == Ity_V256)
440774142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                  sanityCheckFail(bb,stmt,
440874142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                                  "IRStmt.Dirty.args: VECRET not present, "
440974142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                                  "but fn returns V128 or V256");
441074142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            } else {
441174142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj               sanityCheckFail(bb,stmt,
441274142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                               "IRStmt.Dirty.args: > 1 VECRET present");
441374142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            }
441417442fe8094d0f82266e5a05509f62cac8f7539esewardj         }
441574142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         if (nBBPTRs > 1) {
441674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            sanityCheckFail(bb,stmt,
441774142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                            "IRStmt.Dirty.args: > 1 BBPTR present");
441874142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         }
441974142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         /* If you ask for the baseblock pointer, you have to make
442074142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            some declaration about access to the guest state too. */
442174142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         if (d->nFxState == 0 && nBBPTRs != 0) {
442274142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj            sanityCheckFail(bb,stmt,
442374142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                            "IRStmt.Dirty.args: BBPTR requested, "
442474142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj                            "but no fxState declared");
442574142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj         }
442674142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj        break;
442717442fe8094d0f82266e5a05509f62cac8f7539esewardj         bad_dirty:
442817442fe8094d0f82266e5a05509f62cac8f7539esewardj         sanityCheckFail(bb,stmt,"IRStmt.Dirty: ill-formed");
4429e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         break;
443074142b8c8d5d3b3db17d744f5d5fb80f548bcf74sewardj      }
4431d2445f60726580b450eca68ab40c568f9df338e2sewardj      case Ist_NoOp:
4432c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj         break;
4433c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj      case Ist_MBE:
4434c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj         switch (stmt->Ist.MBE.event) {
44356d615ba78d168bb4319120fff5ce83d3f7433022sewardj            case Imbe_Fence: case Imbe_CancelReservation:
4436c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj               break;
4437c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj            default: sanityCheckFail(bb,stmt,"IRStmt.MBE.event: unknown");
4438c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj               break;
4439c4356f0d3c74fc2622dbeed79c6c1045fc519f72sewardj         }
44403e83893fff6c7bbc955d4529cd922df4ed9b23cdsewardj         break;
44416efd4a18cf32c322e03351176873cef33f1fe67esewardj      case Ist_Exit:
44420276d4b776bf2152d2ba6bbaec9b150e65d926eesewardj         tcExpr( bb, stmt, stmt->Ist.Exit.guard, gWordTy );
44430276d4b776bf2152d2ba6bbaec9b150e65d926eesewardj         if (typeOfIRExpr(tyenv,stmt->Ist.Exit.guard) != Ity_I1)
44440276d4b776bf2152d2ba6bbaec9b150e65d926eesewardj            sanityCheckFail(bb,stmt,"IRStmt.Exit.guard: not :: Ity_I1");
444549bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj         if (!saneIRConst(stmt->Ist.Exit.dst))
444649bfe6768024fb89b7be5b2bde6b6e31c17d8c89sewardj            sanityCheckFail(bb,stmt,"IRStmt.Exit.dst: bad dst");
44476efd4a18cf32c322e03351176873cef33f1fe67esewardj         if (typeOfIRConst(stmt->Ist.Exit.dst) != gWordTy)
44486efd4a18cf32c322e03351176873cef33f1fe67esewardj            sanityCheckFail(bb,stmt,"IRStmt.Exit.dst: not :: guest word type");
4449c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj         /* because it would intersect with host_EvC_* */
4450c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj         if (stmt->Ist.Exit.offsIP < 16)
4451c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj            sanityCheckFail(bb,stmt,"IRStmt.Exit.offsIP: too low");
44526efd4a18cf32c322e03351176873cef33f1fe67esewardj         break;
44536efd4a18cf32c322e03351176873cef33f1fe67esewardj      default:
44546efd4a18cf32c322e03351176873cef33f1fe67esewardj         vpanic("tcStmt");
44556efd4a18cf32c322e03351176873cef33f1fe67esewardj   }
44566efd4a18cf32c322e03351176873cef33f1fe67esewardj}
44576efd4a18cf32c322e03351176873cef33f1fe67esewardj
44580b70efae27eafd60bc7ea9a3955605d55a681651florianvoid sanityCheckIRSB ( const IRSB* bb, const HChar* caller,
4459b92307503d4fb9265136e182d10c42ebb9dd8272sewardj                       Bool require_flat, IRType guest_word_size )
4460354392111e47edc50442ea5095fa2367d9cc206fsewardj{
4461354392111e47edc50442ea5095fa2367d9cc206fsewardj   Int     i;
4462354392111e47edc50442ea5095fa2367d9cc206fsewardj   Int     n_temps    = bb->tyenv->types_used;
4463d8e3ecaede8eccf5bc7be2a55d99a188a07b0a34florian   Int*    def_counts = LibVEX_Alloc_inline(n_temps * sizeof(Int));
4464354392111e47edc50442ea5095fa2367d9cc206fsewardj
4465b92307503d4fb9265136e182d10c42ebb9dd8272sewardj   if (0)
4466b92307503d4fb9265136e182d10c42ebb9dd8272sewardj      vex_printf("sanityCheck: %s\n", caller);
4467b92307503d4fb9265136e182d10c42ebb9dd8272sewardj
4468354392111e47edc50442ea5095fa2367d9cc206fsewardj   vassert(guest_word_size == Ity_I32
4469695cff9303ef5dc8079117acfd632b44edb1f010sewardj           || guest_word_size == Ity_I64);
4470354392111e47edc50442ea5095fa2367d9cc206fsewardj
4471d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   if (bb->stmts_used < 0 || bb->stmts_size < 8
4472d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj       || bb->stmts_used > bb->stmts_size)
4473d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj      /* this BB is so strange we can't even print it */
4474dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      vpanic("sanityCheckIRSB: stmts array limits wierd");
4475d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj
44766d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj   /* Ensure each temp has a plausible type. */
44776d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj   for (i = 0; i < n_temps; i++) {
447817442fe8094d0f82266e5a05509f62cac8f7539esewardj      IRType ty = typeOfIRTemp(bb->tyenv,(IRTemp)i);
4479496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj      if (!isPlausibleIRType(ty)) {
44806d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj         vex_printf("Temp t%d declared with implausible type 0x%x\n",
44816d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj                    i, (UInt)ty);
44826d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj         sanityCheckFail(bb,NULL,"Temp declared with implausible type");
44836d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj      }
44846d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj   }
4485354392111e47edc50442ea5095fa2367d9cc206fsewardj
44860b70efae27eafd60bc7ea9a3955605d55a681651florian   const IRStmt* stmt;
44870b70efae27eafd60bc7ea9a3955605d55a681651florian
4488b92307503d4fb9265136e182d10c42ebb9dd8272sewardj   /* Check for flatness, if required. */
4489b92307503d4fb9265136e182d10c42ebb9dd8272sewardj   if (require_flat) {
4490b92307503d4fb9265136e182d10c42ebb9dd8272sewardj      for (i = 0; i < bb->stmts_used; i++) {
4491b92307503d4fb9265136e182d10c42ebb9dd8272sewardj         stmt = bb->stmts[i];
4492b92307503d4fb9265136e182d10c42ebb9dd8272sewardj         if (!stmt)
4493d2445f60726580b450eca68ab40c568f9df338e2sewardj            sanityCheckFail(bb, stmt, "IRStmt: is NULL");
4494b92307503d4fb9265136e182d10c42ebb9dd8272sewardj         if (!isFlatIRStmt(stmt))
4495b92307503d4fb9265136e182d10c42ebb9dd8272sewardj            sanityCheckFail(bb, stmt, "IRStmt: is not flat");
4496b92307503d4fb9265136e182d10c42ebb9dd8272sewardj      }
4497496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj      if (!isIRAtom(bb->next))
4498b92307503d4fb9265136e182d10c42ebb9dd8272sewardj         sanityCheckFail(bb, NULL, "bb->next is not an atom");
4499b92307503d4fb9265136e182d10c42ebb9dd8272sewardj   }
4500b92307503d4fb9265136e182d10c42ebb9dd8272sewardj
4501354392111e47edc50442ea5095fa2367d9cc206fsewardj   /* Count the defs of each temp.  Only one def is allowed.
4502354392111e47edc50442ea5095fa2367d9cc206fsewardj      Also, check that each used temp has already been defd. */
45036d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj
45046d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj   for (i = 0; i < n_temps; i++)
45056d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj      def_counts[i] = 0;
45066d2638e5edd8849e036f235d42a23c959e3bc3d8sewardj
4507d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   for (i = 0; i < bb->stmts_used; i++) {
4508d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj      stmt = bb->stmts[i];
4509e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      /* Check any temps used by this statement. */
4510354392111e47edc50442ea5095fa2367d9cc206fsewardj      useBeforeDef_Stmt(bb,stmt,def_counts);
451117442fe8094d0f82266e5a05509f62cac8f7539esewardj
4512e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      /* Now make note of any temps defd by this statement. */
4513e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      switch (stmt->tag) {
4514e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      case Ist_WrTmp:
4515dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         if (stmt->Ist.WrTmp.tmp < 0 || stmt->Ist.WrTmp.tmp >= n_temps)
451617442fe8094d0f82266e5a05509f62cac8f7539esewardj            sanityCheckFail(bb, stmt,
451717442fe8094d0f82266e5a05509f62cac8f7539esewardj               "IRStmt.Tmp: destination tmp is out of range");
4518dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         def_counts[stmt->Ist.WrTmp.tmp]++;
4519dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj         if (def_counts[stmt->Ist.WrTmp.tmp] > 1)
452017442fe8094d0f82266e5a05509f62cac8f7539esewardj            sanityCheckFail(bb, stmt,
4521cf7879021370aabcccb1a9347244fcc7d5680141sewardj               "IRStmt.Tmp: destination tmp is assigned more than once");
4522e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         break;
45230b70efae27eafd60bc7ea9a3955605d55a681651florian      case Ist_LoadG: {
45240b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRLoadG* lg = stmt->Ist.LoadG.details;
4525cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (lg->dst < 0 || lg->dst >= n_temps)
4526cfe046e178666280b87da998b1b52ecda03ecd89sewardj             sanityCheckFail(bb, stmt,
4527cfe046e178666280b87da998b1b52ecda03ecd89sewardj                "IRStmt.LoadG: destination tmp is out of range");
4528cfe046e178666280b87da998b1b52ecda03ecd89sewardj         def_counts[lg->dst]++;
4529cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (def_counts[lg->dst] > 1)
4530cfe046e178666280b87da998b1b52ecda03ecd89sewardj             sanityCheckFail(bb, stmt,
4531cfe046e178666280b87da998b1b52ecda03ecd89sewardj                "IRStmt.LoadG: destination tmp is assigned more than once");
4532e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         break;
45330b70efae27eafd60bc7ea9a3955605d55a681651florian      }
45340b70efae27eafd60bc7ea9a3955605d55a681651florian      case Ist_Dirty: {
45350b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRDirty* d = stmt->Ist.Dirty.details;
4536cfe046e178666280b87da998b1b52ecda03ecd89sewardj         if (d->tmp != IRTemp_INVALID) {
4537e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            if (d->tmp < 0 || d->tmp >= n_temps)
4538e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj               sanityCheckFail(bb, stmt,
4539e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                  "IRStmt.Dirty: destination tmp is out of range");
4540e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            def_counts[d->tmp]++;
4541e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            if (def_counts[d->tmp] > 1)
4542e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj               sanityCheckFail(bb, stmt,
4543e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                  "IRStmt.Dirty: destination tmp is assigned more than once");
4544e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         }
4545e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         break;
45460b70efae27eafd60bc7ea9a3955605d55a681651florian      }
45470b70efae27eafd60bc7ea9a3955605d55a681651florian      case Ist_CAS: {
45480b70efae27eafd60bc7ea9a3955605d55a681651florian         const IRCAS* cas = stmt->Ist.CAS.details;
4549e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (cas->oldHi != IRTemp_INVALID) {
4550e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj            if (cas->oldHi < 0 || cas->oldHi >= n_temps)
4551e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                sanityCheckFail(bb, stmt,
4552e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                   "IRStmt.CAS: destination tmpHi is out of range");
4553e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj             def_counts[cas->oldHi]++;
4554e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj             if (def_counts[cas->oldHi] > 1)
4555e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                sanityCheckFail(bb, stmt,
4556e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj                   "IRStmt.CAS: destination tmpHi is assigned more than once");
4557e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         }
4558e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj         if (cas->oldLo < 0 || cas->oldLo >= n_temps)
4559e768e92e054cde495849a5c842a477d287677f78sewardj            sanityCheckFail(bb, stmt,
4560e768e92e054cde495849a5c842a477d287677f78sewardj               "IRStmt.CAS: destination tmpLo is out of range");
4561e768e92e054cde495849a5c842a477d287677f78sewardj         def_counts[cas->oldLo]++;
4562e768e92e054cde495849a5c842a477d287677f78sewardj         if (def_counts[cas->oldLo] > 1)
4563e768e92e054cde495849a5c842a477d287677f78sewardj            sanityCheckFail(bb, stmt,
4564e768e92e054cde495849a5c842a477d287677f78sewardj               "IRStmt.CAS: destination tmpLo is assigned more than once");
4565e768e92e054cde495849a5c842a477d287677f78sewardj         break;
45660b70efae27eafd60bc7ea9a3955605d55a681651florian      }
4567e768e92e054cde495849a5c842a477d287677f78sewardj      case Ist_LLSC:
4568e768e92e054cde495849a5c842a477d287677f78sewardj         if (stmt->Ist.LLSC.result < 0 || stmt->Ist.LLSC.result >= n_temps)
4569e768e92e054cde495849a5c842a477d287677f78sewardj            sanityCheckFail(bb, stmt,
4570e768e92e054cde495849a5c842a477d287677f78sewardj               "IRStmt.LLSC: destination tmp is out of range");
4571e768e92e054cde495849a5c842a477d287677f78sewardj         def_counts[stmt->Ist.LLSC.result]++;
4572e768e92e054cde495849a5c842a477d287677f78sewardj         if (def_counts[stmt->Ist.LLSC.result] > 1)
4573e768e92e054cde495849a5c842a477d287677f78sewardj            sanityCheckFail(bb, stmt,
4574e768e92e054cde495849a5c842a477d287677f78sewardj               "IRStmt.LLSC: destination tmp is assigned more than once");
4575e768e92e054cde495849a5c842a477d287677f78sewardj         break;
4576e9d8a26b690c2561ac54ab0cd6ad83ecbadcbe76sewardj      default:
4577e768e92e054cde495849a5c842a477d287677f78sewardj         /* explicitly handle the rest, so as to keep gcc quiet */
4578e768e92e054cde495849a5c842a477d287677f78sewardj         break;
4579354392111e47edc50442ea5095fa2367d9cc206fsewardj      }
4580354392111e47edc50442ea5095fa2367d9cc206fsewardj   }
4581354392111e47edc50442ea5095fa2367d9cc206fsewardj
45826efd4a18cf32c322e03351176873cef33f1fe67esewardj   /* Typecheck everything. */
4583d7cb8538d814660fe68ea7100571fd3ed1de8082sewardj   for (i = 0; i < bb->stmts_used; i++)
458439e3f248ea24946bf856dd9c9baaa8cacb9a0e39sewardj      if (bb->stmts[i])
458539e3f248ea24946bf856dd9c9baaa8cacb9a0e39sewardj         tcStmt( bb, bb->stmts[i], guest_word_size );
45866efd4a18cf32c322e03351176873cef33f1fe67esewardj   if (typeOfIRExpr(bb->tyenv,bb->next) != guest_word_size)
45876efd4a18cf32c322e03351176873cef33f1fe67esewardj      sanityCheckFail(bb, NULL, "bb->next field has wrong type");
4588c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   /* because it would intersect with host_EvC_* */
4589c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj   if (bb->offsIP < 16)
4590c6f970f1fadb640d69c78ac2669efab5c08f1e8dsewardj      sanityCheckFail(bb, NULL, "bb->offsIP: too low");
4591e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj}
4592e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj
45934345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj/*---------------------------------------------------------------*/
45944345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj/*--- Misc helper functions                                   ---*/
45954345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj/*---------------------------------------------------------------*/
45964345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj
45970b70efae27eafd60bc7ea9a3955605d55a681651florianBool eqIRConst ( const IRConst* c1, const IRConst* c2 )
45984345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj{
45994345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj   if (c1->tag != c2->tag)
46004345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj      return False;
46014345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj
46024345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj   switch (c1->tag) {
4603a98bf499383d95b92038450b4ef47f8cf1901148sewardj      case Ico_U1:  return toBool( (1 & c1->Ico.U1) == (1 & c2->Ico.U1) );
4604a98bf499383d95b92038450b4ef47f8cf1901148sewardj      case Ico_U8:  return toBool( c1->Ico.U8  == c2->Ico.U8 );
4605a98bf499383d95b92038450b4ef47f8cf1901148sewardj      case Ico_U16: return toBool( c1->Ico.U16 == c2->Ico.U16 );
4606a98bf499383d95b92038450b4ef47f8cf1901148sewardj      case Ico_U32: return toBool( c1->Ico.U32 == c2->Ico.U32 );
4607a98bf499383d95b92038450b4ef47f8cf1901148sewardj      case Ico_U64: return toBool( c1->Ico.U64 == c2->Ico.U64 );
46082019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ico_F32: return toBool( c1->Ico.F32 == c2->Ico.F32 );
46092019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ico_F32i: return toBool( c1->Ico.F32i == c2->Ico.F32i );
4610a98bf499383d95b92038450b4ef47f8cf1901148sewardj      case Ico_F64: return toBool( c1->Ico.F64 == c2->Ico.F64 );
46110da5eb8ed38ecd1a474e8d2819ac2fab26710bd2sewardj      case Ico_F64i: return toBool( c1->Ico.F64i == c2->Ico.F64i );
46120da5eb8ed38ecd1a474e8d2819ac2fab26710bd2sewardj      case Ico_V128: return toBool( c1->Ico.V128 == c2->Ico.V128 );
46135df0b2fb56b3b6a172a590aa52186e40986bc27csewardj      case Ico_V256: return toBool( c1->Ico.V256 == c2->Ico.V256 );
46144345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj      default: vpanic("eqIRConst");
46154345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj   }
46164345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj}
46174345f7a3ecee1dde39b3c9b58372a5af97a06e8csewardj
46180b70efae27eafd60bc7ea9a3955605d55a681651florianBool eqIRRegArray ( const IRRegArray* descr1, const IRRegArray* descr2 )
4619e98dcf23f5f6c301ddbfebd77f246accfa61f4ccsewardj{
4620a98bf499383d95b92038450b4ef47f8cf1901148sewardj   return toBool( descr1->base == descr2->base
4621a98bf499383d95b92038450b4ef47f8cf1901148sewardj                  && descr1->elemTy == descr2->elemTy
4622a98bf499383d95b92038450b4ef47f8cf1901148sewardj                  && descr1->nElems == descr2->nElems );
4623e98dcf23f5f6c301ddbfebd77f246accfa61f4ccsewardj}
4624e98dcf23f5f6c301ddbfebd77f246accfa61f4ccsewardj
46252d3f77c12d2911173fd182d0b6e954196dee9135sewardjInt sizeofIRType ( IRType ty )
46262d3f77c12d2911173fd182d0b6e954196dee9135sewardj{
46272d3f77c12d2911173fd182d0b6e954196dee9135sewardj   switch (ty) {
4628c9a43665879a03886b27a65b68af2a2c11b04f59sewardj      case Ity_I8:   return 1;
4629c9a43665879a03886b27a65b68af2a2c11b04f59sewardj      case Ity_I16:  return 2;
4630c9a43665879a03886b27a65b68af2a2c11b04f59sewardj      case Ity_I32:  return 4;
4631c9a43665879a03886b27a65b68af2a2c11b04f59sewardj      case Ity_I64:  return 8;
46327666c15bfd3ce217582fa7811a737db487b875e0sewardj      case Ity_I128: return 16;
46333738bfcea70600334c830de5421adc0204890c95sewardj      case Ity_F16:  return 2;
4634c9a43665879a03886b27a65b68af2a2c11b04f59sewardj      case Ity_F32:  return 4;
4635c9a43665879a03886b27a65b68af2a2c11b04f59sewardj      case Ity_F64:  return 8;
46362019a976f07ff418dde2dfc7cc74667ef66d7764sewardj      case Ity_F128: return 16;
4637c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Ity_D32:  return 4;
4638c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Ity_D64:  return 8;
4639c6bbd470e9bd9898b84959227a406d3972d95f3bsewardj      case Ity_D128: return 16;
4640c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Ity_V128: return 16;
4641c4530ae9079b0c3f8d4e8df35073613d718cadecsewardj      case Ity_V256: return 32;
46422d3f77c12d2911173fd182d0b6e954196dee9135sewardj      default: vex_printf("\n"); ppIRType(ty); vex_printf("\n");
46432d3f77c12d2911173fd182d0b6e954196dee9135sewardj               vpanic("sizeofIRType");
46442d3f77c12d2911173fd182d0b6e954196dee9135sewardj   }
46452d3f77c12d2911173fd182d0b6e954196dee9135sewardj}
46462d3f77c12d2911173fd182d0b6e954196dee9135sewardj
46477d00913f2ac5014a145a899b6ee4b8511539221fsewardjIRType integerIRTypeOfSize ( Int szB )
46487d00913f2ac5014a145a899b6ee4b8511539221fsewardj{
46497d00913f2ac5014a145a899b6ee4b8511539221fsewardj   switch (szB) {
46507d00913f2ac5014a145a899b6ee4b8511539221fsewardj      case 8: return Ity_I64;
46517d00913f2ac5014a145a899b6ee4b8511539221fsewardj      case 4: return Ity_I32;
46527d00913f2ac5014a145a899b6ee4b8511539221fsewardj      case 2: return Ity_I16;
46537d00913f2ac5014a145a899b6ee4b8511539221fsewardj      case 1: return Ity_I8;
46547d00913f2ac5014a145a899b6ee4b8511539221fsewardj      default: vpanic("integerIRTypeOfSize");
46557d00913f2ac5014a145a899b6ee4b8511539221fsewardj   }
46567d00913f2ac5014a145a899b6ee4b8511539221fsewardj}
46577d00913f2ac5014a145a899b6ee4b8511539221fsewardj
465849651f4b59b1ab7e0e70cccd34001630eafbe957sewardjIRExpr* mkIRExpr_HWord ( HWord hw )
465949651f4b59b1ab7e0e70cccd34001630eafbe957sewardj{
4660f96552617c82834ece36184e674e249faa899b2fsewardj   vassert(sizeof(void*) == sizeof(HWord));
466149651f4b59b1ab7e0e70cccd34001630eafbe957sewardj   if (sizeof(HWord) == 4)
466249651f4b59b1ab7e0e70cccd34001630eafbe957sewardj      return IRExpr_Const(IRConst_U32((UInt)hw));
466349651f4b59b1ab7e0e70cccd34001630eafbe957sewardj   if (sizeof(HWord) == 8)
4664f96552617c82834ece36184e674e249faa899b2fsewardj      return IRExpr_Const(IRConst_U64((ULong)hw));
466549651f4b59b1ab7e0e70cccd34001630eafbe957sewardj   vpanic("mkIRExpr_HWord");
466649651f4b59b1ab7e0e70cccd34001630eafbe957sewardj}
46676efd4a18cf32c322e03351176873cef33f1fe67esewardj
46681ff4756e1731485e6bf3cd96717cd8398daec1f2florianIRDirty* unsafeIRDirty_0_N ( Int regparms, const HChar* name, void* addr,
4669f96552617c82834ece36184e674e249faa899b2fsewardj                             IRExpr** args )
4670f96552617c82834ece36184e674e249faa899b2fsewardj{
4671f96552617c82834ece36184e674e249faa899b2fsewardj   IRDirty* d = emptyIRDirty();
4672b8385d891bddf9016250435f47c06ac44ec921bfsewardj   d->cee   = mkIRCallee ( regparms, name, addr );
4673ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj   d->guard = IRExpr_Const(IRConst_U1(True));
4674b8385d891bddf9016250435f47c06ac44ec921bfsewardj   d->args  = args;
4675f96552617c82834ece36184e674e249faa899b2fsewardj   return d;
4676f96552617c82834ece36184e674e249faa899b2fsewardj}
4677f96552617c82834ece36184e674e249faa899b2fsewardj
4678f96552617c82834ece36184e674e249faa899b2fsewardjIRDirty* unsafeIRDirty_1_N ( IRTemp dst,
46791ff4756e1731485e6bf3cd96717cd8398daec1f2florian                             Int regparms, const HChar* name, void* addr,
4680f96552617c82834ece36184e674e249faa899b2fsewardj                             IRExpr** args )
4681f96552617c82834ece36184e674e249faa899b2fsewardj{
4682f96552617c82834ece36184e674e249faa899b2fsewardj   IRDirty* d = emptyIRDirty();
4683b8385d891bddf9016250435f47c06ac44ec921bfsewardj   d->cee   = mkIRCallee ( regparms, name, addr );
4684ba99931f6dfa264d7bc7c3845a46fc955ab56d93sewardj   d->guard = IRExpr_Const(IRConst_U1(True));
4685b8385d891bddf9016250435f47c06ac44ec921bfsewardj   d->args  = args;
4686b8385d891bddf9016250435f47c06ac44ec921bfsewardj   d->tmp   = dst;
4687f96552617c82834ece36184e674e249faa899b2fsewardj   return d;
4688f96552617c82834ece36184e674e249faa899b2fsewardj}
4689f96552617c82834ece36184e674e249faa899b2fsewardj
4690f96552617c82834ece36184e674e249faa899b2fsewardjIRExpr* mkIRExprCCall ( IRType retty,
46911ff4756e1731485e6bf3cd96717cd8398daec1f2florian                        Int regparms, const HChar* name, void* addr,
4692f96552617c82834ece36184e674e249faa899b2fsewardj                        IRExpr** args )
4693f96552617c82834ece36184e674e249faa899b2fsewardj{
4694f96552617c82834ece36184e674e249faa899b2fsewardj   return IRExpr_CCall ( mkIRCallee ( regparms, name, addr ),
4695f96552617c82834ece36184e674e249faa899b2fsewardj                         retty, args );
4696f96552617c82834ece36184e674e249faa899b2fsewardj}
4697f96552617c82834ece36184e674e249faa899b2fsewardj
46980b70efae27eafd60bc7ea9a3955605d55a681651florianBool eqIRAtom ( const IRExpr* a1, const IRExpr* a2 )
4699496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj{
4700496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj   vassert(isIRAtom(a1));
4701496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj   vassert(isIRAtom(a2));
4702dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj   if (a1->tag == Iex_RdTmp && a2->tag == Iex_RdTmp)
4703dd40fdf58cc8a6fe9466c4f00bdfc9fe9bf00449sewardj      return toBool(a1->Iex.RdTmp.tmp == a2->Iex.RdTmp.tmp);
4704496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj   if (a1->tag == Iex_Const && a2->tag == Iex_Const)
4705496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj      return eqIRConst(a1->Iex.Const.con, a2->Iex.Const.con);
4706496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj   return False;
4707496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj}
4708496a58d130a28ac3a5ba33c9012dabbe61dc852csewardj
4709e539a4055b785d1ee978727e51bcc4b39f3e2c1asewardj/*---------------------------------------------------------------*/
4710cef7d3e3df4796e35b4521158d9dc058f034aa87sewardj/*--- end                                           ir_defs.c ---*/
4711887a11a609f3e61d2ae8fe4e67f176207715da7esewardj/*---------------------------------------------------------------*/
4712