11cb0ef41Sopenharmony_ci// Copyright 2014 the V8 project authors. All rights reserved.
21cb0ef41Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be
31cb0ef41Sopenharmony_ci// found in the LICENSE file.
41cb0ef41Sopenharmony_ci
51cb0ef41Sopenharmony_ci#ifndef V8_CODEGEN_S390_CONSTANTS_S390_H_
61cb0ef41Sopenharmony_ci#define V8_CODEGEN_S390_CONSTANTS_S390_H_
71cb0ef41Sopenharmony_ci
81cb0ef41Sopenharmony_ci// Get the standard printf format macros for C99 stdint types.
91cb0ef41Sopenharmony_ci#ifndef __STDC_FORMAT_MACROS
101cb0ef41Sopenharmony_ci#define __STDC_FORMAT_MACROS
111cb0ef41Sopenharmony_ci#endif
121cb0ef41Sopenharmony_ci#include <inttypes.h>
131cb0ef41Sopenharmony_ci
141cb0ef41Sopenharmony_ci#include <stdint.h>
151cb0ef41Sopenharmony_ci
161cb0ef41Sopenharmony_ci#include "src/base/logging.h"
171cb0ef41Sopenharmony_ci#include "src/base/macros.h"
181cb0ef41Sopenharmony_ci#include "src/common/globals.h"
191cb0ef41Sopenharmony_ci
201cb0ef41Sopenharmony_ci// UNIMPLEMENTED_ macro for S390.
211cb0ef41Sopenharmony_ci#ifdef DEBUG
221cb0ef41Sopenharmony_ci#define UNIMPLEMENTED_S390()                                               \
231cb0ef41Sopenharmony_ci  v8::internal::PrintF("%s, \tline %d: \tfunction %s not implemented. \n", \
241cb0ef41Sopenharmony_ci                       __FILE__, __LINE__, __func__)
251cb0ef41Sopenharmony_ci#else
261cb0ef41Sopenharmony_ci#define UNIMPLEMENTED_S390()
271cb0ef41Sopenharmony_ci#endif
281cb0ef41Sopenharmony_ci
291cb0ef41Sopenharmony_cinamespace v8 {
301cb0ef41Sopenharmony_cinamespace internal {
311cb0ef41Sopenharmony_ci
321cb0ef41Sopenharmony_ciconstexpr size_t kMaxPCRelativeCodeRangeInMB = 4096;
331cb0ef41Sopenharmony_ci
341cb0ef41Sopenharmony_ci// Number of registers
351cb0ef41Sopenharmony_ciconst int kNumRegisters = 16;
361cb0ef41Sopenharmony_ci
371cb0ef41Sopenharmony_ci// FP support.
381cb0ef41Sopenharmony_ciconst int kNumDoubleRegisters = 16;
391cb0ef41Sopenharmony_ci
401cb0ef41Sopenharmony_ciconst int kNoRegister = -1;
411cb0ef41Sopenharmony_ci
421cb0ef41Sopenharmony_ci// Actual value of root register is offset from the root array's start
431cb0ef41Sopenharmony_ci// to take advantage of negative displacement values.
441cb0ef41Sopenharmony_ci// TODO(sigurds): Choose best value.
451cb0ef41Sopenharmony_ciconstexpr int kRootRegisterBias = 128;
461cb0ef41Sopenharmony_ci
471cb0ef41Sopenharmony_ci// sign-extend the least significant 16-bits of value <imm>
481cb0ef41Sopenharmony_ci#define SIGN_EXT_IMM16(imm) ((static_cast<int>(imm) << 16) >> 16)
491cb0ef41Sopenharmony_ci
501cb0ef41Sopenharmony_ci// sign-extend the least significant 26-bits of value <imm>
511cb0ef41Sopenharmony_ci#define SIGN_EXT_IMM26(imm) ((static_cast<int>(imm) << 6) >> 6)
521cb0ef41Sopenharmony_ci
531cb0ef41Sopenharmony_ci// -----------------------------------------------------------------------------
541cb0ef41Sopenharmony_ci// Conditions.
551cb0ef41Sopenharmony_ci
561cb0ef41Sopenharmony_ci// Defines constants and accessor classes to assemble, disassemble and
571cb0ef41Sopenharmony_ci// simulate z/Architecture instructions.
581cb0ef41Sopenharmony_ci//
591cb0ef41Sopenharmony_ci// Section references in the code refer to the "z/Architecture Principles
601cb0ef41Sopenharmony_ci// Of Operation" http://publibfi.boulder.ibm.com/epubs/pdf/dz9zr009.pdf
611cb0ef41Sopenharmony_ci//
621cb0ef41Sopenharmony_ci
631cb0ef41Sopenharmony_ci// Constants for specific fields are defined in their respective named enums.
641cb0ef41Sopenharmony_ci// General constants are in an anonymous enum in class Instr.
651cb0ef41Sopenharmony_cienum Condition {
661cb0ef41Sopenharmony_ci  kNoCondition = -1,
671cb0ef41Sopenharmony_ci  eq = 0x8,  // Equal.
681cb0ef41Sopenharmony_ci  ne = 0x7,  // Not equal.
691cb0ef41Sopenharmony_ci  ge = 0xa,  // Greater or equal.
701cb0ef41Sopenharmony_ci  lt = 0x4,  // Less than.
711cb0ef41Sopenharmony_ci  gt = 0x2,  // Greater than.
721cb0ef41Sopenharmony_ci  le = 0xc,  // Less then or equal
731cb0ef41Sopenharmony_ci  al = 0xf,  // Always.
741cb0ef41Sopenharmony_ci
751cb0ef41Sopenharmony_ci  CC_NOP = 0x0,           // S390 NOP
761cb0ef41Sopenharmony_ci  CC_EQ = 0x08,           // S390 condition code 0b1000
771cb0ef41Sopenharmony_ci  CC_LT = 0x04,           // S390 condition code 0b0100
781cb0ef41Sopenharmony_ci  CC_LE = CC_EQ | CC_LT,  // S390 condition code 0b1100
791cb0ef41Sopenharmony_ci  CC_GT = 0x02,           // S390 condition code 0b0010
801cb0ef41Sopenharmony_ci  CC_GE = CC_EQ | CC_GT,  // S390 condition code 0b1010
811cb0ef41Sopenharmony_ci  CC_OF = 0x01,           // S390 condition code 0b0001
821cb0ef41Sopenharmony_ci  CC_NOF = 0x0E,          // S390 condition code 0b1110
831cb0ef41Sopenharmony_ci  CC_ALWAYS = 0x0F,       // S390 always taken branch
841cb0ef41Sopenharmony_ci  unordered = CC_OF,      // Floating-point unordered
851cb0ef41Sopenharmony_ci  ordered = CC_NOF,       // floating-point ordered
861cb0ef41Sopenharmony_ci  overflow = CC_OF,       // Summary overflow
871cb0ef41Sopenharmony_ci  nooverflow = CC_NOF,
881cb0ef41Sopenharmony_ci
891cb0ef41Sopenharmony_ci  mask0x0 = 0,  // no jumps
901cb0ef41Sopenharmony_ci  mask0x1 = 1,
911cb0ef41Sopenharmony_ci  mask0x2 = 2,
921cb0ef41Sopenharmony_ci  mask0x3 = 3,
931cb0ef41Sopenharmony_ci  mask0x4 = 4,
941cb0ef41Sopenharmony_ci  mask0x5 = 5,
951cb0ef41Sopenharmony_ci  mask0x6 = 6,
961cb0ef41Sopenharmony_ci  mask0x7 = 7,
971cb0ef41Sopenharmony_ci  mask0x8 = 8,
981cb0ef41Sopenharmony_ci  mask0x9 = 9,
991cb0ef41Sopenharmony_ci  mask0xA = 10,
1001cb0ef41Sopenharmony_ci  mask0xB = 11,
1011cb0ef41Sopenharmony_ci  mask0xC = 12,
1021cb0ef41Sopenharmony_ci  mask0xD = 13,
1031cb0ef41Sopenharmony_ci  mask0xE = 14,
1041cb0ef41Sopenharmony_ci  mask0xF = 15
1051cb0ef41Sopenharmony_ci};
1061cb0ef41Sopenharmony_ci
1071cb0ef41Sopenharmony_ciinline Condition NegateCondition(Condition cond) {
1081cb0ef41Sopenharmony_ci  DCHECK(cond != al);
1091cb0ef41Sopenharmony_ci  switch (cond) {
1101cb0ef41Sopenharmony_ci    case eq:
1111cb0ef41Sopenharmony_ci      return ne;
1121cb0ef41Sopenharmony_ci    case ne:
1131cb0ef41Sopenharmony_ci      return eq;
1141cb0ef41Sopenharmony_ci    case ge:
1151cb0ef41Sopenharmony_ci      return lt;
1161cb0ef41Sopenharmony_ci    case gt:
1171cb0ef41Sopenharmony_ci      return le;
1181cb0ef41Sopenharmony_ci    case le:
1191cb0ef41Sopenharmony_ci      return gt;
1201cb0ef41Sopenharmony_ci    case lt:
1211cb0ef41Sopenharmony_ci      return ge;
1221cb0ef41Sopenharmony_ci    case lt | gt:
1231cb0ef41Sopenharmony_ci      return eq;
1241cb0ef41Sopenharmony_ci    case le | ge:
1251cb0ef41Sopenharmony_ci      return CC_OF;
1261cb0ef41Sopenharmony_ci    case CC_OF:
1271cb0ef41Sopenharmony_ci      return CC_NOF;
1281cb0ef41Sopenharmony_ci    default:
1291cb0ef41Sopenharmony_ci      DCHECK(false);
1301cb0ef41Sopenharmony_ci  }
1311cb0ef41Sopenharmony_ci  return al;
1321cb0ef41Sopenharmony_ci}
1331cb0ef41Sopenharmony_ci
1341cb0ef41Sopenharmony_ci// -----------------------------------------------------------------------------
1351cb0ef41Sopenharmony_ci// Instructions encoding.
1361cb0ef41Sopenharmony_ci
1371cb0ef41Sopenharmony_ci// Instr is merely used by the Assembler to distinguish 32bit integers
1381cb0ef41Sopenharmony_ci// representing instructions from usual 32 bit values.
1391cb0ef41Sopenharmony_ci// Instruction objects are pointers to 32bit values, and provide methods to
1401cb0ef41Sopenharmony_ci// access the various ISA fields.
1411cb0ef41Sopenharmony_ciusing Instr = int32_t;
1421cb0ef41Sopenharmony_ciusing TwoByteInstr = uint16_t;
1431cb0ef41Sopenharmony_ciusing FourByteInstr = uint32_t;
1441cb0ef41Sopenharmony_ciusing SixByteInstr = uint64_t;
1451cb0ef41Sopenharmony_ci
1461cb0ef41Sopenharmony_ci#define S390_RSY_A_OPCODE_LIST(V)                                              \
1471cb0ef41Sopenharmony_ci  V(lmg, LMG, 0xEB04)     /* type = RSY_A LOAD MULTIPLE (64)  */               \
1481cb0ef41Sopenharmony_ci  V(srag, SRAG, 0xEB0A)   /* type = RSY_A SHIFT RIGHT SINGLE (64)  */          \
1491cb0ef41Sopenharmony_ci  V(slag, SLAG, 0xEB0B)   /* type = RSY_A SHIFT LEFT SINGLE (64)  */           \
1501cb0ef41Sopenharmony_ci  V(srlg, SRLG, 0xEB0C)   /* type = RSY_A SHIFT RIGHT SINGLE LOGICAL (64)  */  \
1511cb0ef41Sopenharmony_ci  V(sllg, SLLG, 0xEB0D)   /* type = RSY_A SHIFT LEFT SINGLE LOGICAL (64)  */   \
1521cb0ef41Sopenharmony_ci  V(tracg, TRACG, 0xEB0F) /* type = RSY_A TRACE (64)  */                       \
1531cb0ef41Sopenharmony_ci  V(csy, CSY, 0xEB14)     /* type = RSY_A COMPARE AND SWAP (32)  */            \
1541cb0ef41Sopenharmony_ci  V(rllg, RLLG, 0xEB1C)   /* type = RSY_A ROTATE LEFT SINGLE LOGICAL (64)  */  \
1551cb0ef41Sopenharmony_ci  V(rll, RLL, 0xEB1D)     /* type = RSY_A ROTATE LEFT SINGLE LOGICAL (32)  */  \
1561cb0ef41Sopenharmony_ci  V(stmg, STMG, 0xEB24)   /* type = RSY_A STORE MULTIPLE (64)  */              \
1571cb0ef41Sopenharmony_ci  V(stctg, STCTG, 0xEB25) /* type = RSY_A STORE CONTROL (64)  */               \
1581cb0ef41Sopenharmony_ci  V(stmh, STMH, 0xEB26)   /* type = RSY_A STORE MULTIPLE HIGH (32)  */         \
1591cb0ef41Sopenharmony_ci  V(lctlg, LCTLG, 0xEB2F) /* type = RSY_A LOAD CONTROL (64)  */                \
1601cb0ef41Sopenharmony_ci  V(csg, CSG, 0xEB30)     /* type = RSY_A COMPARE AND SWAP (64)  */            \
1611cb0ef41Sopenharmony_ci  V(cdsy, CDSY, 0xEB31)   /* type = RSY_A COMPARE DOUBLE AND SWAP (32)  */     \
1621cb0ef41Sopenharmony_ci  V(cdsg, CDSG, 0xEB3E)   /* type = RSY_A COMPARE DOUBLE AND SWAP (64)  */     \
1631cb0ef41Sopenharmony_ci  V(bxhg, BXHG, 0xEB44)   /* type = RSY_A BRANCH ON INDEX HIGH (64)  */        \
1641cb0ef41Sopenharmony_ci  V(bxleg, BXLEG, 0xEB45) /* type = RSY_A BRANCH ON INDEX LOW OR EQUAL (64) */ \
1651cb0ef41Sopenharmony_ci  V(ecag, ECAG, 0xEB4C)   /* type = RSY_A EXTRACT CPU ATTRIBUTE  */            \
1661cb0ef41Sopenharmony_ci  V(mvclu, MVCLU, 0xEB8E) /* type = RSY_A MOVE LONG UNICODE  */                \
1671cb0ef41Sopenharmony_ci  V(clclu, CLCLU, 0xEB8F) /* type = RSY_A COMPARE LOGICAL LONG UNICODE  */     \
1681cb0ef41Sopenharmony_ci  V(stmy, STMY, 0xEB90)   /* type = RSY_A STORE MULTIPLE (32)  */              \
1691cb0ef41Sopenharmony_ci  V(lmh, LMH, 0xEB96)     /* type = RSY_A LOAD MULTIPLE HIGH (32)  */          \
1701cb0ef41Sopenharmony_ci  V(lmy, LMY, 0xEB98)     /* type = RSY_A LOAD MULTIPLE (32)  */               \
1711cb0ef41Sopenharmony_ci  V(lamy, LAMY, 0xEB9A)   /* type = RSY_A LOAD ACCESS MULTIPLE  */             \
1721cb0ef41Sopenharmony_ci  V(stamy, STAMY, 0xEB9B) /* type = RSY_A STORE ACCESS MULTIPLE  */            \
1731cb0ef41Sopenharmony_ci  V(srak, SRAK, 0xEBDC)   /* type = RSY_A SHIFT RIGHT SINGLE (32)  */          \
1741cb0ef41Sopenharmony_ci  V(slak, SLAK, 0xEBDD)   /* type = RSY_A SHIFT LEFT SINGLE (32)  */           \
1751cb0ef41Sopenharmony_ci  V(srlk, SRLK, 0xEBDE)   /* type = RSY_A SHIFT RIGHT SINGLE LOGICAL (32)  */  \
1761cb0ef41Sopenharmony_ci  V(sllk, SLLK, 0xEBDF)   /* type = RSY_A SHIFT LEFT SINGLE LOGICAL (32)  */   \
1771cb0ef41Sopenharmony_ci  V(lang, LANG, 0xEBE4)   /* type = RSY_A LOAD AND AND (64)  */                \
1781cb0ef41Sopenharmony_ci  V(laog, LAOG, 0xEBE6)   /* type = RSY_A LOAD AND OR (64)  */                 \
1791cb0ef41Sopenharmony_ci  V(laxg, LAXG, 0xEBE7)   /* type = RSY_A LOAD AND EXCLUSIVE OR (64)  */       \
1801cb0ef41Sopenharmony_ci  V(laag, LAAG, 0xEBE8)   /* type = RSY_A LOAD AND ADD (64)  */                \
1811cb0ef41Sopenharmony_ci  V(laalg, LAALG, 0xEBEA) /* type = RSY_A LOAD AND ADD LOGICAL (64)  */        \
1821cb0ef41Sopenharmony_ci  V(lan, LAN, 0xEBF4)     /* type = RSY_A LOAD AND AND (32)  */                \
1831cb0ef41Sopenharmony_ci  V(lao, LAO, 0xEBF6)     /* type = RSY_A LOAD AND OR (32)  */                 \
1841cb0ef41Sopenharmony_ci  V(lax, LAX, 0xEBF7)     /* type = RSY_A LOAD AND EXCLUSIVE OR (32)  */       \
1851cb0ef41Sopenharmony_ci  V(laa, LAA, 0xEBF8)     /* type = RSY_A LOAD AND ADD (32)  */                \
1861cb0ef41Sopenharmony_ci  V(laal, LAAL, 0xEBFA)   /* type = RSY_A LOAD AND ADD LOGICAL (32)  */
1871cb0ef41Sopenharmony_ci
1881cb0ef41Sopenharmony_ci#define S390_RSY_B_OPCODE_LIST(V)                                              \
1891cb0ef41Sopenharmony_ci  V(clmh, CLMH,                                                                \
1901cb0ef41Sopenharmony_ci    0xEB20) /* type = RSY_B COMPARE LOGICAL CHAR. UNDER MASK (high)  */        \
1911cb0ef41Sopenharmony_ci  V(clmy, CLMY,                                                                \
1921cb0ef41Sopenharmony_ci    0xEB21) /* type = RSY_B COMPARE LOGICAL CHAR. UNDER MASK (low)  */         \
1931cb0ef41Sopenharmony_ci  V(clt, CLT, 0xEB23)   /* type = RSY_B COMPARE LOGICAL AND TRAP (32)  */      \
1941cb0ef41Sopenharmony_ci  V(clgt, CLGT, 0xEB2B) /* type = RSY_B COMPARE LOGICAL AND TRAP (64)  */      \
1951cb0ef41Sopenharmony_ci  V(stcmh, STCMH,                                                              \
1961cb0ef41Sopenharmony_ci    0xEB2C) /* type = RSY_B STORE CHARACTERS UNDER MASK (high)  */             \
1971cb0ef41Sopenharmony_ci  V(stcmy, STCMY, 0xEB2D) /* type = RSY_B STORE CHARACTERS UNDER MASK (low) */ \
1981cb0ef41Sopenharmony_ci  V(icmh, ICMH, 0xEB80) /* type = RSY_B INSERT CHARACTERS UNDER MASK (high) */ \
1991cb0ef41Sopenharmony_ci  V(icmy, ICMY, 0xEB81) /* type = RSY_B INSERT CHARACTERS UNDER MASK (low)  */ \
2001cb0ef41Sopenharmony_ci  V(locfh, LOCFH, 0xEBE0)   /* type = RSY_B LOAD HIGH ON CONDITION (32)  */    \
2011cb0ef41Sopenharmony_ci  V(stocfh, STOCFH, 0xEBE1) /* type = RSY_B STORE HIGH ON CONDITION  */        \
2021cb0ef41Sopenharmony_ci  V(locg, LOCG, 0xEBE2)     /* type = RSY_B LOAD ON CONDITION (64)  */         \
2031cb0ef41Sopenharmony_ci  V(stocg, STOCG, 0xEBE3)   /* type = RSY_B STORE ON CONDITION (64)  */        \
2041cb0ef41Sopenharmony_ci  V(loc, LOC, 0xEBF2)       /* type = RSY_B LOAD ON CONDITION (32)  */         \
2051cb0ef41Sopenharmony_ci  V(stoc, STOC, 0xEBF3)     /* type = RSY_B STORE ON CONDITION (32)  */
2061cb0ef41Sopenharmony_ci
2071cb0ef41Sopenharmony_ci#define S390_RXE_OPCODE_LIST(V)                                                \
2081cb0ef41Sopenharmony_ci  V(lcbb, LCBB, 0xE727) /* type = RXE   LOAD COUNT TO BLOCK BOUNDARY  */       \
2091cb0ef41Sopenharmony_ci  V(ldeb, LDEB, 0xED04) /* type = RXE   LOAD LENGTHENED (short to long BFP) */ \
2101cb0ef41Sopenharmony_ci  V(lxdb, LXDB,                                                                \
2111cb0ef41Sopenharmony_ci    0xED05) /* type = RXE   LOAD LENGTHENED (long to extended BFP)  */         \
2121cb0ef41Sopenharmony_ci  V(lxeb, LXEB,                                                                \
2131cb0ef41Sopenharmony_ci    0xED06) /* type = RXE   LOAD LENGTHENED (short to extended BFP)  */        \
2141cb0ef41Sopenharmony_ci  V(mxdb, MXDB, 0xED07) /* type = RXE   MULTIPLY (long to extended BFP)  */    \
2151cb0ef41Sopenharmony_ci  V(keb, KEB, 0xED08)   /* type = RXE   COMPARE AND SIGNAL (short BFP)  */     \
2161cb0ef41Sopenharmony_ci  V(ceb, CEB, 0xED09)   /* type = RXE   COMPARE (short BFP)  */                \
2171cb0ef41Sopenharmony_ci  V(aeb, AEB, 0xED0A)   /* type = RXE   ADD (short BFP)  */                    \
2181cb0ef41Sopenharmony_ci  V(seb, SEB, 0xED0B)   /* type = RXE   SUBTRACT (short BFP)  */               \
2191cb0ef41Sopenharmony_ci  V(mdeb, MDEB, 0xED0C) /* type = RXE   MULTIPLY (short to long BFP)  */       \
2201cb0ef41Sopenharmony_ci  V(deb, DEB, 0xED0D)   /* type = RXE   DIVIDE (short BFP)  */                 \
2211cb0ef41Sopenharmony_ci  V(tceb, TCEB, 0xED10) /* type = RXE   TEST DATA CLASS (short BFP)  */        \
2221cb0ef41Sopenharmony_ci  V(tcdb, TCDB, 0xED11) /* type = RXE   TEST DATA CLASS (long BFP)  */         \
2231cb0ef41Sopenharmony_ci  V(tcxb, TCXB, 0xED12) /* type = RXE   TEST DATA CLASS (extended BFP)  */     \
2241cb0ef41Sopenharmony_ci  V(sqeb, SQEB, 0xED14) /* type = RXE   SQUARE ROOT (short BFP)  */            \
2251cb0ef41Sopenharmony_ci  V(sqdb, SQDB, 0xED15) /* type = RXE   SQUARE ROOT (long BFP)  */             \
2261cb0ef41Sopenharmony_ci  V(meeb, MEEB, 0xED17) /* type = RXE   MULTIPLY (short BFP)  */               \
2271cb0ef41Sopenharmony_ci  V(kdb, KDB, 0xED18)   /* type = RXE   COMPARE AND SIGNAL (long BFP)  */      \
2281cb0ef41Sopenharmony_ci  V(cdb, CDB, 0xED19)   /* type = RXE   COMPARE (long BFP)  */                 \
2291cb0ef41Sopenharmony_ci  V(adb, ADB, 0xED1A)   /* type = RXE   ADD (long BFP)  */                     \
2301cb0ef41Sopenharmony_ci  V(sdb, SDB, 0xED1B)   /* type = RXE   SUBTRACT (long BFP)  */                \
2311cb0ef41Sopenharmony_ci  V(mdb, MDB, 0xED1C)   /* type = RXE   MULTIPLY (long BFP)  */                \
2321cb0ef41Sopenharmony_ci  V(ddb, DDB, 0xED1D)   /* type = RXE   DIVIDE (long BFP)  */                  \
2331cb0ef41Sopenharmony_ci  V(lde, LDE, 0xED24) /* type = RXE   LOAD LENGTHENED (short to long HFP)  */  \
2341cb0ef41Sopenharmony_ci  V(lxd, LXD,                                                                  \
2351cb0ef41Sopenharmony_ci    0xED25) /* type = RXE   LOAD LENGTHENED (long to extended HFP)  */         \
2361cb0ef41Sopenharmony_ci  V(lxe, LXE,                                                                  \
2371cb0ef41Sopenharmony_ci    0xED26) /* type = RXE   LOAD LENGTHENED (short to extended HFP)  */        \
2381cb0ef41Sopenharmony_ci  V(sqe, SQE, 0xED34)     /* type = RXE   SQUARE ROOT (short HFP)  */          \
2391cb0ef41Sopenharmony_ci  V(sqd, SQD, 0xED35)     /* type = RXE   SQUARE ROOT (long HFP)  */           \
2401cb0ef41Sopenharmony_ci  V(mee, MEE, 0xED37)     /* type = RXE   MULTIPLY (short HFP)  */             \
2411cb0ef41Sopenharmony_ci  V(tdcet, TDCET, 0xED50) /* type = RXE   TEST DATA CLASS (short DFP)  */      \
2421cb0ef41Sopenharmony_ci  V(tdget, TDGET, 0xED51) /* type = RXE   TEST DATA GROUP (short DFP)  */      \
2431cb0ef41Sopenharmony_ci  V(tdcdt, TDCDT, 0xED54) /* type = RXE   TEST DATA CLASS (long DFP)  */       \
2441cb0ef41Sopenharmony_ci  V(tdgdt, TDGDT, 0xED55) /* type = RXE   TEST DATA GROUP (long DFP)  */       \
2451cb0ef41Sopenharmony_ci  V(tdcxt, TDCXT, 0xED58) /* type = RXE   TEST DATA CLASS (extended DFP)  */   \
2461cb0ef41Sopenharmony_ci  V(tdgxt, TDGXT, 0xED59) /* type = RXE   TEST DATA GROUP (extended DFP)  */
2471cb0ef41Sopenharmony_ci
2481cb0ef41Sopenharmony_ci#define S390_RRF_A_OPCODE_LIST(V)                                           \
2491cb0ef41Sopenharmony_ci  V(ipte, IPTE, 0xB221)     /* type = RRF_A INVALIDATE PAGE TABLE ENTRY  */ \
2501cb0ef41Sopenharmony_ci  V(mdtra, MDTRA, 0xB3D0)   /* type = RRF_A MULTIPLY (long DFP)  */         \
2511cb0ef41Sopenharmony_ci  V(ddtra, DDTRA, 0xB3D1)   /* type = RRF_A DIVIDE (long DFP)  */           \
2521cb0ef41Sopenharmony_ci  V(adtra, ADTRA, 0xB3D2)   /* type = RRF_A ADD (long DFP)  */              \
2531cb0ef41Sopenharmony_ci  V(sdtra, SDTRA, 0xB3D3)   /* type = RRF_A SUBTRACT (long DFP)  */         \
2541cb0ef41Sopenharmony_ci  V(mxtra, MXTRA, 0xB3D8)   /* type = RRF_A MULTIPLY (extended DFP)  */     \
2551cb0ef41Sopenharmony_ci  V(msrkc, MSRKC, 0xB9FD)   /* type = RRF_A MULTIPLY (32)*/                 \
2561cb0ef41Sopenharmony_ci  V(msgrkc, MSGRKC, 0xB9ED) /* type = RRF_A MULTIPLY (64)*/                 \
2571cb0ef41Sopenharmony_ci  V(dxtra, DXTRA, 0xB3D9)   /* type = RRF_A DIVIDE (extended DFP)  */       \
2581cb0ef41Sopenharmony_ci  V(axtra, AXTRA, 0xB3DA)   /* type = RRF_A ADD (extended DFP)  */          \
2591cb0ef41Sopenharmony_ci  V(sxtra, SXTRA, 0xB3DB)   /* type = RRF_A SUBTRACT (extended DFP)  */     \
2601cb0ef41Sopenharmony_ci  V(ahhhr, AHHHR, 0xB9C8)   /* type = RRF_A ADD HIGH (32)  */               \
2611cb0ef41Sopenharmony_ci  V(shhhr, SHHHR, 0xB9C9)   /* type = RRF_A SUBTRACT HIGH (32)  */          \
2621cb0ef41Sopenharmony_ci  V(alhhhr, ALHHHR, 0xB9CA) /* type = RRF_A ADD LOGICAL HIGH (32)  */       \
2631cb0ef41Sopenharmony_ci  V(slhhhr, SLHHHR, 0xB9CB) /* type = RRF_A SUBTRACT LOGICAL HIGH (32)  */  \
2641cb0ef41Sopenharmony_ci  V(ahhlr, AHHLR, 0xB9D8)   /* type = RRF_A ADD HIGH (32)  */               \
2651cb0ef41Sopenharmony_ci  V(shhlr, SHHLR, 0xB9D9)   /* type = RRF_A SUBTRACT HIGH (32)  */          \
2661cb0ef41Sopenharmony_ci  V(alhhlr, ALHHLR, 0xB9DA) /* type = RRF_A ADD LOGICAL HIGH (32)  */       \
2671cb0ef41Sopenharmony_ci  V(slhhlr, SLHHLR, 0xB9DB) /* type = RRF_A SUBTRACT LOGICAL HIGH (32)  */  \
2681cb0ef41Sopenharmony_ci  V(ngrk, NGRK, 0xB9E4)     /* type = RRF_A AND (64)  */                    \
2691cb0ef41Sopenharmony_ci  V(ogrk, OGRK, 0xB9E6)     /* type = RRF_A OR (64)  */                     \
2701cb0ef41Sopenharmony_ci  V(xgrk, XGRK, 0xB9E7)     /* type = RRF_A EXCLUSIVE OR (64)  */           \
2711cb0ef41Sopenharmony_ci  V(agrk, AGRK, 0xB9E8)     /* type = RRF_A ADD (64)  */                    \
2721cb0ef41Sopenharmony_ci  V(sgrk, SGRK, 0xB9E9)     /* type = RRF_A SUBTRACT (64)  */               \
2731cb0ef41Sopenharmony_ci  V(algrk, ALGRK, 0xB9EA)   /* type = RRF_A ADD LOGICAL (64)  */            \
2741cb0ef41Sopenharmony_ci  V(slgrk, SLGRK, 0xB9EB)   /* type = RRF_A SUBTRACT LOGICAL (64)  */       \
2751cb0ef41Sopenharmony_ci  V(nrk, NRK, 0xB9F4)       /* type = RRF_A AND (32)  */                    \
2761cb0ef41Sopenharmony_ci  V(ork, ORK, 0xB9F6)       /* type = RRF_A OR (32)  */                     \
2771cb0ef41Sopenharmony_ci  V(xrk, XRK, 0xB9F7)       /* type = RRF_A EXCLUSIVE OR (32)  */           \
2781cb0ef41Sopenharmony_ci  V(ark, ARK, 0xB9F8)       /* type = RRF_A ADD (32)  */                    \
2791cb0ef41Sopenharmony_ci  V(srk, SRK, 0xB9F9)       /* type = RRF_A SUBTRACT (32)  */               \
2801cb0ef41Sopenharmony_ci  V(alrk, ALRK, 0xB9FA)     /* type = RRF_A ADD LOGICAL (32)  */            \
2811cb0ef41Sopenharmony_ci  V(slrk, SLRK, 0xB9FB)     /* type = RRF_A SUBTRACT LOGICAL (32)  */
2821cb0ef41Sopenharmony_ci
2831cb0ef41Sopenharmony_ci#define S390_RXF_OPCODE_LIST(V)                                                \
2841cb0ef41Sopenharmony_ci  V(maeb, MAEB, 0xED0E) /* type = RXF   MULTIPLY AND ADD (short BFP)  */       \
2851cb0ef41Sopenharmony_ci  V(mseb, MSEB, 0xED0F) /* type = RXF   MULTIPLY AND SUBTRACT (short BFP)  */  \
2861cb0ef41Sopenharmony_ci  V(madb, MADB, 0xED1E) /* type = RXF   MULTIPLY AND ADD (long BFP)  */        \
2871cb0ef41Sopenharmony_ci  V(msdb, MSDB, 0xED1F) /* type = RXF   MULTIPLY AND SUBTRACT (long BFP)  */   \
2881cb0ef41Sopenharmony_ci  V(mae, MAE, 0xED2E)   /* type = RXF   MULTIPLY AND ADD (short HFP)  */       \
2891cb0ef41Sopenharmony_ci  V(mse, MSE, 0xED2F)   /* type = RXF   MULTIPLY AND SUBTRACT (short HFP)  */  \
2901cb0ef41Sopenharmony_ci  V(mayl, MAYL,                                                                \
2911cb0ef41Sopenharmony_ci    0xED38) /* type = RXF   MULTIPLY AND ADD UNNRM. (long to ext. low HFP)  */ \
2921cb0ef41Sopenharmony_ci  V(myl, MYL,                                                                  \
2931cb0ef41Sopenharmony_ci    0xED39) /* type = RXF   MULTIPLY UNNORM. (long to ext. low HFP)  */        \
2941cb0ef41Sopenharmony_ci  V(may, MAY,                                                                  \
2951cb0ef41Sopenharmony_ci    0xED3A) /* type = RXF   MULTIPLY & ADD UNNORMALIZED (long to ext. HFP)  */ \
2961cb0ef41Sopenharmony_ci  V(my, MY,                                                                    \
2971cb0ef41Sopenharmony_ci    0xED3B) /* type = RXF   MULTIPLY UNNORMALIZED (long to ext. HFP)  */       \
2981cb0ef41Sopenharmony_ci  V(mayh, MAYH,                                                                \
2991cb0ef41Sopenharmony_ci    0xED3C) /* type = RXF   MULTIPLY AND ADD UNNRM. (long to ext. high HFP) */ \
3001cb0ef41Sopenharmony_ci  V(myh, MYH,                                                                  \
3011cb0ef41Sopenharmony_ci    0xED3D) /* type = RXF   MULTIPLY UNNORM. (long to ext. high HFP)  */       \
3021cb0ef41Sopenharmony_ci  V(mad, MAD, 0xED3E)   /* type = RXF   MULTIPLY AND ADD (long HFP)  */        \
3031cb0ef41Sopenharmony_ci  V(msd, MSD, 0xED3F)   /* type = RXF   MULTIPLY AND SUBTRACT (long HFP)  */   \
3041cb0ef41Sopenharmony_ci  V(sldt, SLDT, 0xED40) /* type = RXF   SHIFT SIGNIFICAND LEFT (long DFP)  */  \
3051cb0ef41Sopenharmony_ci  V(srdt, SRDT, 0xED41) /* type = RXF   SHIFT SIGNIFICAND RIGHT (long DFP)  */ \
3061cb0ef41Sopenharmony_ci  V(slxt, SLXT,                                                                \
3071cb0ef41Sopenharmony_ci    0xED48) /* type = RXF   SHIFT SIGNIFICAND LEFT (extended DFP)  */          \
3081cb0ef41Sopenharmony_ci  V(srxt, SRXT,                                                                \
3091cb0ef41Sopenharmony_ci    0xED49) /* type = RXF   SHIFT SIGNIFICAND RIGHT (extended DFP)  */
3101cb0ef41Sopenharmony_ci
3111cb0ef41Sopenharmony_ci#define S390_IE_OPCODE_LIST(V) \
3121cb0ef41Sopenharmony_ci  V(niai, NIAI, 0xB2FA) /* type = IE    NEXT INSTRUCTION ACCESS INTENT  */
3131cb0ef41Sopenharmony_ci
3141cb0ef41Sopenharmony_ci#define S390_RRF_B_OPCODE_LIST(V)                                           \
3151cb0ef41Sopenharmony_ci  V(diebr, DIEBR, 0xB353) /* type = RRF_B DIVIDE TO INTEGER (short BFP)  */ \
3161cb0ef41Sopenharmony_ci  V(didbr, DIDBR, 0xB35B) /* type = RRF_B DIVIDE TO INTEGER (long BFP)  */  \
3171cb0ef41Sopenharmony_ci  V(cpsdr, CPSDR, 0xB372) /* type = RRF_B COPY SIGN (long)  */              \
3181cb0ef41Sopenharmony_ci  V(qadtr, QADTR, 0xB3F5) /* type = RRF_B QUANTIZE (long DFP)  */           \
3191cb0ef41Sopenharmony_ci  V(iedtr, IEDTR,                                                           \
3201cb0ef41Sopenharmony_ci    0xB3F6) /* type = RRF_B INSERT BIASED EXPONENT (64 to long DFP)  */     \
3211cb0ef41Sopenharmony_ci  V(rrdtr, RRDTR, 0xB3F7) /* type = RRF_B REROUND (long DFP)  */            \
3221cb0ef41Sopenharmony_ci  V(qaxtr, QAXTR, 0xB3FD) /* type = RRF_B QUANTIZE (extended DFP)  */       \
3231cb0ef41Sopenharmony_ci  V(iextr, IEXTR,                                                           \
3241cb0ef41Sopenharmony_ci    0xB3FE) /* type = RRF_B INSERT BIASED EXPONENT (64 to extended DFP)  */ \
3251cb0ef41Sopenharmony_ci  V(rrxtr, RRXTR, 0xB3FF) /* type = RRF_B REROUND (extended DFP)  */        \
3261cb0ef41Sopenharmony_ci  V(kmctr, KMCTR, 0xB92D) /* type = RRF_B CIPHER MESSAGE WITH COUNTER  */   \
3271cb0ef41Sopenharmony_ci  V(idte, IDTE, 0xB98E)   /* type = RRF_B INVALIDATE DAT TABLE ENTRY  */    \
3281cb0ef41Sopenharmony_ci  V(crdte, CRDTE,                                                           \
3291cb0ef41Sopenharmony_ci    0xB98F) /* type = RRF_B COMPARE AND REPLACE DAT TABLE ENTRY  */         \
3301cb0ef41Sopenharmony_ci  V(lptea, LPTEA, 0xB9AA) /* type = RRF_B LOAD PAGE TABLE ENTRY ADDRESS  */
3311cb0ef41Sopenharmony_ci
3321cb0ef41Sopenharmony_ci#define S390_RRF_C_OPCODE_LIST(V)                                           \
3331cb0ef41Sopenharmony_ci  V(sske, SSKE, 0xB22B)   /* type = RRF_C SET STORAGE KEY EXTENDED  */      \
3341cb0ef41Sopenharmony_ci  V(cu21, CU21, 0xB2A6)   /* type = RRF_C CONVERT UTF-16 TO UTF-8  */       \
3351cb0ef41Sopenharmony_ci  V(cu12, CU12, 0xB2A7)   /* type = RRF_C CONVERT UTF-8 TO UTF-16  */       \
3361cb0ef41Sopenharmony_ci  V(ppa, PPA, 0xB2E8)     /* type = RRF_C PERFORM PROCESSOR ASSIST  */      \
3371cb0ef41Sopenharmony_ci  V(cgrt, CGRT, 0xB960)   /* type = RRF_C COMPARE AND TRAP (64)  */         \
3381cb0ef41Sopenharmony_ci  V(clgrt, CLGRT, 0xB961) /* type = RRF_C COMPARE LOGICAL AND TRAP (64)  */ \
3391cb0ef41Sopenharmony_ci  V(crt, CRT, 0xB972)     /* type = RRF_C COMPARE AND TRAP (32)  */         \
3401cb0ef41Sopenharmony_ci  V(clrt, CLRT, 0xB973)   /* type = RRF_C COMPARE LOGICAL AND TRAP (32)  */ \
3411cb0ef41Sopenharmony_ci  V(trtt, TRTT, 0xB990)   /* type = RRF_C TRANSLATE TWO TO TWO  */          \
3421cb0ef41Sopenharmony_ci  V(trto, TRTO, 0xB991)   /* type = RRF_C TRANSLATE TWO TO ONE  */          \
3431cb0ef41Sopenharmony_ci  V(trot, TROT, 0xB992)   /* type = RRF_C TRANSLATE ONE TO TWO  */          \
3441cb0ef41Sopenharmony_ci  V(troo, TROO, 0xB993)   /* type = RRF_C TRANSLATE ONE TO ONE  */          \
3451cb0ef41Sopenharmony_ci  V(cu14, CU14, 0xB9B0)   /* type = RRF_C CONVERT UTF-8 TO UTF-32  */       \
3461cb0ef41Sopenharmony_ci  V(cu24, CU24, 0xB9B1)   /* type = RRF_C CONVERT UTF-16 TO UTF-32  */      \
3471cb0ef41Sopenharmony_ci  V(trtre, TRTRE,                                                           \
3481cb0ef41Sopenharmony_ci    0xB9BD) /* type = RRF_C TRANSLATE AND TEST REVERSE EXTENDED  */         \
3491cb0ef41Sopenharmony_ci  V(trte, TRTE, 0xB9BF)     /* type = RRF_C TRANSLATE AND TEST EXTENDED  */ \
3501cb0ef41Sopenharmony_ci  V(locfhr, LOCFHR, 0xB9E0) /* type = RRF_C LOAD HIGH ON CONDITION (32)  */ \
3511cb0ef41Sopenharmony_ci  V(locgr, LOCGR, 0xB9E2)   /* type = RRF_C LOAD ON CONDITION (64)  */      \
3521cb0ef41Sopenharmony_ci  V(locr, LOCR, 0xB9F2)     /* type = RRF_C LOAD ON CONDITION (32)  */
3531cb0ef41Sopenharmony_ci
3541cb0ef41Sopenharmony_ci#define S390_MII_OPCODE_LIST(V) \
3551cb0ef41Sopenharmony_ci  V(bprp, BPRP, 0xC5) /* type = MII   BRANCH PREDICTION RELATIVE PRELOAD  */
3561cb0ef41Sopenharmony_ci
3571cb0ef41Sopenharmony_ci#define S390_RRF_D_OPCODE_LIST(V)                                         \
3581cb0ef41Sopenharmony_ci  V(ldetr, LDETR,                                                         \
3591cb0ef41Sopenharmony_ci    0xB3D4) /* type = RRF_D LOAD LENGTHENED (short to long DFP)  */       \
3601cb0ef41Sopenharmony_ci  V(lxdtr, LXDTR,                                                         \
3611cb0ef41Sopenharmony_ci    0xB3DC) /* type = RRF_D LOAD LENGTHENED (long to extended DFP)  */    \
3621cb0ef41Sopenharmony_ci  V(csdtr, CSDTR,                                                         \
3631cb0ef41Sopenharmony_ci    0xB3E3) /* type = RRF_D CONVERT TO SIGNED PACKED (long DFP to 64)  */ \
3641cb0ef41Sopenharmony_ci  V(csxtr, CSXTR,                                                         \
3651cb0ef41Sopenharmony_ci    0xB3EB) /* type = RRF_D CONVERT TO SIGNED PACKED (extended DFP to 128)  */
3661cb0ef41Sopenharmony_ci
3671cb0ef41Sopenharmony_ci#define S390_RRF_E_OPCODE_LIST(V)                                              \
3681cb0ef41Sopenharmony_ci  V(ledbra, LEDBRA,                                                            \
3691cb0ef41Sopenharmony_ci    0xB344) /* type = RRF_E LOAD ROUNDED (long to short BFP)  */               \
3701cb0ef41Sopenharmony_ci  V(ldxbra, LDXBRA,                                                            \
3711cb0ef41Sopenharmony_ci    0xB345) /* type = RRF_E LOAD ROUNDED (extended to long BFP)  */            \
3721cb0ef41Sopenharmony_ci  V(lexbra, LEXBRA,                                                            \
3731cb0ef41Sopenharmony_ci    0xB346) /* type = RRF_E LOAD ROUNDED (extended to short BFP)  */           \
3741cb0ef41Sopenharmony_ci  V(fixbra, FIXBRA, 0xB347) /* type = RRF_E LOAD FP INTEGER (extended BFP)  */ \
3751cb0ef41Sopenharmony_ci  V(tbedr, TBEDR,                                                              \
3761cb0ef41Sopenharmony_ci    0xB350)             /* type = RRF_E CONVERT HFP TO BFP (long to short)  */ \
3771cb0ef41Sopenharmony_ci  V(tbdr, TBDR, 0xB351) /* type = RRF_E CONVERT HFP TO BFP (long)  */          \
3781cb0ef41Sopenharmony_ci  V(fiebra, FIEBRA, 0xB357) /* type = RRF_E LOAD FP INTEGER (short BFP)  */    \
3791cb0ef41Sopenharmony_ci  V(fidbra, FIDBRA, 0xB35F) /* type = RRF_E LOAD FP INTEGER (long BFP)  */     \
3801cb0ef41Sopenharmony_ci  V(celfbr, CELFBR,                                                            \
3811cb0ef41Sopenharmony_ci    0xB390) /* type = RRF_E CONVERT FROM LOGICAL (32 to short BFP)  */         \
3821cb0ef41Sopenharmony_ci  V(cdlfbr, CDLFBR,                                                            \
3831cb0ef41Sopenharmony_ci    0xB391) /* type = RRF_E CONVERT FROM LOGICAL (32 to long BFP)  */          \
3841cb0ef41Sopenharmony_ci  V(cxlfbr, CXLFBR,                                                            \
3851cb0ef41Sopenharmony_ci    0xB392) /* type = RRF_E CONVERT FROM LOGICAL (32 to extended BFP)  */      \
3861cb0ef41Sopenharmony_ci  V(cefbra, CEFBRA,                                                            \
3871cb0ef41Sopenharmony_ci    0xB394) /* type = RRF_E CONVERT FROM FIXED (32 to short BFP)  */           \
3881cb0ef41Sopenharmony_ci  V(cdfbra, CDFBRA,                                                            \
3891cb0ef41Sopenharmony_ci    0xB395) /* type = RRF_E CONVERT FROM FIXED (32 to long BFP)  */            \
3901cb0ef41Sopenharmony_ci  V(cxfbra, CXFBRA,                                                            \
3911cb0ef41Sopenharmony_ci    0xB396) /* type = RRF_E CONVERT FROM FIXED (32 to extended BFP)  */        \
3921cb0ef41Sopenharmony_ci  V(cfebra, CFEBRA,                                                            \
3931cb0ef41Sopenharmony_ci    0xB398) /* type = RRF_E CONVERT TO FIXED (short BFP to 32)  */             \
3941cb0ef41Sopenharmony_ci  V(cfdbra, CFDBRA,                                                            \
3951cb0ef41Sopenharmony_ci    0xB399) /* type = RRF_E CONVERT TO FIXED (long BFP to 32)  */              \
3961cb0ef41Sopenharmony_ci  V(cfxbra, CFXBRA,                                                            \
3971cb0ef41Sopenharmony_ci    0xB39A) /* type = RRF_E CONVERT TO FIXED (extended BFP to 32)  */          \
3981cb0ef41Sopenharmony_ci  V(clfebr, CLFEBR,                                                            \
3991cb0ef41Sopenharmony_ci    0xB39C) /* type = RRF_E CONVERT TO LOGICAL (short BFP to 32)  */           \
4001cb0ef41Sopenharmony_ci  V(clfdbr, CLFDBR,                                                            \
4011cb0ef41Sopenharmony_ci    0xB39D) /* type = RRF_E CONVERT TO LOGICAL (long BFP to 32)  */            \
4021cb0ef41Sopenharmony_ci  V(clfxbr, CLFXBR,                                                            \
4031cb0ef41Sopenharmony_ci    0xB39E) /* type = RRF_E CONVERT TO LOGICAL (extended BFP to 32)  */        \
4041cb0ef41Sopenharmony_ci  V(celgbr, CELGBR,                                                            \
4051cb0ef41Sopenharmony_ci    0xB3A0) /* type = RRF_E CONVERT FROM LOGICAL (64 to short BFP)  */         \
4061cb0ef41Sopenharmony_ci  V(cdlgbr, CDLGBR,                                                            \
4071cb0ef41Sopenharmony_ci    0xB3A1) /* type = RRF_E CONVERT FROM LOGICAL (64 to long BFP)  */          \
4081cb0ef41Sopenharmony_ci  V(cxlgbr, CXLGBR,                                                            \
4091cb0ef41Sopenharmony_ci    0xB3A2) /* type = RRF_E CONVERT FROM LOGICAL (64 to extended BFP)  */      \
4101cb0ef41Sopenharmony_ci  V(cegbra, CEGBRA,                                                            \
4111cb0ef41Sopenharmony_ci    0xB3A4) /* type = RRF_E CONVERT FROM FIXED (64 to short BFP)  */           \
4121cb0ef41Sopenharmony_ci  V(cdgbra, CDGBRA,                                                            \
4131cb0ef41Sopenharmony_ci    0xB3A5) /* type = RRF_E CONVERT FROM FIXED (64 to long BFP)  */            \
4141cb0ef41Sopenharmony_ci  V(cxgbra, CXGBRA,                                                            \
4151cb0ef41Sopenharmony_ci    0xB3A6) /* type = RRF_E CONVERT FROM FIXED (64 to extended BFP)  */        \
4161cb0ef41Sopenharmony_ci  V(cgebra, CGEBRA,                                                            \
4171cb0ef41Sopenharmony_ci    0xB3A8) /* type = RRF_E CONVERT TO FIXED (short BFP to 64)  */             \
4181cb0ef41Sopenharmony_ci  V(cgdbra, CGDBRA,                                                            \
4191cb0ef41Sopenharmony_ci    0xB3A9) /* type = RRF_E CONVERT TO FIXED (long BFP to 64)  */              \
4201cb0ef41Sopenharmony_ci  V(cgxbra, CGXBRA,                                                            \
4211cb0ef41Sopenharmony_ci    0xB3AA) /* type = RRF_E CONVERT TO FIXED (extended BFP to 64)  */          \
4221cb0ef41Sopenharmony_ci  V(clgebr, CLGEBR,                                                            \
4231cb0ef41Sopenharmony_ci    0xB3AC) /* type = RRF_E CONVERT TO LOGICAL (short BFP to 64)  */           \
4241cb0ef41Sopenharmony_ci  V(clgdbr, CLGDBR,                                                            \
4251cb0ef41Sopenharmony_ci    0xB3AD) /* type = RRF_E CONVERT TO LOGICAL (long BFP to 64)  */            \
4261cb0ef41Sopenharmony_ci  V(clgxbr, CLGXBR,                                                            \
4271cb0ef41Sopenharmony_ci    0xB3AE) /* type = RRF_E CONVERT TO LOGICAL (extended BFP to 64)  */        \
4281cb0ef41Sopenharmony_ci  V(cfer, CFER, 0xB3B8) /* type = RRF_E CONVERT TO FIXED (short HFP to 32)  */ \
4291cb0ef41Sopenharmony_ci  V(cfdr, CFDR, 0xB3B9) /* type = RRF_E CONVERT TO FIXED (long HFP to 32)  */  \
4301cb0ef41Sopenharmony_ci  V(cfxr, CFXR,                                                                \
4311cb0ef41Sopenharmony_ci    0xB3BA) /* type = RRF_E CONVERT TO FIXED (extended HFP to 32)  */          \
4321cb0ef41Sopenharmony_ci  V(cger, CGER, 0xB3C8) /* type = RRF_E CONVERT TO FIXED (short HFP to 64)  */ \
4331cb0ef41Sopenharmony_ci  V(cgdr, CGDR, 0xB3C9) /* type = RRF_E CONVERT TO FIXED (long HFP to 64)  */  \
4341cb0ef41Sopenharmony_ci  V(cgxr, CGXR,                                                                \
4351cb0ef41Sopenharmony_ci    0xB3CA) /* type = RRF_E CONVERT TO FIXED (extended HFP to 64)  */          \
4361cb0ef41Sopenharmony_ci  V(ledtr, LEDTR, 0xB3D5) /* type = RRF_E LOAD ROUNDED (long to short DFP)  */ \
4371cb0ef41Sopenharmony_ci  V(fidtr, FIDTR, 0xB3D7) /* type = RRF_E LOAD FP INTEGER (long DFP)  */       \
4381cb0ef41Sopenharmony_ci  V(ldxtr, LDXTR,                                                              \
4391cb0ef41Sopenharmony_ci    0xB3DD) /* type = RRF_E LOAD ROUNDED (extended to long DFP)  */            \
4401cb0ef41Sopenharmony_ci  V(fixtr, FIXTR, 0xB3DF) /* type = RRF_E LOAD FP INTEGER (extended DFP)  */   \
4411cb0ef41Sopenharmony_ci  V(cgdtra, CGDTRA,                                                            \
4421cb0ef41Sopenharmony_ci    0xB3E1) /* type = RRF_E CONVERT TO FIXED (long DFP to 64)  */              \
4431cb0ef41Sopenharmony_ci  V(cgxtra, CGXTRA,                                                            \
4441cb0ef41Sopenharmony_ci    0xB3E9) /* type = RRF_E CONVERT TO FIXED (extended DFP to 64)  */          \
4451cb0ef41Sopenharmony_ci  V(cdgtra, CDGTRA,                                                            \
4461cb0ef41Sopenharmony_ci    0xB3F1) /* type = RRF_E CONVERT FROM FIXED (64 to long DFP)  */            \
4471cb0ef41Sopenharmony_ci  V(cxgtra, CXGTRA,                                                            \
4481cb0ef41Sopenharmony_ci    0xB3F9) /* type = RRF_E CONVERT FROM FIXED (64 to extended DFP)  */        \
4491cb0ef41Sopenharmony_ci  V(cfdtr, CFDTR, 0xB941) /* type = RRF_E CONVERT TO FIXED (long DFP to 32) */ \
4501cb0ef41Sopenharmony_ci  V(clgdtr, CLGDTR,                                                            \
4511cb0ef41Sopenharmony_ci    0xB942) /* type = RRF_E CONVERT TO LOGICAL (long DFP to 64)  */            \
4521cb0ef41Sopenharmony_ci  V(clfdtr, CLFDTR,                                                            \
4531cb0ef41Sopenharmony_ci    0xB943) /* type = RRF_E CONVERT TO LOGICAL (long DFP to 32)  */            \
4541cb0ef41Sopenharmony_ci  V(cfxtr, CFXTR,                                                              \
4551cb0ef41Sopenharmony_ci    0xB949) /* type = RRF_E CONVERT TO FIXED (extended DFP to 32)  */          \
4561cb0ef41Sopenharmony_ci  V(clgxtr, CLGXTR,                                                            \
4571cb0ef41Sopenharmony_ci    0xB94A) /* type = RRF_E CONVERT TO LOGICAL (extended DFP to 64)  */        \
4581cb0ef41Sopenharmony_ci  V(clfxtr, CLFXTR,                                                            \
4591cb0ef41Sopenharmony_ci    0xB94B) /* type = RRF_E CONVERT TO LOGICAL (extended DFP to 32)  */        \
4601cb0ef41Sopenharmony_ci  V(cdlgtr, CDLGTR,                                                            \
4611cb0ef41Sopenharmony_ci    0xB952) /* type = RRF_E CONVERT FROM LOGICAL (64 to long DFP)  */          \
4621cb0ef41Sopenharmony_ci  V(cdlftr, CDLFTR,                                                            \
4631cb0ef41Sopenharmony_ci    0xB953) /* type = RRF_E CONVERT FROM LOGICAL (32 to long DFP)  */          \
4641cb0ef41Sopenharmony_ci  V(cxlgtr, CXLGTR,                                                            \
4651cb0ef41Sopenharmony_ci    0xB95A) /* type = RRF_E CONVERT FROM LOGICAL (64 to extended DFP)  */      \
4661cb0ef41Sopenharmony_ci  V(cxlftr, CXLFTR,                                                            \
4671cb0ef41Sopenharmony_ci    0xB95B) /* type = RRF_E CONVERT FROM LOGICAL (32 to extended DFP)  */
4681cb0ef41Sopenharmony_ci
4691cb0ef41Sopenharmony_ci#define S390_VRR_A_OPCODE_LIST(V)                                              \
4701cb0ef41Sopenharmony_ci  V(vpopct, VPOPCT, 0xE750) /* type = VRR_A VECTOR POPULATION COUNT  */        \
4711cb0ef41Sopenharmony_ci  V(vctz, VCTZ, 0xE752)     /* type = VRR_A VECTOR COUNT TRAILING ZEROS  */    \
4721cb0ef41Sopenharmony_ci  V(vclz, VCLZ, 0xE753)     /* type = VRR_A VECTOR COUNT LEADING ZEROS  */     \
4731cb0ef41Sopenharmony_ci  V(vlr, VLR, 0xE756)       /* type = VRR_A VECTOR LOAD  */                    \
4741cb0ef41Sopenharmony_ci  V(vistr, VISTR, 0xE75C)   /* type = VRR_A VECTOR ISOLATE STRING  */          \
4751cb0ef41Sopenharmony_ci  V(vseg, VSEG, 0xE75F) /* type = VRR_A VECTOR SIGN EXTEND TO DOUBLEWORD  */   \
4761cb0ef41Sopenharmony_ci  V(vclgd, VCLGD,                                                              \
4771cb0ef41Sopenharmony_ci    0xE7C0) /* type = VRR_A VECTOR FP CONVERT TO LOGICAL 64-BIT  */            \
4781cb0ef41Sopenharmony_ci  V(vcdlg, VCDLG,                                                              \
4791cb0ef41Sopenharmony_ci    0xE7C1) /* type = VRR_A VECTOR FP CONVERT FROM LOGICAL 64-BIT  */          \
4801cb0ef41Sopenharmony_ci  V(vcgd, VCGD, 0xE7C2) /* type = VRR_A VECTOR FP CONVERT TO FIXED 64-BIT  */  \
4811cb0ef41Sopenharmony_ci  V(vcdg, VCDG, 0xE7C3) /* type = VRR_A VECTOR FP CONVERT FROM FIXED 64-BIT */ \
4821cb0ef41Sopenharmony_ci  V(vlde, VLDE, 0xE7C4) /* type = VRR_A VECTOR FP LOAD LENGTHENED  */          \
4831cb0ef41Sopenharmony_ci  V(vled, VLED, 0xE7C5) /* type = VRR_A VECTOR FP LOAD ROUNDED  */             \
4841cb0ef41Sopenharmony_ci  V(vfi, VFI, 0xE7C7)   /* type = VRR_A VECTOR LOAD FP INTEGER  */             \
4851cb0ef41Sopenharmony_ci  V(wfk, WFK, 0xE7CA) /* type = VRR_A VECTOR FP COMPARE AND SIGNAL SCALAR  */  \
4861cb0ef41Sopenharmony_ci  V(wfc, WFC, 0xE7CB) /* type = VRR_A VECTOR FP COMPARE SCALAR  */             \
4871cb0ef41Sopenharmony_ci  V(vfpso, VFPSO, 0xE7CC) /* type = VRR_A VECTOR FP PERFORM SIGN OPERATION  */ \
4881cb0ef41Sopenharmony_ci  V(vfsq, VFSQ, 0xE7CE)   /* type = VRR_A VECTOR FP SQUARE ROOT  */            \
4891cb0ef41Sopenharmony_ci  V(vupll, VUPLL, 0xE7D4) /* type = VRR_A VECTOR UNPACK LOGICAL LOW  */        \
4901cb0ef41Sopenharmony_ci  V(vuplh, VUPLH, 0xE7D5) /* type = VRR_A VECTOR UNPACK LOGICAL HIGH  */       \
4911cb0ef41Sopenharmony_ci  V(vupl, VUPL, 0xE7D6)   /* type = VRR_A VECTOR UNPACK LOW  */                \
4921cb0ef41Sopenharmony_ci  V(vuph, VUPH, 0xE7D7)   /* type = VRR_A VECTOR UNPACK HIGH  */               \
4931cb0ef41Sopenharmony_ci  V(vtm, VTM, 0xE7D8)     /* type = VRR_A VECTOR TEST UNDER MASK  */           \
4941cb0ef41Sopenharmony_ci  V(vecl, VECL, 0xE7D9)   /* type = VRR_A VECTOR ELEMENT COMPARE LOGICAL  */   \
4951cb0ef41Sopenharmony_ci  V(vec, VEC, 0xE7DB)     /* type = VRR_A VECTOR ELEMENT COMPARE  */           \
4961cb0ef41Sopenharmony_ci  V(vlc, VLC, 0xE7DE)     /* type = VRR_A VECTOR LOAD COMPLEMENT  */           \
4971cb0ef41Sopenharmony_ci  V(vlp, VLP, 0xE7DF)     /* type = VRR_A VECTOR LOAD POSITIVE  */
4981cb0ef41Sopenharmony_ci
4991cb0ef41Sopenharmony_ci#define S390_VRR_B_OPCODE_LIST(V)                                           \
5001cb0ef41Sopenharmony_ci  V(vfee, VFEE, 0xE780)   /* type = VRR_B VECTOR FIND ELEMENT EQUAL  */     \
5011cb0ef41Sopenharmony_ci  V(vfene, VFENE, 0xE781) /* type = VRR_B VECTOR FIND ELEMENT NOT EQUAL  */ \
5021cb0ef41Sopenharmony_ci  V(vfae, VFAE, 0xE782)   /* type = VRR_B VECTOR FIND ANY ELEMENT EQUAL  */ \
5031cb0ef41Sopenharmony_ci  V(vpkls, VPKLS, 0xE795) /* type = VRR_B VECTOR PACK LOGICAL SATURATE  */  \
5041cb0ef41Sopenharmony_ci  V(vpks, VPKS, 0xE797)   /* type = VRR_B VECTOR PACK SATURATE  */          \
5051cb0ef41Sopenharmony_ci  V(vceq, VCEQ, 0xE7F8)   /* type = VRR_B VECTOR COMPARE EQUAL  */          \
5061cb0ef41Sopenharmony_ci  V(vchl, VCHL, 0xE7F9)   /* type = VRR_B VECTOR COMPARE HIGH LOGICAL  */   \
5071cb0ef41Sopenharmony_ci  V(vch, VCH, 0xE7FB)     /* type = VRR_B VECTOR COMPARE HIGH  */
5081cb0ef41Sopenharmony_ci
5091cb0ef41Sopenharmony_ci#define S390_VRR_C_OPCODE_LIST(V)                                              \
5101cb0ef41Sopenharmony_ci  V(vmrl, VMRL, 0xE760)   /* type = VRR_C VECTOR MERGE LOW  */                 \
5111cb0ef41Sopenharmony_ci  V(vmrh, VMRH, 0xE761)   /* type = VRR_C VECTOR MERGE HIGH  */                \
5121cb0ef41Sopenharmony_ci  V(vsum, VSUM, 0xE764)   /* type = VRR_C VECTOR SUM ACROSS WORD  */           \
5131cb0ef41Sopenharmony_ci  V(vsumg, VSUMG, 0xE765) /* type = VRR_C VECTOR SUM ACROSS DOUBLEWORD  */     \
5141cb0ef41Sopenharmony_ci  V(vcksm, VCKSM, 0xE766) /* type = VRR_C VECTOR CHECKSUM  */                  \
5151cb0ef41Sopenharmony_ci  V(vsumq, VSUMQ, 0xE767) /* type = VRR_C VECTOR SUM ACROSS QUADWORD  */       \
5161cb0ef41Sopenharmony_ci  V(vn, VN, 0xE768)       /* type = VRR_C VECTOR AND  */                       \
5171cb0ef41Sopenharmony_ci  V(vnc, VNC, 0xE769)     /* type = VRR_C VECTOR AND WITH COMPLEMENT  */       \
5181cb0ef41Sopenharmony_ci  V(vo, VO, 0xE76A)       /* type = VRR_C VECTOR OR  */                        \
5191cb0ef41Sopenharmony_ci  V(vno, VNO, 0xE76B)     /* type = VRR_C VECTOR NOR  */                       \
5201cb0ef41Sopenharmony_ci  V(vx, VX, 0xE76D)       /* type = VRR_C VECTOR EXCLUSIVE OR  */              \
5211cb0ef41Sopenharmony_ci  V(veslv, VESLV, 0xE770) /* type = VRR_C VECTOR ELEMENT SHIFT LEFT  */        \
5221cb0ef41Sopenharmony_ci  V(verllv, VERLLV,                                                            \
5231cb0ef41Sopenharmony_ci    0xE773)             /* type = VRR_C VECTOR ELEMENT ROTATE LEFT LOGICAL  */ \
5241cb0ef41Sopenharmony_ci  V(vsl, VSL, 0xE774)   /* type = VRR_C VECTOR SHIFT LEFT  */                  \
5251cb0ef41Sopenharmony_ci  V(vslb, VSLB, 0xE775) /* type = VRR_C VECTOR SHIFT LEFT BY BYTE  */          \
5261cb0ef41Sopenharmony_ci  V(vesrlv, VESRLV,                                                            \
5271cb0ef41Sopenharmony_ci    0xE778) /* type = VRR_C VECTOR ELEMENT SHIFT RIGHT LOGICAL  */             \
5281cb0ef41Sopenharmony_ci  V(vesrav, VESRAV,                                                            \
5291cb0ef41Sopenharmony_ci    0xE77A) /* type = VRR_C VECTOR ELEMENT SHIFT RIGHT ARITHMETIC  */          \
5301cb0ef41Sopenharmony_ci  V(vsrl, VSRL, 0xE77C) /* type = VRR_C VECTOR SHIFT RIGHT LOGICAL  */         \
5311cb0ef41Sopenharmony_ci  V(vsrlb, VSRLB,                                                              \
5321cb0ef41Sopenharmony_ci    0xE77D)             /* type = VRR_C VECTOR SHIFT RIGHT LOGICAL BY BYTE  */ \
5331cb0ef41Sopenharmony_ci  V(vsra, VSRA, 0xE77E) /* type = VRR_C VECTOR SHIFT RIGHT ARITHMETIC  */      \
5341cb0ef41Sopenharmony_ci  V(vsrab, VSRAB,                                                              \
5351cb0ef41Sopenharmony_ci    0xE77F) /* type = VRR_C VECTOR SHIFT RIGHT ARITHMETIC BY BYTE  */          \
5361cb0ef41Sopenharmony_ci  V(vpdi, VPDI, 0xE784) /* type = VRR_C VECTOR PERMUTE DOUBLEWORD IMMEDIATE */ \
5371cb0ef41Sopenharmony_ci  V(vpk, VPK, 0xE794)   /* type = VRR_C VECTOR PACK  */                        \
5381cb0ef41Sopenharmony_ci  V(vmlh, VMLH, 0xE7A1) /* type = VRR_C VECTOR MULTIPLY LOGICAL HIGH  */       \
5391cb0ef41Sopenharmony_ci  V(vml, VML, 0xE7A2)   /* type = VRR_C VECTOR MULTIPLY LOW  */                \
5401cb0ef41Sopenharmony_ci  V(vmh, VMH, 0xE7A3)   /* type = VRR_C VECTOR MULTIPLY HIGH  */               \
5411cb0ef41Sopenharmony_ci  V(vmle, VMLE, 0xE7A4) /* type = VRR_C VECTOR MULTIPLY LOGICAL EVEN  */       \
5421cb0ef41Sopenharmony_ci  V(vmlo, VMLO, 0xE7A5) /* type = VRR_C VECTOR MULTIPLY LOGICAL ODD  */        \
5431cb0ef41Sopenharmony_ci  V(vme, VME, 0xE7A6)   /* type = VRR_C VECTOR MULTIPLY EVEN  */               \
5441cb0ef41Sopenharmony_ci  V(vmo, VMO, 0xE7A7)   /* type = VRR_C VECTOR MULTIPLY ODD  */                \
5451cb0ef41Sopenharmony_ci  V(vgfm, VGFM, 0xE7B4) /* type = VRR_C VECTOR GALOIS FIELD MULTIPLY SUM  */   \
5461cb0ef41Sopenharmony_ci  V(vfs, VFS, 0xE7E2)   /* type = VRR_C VECTOR FP SUBTRACT  */                 \
5471cb0ef41Sopenharmony_ci  V(vfa, VFA, 0xE7E3)   /* type = VRR_C VECTOR FP ADD  */                      \
5481cb0ef41Sopenharmony_ci  V(vfd, VFD, 0xE7E5)   /* type = VRR_C VECTOR FP DIVIDE  */                   \
5491cb0ef41Sopenharmony_ci  V(vfm, VFM, 0xE7E7)   /* type = VRR_C VECTOR FP MULTIPLY  */                 \
5501cb0ef41Sopenharmony_ci  V(vfce, VFCE, 0xE7E8) /* type = VRR_C VECTOR FP COMPARE EQUAL  */            \
5511cb0ef41Sopenharmony_ci  V(vfche, VFCHE, 0xE7EA) /* type = VRR_C VECTOR FP COMPARE HIGH OR EQUAL  */  \
5521cb0ef41Sopenharmony_ci  V(vfch, VFCH, 0xE7EB)   /* type = VRR_C VECTOR FP COMPARE HIGH  */           \
5531cb0ef41Sopenharmony_ci  V(vfmax, VFMAX, 0xE7EF) /* type = VRR_C VECTOR FP MAXIMUM */                 \
5541cb0ef41Sopenharmony_ci  V(vfmin, VFMIN, 0xE7EE) /* type = VRR_C VECTOR FP MINIMUM */                 \
5551cb0ef41Sopenharmony_ci  V(vavgl, VAVGL, 0xE7F0) /* type = VRR_C VECTOR AVERAGE LOGICAL  */           \
5561cb0ef41Sopenharmony_ci  V(vacc, VACC, 0xE7F1)   /* type = VRR_C VECTOR ADD COMPUTE CARRY  */         \
5571cb0ef41Sopenharmony_ci  V(vavg, VAVG, 0xE7F2)   /* type = VRR_C VECTOR AVERAGE  */                   \
5581cb0ef41Sopenharmony_ci  V(va, VA, 0xE7F3)       /* type = VRR_C VECTOR ADD  */                       \
5591cb0ef41Sopenharmony_ci  V(vscbi, VSCBI,                                                              \
5601cb0ef41Sopenharmony_ci    0xE7F5) /* type = VRR_C VECTOR SUBTRACT COMPUTE BORROW INDICATION  */      \
5611cb0ef41Sopenharmony_ci  V(vs, VS, 0xE7F7)         /* type = VRR_C VECTOR SUBTRACT  */                \
5621cb0ef41Sopenharmony_ci  V(vmnl, VMNL, 0xE7FC)     /* type = VRR_C VECTOR MINIMUM LOGICAL  */         \
5631cb0ef41Sopenharmony_ci  V(vmxl, VMXL, 0xE7FD)     /* type = VRR_C VECTOR MAXIMUM LOGICAL  */         \
5641cb0ef41Sopenharmony_ci  V(vmn, VMN, 0xE7FE)       /* type = VRR_C VECTOR MINIMUM  */                 \
5651cb0ef41Sopenharmony_ci  V(vmx, VMX, 0xE7FF)       /* type = VRR_C VECTOR MAXIMUM  */                 \
5661cb0ef41Sopenharmony_ci  V(vbperm, VBPERM, 0xE785) /* type = VRR_C VECTOR BIT PERMUTE  */
5671cb0ef41Sopenharmony_ci
5681cb0ef41Sopenharmony_ci#define S390_VRI_A_OPCODE_LIST(V)                                              \
5691cb0ef41Sopenharmony_ci  V(vleib, VLEIB, 0xE740) /* type = VRI_A VECTOR LOAD ELEMENT IMMEDIATE (8) */ \
5701cb0ef41Sopenharmony_ci  V(vleih, VLEIH,                                                              \
5711cb0ef41Sopenharmony_ci    0xE741) /* type = VRI_A VECTOR LOAD ELEMENT IMMEDIATE (16)  */             \
5721cb0ef41Sopenharmony_ci  V(vleig, VLEIG,                                                              \
5731cb0ef41Sopenharmony_ci    0xE742) /* type = VRI_A VECTOR LOAD ELEMENT IMMEDIATE (64)  */             \
5741cb0ef41Sopenharmony_ci  V(vleif, VLEIF,                                                              \
5751cb0ef41Sopenharmony_ci    0xE743)             /* type = VRI_A VECTOR LOAD ELEMENT IMMEDIATE (32)  */ \
5761cb0ef41Sopenharmony_ci  V(vgbm, VGBM, 0xE744) /* type = VRI_A VECTOR GENERATE BYTE MASK  */          \
5771cb0ef41Sopenharmony_ci  V(vrepi, VREPI, 0xE745) /* type = VRI_A VECTOR REPLICATE IMMEDIATE  */
5781cb0ef41Sopenharmony_ci
5791cb0ef41Sopenharmony_ci#define S390_VRR_D_OPCODE_LIST(V)                                              \
5801cb0ef41Sopenharmony_ci  V(vstrc, VSTRC, 0xE78A) /* type = VRR_D VECTOR STRING RANGE COMPARE  */      \
5811cb0ef41Sopenharmony_ci  V(vmalh, VMALH,                                                              \
5821cb0ef41Sopenharmony_ci    0xE7A9) /* type = VRR_D VECTOR MULTIPLY AND ADD LOGICAL HIGH  */           \
5831cb0ef41Sopenharmony_ci  V(vmal, VMAL, 0xE7AA) /* type = VRR_D VECTOR MULTIPLY AND ADD LOW  */        \
5841cb0ef41Sopenharmony_ci  V(vmah, VMAH, 0xE7AB) /* type = VRR_D VECTOR MULTIPLY AND ADD HIGH  */       \
5851cb0ef41Sopenharmony_ci  V(vmale, VMALE,                                                              \
5861cb0ef41Sopenharmony_ci    0xE7AC) /* type = VRR_D VECTOR MULTIPLY AND ADD LOGICAL EVEN  */           \
5871cb0ef41Sopenharmony_ci  V(vmalo, VMALO,                                                              \
5881cb0ef41Sopenharmony_ci    0xE7AD) /* type = VRR_D VECTOR MULTIPLY AND ADD LOGICAL ODD  */            \
5891cb0ef41Sopenharmony_ci  V(vmae, VMAE, 0xE7AE) /* type = VRR_D VECTOR MULTIPLY AND ADD EVEN  */       \
5901cb0ef41Sopenharmony_ci  V(vmao, VMAO, 0xE7AF) /* type = VRR_D VECTOR MULTIPLY AND ADD ODD  */        \
5911cb0ef41Sopenharmony_ci  V(vaccc, VACCC,                                                              \
5921cb0ef41Sopenharmony_ci    0xE7B9)           /* type = VRR_D VECTOR ADD WITH CARRY COMPUTE CARRY  */  \
5931cb0ef41Sopenharmony_ci  V(vac, VAC, 0xE7BB) /* type = VRR_D VECTOR ADD WITH CARRY  */                \
5941cb0ef41Sopenharmony_ci  V(vgfma, VGFMA,                                                              \
5951cb0ef41Sopenharmony_ci    0xE7BC) /* type = VRR_D VECTOR GALOIS FIELD MULTIPLY SUM AND ACCUMULATE */ \
5961cb0ef41Sopenharmony_ci  V(vsbcbi, VSBCBI, 0xE7BD) /* type = VRR_D VECTOR SUBTRACT WITH BORROW     */ \
5971cb0ef41Sopenharmony_ci                            /* COMPUTE BORROW INDICATION  */                   \
5981cb0ef41Sopenharmony_ci  V(vsbi, VSBI,                                                                \
5991cb0ef41Sopenharmony_ci    0xE7BF) /* type = VRR_D VECTOR SUBTRACT WITH BORROW INDICATION  */
6001cb0ef41Sopenharmony_ci
6011cb0ef41Sopenharmony_ci#define S390_VRI_B_OPCODE_LIST(V) \
6021cb0ef41Sopenharmony_ci  V(vgm, VGM, 0xE746) /* type = VRI_B VECTOR GENERATE MASK  */
6031cb0ef41Sopenharmony_ci
6041cb0ef41Sopenharmony_ci#define S390_VRR_E_OPCODE_LIST(V)                                             \
6051cb0ef41Sopenharmony_ci  V(vperm, VPERM, 0xE78C) /* type = VRR_E VECTOR PERMUTE  */                  \
6061cb0ef41Sopenharmony_ci  V(vsel, VSEL, 0xE78D)   /* type = VRR_E VECTOR SELECT  */                   \
6071cb0ef41Sopenharmony_ci  V(vfms, VFMS, 0xE78E)   /* type = VRR_E VECTOR FP MULTIPLY AND SUBTRACT  */ \
6081cb0ef41Sopenharmony_ci  V(vfnms, VFNMS,                                                             \
6091cb0ef41Sopenharmony_ci    0xE79E) /* type = VRR_E VECTOR FP NEGATIVE MULTIPLY AND SUBTRACT  */      \
6101cb0ef41Sopenharmony_ci  V(vfma, VFMA, 0xE78F) /* type = VRR_E VECTOR FP MULTIPLY AND ADD  */
6111cb0ef41Sopenharmony_ci
6121cb0ef41Sopenharmony_ci#define S390_VRI_C_OPCODE_LIST(V) \
6131cb0ef41Sopenharmony_ci  V(vrep, VREP, 0xE74D) /* type = VRI_C VECTOR REPLICATE  */
6141cb0ef41Sopenharmony_ci
6151cb0ef41Sopenharmony_ci#define S390_VRI_D_OPCODE_LIST(V)                                           \
6161cb0ef41Sopenharmony_ci  V(verim, VERIM,                                                           \
6171cb0ef41Sopenharmony_ci    0xE772) /* type = VRI_D VECTOR ELEMENT ROTATE AND INSERT UNDER MASK  */ \
6181cb0ef41Sopenharmony_ci  V(vsldb, VSLDB, 0xE777) /* type = VRI_D VECTOR SHIFT LEFT DOUBLE BY BYTE  */
6191cb0ef41Sopenharmony_ci
6201cb0ef41Sopenharmony_ci#define S390_VRR_F_OPCODE_LIST(V) \
6211cb0ef41Sopenharmony_ci  V(vlvgp, VLVGP, 0xE762) /* type = VRR_F VECTOR LOAD VR FROM GRS DISJOINT  */
6221cb0ef41Sopenharmony_ci
6231cb0ef41Sopenharmony_ci#define S390_RIS_OPCODE_LIST(V)                                                \
6241cb0ef41Sopenharmony_ci  V(cgib, CGIB,                                                                \
6251cb0ef41Sopenharmony_ci    0xECFC) /* type = RIS   COMPARE IMMEDIATE AND BRANCH (64<-8)  */           \
6261cb0ef41Sopenharmony_ci  V(clgib, CLGIB,                                                              \
6271cb0ef41Sopenharmony_ci    0xECFD) /* type = RIS   COMPARE LOGICAL IMMEDIATE AND BRANCH (64<-8)  */   \
6281cb0ef41Sopenharmony_ci  V(cib, CIB, 0xECFE) /* type = RIS   COMPARE IMMEDIATE AND BRANCH (32<-8)  */ \
6291cb0ef41Sopenharmony_ci  V(clib, CLIB,                                                                \
6301cb0ef41Sopenharmony_ci    0xECFF) /* type = RIS   COMPARE LOGICAL IMMEDIATE AND BRANCH (32<-8)  */
6311cb0ef41Sopenharmony_ci
6321cb0ef41Sopenharmony_ci#define S390_VRI_E_OPCODE_LIST(V) \
6331cb0ef41Sopenharmony_ci  V(vftci, VFTCI,                 \
6341cb0ef41Sopenharmony_ci    0xE74A) /* type = VRI_E VECTOR FP TEST DATA CLASS IMMEDIATE  */
6351cb0ef41Sopenharmony_ci
6361cb0ef41Sopenharmony_ci#define S390_RSL_A_OPCODE_LIST(V) \
6371cb0ef41Sopenharmony_ci  V(tp, TP, 0xEBC0) /* type = RSL_A TEST DECIMAL  */
6381cb0ef41Sopenharmony_ci
6391cb0ef41Sopenharmony_ci#define S390_RSL_B_OPCODE_LIST(V)                                             \
6401cb0ef41Sopenharmony_ci  V(cpdt, CPDT, 0xEDAC) /* type = RSL_B CONVERT TO PACKED (from long DFP)  */ \
6411cb0ef41Sopenharmony_ci  V(cpxt, CPXT,                                                               \
6421cb0ef41Sopenharmony_ci    0xEDAD) /* type = RSL_B CONVERT TO PACKED (from extended DFP)  */         \
6431cb0ef41Sopenharmony_ci  V(cdpt, CDPT, 0xEDAE) /* type = RSL_B CONVERT FROM PACKED (to long DFP)  */ \
6441cb0ef41Sopenharmony_ci  V(cxpt, CXPT,                                                               \
6451cb0ef41Sopenharmony_ci    0xEDAF) /* type = RSL_B CONVERT FROM PACKED (to extended DFP)  */         \
6461cb0ef41Sopenharmony_ci  V(czdt, CZDT, 0xEDA8) /* type = RSL CONVERT TO ZONED (from long DFP)  */    \
6471cb0ef41Sopenharmony_ci  V(czxt, CZXT, 0xEDA9) /* type = RSL CONVERT TO ZONED (from extended DFP) */ \
6481cb0ef41Sopenharmony_ci  V(cdzt, CDZT, 0xEDAA) /* type = RSL CONVERT FROM ZONED (to long DFP)  */    \
6491cb0ef41Sopenharmony_ci  V(cxzt, CXZT, 0xEDAB) /* type = RSL CONVERT FROM ZONED (to extended DFP) */
6501cb0ef41Sopenharmony_ci
6511cb0ef41Sopenharmony_ci#define S390_SI_OPCODE_LIST(V)                                          \
6521cb0ef41Sopenharmony_ci  V(tm, TM, 0x91)       /* type = SI    TEST UNDER MASK  */             \
6531cb0ef41Sopenharmony_ci  V(mvi, MVI, 0x92)     /* type = SI    MOVE (immediate)  */            \
6541cb0ef41Sopenharmony_ci  V(ni, NI, 0x94)       /* type = SI    AND (immediate)  */             \
6551cb0ef41Sopenharmony_ci  V(cli, CLI, 0x95)     /* type = SI    COMPARE LOGICAL (immediate)  */ \
6561cb0ef41Sopenharmony_ci  V(oi, OI, 0x96)       /* type = SI    OR (immediate)  */              \
6571cb0ef41Sopenharmony_ci  V(xi, XI, 0x97)       /* type = SI    EXCLUSIVE OR (immediate)  */    \
6581cb0ef41Sopenharmony_ci  V(stnsm, STNSM, 0xAC) /* type = SI    STORE THEN AND SYSTEM MASK  */  \
6591cb0ef41Sopenharmony_ci  V(stosm, STOSM, 0xAD) /* type = SI    STORE THEN OR SYSTEM MASK  */   \
6601cb0ef41Sopenharmony_ci  V(mc, MC, 0xAF)       /* type = SI    MONITOR CALL  */
6611cb0ef41Sopenharmony_ci
6621cb0ef41Sopenharmony_ci#define S390_SIL_OPCODE_LIST(V)                                                \
6631cb0ef41Sopenharmony_ci  V(mvhhi, MVHHI, 0xE544) /* type = SIL   MOVE (16<-16)  */                    \
6641cb0ef41Sopenharmony_ci  V(mvghi, MVGHI, 0xE548) /* type = SIL   MOVE (64<-16)  */                    \
6651cb0ef41Sopenharmony_ci  V(mvhi, MVHI, 0xE54C)   /* type = SIL   MOVE (32<-16)  */                    \
6661cb0ef41Sopenharmony_ci  V(chhsi, CHHSI,                                                              \
6671cb0ef41Sopenharmony_ci    0xE554) /* type = SIL   COMPARE HALFWORD IMMEDIATE (16<-16)  */            \
6681cb0ef41Sopenharmony_ci  V(clhhsi, CLHHSI,                                                            \
6691cb0ef41Sopenharmony_ci    0xE555) /* type = SIL   COMPARE LOGICAL IMMEDIATE (16<-16)  */             \
6701cb0ef41Sopenharmony_ci  V(cghsi, CGHSI,                                                              \
6711cb0ef41Sopenharmony_ci    0xE558) /* type = SIL   COMPARE HALFWORD IMMEDIATE (64<-16)  */            \
6721cb0ef41Sopenharmony_ci  V(clghsi, CLGHSI,                                                            \
6731cb0ef41Sopenharmony_ci    0xE559)             /* type = SIL   COMPARE LOGICAL IMMEDIATE (64<-16)  */ \
6741cb0ef41Sopenharmony_ci  V(chsi, CHSI, 0xE55C) /* type = SIL   COMPARE HALFWORD IMMEDIATE (32<-16) */ \
6751cb0ef41Sopenharmony_ci  V(clfhsi, CLFHSI,                                                            \
6761cb0ef41Sopenharmony_ci    0xE55D) /* type = SIL   COMPARE LOGICAL IMMEDIATE (32<-16)  */             \
6771cb0ef41Sopenharmony_ci  V(tbegin, TBEGIN,                                                            \
6781cb0ef41Sopenharmony_ci    0xE560) /* type = SIL   TRANSACTION BEGIN (nonconstrained)  */             \
6791cb0ef41Sopenharmony_ci  V(tbeginc, TBEGINC,                                                          \
6801cb0ef41Sopenharmony_ci    0xE561) /* type = SIL   TRANSACTION BEGIN (constrained)  */
6811cb0ef41Sopenharmony_ci
6821cb0ef41Sopenharmony_ci#define S390_VRS_A_OPCODE_LIST(V)                                            \
6831cb0ef41Sopenharmony_ci  V(vesl, VESL, 0xE730) /* type = VRS_A VECTOR ELEMENT SHIFT LEFT  */        \
6841cb0ef41Sopenharmony_ci  V(verll, VERLL,                                                            \
6851cb0ef41Sopenharmony_ci    0xE733)           /* type = VRS_A VECTOR ELEMENT ROTATE LEFT LOGICAL  */ \
6861cb0ef41Sopenharmony_ci  V(vlm, VLM, 0xE736) /* type = VRS_A VECTOR LOAD MULTIPLE  */               \
6871cb0ef41Sopenharmony_ci  V(vesrl, VESRL,                                                            \
6881cb0ef41Sopenharmony_ci    0xE738) /* type = VRS_A VECTOR ELEMENT SHIFT RIGHT LOGICAL  */           \
6891cb0ef41Sopenharmony_ci  V(vesra, VESRA,                                                            \
6901cb0ef41Sopenharmony_ci    0xE73A) /* type = VRS_A VECTOR ELEMENT SHIFT RIGHT ARITHMETIC  */        \
6911cb0ef41Sopenharmony_ci  V(vstm, VSTM, 0xE73E) /* type = VRS_A VECTOR STORE MULTIPLE  */
6921cb0ef41Sopenharmony_ci
6931cb0ef41Sopenharmony_ci#define S390_RIL_A_OPCODE_LIST(V)                                              \
6941cb0ef41Sopenharmony_ci  V(lgfi, LGFI, 0xC01)   /* type = RIL_A LOAD IMMEDIATE (64<-32)  */           \
6951cb0ef41Sopenharmony_ci  V(xihf, XIHF, 0xC06)   /* type = RIL_A EXCLUSIVE OR IMMEDIATE (high)  */     \
6961cb0ef41Sopenharmony_ci  V(xilf, XILF, 0xC07)   /* type = RIL_A EXCLUSIVE OR IMMEDIATE (low)  */      \
6971cb0ef41Sopenharmony_ci  V(iihf, IIHF, 0xC08)   /* type = RIL_A INSERT IMMEDIATE (high)  */           \
6981cb0ef41Sopenharmony_ci  V(iilf, IILF, 0xC09)   /* type = RIL_A INSERT IMMEDIATE (low)  */            \
6991cb0ef41Sopenharmony_ci  V(nihf, NIHF, 0xC0A)   /* type = RIL_A AND IMMEDIATE (high)  */              \
7001cb0ef41Sopenharmony_ci  V(nilf, NILF, 0xC0B)   /* type = RIL_A AND IMMEDIATE (low)  */               \
7011cb0ef41Sopenharmony_ci  V(oihf, OIHF, 0xC0C)   /* type = RIL_A OR IMMEDIATE (high)  */               \
7021cb0ef41Sopenharmony_ci  V(oilf, OILF, 0xC0D)   /* type = RIL_A OR IMMEDIATE (low)  */                \
7031cb0ef41Sopenharmony_ci  V(llihf, LLIHF, 0xC0E) /* type = RIL_A LOAD LOGICAL IMMEDIATE (high)  */     \
7041cb0ef41Sopenharmony_ci  V(llilf, LLILF, 0xC0F) /* type = RIL_A LOAD LOGICAL IMMEDIATE (low)  */      \
7051cb0ef41Sopenharmony_ci  V(msgfi, MSGFI, 0xC20) /* type = RIL_A MULTIPLY SINGLE IMMEDIATE (64<-32) */ \
7061cb0ef41Sopenharmony_ci  V(msfi, MSFI, 0xC21)   /* type = RIL_A MULTIPLY SINGLE IMMEDIATE (32)  */    \
7071cb0ef41Sopenharmony_ci  V(slgfi, SLGFI,                                                              \
7081cb0ef41Sopenharmony_ci    0xC24)             /* type = RIL_A SUBTRACT LOGICAL IMMEDIATE (64<-32)  */ \
7091cb0ef41Sopenharmony_ci  V(slfi, SLFI, 0xC25) /* type = RIL_A SUBTRACT LOGICAL IMMEDIATE (32)  */     \
7101cb0ef41Sopenharmony_ci  V(agfi, AGFI, 0xC28) /* type = RIL_A ADD IMMEDIATE (64<-32)  */              \
7111cb0ef41Sopenharmony_ci  V(afi, AFI, 0xC29)   /* type = RIL_A ADD IMMEDIATE (32)  */                  \
7121cb0ef41Sopenharmony_ci  V(algfi, ALGFI, 0xC2A) /* type = RIL_A ADD LOGICAL IMMEDIATE (64<-32)  */    \
7131cb0ef41Sopenharmony_ci  V(alfi, ALFI, 0xC2B)   /* type = RIL_A ADD LOGICAL IMMEDIATE (32)  */        \
7141cb0ef41Sopenharmony_ci  V(cgfi, CGFI, 0xC2C)   /* type = RIL_A COMPARE IMMEDIATE (64<-32)  */        \
7151cb0ef41Sopenharmony_ci  V(cfi, CFI, 0xC2D)     /* type = RIL_A COMPARE IMMEDIATE (32)  */            \
7161cb0ef41Sopenharmony_ci  V(clgfi, CLGFI, 0xC2E) /* type = RIL_A COMPARE LOGICAL IMMEDIATE (64<-32) */ \
7171cb0ef41Sopenharmony_ci  V(clfi, CLFI, 0xC2F)   /* type = RIL_A COMPARE LOGICAL IMMEDIATE (32)  */    \
7181cb0ef41Sopenharmony_ci  V(aih, AIH, 0xCC8)     /* type = RIL_A ADD IMMEDIATE HIGH (32)  */           \
7191cb0ef41Sopenharmony_ci  V(alsih, ALSIH,                                                              \
7201cb0ef41Sopenharmony_ci    0xCCA) /* type = RIL_A ADD LOGICAL WITH SIGNED IMMEDIATE HIGH (32)  */     \
7211cb0ef41Sopenharmony_ci  V(alsihn, ALSIHN,                                                            \
7221cb0ef41Sopenharmony_ci    0xCCB) /* type = RIL_A ADD LOGICAL WITH SIGNED IMMEDIATE HIGH (32)  */     \
7231cb0ef41Sopenharmony_ci  V(cih, CIH, 0xCCD)   /* type = RIL_A COMPARE IMMEDIATE HIGH (32)  */         \
7241cb0ef41Sopenharmony_ci  V(clih, CLIH, 0xCCF) /* type = RIL_A COMPARE LOGICAL IMMEDIATE HIGH (32)  */
7251cb0ef41Sopenharmony_ci
7261cb0ef41Sopenharmony_ci#define S390_RIL_B_OPCODE_LIST(V)                                              \
7271cb0ef41Sopenharmony_ci  V(larl, LARL, 0xC00)   /* type = RIL_B LOAD ADDRESS RELATIVE LONG  */        \
7281cb0ef41Sopenharmony_ci  V(brasl, BRASL, 0xC05) /* type = RIL_B BRANCH RELATIVE AND SAVE LONG  */     \
7291cb0ef41Sopenharmony_ci  V(llhrl, LLHRL,                                                              \
7301cb0ef41Sopenharmony_ci    0xC42) /* type = RIL_B LOAD LOGICAL HALFWORD RELATIVE LONG (32<-16)  */    \
7311cb0ef41Sopenharmony_ci  V(lghrl, LGHRL,                                                              \
7321cb0ef41Sopenharmony_ci    0xC44) /* type = RIL_B LOAD HALFWORD RELATIVE LONG (64<-16)  */            \
7331cb0ef41Sopenharmony_ci  V(lhrl, LHRL, 0xC45) /* type = RIL_B LOAD HALFWORD RELATIVE LONG (32<-16) */ \
7341cb0ef41Sopenharmony_ci  V(llghrl, LLGHRL,                                                            \
7351cb0ef41Sopenharmony_ci    0xC46) /* type = RIL_B LOAD LOGICAL HALFWORD RELATIVE LONG (64<-16)  */    \
7361cb0ef41Sopenharmony_ci  V(sthrl, STHRL, 0xC47) /* type = RIL_B STORE HALFWORD RELATIVE LONG (16)  */ \
7371cb0ef41Sopenharmony_ci  V(lgrl, LGRL, 0xC48)   /* type = RIL_B LOAD RELATIVE LONG (64)  */           \
7381cb0ef41Sopenharmony_ci  V(stgrl, STGRL, 0xC4B) /* type = RIL_B STORE RELATIVE LONG (64)  */          \
7391cb0ef41Sopenharmony_ci  V(lgfrl, LGFRL, 0xC4C) /* type = RIL_B LOAD RELATIVE LONG (64<-32)  */       \
7401cb0ef41Sopenharmony_ci  V(lrl, LRL, 0xC4D)     /* type = RIL_B LOAD RELATIVE LONG (32)  */           \
7411cb0ef41Sopenharmony_ci  V(llgfrl, LLGFRL,                                                            \
7421cb0ef41Sopenharmony_ci    0xC4E)             /* type = RIL_B LOAD LOGICAL RELATIVE LONG (64<-32)  */ \
7431cb0ef41Sopenharmony_ci  V(strl, STRL, 0xC4F) /* type = RIL_B STORE RELATIVE LONG (32)  */            \
7441cb0ef41Sopenharmony_ci  V(exrl, EXRL, 0xC60) /* type = RIL_B EXECUTE RELATIVE LONG  */               \
7451cb0ef41Sopenharmony_ci  V(cghrl, CGHRL,                                                              \
7461cb0ef41Sopenharmony_ci    0xC64) /* type = RIL_B COMPARE HALFWORD RELATIVE LONG (64<-16)  */         \
7471cb0ef41Sopenharmony_ci  V(chrl, CHRL,                                                                \
7481cb0ef41Sopenharmony_ci    0xC65) /* type = RIL_B COMPARE HALFWORD RELATIVE LONG (32<-16)  */         \
7491cb0ef41Sopenharmony_ci  V(clghrl, CLGHRL,                                                            \
7501cb0ef41Sopenharmony_ci    0xC66) /* type = RIL_B COMPARE LOGICAL RELATIVE LONG (64<-16)  */          \
7511cb0ef41Sopenharmony_ci  V(clhrl, CLHRL,                                                              \
7521cb0ef41Sopenharmony_ci    0xC67) /* type = RIL_B COMPARE LOGICAL RELATIVE LONG (32<-16)  */          \
7531cb0ef41Sopenharmony_ci  V(cgrl, CGRL, 0xC68)   /* type = RIL_B COMPARE RELATIVE LONG (64)  */        \
7541cb0ef41Sopenharmony_ci  V(clgrl, CLGRL, 0xC6A) /* type = RIL_B COMPARE LOGICAL RELATIVE LONG (64) */ \
7551cb0ef41Sopenharmony_ci  V(cgfrl, CGFRL, 0xC6C) /* type = RIL_B COMPARE RELATIVE LONG (64<-32)  */    \
7561cb0ef41Sopenharmony_ci  V(crl, CRL, 0xC6D)     /* type = RIL_B COMPARE RELATIVE LONG (32)  */        \
7571cb0ef41Sopenharmony_ci  V(clgfrl, CLGFRL,                                                            \
7581cb0ef41Sopenharmony_ci    0xC6E) /* type = RIL_B COMPARE LOGICAL RELATIVE LONG (64<-32)  */          \
7591cb0ef41Sopenharmony_ci  V(clrl, CLRL, 0xC6F) /* type = RIL_B COMPARE LOGICAL RELATIVE LONG (32)  */  \
7601cb0ef41Sopenharmony_ci  V(brcth, BRCTH, 0xCC6) /* type = RIL_B BRANCH RELATIVE ON COUNT HIGH (32) */
7611cb0ef41Sopenharmony_ci
7621cb0ef41Sopenharmony_ci#define S390_VRS_B_OPCODE_LIST(V)                                          \
7631cb0ef41Sopenharmony_ci  V(vlvg, VLVG, 0xE722) /* type = VRS_B VECTOR LOAD VR ELEMENT FROM GR  */ \
7641cb0ef41Sopenharmony_ci  V(vll, VLL, 0xE737)   /* type = VRS_B VECTOR LOAD WITH LENGTH  */        \
7651cb0ef41Sopenharmony_ci  V(vstl, VSTL, 0xE73F) /* type = VRS_B VECTOR STORE WITH LENGTH  */
7661cb0ef41Sopenharmony_ci
7671cb0ef41Sopenharmony_ci#define S390_RIL_C_OPCODE_LIST(V)                                              \
7681cb0ef41Sopenharmony_ci  V(brcl, BRCL, 0xC04)   /* type = RIL_C BRANCH RELATIVE ON CONDITION LONG  */ \
7691cb0ef41Sopenharmony_ci  V(pfdrl, PFDRL, 0xC62) /* type = RIL_C PREFETCH DATA RELATIVE LONG  */
7701cb0ef41Sopenharmony_ci
7711cb0ef41Sopenharmony_ci#define S390_VRS_C_OPCODE_LIST(V) \
7721cb0ef41Sopenharmony_ci  V(vlgv, VLGV, 0xE721) /* type = VRS_C VECTOR LOAD GR FROM VR ELEMENT  */
7731cb0ef41Sopenharmony_ci
7741cb0ef41Sopenharmony_ci#define S390_RI_A_OPCODE_LIST(V)                                               \
7751cb0ef41Sopenharmony_ci  V(iihh, IIHH, 0xA50)   /* type = RI_A  INSERT IMMEDIATE (high high)  */      \
7761cb0ef41Sopenharmony_ci  V(iihl, IIHL, 0xA51)   /* type = RI_A  INSERT IMMEDIATE (high low)  */       \
7771cb0ef41Sopenharmony_ci  V(iilh, IILH, 0xA52)   /* type = RI_A  INSERT IMMEDIATE (low high)  */       \
7781cb0ef41Sopenharmony_ci  V(iill, IILL, 0xA53)   /* type = RI_A  INSERT IMMEDIATE (low low)  */        \
7791cb0ef41Sopenharmony_ci  V(nihh, NIHH, 0xA54)   /* type = RI_A  AND IMMEDIATE (high high)  */         \
7801cb0ef41Sopenharmony_ci  V(nihl, NIHL, 0xA55)   /* type = RI_A  AND IMMEDIATE (high low)  */          \
7811cb0ef41Sopenharmony_ci  V(nilh, NILH, 0xA56)   /* type = RI_A  AND IMMEDIATE (low high)  */          \
7821cb0ef41Sopenharmony_ci  V(nill, NILL, 0xA57)   /* type = RI_A  AND IMMEDIATE (low low)  */           \
7831cb0ef41Sopenharmony_ci  V(oihh, OIHH, 0xA58)   /* type = RI_A  OR IMMEDIATE (high high)  */          \
7841cb0ef41Sopenharmony_ci  V(oihl, OIHL, 0xA59)   /* type = RI_A  OR IMMEDIATE (high low)  */           \
7851cb0ef41Sopenharmony_ci  V(oilh, OILH, 0xA5A)   /* type = RI_A  OR IMMEDIATE (low high)  */           \
7861cb0ef41Sopenharmony_ci  V(oill, OILL, 0xA5B)   /* type = RI_A  OR IMMEDIATE (low low)  */            \
7871cb0ef41Sopenharmony_ci  V(llihh, LLIHH, 0xA5C) /* type = RI_A  LOAD LOGICAL IMMEDIATE (high high) */ \
7881cb0ef41Sopenharmony_ci  V(llihl, LLIHL, 0xA5D) /* type = RI_A  LOAD LOGICAL IMMEDIATE (high low)  */ \
7891cb0ef41Sopenharmony_ci  V(llilh, LLILH, 0xA5E) /* type = RI_A  LOAD LOGICAL IMMEDIATE (low high)  */ \
7901cb0ef41Sopenharmony_ci  V(llill, LLILL, 0xA5F) /* type = RI_A  LOAD LOGICAL IMMEDIATE (low low)  */  \
7911cb0ef41Sopenharmony_ci  V(tmlh, TMLH, 0xA70)   /* type = RI_A  TEST UNDER MASK (low high)  */        \
7921cb0ef41Sopenharmony_ci  V(tmll, TMLL, 0xA71)   /* type = RI_A  TEST UNDER MASK (low low)  */         \
7931cb0ef41Sopenharmony_ci  V(tmhh, TMHH, 0xA72)   /* type = RI_A  TEST UNDER MASK (high high)  */       \
7941cb0ef41Sopenharmony_ci  V(tmhl, TMHL, 0xA73)   /* type = RI_A  TEST UNDER MASK (high low)  */        \
7951cb0ef41Sopenharmony_ci  V(lhi, LHI, 0xA78)     /* type = RI_A  LOAD HALFWORD IMMEDIATE (32)<-16  */  \
7961cb0ef41Sopenharmony_ci  V(lghi, LGHI, 0xA79)   /* type = RI_A  LOAD HALFWORD IMMEDIATE (64<-16)  */  \
7971cb0ef41Sopenharmony_ci  V(ahi, AHI, 0xA7A)     /* type = RI_A  ADD HALFWORD IMMEDIATE (32<-16)  */   \
7981cb0ef41Sopenharmony_ci  V(aghi, AGHI, 0xA7B)   /* type = RI_A  ADD HALFWORD IMMEDIATE (64<-16)  */   \
7991cb0ef41Sopenharmony_ci  V(mhi, MHI, 0xA7C) /* type = RI_A  MULTIPLY HALFWORD IMMEDIATE (32<-16)  */  \
8001cb0ef41Sopenharmony_ci  V(mghi, MGHI, 0xA7D) /* type = RI_A  MULTIPLY HALFWORD IMMEDIATE (64<-16) */ \
8011cb0ef41Sopenharmony_ci  V(chi, CHI, 0xA7E)   /* type = RI_A  COMPARE HALFWORD IMMEDIATE (32<-16)  */ \
8021cb0ef41Sopenharmony_ci  V(cghi, CGHI, 0xA7F) /* type = RI_A  COMPARE HALFWORD IMMEDIATE (64<-16)  */
8031cb0ef41Sopenharmony_ci
8041cb0ef41Sopenharmony_ci#define S390_RSI_OPCODE_LIST(V)                                              \
8051cb0ef41Sopenharmony_ci  V(brxh, BRXH, 0x84) /* type = RSI   BRANCH RELATIVE ON INDEX HIGH (32)  */ \
8061cb0ef41Sopenharmony_ci  V(brxle, BRXLE,                                                            \
8071cb0ef41Sopenharmony_ci    0x85) /* type = RSI   BRANCH RELATIVE ON INDEX LOW OR EQ. (32)  */
8081cb0ef41Sopenharmony_ci
8091cb0ef41Sopenharmony_ci#define S390_RI_B_OPCODE_LIST(V)                                           \
8101cb0ef41Sopenharmony_ci  V(bras, BRAS, 0xA75)   /* type = RI_B  BRANCH RELATIVE AND SAVE  */      \
8111cb0ef41Sopenharmony_ci  V(brct, BRCT, 0xA76)   /* type = RI_B  BRANCH RELATIVE ON COUNT (32)  */ \
8121cb0ef41Sopenharmony_ci  V(brctg, BRCTG, 0xA77) /* type = RI_B  BRANCH RELATIVE ON COUNT (64)  */
8131cb0ef41Sopenharmony_ci
8141cb0ef41Sopenharmony_ci#define S390_RI_C_OPCODE_LIST(V) \
8151cb0ef41Sopenharmony_ci  V(brc, BRC, 0xA74) /* type = RI_C BRANCH RELATIVE ON CONDITION  */
8161cb0ef41Sopenharmony_ci
8171cb0ef41Sopenharmony_ci#define S390_SMI_OPCODE_LIST(V) \
8181cb0ef41Sopenharmony_ci  V(bpp, BPP, 0xC7) /* type = SMI   BRANCH PREDICTION PRELOAD  */
8191cb0ef41Sopenharmony_ci
8201cb0ef41Sopenharmony_ci#define S390_RXY_A_OPCODE_LIST(V)                                              \
8211cb0ef41Sopenharmony_ci  V(ltg, LTG, 0xE302)   /* type = RXY_A LOAD AND TEST (64)  */                 \
8221cb0ef41Sopenharmony_ci  V(lrag, LRAG, 0xE303) /* type = RXY_A LOAD REAL ADDRESS (64)  */             \
8231cb0ef41Sopenharmony_ci  V(lg, LG, 0xE304)     /* type = RXY_A LOAD (64)  */                          \
8241cb0ef41Sopenharmony_ci  V(cvby, CVBY, 0xE306) /* type = RXY_A CONVERT TO BINARY (32)  */             \
8251cb0ef41Sopenharmony_ci  V(ag, AG, 0xE308)     /* type = RXY_A ADD (64)  */                           \
8261cb0ef41Sopenharmony_ci  V(sg, SG, 0xE309)     /* type = RXY_A SUBTRACT (64)  */                      \
8271cb0ef41Sopenharmony_ci  V(alg, ALG, 0xE30A)   /* type = RXY_A ADD LOGICAL (64)  */                   \
8281cb0ef41Sopenharmony_ci  V(slg, SLG, 0xE30B)   /* type = RXY_A SUBTRACT LOGICAL (64)  */              \
8291cb0ef41Sopenharmony_ci  V(msg, MSG, 0xE30C)   /* type = RXY_A MULTIPLY SINGLE (64)  */               \
8301cb0ef41Sopenharmony_ci  V(dsg, DSG, 0xE30D)   /* type = RXY_A DIVIDE SINGLE (64)  */                 \
8311cb0ef41Sopenharmony_ci  V(cvbg, CVBG, 0xE30E) /* type = RXY_A CONVERT TO BINARY (64)  */             \
8321cb0ef41Sopenharmony_ci  V(lrvg, LRVG, 0xE30F) /* type = RXY_A LOAD REVERSED (64)  */                 \
8331cb0ef41Sopenharmony_ci  V(lt_z, LT, 0xE312)   /* type = RXY_A LOAD AND TEST (32)  */                 \
8341cb0ef41Sopenharmony_ci  V(lray, LRAY, 0xE313) /* type = RXY_A LOAD REAL ADDRESS (32)  */             \
8351cb0ef41Sopenharmony_ci  V(lgf, LGF, 0xE314)   /* type = RXY_A LOAD (64<-32)  */                      \
8361cb0ef41Sopenharmony_ci  V(lgh, LGH, 0xE315)   /* type = RXY_A LOAD HALFWORD (64<-16)  */             \
8371cb0ef41Sopenharmony_ci  V(llgf, LLGF, 0xE316) /* type = RXY_A LOAD LOGICAL (64<-32)  */              \
8381cb0ef41Sopenharmony_ci  V(llgt, LLGT,                                                                \
8391cb0ef41Sopenharmony_ci    0xE317) /* type = RXY_A LOAD LOGICAL THIRTY ONE BITS (64<-31)  */          \
8401cb0ef41Sopenharmony_ci  V(agf, AGF, 0xE318)     /* type = RXY_A ADD (64<-32)  */                     \
8411cb0ef41Sopenharmony_ci  V(sgf, SGF, 0xE319)     /* type = RXY_A SUBTRACT (64<-32)  */                \
8421cb0ef41Sopenharmony_ci  V(algf, ALGF, 0xE31A)   /* type = RXY_A ADD LOGICAL (64<-32)  */             \
8431cb0ef41Sopenharmony_ci  V(slgf, SLGF, 0xE31B)   /* type = RXY_A SUBTRACT LOGICAL (64<-32)  */        \
8441cb0ef41Sopenharmony_ci  V(msgf, MSGF, 0xE31C)   /* type = RXY_A MULTIPLY SINGLE (64<-32)  */         \
8451cb0ef41Sopenharmony_ci  V(dsgf, DSGF, 0xE31D)   /* type = RXY_A DIVIDE SINGLE (64<-32)  */           \
8461cb0ef41Sopenharmony_ci  V(lrv, LRV, 0xE31E)     /* type = RXY_A LOAD REVERSED (32)  */               \
8471cb0ef41Sopenharmony_ci  V(lrvh, LRVH, 0xE31F)   /* type = RXY_A LOAD REVERSED (16)  */               \
8481cb0ef41Sopenharmony_ci  V(cg, CG, 0xE320)       /* type = RXY_A COMPARE (64)  */                     \
8491cb0ef41Sopenharmony_ci  V(clg, CLG, 0xE321)     /* type = RXY_A COMPARE LOGICAL (64)  */             \
8501cb0ef41Sopenharmony_ci  V(stg, STG, 0xE324)     /* type = RXY_A STORE (64)  */                       \
8511cb0ef41Sopenharmony_ci  V(ntstg, NTSTG, 0xE325) /* type = RXY_A NONTRANSACTIONAL STORE (64)  */      \
8521cb0ef41Sopenharmony_ci  V(cvdy, CVDY, 0xE326)   /* type = RXY_A CONVERT TO DECIMAL (32)  */          \
8531cb0ef41Sopenharmony_ci  V(lzrg, LZRG, 0xE32A) /* type = RXY_A LOAD AND ZERO RIGHTMOST BYTE (64)  */  \
8541cb0ef41Sopenharmony_ci  V(cvdg, CVDG, 0xE32E) /* type = RXY_A CONVERT TO DECIMAL (64)  */            \
8551cb0ef41Sopenharmony_ci  V(strvg, STRVG, 0xE32F) /* type = RXY_A STORE REVERSED (64)  */              \
8561cb0ef41Sopenharmony_ci  V(cgf, CGF, 0xE330)     /* type = RXY_A COMPARE (64<-32)  */                 \
8571cb0ef41Sopenharmony_ci  V(clgf, CLGF, 0xE331)   /* type = RXY_A COMPARE LOGICAL (64<-32)  */         \
8581cb0ef41Sopenharmony_ci  V(ltgf, LTGF, 0xE332)   /* type = RXY_A LOAD AND TEST (64<-32)  */           \
8591cb0ef41Sopenharmony_ci  V(cgh, CGH, 0xE334)     /* type = RXY_A COMPARE HALFWORD (64<-16)  */        \
8601cb0ef41Sopenharmony_ci  V(llzrgf, LLZRGF,                                                            \
8611cb0ef41Sopenharmony_ci    0xE33A) /* type = RXY_A LOAD LOGICAL AND ZERO RIGHTMOST BYTE (64<-32)  */  \
8621cb0ef41Sopenharmony_ci  V(lzrf, LZRF, 0xE33B) /* type = RXY_A LOAD AND ZERO RIGHTMOST BYTE (32)  */  \
8631cb0ef41Sopenharmony_ci  V(strv, STRV, 0xE33E) /* type = RXY_A STORE REVERSED (32)  */                \
8641cb0ef41Sopenharmony_ci  V(strvh, STRVH, 0xE33F) /* type = RXY_A STORE REVERSED (16)  */              \
8651cb0ef41Sopenharmony_ci  V(bctg, BCTG, 0xE346)   /* type = RXY_A BRANCH ON COUNT (64)  */             \
8661cb0ef41Sopenharmony_ci  V(sty, STY, 0xE350)     /* type = RXY_A STORE (32)  */                       \
8671cb0ef41Sopenharmony_ci  V(msy, MSY, 0xE351)     /* type = RXY_A MULTIPLY SINGLE (32)  */             \
8681cb0ef41Sopenharmony_ci  V(ny, NY, 0xE354)       /* type = RXY_A AND (32)  */                         \
8691cb0ef41Sopenharmony_ci  V(cly, CLY, 0xE355)     /* type = RXY_A COMPARE LOGICAL (32)  */             \
8701cb0ef41Sopenharmony_ci  V(oy, OY, 0xE356)       /* type = RXY_A OR (32)  */                          \
8711cb0ef41Sopenharmony_ci  V(xy, XY, 0xE357)       /* type = RXY_A EXCLUSIVE OR (32)  */                \
8721cb0ef41Sopenharmony_ci  V(ly, LY, 0xE358)       /* type = RXY_A LOAD (32)  */                        \
8731cb0ef41Sopenharmony_ci  V(cy, CY, 0xE359)       /* type = RXY_A COMPARE (32)  */                     \
8741cb0ef41Sopenharmony_ci  V(ay, AY, 0xE35A)       /* type = RXY_A ADD (32)  */                         \
8751cb0ef41Sopenharmony_ci  V(sy, SY, 0xE35B)       /* type = RXY_A SUBTRACT (32)  */                    \
8761cb0ef41Sopenharmony_ci  V(mfy, MFY, 0xE35C)     /* type = RXY_A MULTIPLY (64<-32)  */                \
8771cb0ef41Sopenharmony_ci  V(aly, ALY, 0xE35E)     /* type = RXY_A ADD LOGICAL (32)  */                 \
8781cb0ef41Sopenharmony_ci  V(sly, SLY, 0xE35F)     /* type = RXY_A SUBTRACT LOGICAL (32)  */            \
8791cb0ef41Sopenharmony_ci  V(sthy, STHY, 0xE370)   /* type = RXY_A STORE HALFWORD (16)  */              \
8801cb0ef41Sopenharmony_ci  V(lay, LAY, 0xE371)     /* type = RXY_A LOAD ADDRESS  */                     \
8811cb0ef41Sopenharmony_ci  V(stcy, STCY, 0xE372)   /* type = RXY_A STORE CHARACTER  */                  \
8821cb0ef41Sopenharmony_ci  V(icy, ICY, 0xE373)     /* type = RXY_A INSERT CHARACTER  */                 \
8831cb0ef41Sopenharmony_ci  V(laey, LAEY, 0xE375)   /* type = RXY_A LOAD ADDRESS EXTENDED  */            \
8841cb0ef41Sopenharmony_ci  V(lb, LB, 0xE376)       /* type = RXY_A LOAD BYTE (32<-8)  */                \
8851cb0ef41Sopenharmony_ci  V(lgb, LGB, 0xE377)     /* type = RXY_A LOAD BYTE (64<-8)  */                \
8861cb0ef41Sopenharmony_ci  V(lhy, LHY, 0xE378)     /* type = RXY_A LOAD HALFWORD (32)<-16  */           \
8871cb0ef41Sopenharmony_ci  V(chy, CHY, 0xE379)     /* type = RXY_A COMPARE HALFWORD (32<-16)  */        \
8881cb0ef41Sopenharmony_ci  V(ahy, AHY, 0xE37A)     /* type = RXY_A ADD HALFWORD (32<-16)  */            \
8891cb0ef41Sopenharmony_ci  V(shy, SHY, 0xE37B)     /* type = RXY_A SUBTRACT HALFWORD (32<-16)  */       \
8901cb0ef41Sopenharmony_ci  V(mhy, MHY, 0xE37C)     /* type = RXY_A MULTIPLY HALFWORD (32<-16)  */       \
8911cb0ef41Sopenharmony_ci  V(ng, NG, 0xE380)       /* type = RXY_A AND (64)  */                         \
8921cb0ef41Sopenharmony_ci  V(og, OG, 0xE381)       /* type = RXY_A OR (64)  */                          \
8931cb0ef41Sopenharmony_ci  V(xg, XG, 0xE382)       /* type = RXY_A EXCLUSIVE OR (64)  */                \
8941cb0ef41Sopenharmony_ci  V(lgat, LGAT, 0xE385)   /* type = RXY_A LOAD AND TRAP (64)  */               \
8951cb0ef41Sopenharmony_ci  V(mlg, MLG, 0xE386)     /* type = RXY_A MULTIPLY LOGICAL (128<-64)  */       \
8961cb0ef41Sopenharmony_ci  V(dlg, DLG, 0xE387)     /* type = RXY_A DIVIDE LOGICAL (64<-128)  */         \
8971cb0ef41Sopenharmony_ci  V(alcg, ALCG, 0xE388)   /* type = RXY_A ADD LOGICAL WITH CARRY (64)  */      \
8981cb0ef41Sopenharmony_ci  V(slbg, SLBG, 0xE389) /* type = RXY_A SUBTRACT LOGICAL WITH BORROW (64)  */  \
8991cb0ef41Sopenharmony_ci  V(stpq, STPQ, 0xE38E) /* type = RXY_A STORE PAIR TO QUADWORD  */             \
9001cb0ef41Sopenharmony_ci  V(lpq, LPQ, 0xE38F) /* type = RXY_A LOAD PAIR FROM QUADWORD (64&64<-128)  */ \
9011cb0ef41Sopenharmony_ci  V(llgc, LLGC, 0xE390) /* type = RXY_A LOAD LOGICAL CHARACTER (64<-8)  */     \
9021cb0ef41Sopenharmony_ci  V(llgh, LLGH, 0xE391) /* type = RXY_A LOAD LOGICAL HALFWORD (64<-16)  */     \
9031cb0ef41Sopenharmony_ci  V(llc, LLC, 0xE394)   /* type = RXY_A LOAD LOGICAL CHARACTER (32<-8)  */     \
9041cb0ef41Sopenharmony_ci  V(llh, LLH, 0xE395)   /* type = RXY_A LOAD LOGICAL HALFWORD (32<-16)  */     \
9051cb0ef41Sopenharmony_ci  V(ml, ML, 0xE396)     /* type = RXY_A MULTIPLY LOGICAL (64<-32)  */          \
9061cb0ef41Sopenharmony_ci  V(dl, DL, 0xE397)     /* type = RXY_A DIVIDE LOGICAL (32<-64)  */            \
9071cb0ef41Sopenharmony_ci  V(alc, ALC, 0xE398)   /* type = RXY_A ADD LOGICAL WITH CARRY (32)  */        \
9081cb0ef41Sopenharmony_ci  V(slb, SLB, 0xE399)   /* type = RXY_A SUBTRACT LOGICAL WITH BORROW (32)  */  \
9091cb0ef41Sopenharmony_ci  V(llgtat, LLGTAT,                                                            \
9101cb0ef41Sopenharmony_ci    0xE39C) /* type = RXY_A LOAD LOGICAL THIRTY ONE BITS AND TRAP (64<-31)  */ \
9111cb0ef41Sopenharmony_ci  V(llgfat, LLGFAT, 0xE39D) /* type = RXY_A LOAD LOGICAL AND TRAP (64<-32)  */ \
9121cb0ef41Sopenharmony_ci  V(lat, LAT, 0xE39F)       /* type = RXY_A LOAD AND TRAP (32L<-32)  */        \
9131cb0ef41Sopenharmony_ci  V(lbh, LBH, 0xE3C0)       /* type = RXY_A LOAD BYTE HIGH (32<-8)  */         \
9141cb0ef41Sopenharmony_ci  V(llch, LLCH, 0xE3C2) /* type = RXY_A LOAD LOGICAL CHARACTER HIGH (32<-8) */ \
9151cb0ef41Sopenharmony_ci  V(stch, STCH, 0xE3C3) /* type = RXY_A STORE CHARACTER HIGH (8)  */           \
9161cb0ef41Sopenharmony_ci  V(lhh, LHH, 0xE3C4)   /* type = RXY_A LOAD HALFWORD HIGH (32<-16)  */        \
9171cb0ef41Sopenharmony_ci  V(llhh, LLHH, 0xE3C6) /* type = RXY_A LOAD LOGICAL HALFWORD HIGH (32<-16) */ \
9181cb0ef41Sopenharmony_ci  V(sthh, STHH, 0xE3C7) /* type = RXY_A STORE HALFWORD HIGH (16)  */           \
9191cb0ef41Sopenharmony_ci  V(lfhat, LFHAT, 0xE3C8) /* type = RXY_A LOAD HIGH AND TRAP (32H<-32)  */     \
9201cb0ef41Sopenharmony_ci  V(lfh, LFH, 0xE3CA)     /* type = RXY_A LOAD HIGH (32)  */                   \
9211cb0ef41Sopenharmony_ci  V(stfh, STFH, 0xE3CB)   /* type = RXY_A STORE HIGH (32)  */                  \
9221cb0ef41Sopenharmony_ci  V(chf, CHF, 0xE3CD)     /* type = RXY_A COMPARE HIGH (32)  */                \
9231cb0ef41Sopenharmony_ci  V(clhf, CLHF, 0xE3CF)   /* type = RXY_A COMPARE LOGICAL HIGH (32)  */        \
9241cb0ef41Sopenharmony_ci  V(ley, LEY, 0xED64)     /* type = RXY_A LOAD (short)  */                     \
9251cb0ef41Sopenharmony_ci  V(ldy, LDY, 0xED65)     /* type = RXY_A LOAD (long)  */                      \
9261cb0ef41Sopenharmony_ci  V(stey, STEY, 0xED66)   /* type = RXY_A STORE (short)  */                    \
9271cb0ef41Sopenharmony_ci  V(stdy, STDY, 0xED67)   /* type = RXY_A STORE (long)  */                     \
9281cb0ef41Sopenharmony_ci  V(msc, MSC, 0xE353)     /* type = RSY_A MULTIPLY SINGLE (32)  */             \
9291cb0ef41Sopenharmony_ci  V(msgc, MSGC, 0xE383)   /* type = RSY_A MULTIPLY SINGLE (64)  */
9301cb0ef41Sopenharmony_ci
9311cb0ef41Sopenharmony_ci#define S390_RXY_B_OPCODE_LIST(V) \
9321cb0ef41Sopenharmony_ci  V(pfd, PFD, 0xE336) /* type = RXY_B PREFETCH DATA  */
9331cb0ef41Sopenharmony_ci
9341cb0ef41Sopenharmony_ci#define S390_SIY_OPCODE_LIST(V)                                           \
9351cb0ef41Sopenharmony_ci  V(tmy, TMY, 0xEB51)   /* type = SIY   TEST UNDER MASK  */               \
9361cb0ef41Sopenharmony_ci  V(mviy, MVIY, 0xEB52) /* type = SIY   MOVE (immediate)  */              \
9371cb0ef41Sopenharmony_ci  V(niy, NIY, 0xEB54)   /* type = SIY   AND (immediate)  */               \
9381cb0ef41Sopenharmony_ci  V(cliy, CLIY, 0xEB55) /* type = SIY   COMPARE LOGICAL (immediate)  */   \
9391cb0ef41Sopenharmony_ci  V(oiy, OIY, 0xEB56)   /* type = SIY   OR (immediate)  */                \
9401cb0ef41Sopenharmony_ci  V(xiy, XIY, 0xEB57)   /* type = SIY   EXCLUSIVE OR (immediate)  */      \
9411cb0ef41Sopenharmony_ci  V(asi, ASI, 0xEB6A)   /* type = SIY   ADD IMMEDIATE (32<-8)  */         \
9421cb0ef41Sopenharmony_ci  V(alsi, ALSI,                                                           \
9431cb0ef41Sopenharmony_ci    0xEB6E) /* type = SIY   ADD LOGICAL WITH SIGNED IMMEDIATE (32<-8)  */ \
9441cb0ef41Sopenharmony_ci  V(agsi, AGSI, 0xEB7A) /* type = SIY   ADD IMMEDIATE (64<-8)  */         \
9451cb0ef41Sopenharmony_ci  V(algsi, ALGSI,                                                         \
9461cb0ef41Sopenharmony_ci    0xEB7E) /* type = SIY   ADD LOGICAL WITH SIGNED IMMEDIATE (64<-8)  */
9471cb0ef41Sopenharmony_ci
9481cb0ef41Sopenharmony_ci#define S390_SS_A_OPCODE_LIST(V)                                        \
9491cb0ef41Sopenharmony_ci  V(trtr, TRTR, 0xD0)   /* type = SS_A  TRANSLATE AND TEST REVERSE  */  \
9501cb0ef41Sopenharmony_ci  V(mvn, MVN, 0xD1)     /* type = SS_A  MOVE NUMERICS  */               \
9511cb0ef41Sopenharmony_ci  V(mvc, MVC, 0xD2)     /* type = SS_A  MOVE (character)  */            \
9521cb0ef41Sopenharmony_ci  V(mvz, MVZ, 0xD3)     /* type = SS_A  MOVE ZONES  */                  \
9531cb0ef41Sopenharmony_ci  V(nc, NC, 0xD4)       /* type = SS_A  AND (character)  */             \
9541cb0ef41Sopenharmony_ci  V(clc, CLC, 0xD5)     /* type = SS_A  COMPARE LOGICAL (character)  */ \
9551cb0ef41Sopenharmony_ci  V(oc, OC, 0xD6)       /* type = SS_A  OR (character)  */              \
9561cb0ef41Sopenharmony_ci  V(xc, XC, 0xD7)       /* type = SS_A  EXCLUSIVE OR (character)  */    \
9571cb0ef41Sopenharmony_ci  V(tr, TR, 0xDC)       /* type = SS_A  TRANSLATE  */                   \
9581cb0ef41Sopenharmony_ci  V(trt, TRT, 0xDD)     /* type = SS_A  TRANSLATE AND TEST  */          \
9591cb0ef41Sopenharmony_ci  V(ed, ED, 0xDE)       /* type = SS_A  EDIT  */                        \
9601cb0ef41Sopenharmony_ci  V(edmk, EDMK, 0xDF)   /* type = SS_A  EDIT AND MARK  */               \
9611cb0ef41Sopenharmony_ci  V(unpku, UNPKU, 0xE2) /* type = SS_A  UNPACK UNICODE  */              \
9621cb0ef41Sopenharmony_ci  V(mvcin, MVCIN, 0xE8) /* type = SS_A  MOVE INVERSE  */                \
9631cb0ef41Sopenharmony_ci  V(unpka, UNPKA, 0xEA) /* type = SS_A  UNPACK ASCII  */
9641cb0ef41Sopenharmony_ci
9651cb0ef41Sopenharmony_ci#define S390_E_OPCODE_LIST(V)                                                  \
9661cb0ef41Sopenharmony_ci  V(pr, PR, 0x0101)       /* type = E     PROGRAM RETURN  */                   \
9671cb0ef41Sopenharmony_ci  V(upt, UPT, 0x0102)     /* type = E     UPDATE TREE  */                      \
9681cb0ef41Sopenharmony_ci  V(ptff, PTFF, 0x0104)   /* type = E     PERFORM TIMING FACILITY FUNCTION  */ \
9691cb0ef41Sopenharmony_ci  V(sckpf, SCKPF, 0x0107) /* type = E     SET CLOCK PROGRAMMABLE FIELD  */     \
9701cb0ef41Sopenharmony_ci  V(pfpo, PFPO, 0x010A)   /* type = E     PERFORM FLOATING-POINT OPERATION  */ \
9711cb0ef41Sopenharmony_ci  V(tam, TAM, 0x010B)     /* type = E     TEST ADDRESSING MODE  */             \
9721cb0ef41Sopenharmony_ci  V(sam24, SAM24, 0x010C) /* type = E     SET ADDRESSING MODE (24)  */         \
9731cb0ef41Sopenharmony_ci  V(sam31, SAM31, 0x010D) /* type = E     SET ADDRESSING MODE (31)  */         \
9741cb0ef41Sopenharmony_ci  V(sam64, SAM64, 0x010E) /* type = E     SET ADDRESSING MODE (64)  */         \
9751cb0ef41Sopenharmony_ci  V(trap2, TRAP2, 0x01FF) /* type = E     TRAP  */
9761cb0ef41Sopenharmony_ci
9771cb0ef41Sopenharmony_ci#define S390_SS_B_OPCODE_LIST(V)                           \
9781cb0ef41Sopenharmony_ci  V(mvo, MVO, 0xF1)   /* type = SS_B  MOVE WITH OFFSET  */ \
9791cb0ef41Sopenharmony_ci  V(pack, PACK, 0xF2) /* type = SS_B  PACK  */             \
9801cb0ef41Sopenharmony_ci  V(unpk, UNPK, 0xF3) /* type = SS_B  UNPACK  */           \
9811cb0ef41Sopenharmony_ci  V(zap, ZAP, 0xF8)   /* type = SS_B  ZERO AND ADD  */     \
9821cb0ef41Sopenharmony_ci  V(cp, CP, 0xF9)     /* type = SS_B  COMPARE DECIMAL  */  \
9831cb0ef41Sopenharmony_ci  V(ap, AP, 0xFA)     /* type = SS_B  ADD DECIMAL  */      \
9841cb0ef41Sopenharmony_ci  V(sp, SP, 0xFB)     /* type = SS_B  SUBTRACT DECIMAL  */ \
9851cb0ef41Sopenharmony_ci  V(mp, MP, 0xFC)     /* type = SS_B  MULTIPLY DECIMAL  */ \
9861cb0ef41Sopenharmony_ci  V(dp, DP, 0xFD)     /* type = SS_B  DIVIDE DECIMAL  */
9871cb0ef41Sopenharmony_ci
9881cb0ef41Sopenharmony_ci#define S390_SS_C_OPCODE_LIST(V) \
9891cb0ef41Sopenharmony_ci  V(srp, SRP, 0xF0) /* type = SS_C  SHIFT AND ROUND DECIMAL  */
9901cb0ef41Sopenharmony_ci
9911cb0ef41Sopenharmony_ci#define S390_SS_D_OPCODE_LIST(V)                          \
9921cb0ef41Sopenharmony_ci  V(mvck, MVCK, 0xD9) /* type = SS_D  MOVE WITH KEY  */   \
9931cb0ef41Sopenharmony_ci  V(mvcp, MVCP, 0xDA) /* type = SS_D  MOVE TO PRIMARY  */ \
9941cb0ef41Sopenharmony_ci  V(mvcs, MVCS, 0xDB) /* type = SS_D  MOVE TO SECONDARY  */
9951cb0ef41Sopenharmony_ci
9961cb0ef41Sopenharmony_ci#define S390_SS_E_OPCODE_LIST(V)                                 \
9971cb0ef41Sopenharmony_ci  V(plo, PLO, 0xEE) /* type = SS_E  PERFORM LOCKED OPERATION  */ \
9981cb0ef41Sopenharmony_ci  V(lmd, LMD, 0xEF) /* type = SS_E  LOAD MULTIPLE DISJOINT (64<-32&32)  */
9991cb0ef41Sopenharmony_ci
10001cb0ef41Sopenharmony_ci#define S390_I_OPCODE_LIST(V) \
10011cb0ef41Sopenharmony_ci  V(svc, SVC, 0x0A) /* type = I     SUPERVISOR CALL  */
10021cb0ef41Sopenharmony_ci
10031cb0ef41Sopenharmony_ci#define S390_SS_F_OPCODE_LIST(V)                     \
10041cb0ef41Sopenharmony_ci  V(pku, PKU, 0xE1) /* type = SS_F  PACK UNICODE  */ \
10051cb0ef41Sopenharmony_ci  V(pka, PKA, 0xE9) /* type = SS_F  PACK ASCII  */
10061cb0ef41Sopenharmony_ci
10071cb0ef41Sopenharmony_ci#define S390_SSE_OPCODE_LIST(V)                                             \
10081cb0ef41Sopenharmony_ci  V(lasp, LASP, 0xE500)   /* type = SSE   LOAD ADDRESS SPACE PARAMETERS  */ \
10091cb0ef41Sopenharmony_ci  V(tprot, TPROT, 0xE501) /* type = SSE   TEST PROTECTION  */               \
10101cb0ef41Sopenharmony_ci  V(strag, STRAG, 0xE502) /* type = SSE   STORE REAL ADDRESS  */            \
10111cb0ef41Sopenharmony_ci  V(mvcsk, MVCSK, 0xE50E) /* type = SSE   MOVE WITH SOURCE KEY  */          \
10121cb0ef41Sopenharmony_ci  V(mvcdk, MVCDK, 0xE50F) /* type = SSE   MOVE WITH DESTINATION KEY  */
10131cb0ef41Sopenharmony_ci
10141cb0ef41Sopenharmony_ci#define S390_SSF_OPCODE_LIST(V)                                                \
10151cb0ef41Sopenharmony_ci  V(mvcos, MVCOS, 0xC80) /* type = SSF   MOVE WITH OPTIONAL SPECIFICATIONS  */ \
10161cb0ef41Sopenharmony_ci  V(ectg, ECTG, 0xC81)   /* type = SSF   EXTRACT CPU TIME  */                  \
10171cb0ef41Sopenharmony_ci  V(csst, CSST, 0xC82)   /* type = SSF   COMPARE AND SWAP AND STORE  */        \
10181cb0ef41Sopenharmony_ci  V(lpd, LPD, 0xC84)     /* type = SSF   LOAD PAIR DISJOINT (32)  */           \
10191cb0ef41Sopenharmony_ci  V(lpdg, LPDG, 0xC85)   /* type = SSF   LOAD PAIR DISJOINT (64)  */
10201cb0ef41Sopenharmony_ci
10211cb0ef41Sopenharmony_ci#define S390_RS_A_OPCODE_LIST(V)                                              \
10221cb0ef41Sopenharmony_ci  V(bxh, BXH, 0x86)     /* type = RS_A  BRANCH ON INDEX HIGH (32)  */         \
10231cb0ef41Sopenharmony_ci  V(bxle, BXLE, 0x87)   /* type = RS_A  BRANCH ON INDEX LOW OR EQUAL (32)  */ \
10241cb0ef41Sopenharmony_ci  V(srl, SRL, 0x88)     /* type = RS_A  SHIFT RIGHT SINGLE LOGICAL (32)  */   \
10251cb0ef41Sopenharmony_ci  V(sll, SLL, 0x89)     /* type = RS_A  SHIFT LEFT SINGLE LOGICAL (32)  */    \
10261cb0ef41Sopenharmony_ci  V(sra, SRA, 0x8A)     /* type = RS_A  SHIFT RIGHT SINGLE (32)  */           \
10271cb0ef41Sopenharmony_ci  V(sla, SLA, 0x8B)     /* type = RS_A  SHIFT LEFT SINGLE (32)  */            \
10281cb0ef41Sopenharmony_ci  V(srdl, SRDL, 0x8C)   /* type = RS_A  SHIFT RIGHT DOUBLE LOGICAL (64)  */   \
10291cb0ef41Sopenharmony_ci  V(sldl, SLDL, 0x8D)   /* type = RS_A  SHIFT LEFT DOUBLE LOGICAL (64)  */    \
10301cb0ef41Sopenharmony_ci  V(srda, SRDA, 0x8E)   /* type = RS_A  SHIFT RIGHT DOUBLE (64)  */           \
10311cb0ef41Sopenharmony_ci  V(slda, SLDA, 0x8F)   /* type = RS_A  SHIFT LEFT DOUBLE (64)  */            \
10321cb0ef41Sopenharmony_ci  V(stm, STM, 0x90)     /* type = RS_A  STORE MULTIPLE (32)  */               \
10331cb0ef41Sopenharmony_ci  V(lm, LM, 0x98)       /* type = RS_A  LOAD MULTIPLE (32)  */                \
10341cb0ef41Sopenharmony_ci  V(trace, TRACE, 0x99) /* type = RS_A  TRACE (32)  */                        \
10351cb0ef41Sopenharmony_ci  V(lam, LAM, 0x9A)     /* type = RS_A  LOAD ACCESS MULTIPLE  */              \
10361cb0ef41Sopenharmony_ci  V(stam, STAM, 0x9B)   /* type = RS_A  STORE ACCESS MULTIPLE  */             \
10371cb0ef41Sopenharmony_ci  V(mvcle, MVCLE, 0xA8) /* type = RS_A  MOVE LONG EXTENDED  */                \
10381cb0ef41Sopenharmony_ci  V(clcle, CLCLE, 0xA9) /* type = RS_A  COMPARE LOGICAL LONG EXTENDED  */     \
10391cb0ef41Sopenharmony_ci  V(sigp, SIGP, 0xAE)   /* type = RS_A  SIGNAL PROCESSOR  */                  \
10401cb0ef41Sopenharmony_ci  V(stctl, STCTL, 0xB6) /* type = RS_A  STORE CONTROL (32)  */                \
10411cb0ef41Sopenharmony_ci  V(lctl, LCTL, 0xB7)   /* type = RS_A  LOAD CONTROL (32)  */                 \
10421cb0ef41Sopenharmony_ci  V(cs, CS, 0xBA)       /* type = RS_A  COMPARE AND SWAP (32)  */             \
10431cb0ef41Sopenharmony_ci  V(cds, CDS, 0xBB)     /* type = RS_A  COMPARE DOUBLE AND SWAP (32)  */
10441cb0ef41Sopenharmony_ci
10451cb0ef41Sopenharmony_ci#define S390_RS_B_OPCODE_LIST(V)                                               \
10461cb0ef41Sopenharmony_ci  V(clm, CLM, 0xBD) /* type = RS_B  COMPARE LOGICAL CHAR. UNDER MASK (low)  */ \
10471cb0ef41Sopenharmony_ci  V(stcm, STCM, 0xBE) /* type = RS_B  STORE CHARACTERS UNDER MASK (low)  */    \
10481cb0ef41Sopenharmony_ci  V(icm, ICM, 0xBF)   /* type = RS_B  INSERT CHARACTERS UNDER MASK (low)  */
10491cb0ef41Sopenharmony_ci
10501cb0ef41Sopenharmony_ci#define S390_S_OPCODE_LIST(V)                                                  \
10511cb0ef41Sopenharmony_ci  V(lpsw, LPSW, 0x82)         /* type = S     LOAD PSW  */                     \
10521cb0ef41Sopenharmony_ci  V(diagnose, DIAGNOSE, 0x83) /* type = S     DIAGNOSE  */                     \
10531cb0ef41Sopenharmony_ci  V(ts, TS, 0x93)             /* type = S     TEST AND SET  */                 \
10541cb0ef41Sopenharmony_ci  V(stidp, STIDP, 0xB202)     /* type = S     STORE CPU ID  */                 \
10551cb0ef41Sopenharmony_ci  V(sck, SCK, 0xB204)         /* type = S     SET CLOCK  */                    \
10561cb0ef41Sopenharmony_ci  V(stck, STCK, 0xB205)       /* type = S     STORE CLOCK  */                  \
10571cb0ef41Sopenharmony_ci  V(sckc, SCKC, 0xB206)       /* type = S     SET CLOCK COMPARATOR  */         \
10581cb0ef41Sopenharmony_ci  V(stckc, STCKC, 0xB207)     /* type = S     STORE CLOCK COMPARATOR  */       \
10591cb0ef41Sopenharmony_ci  V(spt, SPT, 0xB208)         /* type = S     SET CPU TIMER  */                \
10601cb0ef41Sopenharmony_ci  V(stpt, STPT, 0xB209)       /* type = S     STORE CPU TIMER  */              \
10611cb0ef41Sopenharmony_ci  V(spka, SPKA, 0xB20A)       /* type = S     SET PSW KEY FROM ADDRESS  */     \
10621cb0ef41Sopenharmony_ci  V(ipk, IPK, 0xB20B)         /* type = S     INSERT PSW KEY  */               \
10631cb0ef41Sopenharmony_ci  V(ptlb, PTLB, 0xB20D)       /* type = S     PURGE TLB  */                    \
10641cb0ef41Sopenharmony_ci  V(spx, SPX, 0xB210)         /* type = S     SET PREFIX  */                   \
10651cb0ef41Sopenharmony_ci  V(stpx, STPX, 0xB211)       /* type = S     STORE PREFIX  */                 \
10661cb0ef41Sopenharmony_ci  V(stap, STAP, 0xB212)       /* type = S     STORE CPU ADDRESS  */            \
10671cb0ef41Sopenharmony_ci  V(pc, PC, 0xB218)           /* type = S     PROGRAM CALL  */                 \
10681cb0ef41Sopenharmony_ci  V(sac, SAC, 0xB219)         /* type = S     SET ADDRESS SPACE CONTROL  */    \
10691cb0ef41Sopenharmony_ci  V(cfc, CFC, 0xB21A)         /* type = S     COMPARE AND FORM CODEWORD  */    \
10701cb0ef41Sopenharmony_ci  V(csch, CSCH, 0xB230)       /* type = S     CLEAR SUBCHANNEL  */             \
10711cb0ef41Sopenharmony_ci  V(hsch, HSCH, 0xB231)       /* type = S     HALT SUBCHANNEL  */              \
10721cb0ef41Sopenharmony_ci  V(msch, MSCH, 0xB232)       /* type = S     MODIFY SUBCHANNEL  */            \
10731cb0ef41Sopenharmony_ci  V(ssch, SSCH, 0xB233)       /* type = S     START SUBCHANNEL  */             \
10741cb0ef41Sopenharmony_ci  V(stsch, STSCH, 0xB234)     /* type = S     STORE SUBCHANNEL  */             \
10751cb0ef41Sopenharmony_ci  V(tsch, TSCH, 0xB235)       /* type = S     TEST SUBCHANNEL  */              \
10761cb0ef41Sopenharmony_ci  V(tpi, TPI, 0xB236)         /* type = S     TEST PENDING INTERRUPTION  */    \
10771cb0ef41Sopenharmony_ci  V(sal, SAL, 0xB237)         /* type = S     SET ADDRESS LIMIT  */            \
10781cb0ef41Sopenharmony_ci  V(rsch, RSCH, 0xB238)       /* type = S     RESUME SUBCHANNEL  */            \
10791cb0ef41Sopenharmony_ci  V(stcrw, STCRW, 0xB239)     /* type = S     STORE CHANNEL REPORT WORD  */    \
10801cb0ef41Sopenharmony_ci  V(stcps, STCPS, 0xB23A)     /* type = S     STORE CHANNEL PATH STATUS  */    \
10811cb0ef41Sopenharmony_ci  V(rchp, RCHP, 0xB23B)       /* type = S     RESET CHANNEL PATH  */           \
10821cb0ef41Sopenharmony_ci  V(schm, SCHM, 0xB23C)       /* type = S     SET CHANNEL MONITOR  */          \
10831cb0ef41Sopenharmony_ci  V(xsch, XSCH, 0xB276)       /* type = S     CANCEL SUBCHANNEL  */            \
10841cb0ef41Sopenharmony_ci  V(rp, RP_Z, 0xB277)         /* type = S     RESUME PROGRAM  */               \
10851cb0ef41Sopenharmony_ci  V(stcke, STCKE, 0xB278)     /* type = S     STORE CLOCK EXTENDED  */         \
10861cb0ef41Sopenharmony_ci  V(sacf, SACF, 0xB279)     /* type = S     SET ADDRESS SPACE CONTROL FAST  */ \
10871cb0ef41Sopenharmony_ci  V(stckf, STCKF, 0xB27C)   /* type = S     STORE CLOCK FAST  */               \
10881cb0ef41Sopenharmony_ci  V(stsi, STSI, 0xB27D)     /* type = S     STORE SYSTEM INFORMATION  */       \
10891cb0ef41Sopenharmony_ci  V(srnm, SRNM, 0xB299)     /* type = S     SET BFP ROUNDING MODE (2 bit)  */  \
10901cb0ef41Sopenharmony_ci  V(stfpc, STFPC, 0xB29C)   /* type = S     STORE FPC  */                      \
10911cb0ef41Sopenharmony_ci  V(lfpc, LFPC, 0xB29D)     /* type = S     LOAD FPC  */                       \
10921cb0ef41Sopenharmony_ci  V(stfle, STFLE, 0xB2B0)   /* type = S     STORE FACILITY LIST EXTENDED  */   \
10931cb0ef41Sopenharmony_ci  V(stfl, STFL, 0xB2B1)     /* type = S     STORE FACILITY LIST  */            \
10941cb0ef41Sopenharmony_ci  V(lpswe, LPSWE, 0xB2B2)   /* type = S     LOAD PSW EXTENDED  */              \
10951cb0ef41Sopenharmony_ci  V(srnmb, SRNMB, 0xB2B8)   /* type = S     SET BFP ROUNDING MODE (3 bit)  */  \
10961cb0ef41Sopenharmony_ci  V(srnmt, SRNMT, 0xB2B9)   /* type = S     SET DFP ROUNDING MODE  */          \
10971cb0ef41Sopenharmony_ci  V(lfas, LFAS, 0xB2BD)     /* type = S     LOAD FPC AND SIGNAL  */            \
10981cb0ef41Sopenharmony_ci  V(tend, TEND, 0xB2F8)     /* type = S     TRANSACTION END  */                \
10991cb0ef41Sopenharmony_ci  V(tabort, TABORT, 0xB2FC) /* type = S     TRANSACTION ABORT  */              \
11001cb0ef41Sopenharmony_ci  V(trap4, TRAP4, 0xB2FF)   /* type = S     TRAP  */
11011cb0ef41Sopenharmony_ci
11021cb0ef41Sopenharmony_ci#define S390_RX_A_OPCODE_LIST(V)                                            \
11031cb0ef41Sopenharmony_ci  V(la, LA, 0x41)     /* type = RX_A  LOAD ADDRESS  */                      \
11041cb0ef41Sopenharmony_ci  V(stc, STC, 0x42)   /* type = RX_A  STORE CHARACTER  */                   \
11051cb0ef41Sopenharmony_ci  V(ic_z, IC_z, 0x43) /* type = RX_A  INSERT CHARACTER  */                  \
11061cb0ef41Sopenharmony_ci  V(ex, EX, 0x44)     /* type = RX_A  EXECUTE  */                           \
11071cb0ef41Sopenharmony_ci  V(bal, BAL, 0x45)   /* type = RX_A  BRANCH AND LINK  */                   \
11081cb0ef41Sopenharmony_ci  V(bct, BCT, 0x46)   /* type = RX_A  BRANCH ON COUNT (32)  */              \
11091cb0ef41Sopenharmony_ci  V(lh, LH, 0x48)     /* type = RX_A  LOAD HALFWORD (32<-16)  */            \
11101cb0ef41Sopenharmony_ci  V(ch, CH, 0x49)     /* type = RX_A  COMPARE HALFWORD (32<-16)  */         \
11111cb0ef41Sopenharmony_ci  V(ah, AH, 0x4A)     /* type = RX_A  ADD HALFWORD (32<-16)  */             \
11121cb0ef41Sopenharmony_ci  V(sh, SH, 0x4B)     /* type = RX_A  SUBTRACT HALFWORD (32<-16)  */        \
11131cb0ef41Sopenharmony_ci  V(mh, MH, 0x4C)     /* type = RX_A  MULTIPLY HALFWORD (32<-16)  */        \
11141cb0ef41Sopenharmony_ci  V(bas, BAS, 0x4D)   /* type = RX_A  BRANCH AND SAVE  */                   \
11151cb0ef41Sopenharmony_ci  V(cvd, CVD, 0x4E)   /* type = RX_A  CONVERT TO DECIMAL (32)  */           \
11161cb0ef41Sopenharmony_ci  V(cvb, CVB, 0x4F)   /* type = RX_A  CONVERT TO BINARY (32)  */            \
11171cb0ef41Sopenharmony_ci  V(st, ST, 0x50)     /* type = RX_A  STORE (32)  */                        \
11181cb0ef41Sopenharmony_ci  V(lae, LAE, 0x51)   /* type = RX_A  LOAD ADDRESS EXTENDED  */             \
11191cb0ef41Sopenharmony_ci  V(n, N, 0x54)       /* type = RX_A  AND (32)  */                          \
11201cb0ef41Sopenharmony_ci  V(cl, CL, 0x55)     /* type = RX_A  COMPARE LOGICAL (32)  */              \
11211cb0ef41Sopenharmony_ci  V(o, O, 0x56)       /* type = RX_A  OR (32)  */                           \
11221cb0ef41Sopenharmony_ci  V(x, X, 0x57)       /* type = RX_A  EXCLUSIVE OR (32)  */                 \
11231cb0ef41Sopenharmony_ci  V(l, L, 0x58)       /* type = RX_A  LOAD (32)  */                         \
11241cb0ef41Sopenharmony_ci  V(c, C, 0x59)       /* type = RX_A  COMPARE (32)  */                      \
11251cb0ef41Sopenharmony_ci  V(a, A, 0x5A)       /* type = RX_A  ADD (32)  */                          \
11261cb0ef41Sopenharmony_ci  V(s, S, 0x5B)       /* type = RX_A  SUBTRACT (32)  */                     \
11271cb0ef41Sopenharmony_ci  V(m, M, 0x5C)       /* type = RX_A  MULTIPLY (64<-32)  */                 \
11281cb0ef41Sopenharmony_ci  V(d, D, 0x5D)       /* type = RX_A  DIVIDE (32<-64)  */                   \
11291cb0ef41Sopenharmony_ci  V(al_z, AL, 0x5E)   /* type = RX_A  ADD LOGICAL (32)  */                  \
11301cb0ef41Sopenharmony_ci  V(sl, SL, 0x5F)     /* type = RX_A  SUBTRACT LOGICAL (32)  */             \
11311cb0ef41Sopenharmony_ci  V(std, STD, 0x60)   /* type = RX_A  STORE (long)  */                      \
11321cb0ef41Sopenharmony_ci  V(mxd, MXD, 0x67)   /* type = RX_A  MULTIPLY (long to extended HFP)  */   \
11331cb0ef41Sopenharmony_ci  V(ld, LD, 0x68)     /* type = RX_A  LOAD (long)  */                       \
11341cb0ef41Sopenharmony_ci  V(cd, CD, 0x69)     /* type = RX_A  COMPARE (long HFP)  */                \
11351cb0ef41Sopenharmony_ci  V(ad, AD, 0x6A)     /* type = RX_A  ADD NORMALIZED (long HFP)  */         \
11361cb0ef41Sopenharmony_ci  V(sd, SD, 0x6B)     /* type = RX_A  SUBTRACT NORMALIZED (long HFP)  */    \
11371cb0ef41Sopenharmony_ci  V(md, MD, 0x6C)     /* type = RX_A  MULTIPLY (long HFP)  */               \
11381cb0ef41Sopenharmony_ci  V(dd, DD, 0x6D)     /* type = RX_A  DIVIDE (long HFP)  */                 \
11391cb0ef41Sopenharmony_ci  V(aw, AW, 0x6E)     /* type = RX_A  ADD UNNORMALIZED (long HFP)  */       \
11401cb0ef41Sopenharmony_ci  V(sw, SW, 0x6F)     /* type = RX_A  SUBTRACT UNNORMALIZED (long HFP)  */  \
11411cb0ef41Sopenharmony_ci  V(ste, STE, 0x70)   /* type = RX_A  STORE (short)  */                     \
11421cb0ef41Sopenharmony_ci  V(ms, MS, 0x71)     /* type = RX_A  MULTIPLY SINGLE (32)  */              \
11431cb0ef41Sopenharmony_ci  V(le_z, LE, 0x78)   /* type = RX_A  LOAD (short)  */                      \
11441cb0ef41Sopenharmony_ci  V(ce, CE, 0x79)     /* type = RX_A  COMPARE (short HFP)  */               \
11451cb0ef41Sopenharmony_ci  V(ae, AE, 0x7A)     /* type = RX_A  ADD NORMALIZED (short HFP)  */        \
11461cb0ef41Sopenharmony_ci  V(se, SE, 0x7B)     /* type = RX_A  SUBTRACT NORMALIZED (short HFP)  */   \
11471cb0ef41Sopenharmony_ci  V(mde, MDE, 0x7C)   /* type = RX_A  MULTIPLY (short to long HFP)  */      \
11481cb0ef41Sopenharmony_ci  V(de, DE, 0x7D)     /* type = RX_A  DIVIDE (short HFP)  */                \
11491cb0ef41Sopenharmony_ci  V(au, AU, 0x7E)     /* type = RX_A  ADD UNNORMALIZED (short HFP)  */      \
11501cb0ef41Sopenharmony_ci  V(su, SU, 0x7F)     /* type = RX_A  SUBTRACT UNNORMALIZED (short HFP)  */ \
11511cb0ef41Sopenharmony_ci  V(ssm, SSM, 0x80)   /* type = RX_A  SET SYSTEM MASK  */                   \
11521cb0ef41Sopenharmony_ci  V(lra, LRA, 0xB1)   /* type = RX_A  LOAD REAL ADDRESS (32)  */            \
11531cb0ef41Sopenharmony_ci  V(sth, STH, 0x40)   /* type = RX_A  STORE HALFWORD (16)  */
11541cb0ef41Sopenharmony_ci
11551cb0ef41Sopenharmony_ci#define S390_RX_B_OPCODE_LIST(V) \
11561cb0ef41Sopenharmony_ci  V(bc, BC, 0x47) /* type = RX_B  BRANCH ON CONDITION  */
11571cb0ef41Sopenharmony_ci
11581cb0ef41Sopenharmony_ci#define S390_RIE_A_OPCODE_LIST(V)                                              \
11591cb0ef41Sopenharmony_ci  V(cgit, CGIT, 0xEC70) /* type = RIE_A COMPARE IMMEDIATE AND TRAP (64<-16) */ \
11601cb0ef41Sopenharmony_ci  V(clgit, CLGIT,                                                              \
11611cb0ef41Sopenharmony_ci    0xEC71) /* type = RIE_A COMPARE LOGICAL IMMEDIATE AND TRAP (64<-16)  */    \
11621cb0ef41Sopenharmony_ci  V(cit, CIT, 0xEC72) /* type = RIE_A COMPARE IMMEDIATE AND TRAP (32<-16)  */  \
11631cb0ef41Sopenharmony_ci  V(clfit, CLFIT,                                                              \
11641cb0ef41Sopenharmony_ci    0xEC73) /* type = RIE_A COMPARE LOGICAL IMMEDIATE AND TRAP (32<-16)  */
11651cb0ef41Sopenharmony_ci
11661cb0ef41Sopenharmony_ci#define S390_RRD_OPCODE_LIST(V)                                                \
11671cb0ef41Sopenharmony_ci  V(maebr, MAEBR, 0xB30E) /* type = RRD   MULTIPLY AND ADD (short BFP)  */     \
11681cb0ef41Sopenharmony_ci  V(msebr, MSEBR, 0xB30F) /* type = RRD   MULTIPLY AND SUBTRACT (short BFP) */ \
11691cb0ef41Sopenharmony_ci  V(madbr, MADBR, 0xB31E) /* type = RRD   MULTIPLY AND ADD (long BFP)  */      \
11701cb0ef41Sopenharmony_ci  V(msdbr, MSDBR, 0xB31F) /* type = RRD   MULTIPLY AND SUBTRACT (long BFP)  */ \
11711cb0ef41Sopenharmony_ci  V(maer, MAER, 0xB32E)   /* type = RRD   MULTIPLY AND ADD (short HFP)  */     \
11721cb0ef41Sopenharmony_ci  V(mser, MSER, 0xB32F) /* type = RRD   MULTIPLY AND SUBTRACT (short HFP)  */  \
11731cb0ef41Sopenharmony_ci  V(maylr, MAYLR,                                                              \
11741cb0ef41Sopenharmony_ci    0xB338) /* type = RRD   MULTIPLY AND ADD UNNRM. (long to ext. low HFP)  */ \
11751cb0ef41Sopenharmony_ci  V(mylr, MYLR,                                                                \
11761cb0ef41Sopenharmony_ci    0xB339) /* type = RRD   MULTIPLY UNNORM. (long to ext. low HFP)  */        \
11771cb0ef41Sopenharmony_ci  V(mayr, MAYR,                                                                \
11781cb0ef41Sopenharmony_ci    0xB33A) /* type = RRD   MULTIPLY & ADD UNNORMALIZED (long to ext. HFP)  */ \
11791cb0ef41Sopenharmony_ci  V(myr, MYR,                                                                  \
11801cb0ef41Sopenharmony_ci    0xB33B) /* type = RRD   MULTIPLY UNNORMALIZED (long to ext. HFP)  */       \
11811cb0ef41Sopenharmony_ci  V(mayhr, MAYHR,                                                              \
11821cb0ef41Sopenharmony_ci    0xB33C) /* type = RRD   MULTIPLY AND ADD UNNRM. (long to ext. high HFP) */ \
11831cb0ef41Sopenharmony_ci  V(myhr, MYHR,                                                                \
11841cb0ef41Sopenharmony_ci    0xB33D) /* type = RRD   MULTIPLY UNNORM. (long to ext. high HFP)  */       \
11851cb0ef41Sopenharmony_ci  V(madr, MADR, 0xB33E) /* type = RRD   MULTIPLY AND ADD (long HFP)  */        \
11861cb0ef41Sopenharmony_ci  V(msdr, MSDR, 0xB33F) /* type = RRD   MULTIPLY AND SUBTRACT (long HFP)  */
11871cb0ef41Sopenharmony_ci
11881cb0ef41Sopenharmony_ci#define S390_RIE_B_OPCODE_LIST(V)                                            \
11891cb0ef41Sopenharmony_ci  V(cgrj, CGRJ, 0xEC64) /* type = RIE_B COMPARE AND BRANCH RELATIVE (64)  */ \
11901cb0ef41Sopenharmony_ci  V(clgrj, CLGRJ,                                                            \
11911cb0ef41Sopenharmony_ci    0xEC65) /* type = RIE_B COMPARE LOGICAL AND BRANCH RELATIVE (64)  */     \
11921cb0ef41Sopenharmony_ci  V(crj, CRJ, 0xEC76) /* type = RIE_B COMPARE AND BRANCH RELATIVE (32)  */   \
11931cb0ef41Sopenharmony_ci  V(clrj, CLRJ,                                                              \
11941cb0ef41Sopenharmony_ci    0xEC77) /* type = RIE_B COMPARE LOGICAL AND BRANCH RELATIVE (32)  */
11951cb0ef41Sopenharmony_ci
11961cb0ef41Sopenharmony_ci#define S390_RRE_OPCODE_LIST(V)                                                \
11971cb0ef41Sopenharmony_ci  V(ipm, IPM, 0xB222)     /* type = RRE   INSERT PROGRAM MASK  */              \
11981cb0ef41Sopenharmony_ci  V(ivsk, IVSK, 0xB223)   /* type = RRE   INSERT VIRTUAL STORAGE KEY  */       \
11991cb0ef41Sopenharmony_ci  V(iac, IAC, 0xB224)     /* type = RRE   INSERT ADDRESS SPACE CONTROL  */     \
12001cb0ef41Sopenharmony_ci  V(ssar, SSAR, 0xB225)   /* type = RRE   SET SECONDARY ASN  */                \
12011cb0ef41Sopenharmony_ci  V(epar, EPAR, 0xB226)   /* type = RRE   EXTRACT PRIMARY ASN  */              \
12021cb0ef41Sopenharmony_ci  V(esar, ESAR, 0xB227)   /* type = RRE   EXTRACT SECONDARY ASN  */            \
12031cb0ef41Sopenharmony_ci  V(pt, PT, 0xB228)       /* type = RRE   PROGRAM TRANSFER  */                 \
12041cb0ef41Sopenharmony_ci  V(iske, ISKE, 0xB229)   /* type = RRE   INSERT STORAGE KEY EXTENDED  */      \
12051cb0ef41Sopenharmony_ci  V(rrbe, RRBE, 0xB22A)   /* type = RRE   RESET REFERENCE BIT EXTENDED  */     \
12061cb0ef41Sopenharmony_ci  V(tb, TB_, 0xB22C)      /* type = RRE   TEST BLOCK  */                       \
12071cb0ef41Sopenharmony_ci  V(dxr, DXR, 0xB22D)     /* type = RRE   DIVIDE (extended HFP)  */            \
12081cb0ef41Sopenharmony_ci  V(pgin, PGIN, 0xB22E)   /* type = RRE   PAGE IN  */                          \
12091cb0ef41Sopenharmony_ci  V(pgout, PGOUT, 0xB22F) /* type = RRE   PAGE OUT  */                         \
12101cb0ef41Sopenharmony_ci  V(bakr, BAKR, 0xB240)   /* type = RRE   BRANCH AND STACK  */                 \
12111cb0ef41Sopenharmony_ci  V(cksm, CKSM, 0xB241)   /* type = RRE   CHECKSUM  */                         \
12121cb0ef41Sopenharmony_ci  V(sqdr, SQDR, 0xB244)   /* type = RRE   SQUARE ROOT (long HFP)  */           \
12131cb0ef41Sopenharmony_ci  V(sqer, SQER, 0xB245)   /* type = RRE   SQUARE ROOT (short HFP)  */          \
12141cb0ef41Sopenharmony_ci  V(stura, STURA, 0xB246) /* type = RRE   STORE USING REAL ADDRESS (32)  */    \
12151cb0ef41Sopenharmony_ci  V(msta, MSTA, 0xB247)   /* type = RRE   MODIFY STACKED STATE  */             \
12161cb0ef41Sopenharmony_ci  V(palb, PALB, 0xB248)   /* type = RRE   PURGE ALB  */                        \
12171cb0ef41Sopenharmony_ci  V(ereg, EREG, 0xB249)   /* type = RRE   EXTRACT STACKED REGISTERS (32)  */   \
12181cb0ef41Sopenharmony_ci  V(esta, ESTA, 0xB24A)   /* type = RRE   EXTRACT STACKED STATE  */            \
12191cb0ef41Sopenharmony_ci  V(lura, LURA, 0xB24B)   /* type = RRE   LOAD USING REAL ADDRESS (32)  */     \
12201cb0ef41Sopenharmony_ci  V(tar, TAR, 0xB24C)     /* type = RRE   TEST ACCESS  */                      \
12211cb0ef41Sopenharmony_ci  V(cpya, CPYA, 0xB24D)   /* type = RRE   COPY ACCESS  */                      \
12221cb0ef41Sopenharmony_ci  V(sar, SAR, 0xB24E)     /* type = RRE   SET ACCESS  */                       \
12231cb0ef41Sopenharmony_ci  V(ear, EAR, 0xB24F)     /* type = RRE   EXTRACT ACCESS  */                   \
12241cb0ef41Sopenharmony_ci  V(csp, CSP, 0xB250)     /* type = RRE   COMPARE AND SWAP AND PURGE (32)  */  \
12251cb0ef41Sopenharmony_ci  V(msr, MSR, 0xB252)     /* type = RRE   MULTIPLY SINGLE (32)  */             \
12261cb0ef41Sopenharmony_ci  V(mvpg, MVPG, 0xB254)   /* type = RRE   MOVE PAGE  */                        \
12271cb0ef41Sopenharmony_ci  V(mvst, MVST, 0xB255)   /* type = RRE   MOVE STRING  */                      \
12281cb0ef41Sopenharmony_ci  V(cuse, CUSE, 0xB257)   /* type = RRE   COMPARE UNTIL SUBSTRING EQUAL  */    \
12291cb0ef41Sopenharmony_ci  V(bsg, BSG, 0xB258)     /* type = RRE   BRANCH IN SUBSPACE GROUP  */         \
12301cb0ef41Sopenharmony_ci  V(bsa, BSA, 0xB25A)     /* type = RRE   BRANCH AND SET AUTHORITY  */         \
12311cb0ef41Sopenharmony_ci  V(clst, CLST, 0xB25D)   /* type = RRE   COMPARE LOGICAL STRING  */           \
12321cb0ef41Sopenharmony_ci  V(srst, SRST, 0xB25E)   /* type = RRE   SEARCH STRING  */                    \
12331cb0ef41Sopenharmony_ci  V(cmpsc, CMPSC, 0xB263) /* type = RRE   COMPRESSION CALL  */                 \
12341cb0ef41Sopenharmony_ci  V(tre, TRE, 0xB2A5)     /* type = RRE   TRANSLATE EXTENDED  */               \
12351cb0ef41Sopenharmony_ci  V(etnd, ETND, 0xB2EC) /* type = RRE   EXTRACT TRANSACTION NESTING DEPTH  */  \
12361cb0ef41Sopenharmony_ci  V(lpebr, LPEBR, 0xB300) /* type = RRE   LOAD POSITIVE (short BFP)  */        \
12371cb0ef41Sopenharmony_ci  V(lnebr, LNEBR, 0xB301) /* type = RRE   LOAD NEGATIVE (short BFP)  */        \
12381cb0ef41Sopenharmony_ci  V(ltebr, LTEBR, 0xB302) /* type = RRE   LOAD AND TEST (short BFP)  */        \
12391cb0ef41Sopenharmony_ci  V(lcebr, LCEBR, 0xB303) /* type = RRE   LOAD COMPLEMENT (short BFP)  */      \
12401cb0ef41Sopenharmony_ci  V(ldebr, LDEBR,                                                              \
12411cb0ef41Sopenharmony_ci    0xB304) /* type = RRE   LOAD LENGTHENED (short to long BFP)  */            \
12421cb0ef41Sopenharmony_ci  V(lxdbr, LXDBR,                                                              \
12431cb0ef41Sopenharmony_ci    0xB305) /* type = RRE   LOAD LENGTHENED (long to extended BFP)  */         \
12441cb0ef41Sopenharmony_ci  V(lxebr, LXEBR,                                                              \
12451cb0ef41Sopenharmony_ci    0xB306) /* type = RRE   LOAD LENGTHENED (short to extended BFP)  */        \
12461cb0ef41Sopenharmony_ci  V(mxdbr, MXDBR, 0xB307) /* type = RRE   MULTIPLY (long to extended BFP)  */  \
12471cb0ef41Sopenharmony_ci  V(kebr, KEBR, 0xB308)   /* type = RRE   COMPARE AND SIGNAL (short BFP)  */   \
12481cb0ef41Sopenharmony_ci  V(cebr, CEBR, 0xB309)   /* type = RRE   COMPARE (short BFP)  */              \
12491cb0ef41Sopenharmony_ci  V(aebr, AEBR, 0xB30A)   /* type = RRE   ADD (short BFP)  */                  \
12501cb0ef41Sopenharmony_ci  V(sebr, SEBR, 0xB30B)   /* type = RRE   SUBTRACT (short BFP)  */             \
12511cb0ef41Sopenharmony_ci  V(mdebr, MDEBR, 0xB30C) /* type = RRE   MULTIPLY (short to long BFP)  */     \
12521cb0ef41Sopenharmony_ci  V(debr, DEBR, 0xB30D)   /* type = RRE   DIVIDE (short BFP)  */               \
12531cb0ef41Sopenharmony_ci  V(lpdbr, LPDBR, 0xB310) /* type = RRE   LOAD POSITIVE (long BFP)  */         \
12541cb0ef41Sopenharmony_ci  V(lndbr, LNDBR, 0xB311) /* type = RRE   LOAD NEGATIVE (long BFP)  */         \
12551cb0ef41Sopenharmony_ci  V(ltdbr, LTDBR, 0xB312) /* type = RRE   LOAD AND TEST (long BFP)  */         \
12561cb0ef41Sopenharmony_ci  V(lcdbr, LCDBR, 0xB313) /* type = RRE   LOAD COMPLEMENT (long BFP)  */       \
12571cb0ef41Sopenharmony_ci  V(sqebr, SQEBR, 0xB314) /* type = RRE   SQUARE ROOT (short BFP)  */          \
12581cb0ef41Sopenharmony_ci  V(sqdbr, SQDBR, 0xB315) /* type = RRE   SQUARE ROOT (long BFP)  */           \
12591cb0ef41Sopenharmony_ci  V(sqxbr, SQXBR, 0xB316) /* type = RRE   SQUARE ROOT (extended BFP)  */       \
12601cb0ef41Sopenharmony_ci  V(meebr, MEEBR, 0xB317) /* type = RRE   MULTIPLY (short BFP)  */             \
12611cb0ef41Sopenharmony_ci  V(kdbr, KDBR, 0xB318)   /* type = RRE   COMPARE AND SIGNAL (long BFP)  */    \
12621cb0ef41Sopenharmony_ci  V(cdbr, CDBR, 0xB319)   /* type = RRE   COMPARE (long BFP)  */               \
12631cb0ef41Sopenharmony_ci  V(adbr, ADBR, 0xB31A)   /* type = RRE   ADD (long BFP)  */                   \
12641cb0ef41Sopenharmony_ci  V(sdbr, SDBR, 0xB31B)   /* type = RRE   SUBTRACT (long BFP)  */              \
12651cb0ef41Sopenharmony_ci  V(mdbr, MDBR, 0xB31C)   /* type = RRE   MULTIPLY (long BFP)  */              \
12661cb0ef41Sopenharmony_ci  V(ddbr, DDBR, 0xB31D)   /* type = RRE   DIVIDE (long BFP)  */                \
12671cb0ef41Sopenharmony_ci  V(lder, LDER, 0xB324) /* type = RRE   LOAD LENGTHENED (short to long HFP) */ \
12681cb0ef41Sopenharmony_ci  V(lxdr, LXDR,                                                                \
12691cb0ef41Sopenharmony_ci    0xB325) /* type = RRE   LOAD LENGTHENED (long to extended HFP)  */         \
12701cb0ef41Sopenharmony_ci  V(lxer, LXER,                                                                \
12711cb0ef41Sopenharmony_ci    0xB326) /* type = RRE   LOAD LENGTHENED (short to extended HFP)  */        \
12721cb0ef41Sopenharmony_ci  V(sqxr, SQXR, 0xB336)   /* type = RRE   SQUARE ROOT (extended HFP)  */       \
12731cb0ef41Sopenharmony_ci  V(meer, MEER, 0xB337)   /* type = RRE   MULTIPLY (short HFP)  */             \
12741cb0ef41Sopenharmony_ci  V(lpxbr, LPXBR, 0xB340) /* type = RRE   LOAD POSITIVE (extended BFP)  */     \
12751cb0ef41Sopenharmony_ci  V(lnxbr, LNXBR, 0xB341) /* type = RRE   LOAD NEGATIVE (extended BFP)  */     \
12761cb0ef41Sopenharmony_ci  V(ltxbr, LTXBR, 0xB342) /* type = RRE   LOAD AND TEST (extended BFP)  */     \
12771cb0ef41Sopenharmony_ci  V(lcxbr, LCXBR, 0xB343) /* type = RRE   LOAD COMPLEMENT (extended BFP)  */   \
12781cb0ef41Sopenharmony_ci  V(kxbr, KXBR, 0xB348) /* type = RRE   COMPARE AND SIGNAL (extended BFP)  */  \
12791cb0ef41Sopenharmony_ci  V(cxbr, CXBR, 0xB349) /* type = RRE   COMPARE (extended BFP)  */             \
12801cb0ef41Sopenharmony_ci  V(axbr, AXBR, 0xB34A) /* type = RRE   ADD (extended BFP)  */                 \
12811cb0ef41Sopenharmony_ci  V(sxbr, SXBR, 0xB34B) /* type = RRE   SUBTRACT (extended BFP)  */            \
12821cb0ef41Sopenharmony_ci  V(mxbr, MXBR, 0xB34C) /* type = RRE   MULTIPLY (extended BFP)  */            \
12831cb0ef41Sopenharmony_ci  V(dxbr, DXBR, 0xB34D) /* type = RRE   DIVIDE (extended BFP)  */              \
12841cb0ef41Sopenharmony_ci  V(thder, THDER,                                                              \
12851cb0ef41Sopenharmony_ci    0xB358)             /* type = RRE   CONVERT BFP TO HFP (short to long)  */ \
12861cb0ef41Sopenharmony_ci  V(thdr, THDR, 0xB359) /* type = RRE   CONVERT BFP TO HFP (long)  */          \
12871cb0ef41Sopenharmony_ci  V(lpxr, LPXR, 0xB360) /* type = RRE   LOAD POSITIVE (extended HFP)  */       \
12881cb0ef41Sopenharmony_ci  V(lnxr, LNXR, 0xB361) /* type = RRE   LOAD NEGATIVE (extended HFP)  */       \
12891cb0ef41Sopenharmony_ci  V(ltxr, LTXR, 0xB362) /* type = RRE   LOAD AND TEST (extended HFP)  */       \
12901cb0ef41Sopenharmony_ci  V(lcxr, LCXR, 0xB363) /* type = RRE   LOAD COMPLEMENT (extended HFP)  */     \
12911cb0ef41Sopenharmony_ci  V(lxr, LXR, 0xB365)   /* type = RRE   LOAD (extended)  */                    \
12921cb0ef41Sopenharmony_ci  V(lexr, LEXR,                                                                \
12931cb0ef41Sopenharmony_ci    0xB366) /* type = RRE   LOAD ROUNDED (extended to short HFP)  */           \
12941cb0ef41Sopenharmony_ci  V(fixr, FIXR, 0xB367)   /* type = RRE   LOAD FP INTEGER (extended HFP)  */   \
12951cb0ef41Sopenharmony_ci  V(cxr, CXR, 0xB369)     /* type = RRE   COMPARE (extended HFP)  */           \
12961cb0ef41Sopenharmony_ci  V(lpdfr, LPDFR, 0xB370) /* type = RRE   LOAD POSITIVE (long)  */             \
12971cb0ef41Sopenharmony_ci  V(lndfr, LNDFR, 0xB371) /* type = RRE   LOAD NEGATIVE (long)  */             \
12981cb0ef41Sopenharmony_ci  V(lcdfr, LCDFR, 0xB373) /* type = RRE   LOAD COMPLEMENT (long)  */           \
12991cb0ef41Sopenharmony_ci  V(lzer, LZER, 0xB374)   /* type = RRE   LOAD ZERO (short)  */                \
13001cb0ef41Sopenharmony_ci  V(lzdr, LZDR, 0xB375)   /* type = RRE   LOAD ZERO (long)  */                 \
13011cb0ef41Sopenharmony_ci  V(lzxr, LZXR, 0xB376)   /* type = RRE   LOAD ZERO (extended)  */             \
13021cb0ef41Sopenharmony_ci  V(fier, FIER, 0xB377)   /* type = RRE   LOAD FP INTEGER (short HFP)  */      \
13031cb0ef41Sopenharmony_ci  V(fidr, FIDR, 0xB37F)   /* type = RRE   LOAD FP INTEGER (long HFP)  */       \
13041cb0ef41Sopenharmony_ci  V(sfpc, SFPC, 0xB384)   /* type = RRE   SET FPC  */                          \
13051cb0ef41Sopenharmony_ci  V(sfasr, SFASR, 0xB385) /* type = RRE   SET FPC AND SIGNAL  */               \
13061cb0ef41Sopenharmony_ci  V(efpc, EFPC, 0xB38C)   /* type = RRE   EXTRACT FPC  */                      \
13071cb0ef41Sopenharmony_ci  V(cefr, CEFR,                                                                \
13081cb0ef41Sopenharmony_ci    0xB3B4) /* type = RRE   CONVERT FROM FIXED (32 to short HFP)  */           \
13091cb0ef41Sopenharmony_ci  V(cdfr, CDFR, 0xB3B5) /* type = RRE   CONVERT FROM FIXED (32 to long HFP) */ \
13101cb0ef41Sopenharmony_ci  V(cxfr, CXFR,                                                                \
13111cb0ef41Sopenharmony_ci    0xB3B6) /* type = RRE   CONVERT FROM FIXED (32 to extended HFP)  */        \
13121cb0ef41Sopenharmony_ci  V(ldgr, LDGR, 0xB3C1) /* type = RRE   LOAD FPR FROM GR (64 to long)  */      \
13131cb0ef41Sopenharmony_ci  V(cegr, CEGR,                                                                \
13141cb0ef41Sopenharmony_ci    0xB3C4) /* type = RRE   CONVERT FROM FIXED (64 to short HFP)  */           \
13151cb0ef41Sopenharmony_ci  V(cdgr, CDGR, 0xB3C5) /* type = RRE   CONVERT FROM FIXED (64 to long HFP) */ \
13161cb0ef41Sopenharmony_ci  V(cxgr, CXGR,                                                                \
13171cb0ef41Sopenharmony_ci    0xB3C6) /* type = RRE   CONVERT FROM FIXED (64 to extended HFP)  */        \
13181cb0ef41Sopenharmony_ci  V(lgdr, LGDR, 0xB3CD)   /* type = RRE   LOAD GR FROM FPR (long to 64)  */    \
13191cb0ef41Sopenharmony_ci  V(ltdtr, LTDTR, 0xB3D6) /* type = RRE   LOAD AND TEST (long DFP)  */         \
13201cb0ef41Sopenharmony_ci  V(ltxtr, LTXTR, 0xB3DE) /* type = RRE   LOAD AND TEST (extended DFP)  */     \
13211cb0ef41Sopenharmony_ci  V(kdtr, KDTR, 0xB3E0)   /* type = RRE   COMPARE AND SIGNAL (long DFP)  */    \
13221cb0ef41Sopenharmony_ci  V(cudtr, CUDTR, 0xB3E2) /* type = RRE   CONVERT TO UNSIGNED PACKED (long */  \
13231cb0ef41Sopenharmony_ci                          /* DFP to 64) CUDTR  */                              \
13241cb0ef41Sopenharmony_ci  V(cdtr, CDTR, 0xB3E4)   /* type = RRE   COMPARE (long DFP)  */               \
13251cb0ef41Sopenharmony_ci  V(eedtr, EEDTR,                                                              \
13261cb0ef41Sopenharmony_ci    0xB3E5) /* type = RRE   EXTRACT BIASED EXPONENT (long DFP to 64)  */       \
13271cb0ef41Sopenharmony_ci  V(esdtr, ESDTR,                                                              \
13281cb0ef41Sopenharmony_ci    0xB3E7) /* type = RRE   EXTRACT SIGNIFICANCE (long DFP to 64)  */          \
13291cb0ef41Sopenharmony_ci  V(kxtr, KXTR, 0xB3E8) /* type = RRE   COMPARE AND SIGNAL (extended DFP)  */  \
13301cb0ef41Sopenharmony_ci  V(cuxtr, CUXTR,                                                              \
13311cb0ef41Sopenharmony_ci    0xB3EA) /* type = RRE   CONVERT TO UNSIGNED PACKED (extended DFP       */  \
13321cb0ef41Sopenharmony_ci            /* CUXTR to 128)  */                                               \
13331cb0ef41Sopenharmony_ci  V(cxtr, CXTR, 0xB3EC) /* type = RRE   COMPARE (extended DFP)  */             \
13341cb0ef41Sopenharmony_ci  V(eextr, EEXTR,                                                              \
13351cb0ef41Sopenharmony_ci    0xB3ED) /* type = RRE   EXTRACT BIASED EXPONENT (extended DFP to 64)  */   \
13361cb0ef41Sopenharmony_ci  V(esxtr, ESXTR,                                                              \
13371cb0ef41Sopenharmony_ci    0xB3EF) /* type = RRE   EXTRACT SIGNIFICANCE (extended DFP to 64)  */      \
13381cb0ef41Sopenharmony_ci  V(cdutr, CDUTR,                                                              \
13391cb0ef41Sopenharmony_ci    0xB3F2) /* type = RRE   CONVERT FROM UNSIGNED PACKED (64 to long DFP)  */  \
13401cb0ef41Sopenharmony_ci  V(cdstr, CDSTR,                                                              \
13411cb0ef41Sopenharmony_ci    0xB3F3) /* type = RRE   CONVERT FROM SIGNED PACKED (64 to long DFP)  */    \
13421cb0ef41Sopenharmony_ci  V(cedtr, CEDTR,                                                              \
13431cb0ef41Sopenharmony_ci    0xB3F4) /* type = RRE   COMPARE BIASED EXPONENT (long DFP)  */             \
13441cb0ef41Sopenharmony_ci  V(cxutr, CXUTR,                                                              \
13451cb0ef41Sopenharmony_ci    0xB3FA) /* type = RRE   CONVERT FROM UNSIGNED PACKED (128 to ext. DFP)  */ \
13461cb0ef41Sopenharmony_ci  V(cxstr, CXSTR, 0xB3FB) /* type = RRE   CONVERT FROM SIGNED PACKED (128 to*/ \
13471cb0ef41Sopenharmony_ci                          /* extended DFP)  */                                 \
13481cb0ef41Sopenharmony_ci  V(cextr, CEXTR,                                                              \
13491cb0ef41Sopenharmony_ci    0xB3FC) /* type = RRE   COMPARE BIASED EXPONENT (extended DFP)  */         \
13501cb0ef41Sopenharmony_ci  V(lpgr, LPGR, 0xB900)   /* type = RRE   LOAD POSITIVE (64)  */               \
13511cb0ef41Sopenharmony_ci  V(lngr, LNGR, 0xB901)   /* type = RRE   LOAD NEGATIVE (64)  */               \
13521cb0ef41Sopenharmony_ci  V(ltgr, LTGR, 0xB902)   /* type = RRE   LOAD AND TEST (64)  */               \
13531cb0ef41Sopenharmony_ci  V(lcgr, LCGR, 0xB903)   /* type = RRE   LOAD COMPLEMENT (64)  */             \
13541cb0ef41Sopenharmony_ci  V(lgr, LGR, 0xB904)     /* type = RRE   LOAD (64)  */                        \
13551cb0ef41Sopenharmony_ci  V(lurag, LURAG, 0xB905) /* type = RRE   LOAD USING REAL ADDRESS (64)  */     \
13561cb0ef41Sopenharmony_ci  V(lgbr, LGBR, 0xB906)   /* type = RRE   LOAD BYTE (64<-8)  */                \
13571cb0ef41Sopenharmony_ci  V(lghr, LGHR, 0xB907)   /* type = RRE   LOAD HALFWORD (64<-16)  */           \
13581cb0ef41Sopenharmony_ci  V(agr, AGR, 0xB908)     /* type = RRE   ADD (64)  */                         \
13591cb0ef41Sopenharmony_ci  V(sgr, SGR, 0xB909)     /* type = RRE   SUBTRACT (64)  */                    \
13601cb0ef41Sopenharmony_ci  V(algr, ALGR, 0xB90A)   /* type = RRE   ADD LOGICAL (64)  */                 \
13611cb0ef41Sopenharmony_ci  V(slgr, SLGR, 0xB90B)   /* type = RRE   SUBTRACT LOGICAL (64)  */            \
13621cb0ef41Sopenharmony_ci  V(msgr, MSGR, 0xB90C)   /* type = RRE   MULTIPLY SINGLE (64)  */             \
13631cb0ef41Sopenharmony_ci  V(dsgr, DSGR, 0xB90D)   /* type = RRE   DIVIDE SINGLE (64)  */               \
13641cb0ef41Sopenharmony_ci  V(eregg, EREGG, 0xB90E) /* type = RRE   EXTRACT STACKED REGISTERS (64)  */   \
13651cb0ef41Sopenharmony_ci  V(lrvgr, LRVGR, 0xB90F) /* type = RRE   LOAD REVERSED (64)  */               \
13661cb0ef41Sopenharmony_ci  V(lpgfr, LPGFR, 0xB910) /* type = RRE   LOAD POSITIVE (64<-32)  */           \
13671cb0ef41Sopenharmony_ci  V(lngfr, LNGFR, 0xB911) /* type = RRE   LOAD NEGATIVE (64<-32)  */           \
13681cb0ef41Sopenharmony_ci  V(ltgfr, LTGFR, 0xB912) /* type = RRE   LOAD AND TEST (64<-32)  */           \
13691cb0ef41Sopenharmony_ci  V(lcgfr, LCGFR, 0xB913) /* type = RRE   LOAD COMPLEMENT (64<-32)  */         \
13701cb0ef41Sopenharmony_ci  V(lgfr, LGFR, 0xB914)   /* type = RRE   LOAD (64<-32)  */                    \
13711cb0ef41Sopenharmony_ci  V(llgfr, LLGFR, 0xB916) /* type = RRE   LOAD LOGICAL (64<-32)  */            \
13721cb0ef41Sopenharmony_ci  V(llgtr, LLGTR,                                                              \
13731cb0ef41Sopenharmony_ci    0xB917) /* type = RRE   LOAD LOGICAL THIRTY ONE BITS (64<-31)  */          \
13741cb0ef41Sopenharmony_ci  V(agfr, AGFR, 0xB918)   /* type = RRE   ADD (64<-32)  */                     \
13751cb0ef41Sopenharmony_ci  V(sgfr, SGFR, 0xB919)   /* type = RRE   SUBTRACT (64<-32)  */                \
13761cb0ef41Sopenharmony_ci  V(algfr, ALGFR, 0xB91A) /* type = RRE   ADD LOGICAL (64<-32)  */             \
13771cb0ef41Sopenharmony_ci  V(slgfr, SLGFR, 0xB91B) /* type = RRE   SUBTRACT LOGICAL (64<-32)  */        \
13781cb0ef41Sopenharmony_ci  V(msgfr, MSGFR, 0xB91C) /* type = RRE   MULTIPLY SINGLE (64<-32)  */         \
13791cb0ef41Sopenharmony_ci  V(dsgfr, DSGFR, 0xB91D) /* type = RRE   DIVIDE SINGLE (64<-32)  */           \
13801cb0ef41Sopenharmony_ci  V(kmac, KMAC, 0xB91E) /* type = RRE   COMPUTE MESSAGE AUTHENTICATION CODE */ \
13811cb0ef41Sopenharmony_ci  V(lrvr, LRVR, 0xB91F) /* type = RRE   LOAD REVERSED (32)  */                 \
13821cb0ef41Sopenharmony_ci  V(cgr, CGR, 0xB920)   /* type = RRE   COMPARE (64)  */                       \
13831cb0ef41Sopenharmony_ci  V(clgr, CLGR, 0xB921) /* type = RRE   COMPARE LOGICAL (64)  */               \
13841cb0ef41Sopenharmony_ci  V(sturg, STURG, 0xB925) /* type = RRE   STORE USING REAL ADDRESS (64)  */    \
13851cb0ef41Sopenharmony_ci  V(lbr, LBR, 0xB926)     /* type = RRE   LOAD BYTE (32<-8)  */                \
13861cb0ef41Sopenharmony_ci  V(lhr, LHR, 0xB927)     /* type = RRE   LOAD HALFWORD (32<-16)  */           \
13871cb0ef41Sopenharmony_ci  V(pckmo, PCKMO,                                                              \
13881cb0ef41Sopenharmony_ci    0xB928) /* type = RRE   PERFORM CRYPTOGRAPHIC KEY MGMT. OPERATIONS  */     \
13891cb0ef41Sopenharmony_ci  V(kmf, KMF, 0xB92A) /* type = RRE   CIPHER MESSAGE WITH CIPHER FEEDBACK  */  \
13901cb0ef41Sopenharmony_ci  V(kmo, KMO, 0xB92B) /* type = RRE   CIPHER MESSAGE WITH OUTPUT FEEDBACK  */  \
13911cb0ef41Sopenharmony_ci  V(pcc, PCC, 0xB92C) /* type = RRE   PERFORM CRYPTOGRAPHIC COMPUTATION  */    \
13921cb0ef41Sopenharmony_ci  V(km, KM, 0xB92E)   /* type = RRE   CIPHER MESSAGE  */                       \
13931cb0ef41Sopenharmony_ci  V(kmc, KMC, 0xB92F) /* type = RRE   CIPHER MESSAGE WITH CHAINING  */         \
13941cb0ef41Sopenharmony_ci  V(cgfr, CGFR, 0xB930)   /* type = RRE   COMPARE (64<-32)  */                 \
13951cb0ef41Sopenharmony_ci  V(clgfr, CLGFR, 0xB931) /* type = RRE   COMPARE LOGICAL (64<-32)  */         \
13961cb0ef41Sopenharmony_ci  V(ppno, PPNO,                                                                \
13971cb0ef41Sopenharmony_ci    0xB93C) /* type = RRE   PERFORM PSEUDORANDOM NUMBER OPERATION  */          \
13981cb0ef41Sopenharmony_ci  V(kimd, KIMD, 0xB93E) /* type = RRE   COMPUTE INTERMEDIATE MESSAGE DIGEST */ \
13991cb0ef41Sopenharmony_ci  V(klmd, KLMD, 0xB93F) /* type = RRE   COMPUTE LAST MESSAGE DIGEST  */        \
14001cb0ef41Sopenharmony_ci  V(bctgr, BCTGR, 0xB946) /* type = RRE   BRANCH ON COUNT (64)  */             \
14011cb0ef41Sopenharmony_ci  V(cdftr, CDFTR,                                                              \
14021cb0ef41Sopenharmony_ci    0xB951) /* type = RRE   CONVERT FROM FIXED (32 to long DFP)  */            \
14031cb0ef41Sopenharmony_ci  V(cxftr, CXFTR,                                                              \
14041cb0ef41Sopenharmony_ci    0xB959) /* type = RRE   CONVERT FROM FIXED (32 to extended DFP)  */        \
14051cb0ef41Sopenharmony_ci  V(ngr, NGR, 0xB980)     /* type = RRE   AND (64)  */                         \
14061cb0ef41Sopenharmony_ci  V(ogr, OGR, 0xB981)     /* type = RRE   OR (64)  */                          \
14071cb0ef41Sopenharmony_ci  V(xgr, XGR, 0xB982)     /* type = RRE   EXCLUSIVE OR (64)  */                \
14081cb0ef41Sopenharmony_ci  V(flogr, FLOGR, 0xB983) /* type = RRE   FIND LEFTMOST ONE  */                \
14091cb0ef41Sopenharmony_ci  V(llgcr, LLGCR, 0xB984) /* type = RRE   LOAD LOGICAL CHARACTER (64<-8)  */   \
14101cb0ef41Sopenharmony_ci  V(llghr, LLGHR, 0xB985) /* type = RRE   LOAD LOGICAL HALFWORD (64<-16)  */   \
14111cb0ef41Sopenharmony_ci  V(mlgr, MLGR, 0xB986)   /* type = RRE   MULTIPLY LOGICAL (128<-64)  */       \
14121cb0ef41Sopenharmony_ci  V(dlgr, DLGR, 0xB987)   /* type = RRE   DIVIDE LOGICAL (64<-128)  */         \
14131cb0ef41Sopenharmony_ci  V(alcgr, ALCGR, 0xB988) /* type = RRE   ADD LOGICAL WITH CARRY (64)  */      \
14141cb0ef41Sopenharmony_ci  V(slbgr, SLBGR, 0xB989) /* type = RRE   SUBTRACT LOGICAL WITH BORROW (64) */ \
14151cb0ef41Sopenharmony_ci  V(cspg, CSPG, 0xB98A)   /* type = RRE   COMPARE AND SWAP AND PURGE (64)  */  \
14161cb0ef41Sopenharmony_ci  V(epsw, EPSW, 0xB98D)   /* type = RRE   EXTRACT PSW  */                      \
14171cb0ef41Sopenharmony_ci  V(llcr, LLCR, 0xB994)   /* type = RRE   LOAD LOGICAL CHARACTER (32<-8)  */   \
14181cb0ef41Sopenharmony_ci  V(llhr, LLHR, 0xB995)   /* type = RRE   LOAD LOGICAL HALFWORD (32<-16)  */   \
14191cb0ef41Sopenharmony_ci  V(mlr, MLR, 0xB996)     /* type = RRE   MULTIPLY LOGICAL (64<-32)  */        \
14201cb0ef41Sopenharmony_ci  V(dlr, DLR, 0xB997)     /* type = RRE   DIVIDE LOGICAL (32<-64)  */          \
14211cb0ef41Sopenharmony_ci  V(alcr, ALCR, 0xB998)   /* type = RRE   ADD LOGICAL WITH CARRY (32)  */      \
14221cb0ef41Sopenharmony_ci  V(slbr, SLBR, 0xB999) /* type = RRE   SUBTRACT LOGICAL WITH BORROW (32)  */  \
14231cb0ef41Sopenharmony_ci  V(epair, EPAIR, 0xB99A) /* type = RRE   EXTRACT PRIMARY ASN AND INSTANCE  */ \
14241cb0ef41Sopenharmony_ci  V(esair, ESAIR,                                                              \
14251cb0ef41Sopenharmony_ci    0xB99B)             /* type = RRE   EXTRACT SECONDARY ASN AND INSTANCE  */ \
14261cb0ef41Sopenharmony_ci  V(esea, ESEA, 0xB99D) /* type = RRE   EXTRACT AND SET EXTENDED AUTHORITY  */ \
14271cb0ef41Sopenharmony_ci  V(pti, PTI, 0xB99E)   /* type = RRE   PROGRAM TRANSFER WITH INSTANCE  */     \
14281cb0ef41Sopenharmony_ci  V(ssair, SSAIR, 0xB99F) /* type = RRE   SET SECONDARY ASN WITH INSTANCE  */  \
14291cb0ef41Sopenharmony_ci  V(ptf, PTF, 0xB9A2)     /* type = RRE   PERFORM TOPOLOGY FUNCTION  */        \
14301cb0ef41Sopenharmony_ci  V(rrbm, RRBM, 0xB9AE)   /* type = RRE   RESET REFERENCE BITS MULTIPLE  */    \
14311cb0ef41Sopenharmony_ci  V(pfmf, PFMF, 0xB9AF) /* type = RRE   PERFORM FRAME MANAGEMENT FUNCTION  */  \
14321cb0ef41Sopenharmony_ci  V(cu41, CU41, 0xB9B2) /* type = RRE   CONVERT UTF-32 TO UTF-8  */            \
14331cb0ef41Sopenharmony_ci  V(cu42, CU42, 0xB9B3) /* type = RRE   CONVERT UTF-32 TO UTF-16  */           \
14341cb0ef41Sopenharmony_ci  V(srstu, SRSTU, 0xB9BE)     /* type = RRE   SEARCH STRING UNICODE  */        \
14351cb0ef41Sopenharmony_ci  V(chhr, CHHR, 0xB9CD)       /* type = RRE   COMPARE HIGH (32)  */            \
14361cb0ef41Sopenharmony_ci  V(clhhr, CLHHR, 0xB9CF)     /* type = RRE   COMPARE LOGICAL HIGH (32)  */    \
14371cb0ef41Sopenharmony_ci  V(chlr, CHLR, 0xB9DD)       /* type = RRE   COMPARE HIGH (32)  */            \
14381cb0ef41Sopenharmony_ci  V(clhlr, CLHLR, 0xB9DF)     /* type = RRE   COMPARE LOGICAL HIGH (32)  */    \
14391cb0ef41Sopenharmony_ci  V(popcnt, POPCNT_Z, 0xB9E1) /* type = RRE   POPULATION COUNT  */
14401cb0ef41Sopenharmony_ci
14411cb0ef41Sopenharmony_ci#define S390_RIE_C_OPCODE_LIST(V)                                             \
14421cb0ef41Sopenharmony_ci  V(cgij, CGIJ,                                                               \
14431cb0ef41Sopenharmony_ci    0xEC7C) /* type = RIE_C COMPARE IMMEDIATE AND BRANCH RELATIVE (64<-8)  */ \
14441cb0ef41Sopenharmony_ci  V(clgij, CLGIJ,                                                             \
14451cb0ef41Sopenharmony_ci    0xEC7D) /* type = RIE_C COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE  */ \
14461cb0ef41Sopenharmony_ci            /* (64<-8)  */                                                    \
14471cb0ef41Sopenharmony_ci  V(cij, CIJ,                                                                 \
14481cb0ef41Sopenharmony_ci    0xEC7E) /* type = RIE_C COMPARE IMMEDIATE AND BRANCH RELATIVE (32<-8)  */ \
14491cb0ef41Sopenharmony_ci  V(clij, CLIJ, 0xEC7F) /* type = RIE_C COMPARE LOGICAL IMMEDIATE AND      */ \
14501cb0ef41Sopenharmony_ci                        /* BRANCH RELATIVE (32<-8)  */
14511cb0ef41Sopenharmony_ci
14521cb0ef41Sopenharmony_ci#define S390_RIE_D_OPCODE_LIST(V)                                          \
14531cb0ef41Sopenharmony_ci  V(ahik, AHIK, 0xECD8)   /* type = RIE_D ADD IMMEDIATE (32<-16)  */       \
14541cb0ef41Sopenharmony_ci  V(aghik, AGHIK, 0xECD9) /* type = RIE_D ADD IMMEDIATE (64<-16)  */       \
14551cb0ef41Sopenharmony_ci  V(alhsik, ALHSIK,                                                        \
14561cb0ef41Sopenharmony_ci    0xECDA) /* type = RIE_D ADD LOGICAL WITH SIGNED IMMEDIATE (32<-16)  */ \
14571cb0ef41Sopenharmony_ci  V(alghsik, ALGHSIK,                                                      \
14581cb0ef41Sopenharmony_ci    0xECDB) /* type = RIE_D ADD LOGICAL WITH SIGNED IMMEDIATE (64<-16)  */
14591cb0ef41Sopenharmony_ci
14601cb0ef41Sopenharmony_ci#define S390_VRV_OPCODE_LIST(V)                                           \
14611cb0ef41Sopenharmony_ci  V(vgeg, VGEG, 0xE712)   /* type = VRV   VECTOR GATHER ELEMENT (64)  */  \
14621cb0ef41Sopenharmony_ci  V(vgef, VGEF, 0xE713)   /* type = VRV   VECTOR GATHER ELEMENT (32)  */  \
14631cb0ef41Sopenharmony_ci  V(vsceg, VSCEG, 0xE71A) /* type = VRV   VECTOR SCATTER ELEMENT (64)  */ \
14641cb0ef41Sopenharmony_ci  V(vscef, VSCEF, 0xE71B) /* type = VRV   VECTOR SCATTER ELEMENT (32)  */
14651cb0ef41Sopenharmony_ci
14661cb0ef41Sopenharmony_ci#define S390_RIE_E_OPCODE_LIST(V)                                  \
14671cb0ef41Sopenharmony_ci  V(brxhg, BRXHG,                                                  \
14681cb0ef41Sopenharmony_ci    0xEC44) /* type = RIE_E BRANCH RELATIVE ON INDEX HIGH (64)  */ \
14691cb0ef41Sopenharmony_ci  V(brxlg, BRXLG,                                                  \
14701cb0ef41Sopenharmony_ci    0xEC45) /* type = RIE_E BRANCH RELATIVE ON INDEX LOW OR EQ. (64)  */
14711cb0ef41Sopenharmony_ci
14721cb0ef41Sopenharmony_ci#define S390_RR_OPCODE_LIST(V)                                                 \
14731cb0ef41Sopenharmony_ci  V(awr, AWR, 0x2E)     /* type = RR    ADD UNNORMALIZED (long HFP)  */        \
14741cb0ef41Sopenharmony_ci  V(spm, SPM, 0x04)     /* type = RR    SET PROGRAM MASK  */                   \
14751cb0ef41Sopenharmony_ci  V(balr, BALR, 0x05)   /* type = RR    BRANCH AND LINK  */                    \
14761cb0ef41Sopenharmony_ci  V(bctr, BCTR, 0x06)   /* type = RR    BRANCH ON COUNT (32)  */               \
14771cb0ef41Sopenharmony_ci  V(bcr, BCR, 0x07)     /* type = RR    BRANCH ON CONDITION  */                \
14781cb0ef41Sopenharmony_ci  V(bsm, BSM, 0x0B)     /* type = RR    BRANCH AND SET MODE  */                \
14791cb0ef41Sopenharmony_ci  V(bassm, BASSM, 0x0C) /* type = RR    BRANCH AND SAVE AND SET MODE  */       \
14801cb0ef41Sopenharmony_ci  V(basr, BASR, 0x0D)   /* type = RR    BRANCH AND SAVE  */                    \
14811cb0ef41Sopenharmony_ci  V(mvcl, MVCL, 0x0E)   /* type = RR    MOVE LONG  */                          \
14821cb0ef41Sopenharmony_ci  V(clcl, CLCL, 0x0F)   /* type = RR    COMPARE LOGICAL LONG  */               \
14831cb0ef41Sopenharmony_ci  V(lpr, LPR, 0x10)     /* type = RR    LOAD POSITIVE (32)  */                 \
14841cb0ef41Sopenharmony_ci  V(lnr, LNR, 0x11)     /* type = RR    LOAD NEGATIVE (32)  */                 \
14851cb0ef41Sopenharmony_ci  V(ltr, LTR, 0x12)     /* type = RR    LOAD AND TEST (32)  */                 \
14861cb0ef41Sopenharmony_ci  V(lcr, LCR, 0x13)     /* type = RR    LOAD COMPLEMENT (32)  */               \
14871cb0ef41Sopenharmony_ci  V(nr, NR, 0x14)       /* type = RR    AND (32)  */                           \
14881cb0ef41Sopenharmony_ci  V(clr, CLR, 0x15)     /* type = RR    COMPARE LOGICAL (32)  */               \
14891cb0ef41Sopenharmony_ci  V(or_z, OR, 0x16)     /* type = RR    OR (32)  */                            \
14901cb0ef41Sopenharmony_ci  V(xr, XR, 0x17)       /* type = RR    EXCLUSIVE OR (32)  */                  \
14911cb0ef41Sopenharmony_ci  V(lr, LR, 0x18)       /* type = RR    LOAD (32)  */                          \
14921cb0ef41Sopenharmony_ci  V(cr_z, CR, 0x19)     /* type = RR    COMPARE (32)  */                       \
14931cb0ef41Sopenharmony_ci  V(ar, AR, 0x1A)       /* type = RR    ADD (32)  */                           \
14941cb0ef41Sopenharmony_ci  V(sr, SR, 0x1B)       /* type = RR    SUBTRACT (32)  */                      \
14951cb0ef41Sopenharmony_ci  V(mr_z, MR, 0x1C)     /* type = RR    MULTIPLY (64<-32)  */                  \
14961cb0ef41Sopenharmony_ci  V(dr, DR, 0x1D)       /* type = RR    DIVIDE (32<-64)  */                    \
14971cb0ef41Sopenharmony_ci  V(alr, ALR, 0x1E)     /* type = RR    ADD LOGICAL (32)  */                   \
14981cb0ef41Sopenharmony_ci  V(slr, SLR, 0x1F)     /* type = RR    SUBTRACT LOGICAL (32)  */              \
14991cb0ef41Sopenharmony_ci  V(lpdr, LPDR, 0x20)   /* type = RR    LOAD POSITIVE (long HFP)  */           \
15001cb0ef41Sopenharmony_ci  V(lndr, LNDR, 0x21)   /* type = RR    LOAD NEGATIVE (long HFP)  */           \
15011cb0ef41Sopenharmony_ci  V(ltdr, LTDR, 0x22)   /* type = RR    LOAD AND TEST (long HFP)  */           \
15021cb0ef41Sopenharmony_ci  V(lcdr, LCDR, 0x23)   /* type = RR    LOAD COMPLEMENT (long HFP)  */         \
15031cb0ef41Sopenharmony_ci  V(hdr, HDR, 0x24)     /* type = RR    HALVE (long HFP)  */                   \
15041cb0ef41Sopenharmony_ci  V(ldxr, LDXR, 0x25) /* type = RR    LOAD ROUNDED (extended to long HFP)  */  \
15051cb0ef41Sopenharmony_ci  V(mxr, MXR, 0x26)   /* type = RR    MULTIPLY (extended HFP)  */              \
15061cb0ef41Sopenharmony_ci  V(mxdr, MXDR, 0x27) /* type = RR    MULTIPLY (long to extended HFP)  */      \
15071cb0ef41Sopenharmony_ci  V(ldr, LDR, 0x28)   /* type = RR    LOAD (long)  */                          \
15081cb0ef41Sopenharmony_ci  V(cdr, CDR, 0x29)   /* type = RR    COMPARE (long HFP)  */                   \
15091cb0ef41Sopenharmony_ci  V(adr, ADR, 0x2A)   /* type = RR    ADD NORMALIZED (long HFP)  */            \
15101cb0ef41Sopenharmony_ci  V(sdr, SDR, 0x2B)   /* type = RR    SUBTRACT NORMALIZED (long HFP)  */       \
15111cb0ef41Sopenharmony_ci  V(mdr, MDR, 0x2C)   /* type = RR    MULTIPLY (long HFP)  */                  \
15121cb0ef41Sopenharmony_ci  V(ddr, DDR, 0x2D)   /* type = RR    DIVIDE (long HFP)  */                    \
15131cb0ef41Sopenharmony_ci  V(swr, SWR, 0x2F)   /* type = RR    SUBTRACT UNNORMALIZED (long HFP)  */     \
15141cb0ef41Sopenharmony_ci  V(lper, LPER, 0x30) /* type = RR    LOAD POSITIVE (short HFP)  */            \
15151cb0ef41Sopenharmony_ci  V(lner, LNER, 0x31) /* type = RR    LOAD NEGATIVE (short HFP)  */            \
15161cb0ef41Sopenharmony_ci  V(lter, LTER, 0x32) /* type = RR    LOAD AND TEST (short HFP)  */            \
15171cb0ef41Sopenharmony_ci  V(lcer, LCER, 0x33) /* type = RR    LOAD COMPLEMENT (short HFP)  */          \
15181cb0ef41Sopenharmony_ci  V(her_z, HER_Z, 0x34) /* type = RR    HALVE (short HFP)  */                  \
15191cb0ef41Sopenharmony_ci  V(ledr, LEDR, 0x35)   /* type = RR    LOAD ROUNDED (long to short HFP)  */   \
15201cb0ef41Sopenharmony_ci  V(axr, AXR, 0x36)     /* type = RR    ADD NORMALIZED (extended HFP)  */      \
15211cb0ef41Sopenharmony_ci  V(sxr, SXR, 0x37)     /* type = RR    SUBTRACT NORMALIZED (extended HFP)  */ \
15221cb0ef41Sopenharmony_ci  V(ler, LER, 0x38)     /* type = RR    LOAD (short)  */                       \
15231cb0ef41Sopenharmony_ci  V(cer, CER, 0x39)     /* type = RR    COMPARE (short HFP)  */                \
15241cb0ef41Sopenharmony_ci  V(aer, AER, 0x3A)     /* type = RR    ADD NORMALIZED (short HFP)  */         \
15251cb0ef41Sopenharmony_ci  V(ser, SER, 0x3B)     /* type = RR    SUBTRACT NORMALIZED (short HFP)  */    \
15261cb0ef41Sopenharmony_ci  V(mder, MDER, 0x3C)   /* type = RR    MULTIPLY (short to long HFP)  */       \
15271cb0ef41Sopenharmony_ci  V(der, DER, 0x3D)     /* type = RR    DIVIDE (short HFP)  */                 \
15281cb0ef41Sopenharmony_ci  V(aur, AUR, 0x3E)     /* type = RR    ADD UNNORMALIZED (short HFP)  */       \
15291cb0ef41Sopenharmony_ci  V(sur, SUR, 0x3F)     /* type = RR    SUBTRACT UNNORMALIZED (short HFP)  */
15301cb0ef41Sopenharmony_ci
15311cb0ef41Sopenharmony_ci#define S390_RIE_F_OPCODE_LIST(V)                                              \
15321cb0ef41Sopenharmony_ci  V(risblg, RISBLG,                                                            \
15331cb0ef41Sopenharmony_ci    0xEC51) /* type = RIE_F ROTATE THEN INSERT SELECTED BITS LOW (64)  */      \
15341cb0ef41Sopenharmony_ci  V(rnsbg, RNSBG,                                                              \
15351cb0ef41Sopenharmony_ci    0xEC54) /* type = RIE_F ROTATE THEN AND SELECTED BITS (64)  */             \
15361cb0ef41Sopenharmony_ci  V(risbg, RISBG,                                                              \
15371cb0ef41Sopenharmony_ci    0xEC55) /* type = RIE_F ROTATE THEN INSERT SELECTED BITS (64)  */          \
15381cb0ef41Sopenharmony_ci  V(rosbg, ROSBG, 0xEC56) /* type = RIE_F ROTATE THEN OR SELECTED BITS (64) */ \
15391cb0ef41Sopenharmony_ci  V(rxsbg, RXSBG,                                                              \
15401cb0ef41Sopenharmony_ci    0xEC57) /* type = RIE_F ROTATE THEN EXCLUSIVE OR SELECT. BITS (64)  */     \
15411cb0ef41Sopenharmony_ci  V(risbgn, RISBGN,                                                            \
15421cb0ef41Sopenharmony_ci    0xEC59) /* type = RIE_F ROTATE THEN INSERT SELECTED BITS (64)  */          \
15431cb0ef41Sopenharmony_ci  V(risbhg, RISBHG,                                                            \
15441cb0ef41Sopenharmony_ci    0xEC5D) /* type = RIE_F ROTATE THEN INSERT SELECTED BITS HIGH (64)  */
15451cb0ef41Sopenharmony_ci
15461cb0ef41Sopenharmony_ci#define S390_VRX_OPCODE_LIST(V)                                               \
15471cb0ef41Sopenharmony_ci  V(vleb, VLEB, 0xE700) /* type = VRX   VECTOR LOAD ELEMENT (8)  */           \
15481cb0ef41Sopenharmony_ci  V(vleh, VLEH, 0xE701) /* type = VRX   VECTOR LOAD ELEMENT (16)  */          \
15491cb0ef41Sopenharmony_ci  V(vleg, VLEG, 0xE702) /* type = VRX   VECTOR LOAD ELEMENT (64)  */          \
15501cb0ef41Sopenharmony_ci  V(vlef, VLEF, 0xE703) /* type = VRX   VECTOR LOAD ELEMENT (32)  */          \
15511cb0ef41Sopenharmony_ci  V(vllez, VLLEZ,                                                             \
15521cb0ef41Sopenharmony_ci    0xE704) /* type = VRX   VECTOR LOAD LOGICAL ELEMENT AND ZERO  */          \
15531cb0ef41Sopenharmony_ci  V(vlrep, VLREP, 0xE705) /* type = VRX   VECTOR LOAD AND REPLICATE  */       \
15541cb0ef41Sopenharmony_ci  V(vl, VL, 0xE706)       /* type = VRX   VECTOR LOAD  */                     \
15551cb0ef41Sopenharmony_ci  V(vlbb, VLBB, 0xE707)   /* type = VRX   VECTOR LOAD TO BLOCK BOUNDARY  */   \
15561cb0ef41Sopenharmony_ci  V(vlbr, VLBR, 0xE606) /* type = VRX   VECTOR LOAD BYTE REVERSED ELEMENTS */ \
15571cb0ef41Sopenharmony_ci  V(vlbrrep, VLBRREP,                                                         \
15581cb0ef41Sopenharmony_ci    0xE605) /* type = VRX VECTOR LOAD BYTE REVERSED ELEMENT AND REPLICATE */  \
15591cb0ef41Sopenharmony_ci  V(vlebrh, VLEBRH,                                                           \
15601cb0ef41Sopenharmony_ci    0xE601) /* type = VRX VECTOR LOAD BYTE REVERSED ELEMENT (16) */           \
15611cb0ef41Sopenharmony_ci  V(vlebrf, VLEBRF,                                                           \
15621cb0ef41Sopenharmony_ci    0xE603) /* type = VRX VECTOR LOAD BYTE REVERSED ELEMENT (32) */           \
15631cb0ef41Sopenharmony_ci  V(vlebrg, VLEBRG,                                                           \
15641cb0ef41Sopenharmony_ci    0xE602) /* type = VRX VECTOR LOAD BYTE REVERSED ELEMENT (64) */           \
15651cb0ef41Sopenharmony_ci  V(vsteb, VSTEB, 0xE708) /* type = VRX   VECTOR STORE ELEMENT (8)  */        \
15661cb0ef41Sopenharmony_ci  V(vsteh, VSTEH, 0xE709) /* type = VRX   VECTOR STORE ELEMENT (16)  */       \
15671cb0ef41Sopenharmony_ci  V(vsteg, VSTEG, 0xE70A) /* type = VRX   VECTOR STORE ELEMENT (64)  */       \
15681cb0ef41Sopenharmony_ci  V(vstef, VSTEF, 0xE70B) /* type = VRX   VECTOR STORE ELEMENT (32)  */       \
15691cb0ef41Sopenharmony_ci  V(vst, VST, 0xE70E)     /* type = VRX   VECTOR STORE  */                    \
15701cb0ef41Sopenharmony_ci  V(vstbr, VSTBR,                                                             \
15711cb0ef41Sopenharmony_ci    0xE60E) /* type = VRX   VECTOR STORE BYTE REVERSED ELEMENTS */            \
15721cb0ef41Sopenharmony_ci  V(vstebrh, VSTEBRH,                                                         \
15731cb0ef41Sopenharmony_ci    0xE609) /* type = VRX VECTOR STORE BYTE REVERSED ELEMENT (16) */          \
15741cb0ef41Sopenharmony_ci  V(vstebrf, VSTEBRF,                                                         \
15751cb0ef41Sopenharmony_ci    0xE60B) /* type = VRX VECTOR STORE BYTE REVERSED ELEMENT (32) */          \
15761cb0ef41Sopenharmony_ci  V(vstebrg, VSTEBRG,                                                         \
15771cb0ef41Sopenharmony_ci    0xE60A) /* type = VRX VECTOR STORE BYTE REVERSED ELEMENT (64) */
15781cb0ef41Sopenharmony_ci
15791cb0ef41Sopenharmony_ci#define S390_RIE_G_OPCODE_LIST(V)                                             \
15801cb0ef41Sopenharmony_ci  V(lochi, LOCHI,                                                             \
15811cb0ef41Sopenharmony_ci    0xEC42) /* type = RIE_G LOAD HALFWORD IMMEDIATE ON CONDITION (32<-16)  */ \
15821cb0ef41Sopenharmony_ci  V(locghi, LOCGHI,                                                           \
15831cb0ef41Sopenharmony_ci    0xEC46) /* type = RIE_G LOAD HALFWORD IMMEDIATE ON CONDITION (64<-16)  */ \
15841cb0ef41Sopenharmony_ci  V(lochhi, LOCHHI, 0xEC4E) /* type = RIE_G LOAD HALFWORD HIGH IMMEDIATE   */ \
15851cb0ef41Sopenharmony_ci                            /* ON CONDITION (32<-16)  */
15861cb0ef41Sopenharmony_ci
15871cb0ef41Sopenharmony_ci#define S390_RRS_OPCODE_LIST(V)                                               \
15881cb0ef41Sopenharmony_ci  V(cgrb, CGRB, 0xECE4)   /* type = RRS   COMPARE AND BRANCH (64)  */         \
15891cb0ef41Sopenharmony_ci  V(clgrb, CLGRB, 0xECE5) /* type = RRS   COMPARE LOGICAL AND BRANCH (64)  */ \
15901cb0ef41Sopenharmony_ci  V(crb, CRB, 0xECF6)     /* type = RRS   COMPARE AND BRANCH (32)  */         \
15911cb0ef41Sopenharmony_ci  V(clrb, CLRB, 0xECF7)   /* type = RRS   COMPARE LOGICAL AND BRANCH (32)  */
15921cb0ef41Sopenharmony_ci
15931cb0ef41Sopenharmony_ci#define S390_OPCODE_LIST(V) \
15941cb0ef41Sopenharmony_ci  S390_RSY_A_OPCODE_LIST(V) \
15951cb0ef41Sopenharmony_ci  S390_RSY_B_OPCODE_LIST(V) \
15961cb0ef41Sopenharmony_ci  S390_RXE_OPCODE_LIST(V)   \
15971cb0ef41Sopenharmony_ci  S390_RRF_A_OPCODE_LIST(V) \
15981cb0ef41Sopenharmony_ci  S390_RXF_OPCODE_LIST(V)   \
15991cb0ef41Sopenharmony_ci  S390_IE_OPCODE_LIST(V)    \
16001cb0ef41Sopenharmony_ci  S390_RRF_B_OPCODE_LIST(V) \
16011cb0ef41Sopenharmony_ci  S390_RRF_C_OPCODE_LIST(V) \
16021cb0ef41Sopenharmony_ci  S390_MII_OPCODE_LIST(V)   \
16031cb0ef41Sopenharmony_ci  S390_RRF_D_OPCODE_LIST(V) \
16041cb0ef41Sopenharmony_ci  S390_RRF_E_OPCODE_LIST(V) \
16051cb0ef41Sopenharmony_ci  S390_VRR_A_OPCODE_LIST(V) \
16061cb0ef41Sopenharmony_ci  S390_VRR_B_OPCODE_LIST(V) \
16071cb0ef41Sopenharmony_ci  S390_VRR_C_OPCODE_LIST(V) \
16081cb0ef41Sopenharmony_ci  S390_VRI_A_OPCODE_LIST(V) \
16091cb0ef41Sopenharmony_ci  S390_VRR_D_OPCODE_LIST(V) \
16101cb0ef41Sopenharmony_ci  S390_VRI_B_OPCODE_LIST(V) \
16111cb0ef41Sopenharmony_ci  S390_VRR_E_OPCODE_LIST(V) \
16121cb0ef41Sopenharmony_ci  S390_VRI_C_OPCODE_LIST(V) \
16131cb0ef41Sopenharmony_ci  S390_VRI_D_OPCODE_LIST(V) \
16141cb0ef41Sopenharmony_ci  S390_VRR_F_OPCODE_LIST(V) \
16151cb0ef41Sopenharmony_ci  S390_RIS_OPCODE_LIST(V)   \
16161cb0ef41Sopenharmony_ci  S390_VRI_E_OPCODE_LIST(V) \
16171cb0ef41Sopenharmony_ci  S390_RSL_A_OPCODE_LIST(V) \
16181cb0ef41Sopenharmony_ci  S390_RSL_B_OPCODE_LIST(V) \
16191cb0ef41Sopenharmony_ci  S390_SI_OPCODE_LIST(V)    \
16201cb0ef41Sopenharmony_ci  S390_SIL_OPCODE_LIST(V)   \
16211cb0ef41Sopenharmony_ci  S390_VRS_A_OPCODE_LIST(V) \
16221cb0ef41Sopenharmony_ci  S390_RIL_A_OPCODE_LIST(V) \
16231cb0ef41Sopenharmony_ci  S390_RIL_B_OPCODE_LIST(V) \
16241cb0ef41Sopenharmony_ci  S390_VRS_B_OPCODE_LIST(V) \
16251cb0ef41Sopenharmony_ci  S390_RIL_C_OPCODE_LIST(V) \
16261cb0ef41Sopenharmony_ci  S390_VRS_C_OPCODE_LIST(V) \
16271cb0ef41Sopenharmony_ci  S390_RI_A_OPCODE_LIST(V)  \
16281cb0ef41Sopenharmony_ci  S390_RSI_OPCODE_LIST(V)   \
16291cb0ef41Sopenharmony_ci  S390_RI_B_OPCODE_LIST(V)  \
16301cb0ef41Sopenharmony_ci  S390_RI_C_OPCODE_LIST(V)  \
16311cb0ef41Sopenharmony_ci  S390_SMI_OPCODE_LIST(V)   \
16321cb0ef41Sopenharmony_ci  S390_RXY_A_OPCODE_LIST(V) \
16331cb0ef41Sopenharmony_ci  S390_RXY_B_OPCODE_LIST(V) \
16341cb0ef41Sopenharmony_ci  S390_SIY_OPCODE_LIST(V)   \
16351cb0ef41Sopenharmony_ci  S390_SS_A_OPCODE_LIST(V)  \
16361cb0ef41Sopenharmony_ci  S390_E_OPCODE_LIST(V)     \
16371cb0ef41Sopenharmony_ci  S390_SS_B_OPCODE_LIST(V)  \
16381cb0ef41Sopenharmony_ci  S390_SS_C_OPCODE_LIST(V)  \
16391cb0ef41Sopenharmony_ci  S390_SS_D_OPCODE_LIST(V)  \
16401cb0ef41Sopenharmony_ci  S390_SS_E_OPCODE_LIST(V)  \
16411cb0ef41Sopenharmony_ci  S390_I_OPCODE_LIST(V)     \
16421cb0ef41Sopenharmony_ci  S390_SS_F_OPCODE_LIST(V)  \
16431cb0ef41Sopenharmony_ci  S390_SSE_OPCODE_LIST(V)   \
16441cb0ef41Sopenharmony_ci  S390_SSF_OPCODE_LIST(V)   \
16451cb0ef41Sopenharmony_ci  S390_RS_A_OPCODE_LIST(V)  \
16461cb0ef41Sopenharmony_ci  S390_RS_B_OPCODE_LIST(V)  \
16471cb0ef41Sopenharmony_ci  S390_S_OPCODE_LIST(V)     \
16481cb0ef41Sopenharmony_ci  S390_RX_A_OPCODE_LIST(V)  \
16491cb0ef41Sopenharmony_ci  S390_RX_B_OPCODE_LIST(V)  \
16501cb0ef41Sopenharmony_ci  S390_RIE_A_OPCODE_LIST(V) \
16511cb0ef41Sopenharmony_ci  S390_RRD_OPCODE_LIST(V)   \
16521cb0ef41Sopenharmony_ci  S390_RIE_B_OPCODE_LIST(V) \
16531cb0ef41Sopenharmony_ci  S390_RRE_OPCODE_LIST(V)   \
16541cb0ef41Sopenharmony_ci  S390_RIE_C_OPCODE_LIST(V) \
16551cb0ef41Sopenharmony_ci  S390_RIE_D_OPCODE_LIST(V) \
16561cb0ef41Sopenharmony_ci  S390_VRV_OPCODE_LIST(V)   \
16571cb0ef41Sopenharmony_ci  S390_RIE_E_OPCODE_LIST(V) \
16581cb0ef41Sopenharmony_ci  S390_RR_OPCODE_LIST(V)    \
16591cb0ef41Sopenharmony_ci  S390_RIE_F_OPCODE_LIST(V) \
16601cb0ef41Sopenharmony_ci  S390_VRX_OPCODE_LIST(V)   \
16611cb0ef41Sopenharmony_ci  S390_RIE_G_OPCODE_LIST(V) \
16621cb0ef41Sopenharmony_ci  S390_RRS_OPCODE_LIST(V)
16631cb0ef41Sopenharmony_ci
16641cb0ef41Sopenharmony_ci// Opcodes as defined in Appendix B-2 table
16651cb0ef41Sopenharmony_cienum Opcode {
16661cb0ef41Sopenharmony_ci#define DECLARE_OPCODES(name, opcode_name, opcode_value) \
16671cb0ef41Sopenharmony_ci  opcode_name = opcode_value,
16681cb0ef41Sopenharmony_ci  S390_OPCODE_LIST(DECLARE_OPCODES)
16691cb0ef41Sopenharmony_ci#undef DECLARE_OPCODES
16701cb0ef41Sopenharmony_ci
16711cb0ef41Sopenharmony_ci      BKPT = 0x0001,  // GDB Software Breakpoint
16721cb0ef41Sopenharmony_ci  DUMY = 0xE352       // Special dummy opcode
16731cb0ef41Sopenharmony_ci};
16741cb0ef41Sopenharmony_ci
16751cb0ef41Sopenharmony_ci// Instruction encoding bits and masks.
16761cb0ef41Sopenharmony_cienum {
16771cb0ef41Sopenharmony_ci  // Instruction encoding bit
16781cb0ef41Sopenharmony_ci  B1 = 1 << 1,
16791cb0ef41Sopenharmony_ci  B4 = 1 << 4,
16801cb0ef41Sopenharmony_ci  B5 = 1 << 5,
16811cb0ef41Sopenharmony_ci  B7 = 1 << 7,
16821cb0ef41Sopenharmony_ci  B8 = 1 << 8,
16831cb0ef41Sopenharmony_ci  B9 = 1 << 9,
16841cb0ef41Sopenharmony_ci  B12 = 1 << 12,
16851cb0ef41Sopenharmony_ci  B18 = 1 << 18,
16861cb0ef41Sopenharmony_ci  B19 = 1 << 19,
16871cb0ef41Sopenharmony_ci  B20 = 1 << 20,
16881cb0ef41Sopenharmony_ci  B22 = 1 << 22,
16891cb0ef41Sopenharmony_ci  B23 = 1 << 23,
16901cb0ef41Sopenharmony_ci  B24 = 1 << 24,
16911cb0ef41Sopenharmony_ci  B25 = 1 << 25,
16921cb0ef41Sopenharmony_ci  B26 = 1 << 26,
16931cb0ef41Sopenharmony_ci  B27 = 1 << 27,
16941cb0ef41Sopenharmony_ci  B28 = 1 << 28,
16951cb0ef41Sopenharmony_ci
16961cb0ef41Sopenharmony_ci  B6 = 1 << 6,
16971cb0ef41Sopenharmony_ci  B10 = 1 << 10,
16981cb0ef41Sopenharmony_ci  B11 = 1 << 11,
16991cb0ef41Sopenharmony_ci  B16 = 1 << 16,
17001cb0ef41Sopenharmony_ci  B17 = 1 << 17,
17011cb0ef41Sopenharmony_ci  B21 = 1 << 21,
17021cb0ef41Sopenharmony_ci
17031cb0ef41Sopenharmony_ci  // Instruction bit masks
17041cb0ef41Sopenharmony_ci  kCondMask = 0x1F << 21,
17051cb0ef41Sopenharmony_ci  kOff12Mask = (1 << 12) - 1,
17061cb0ef41Sopenharmony_ci  kImm24Mask = (1 << 24) - 1,
17071cb0ef41Sopenharmony_ci  kOff16Mask = (1 << 16) - 1,
17081cb0ef41Sopenharmony_ci  kImm16Mask = (1 << 16) - 1,
17091cb0ef41Sopenharmony_ci  kImm26Mask = (1 << 26) - 1,
17101cb0ef41Sopenharmony_ci  kBOfieldMask = 0x1f << 21,
17111cb0ef41Sopenharmony_ci  kOpcodeMask = 0x3f << 26,
17121cb0ef41Sopenharmony_ci  kExt2OpcodeMask = 0x1f << 1,
17131cb0ef41Sopenharmony_ci  kExt5OpcodeMask = 0x3 << 2,
17141cb0ef41Sopenharmony_ci  kBIMask = 0x1F << 16,
17151cb0ef41Sopenharmony_ci  kBDMask = 0x14 << 2,
17161cb0ef41Sopenharmony_ci  kAAMask = 0x01 << 1,
17171cb0ef41Sopenharmony_ci  kLKMask = 0x01,
17181cb0ef41Sopenharmony_ci  kRCMask = 0x01,
17191cb0ef41Sopenharmony_ci  kTOMask = 0x1f << 21
17201cb0ef41Sopenharmony_ci};
17211cb0ef41Sopenharmony_ci
17221cb0ef41Sopenharmony_ci// S390 instructions requires bigger shifts,
17231cb0ef41Sopenharmony_ci// make them macros instead of enum because of the typing issue
17241cb0ef41Sopenharmony_ci#define B32 ((uint64_t)1 << 32)
17251cb0ef41Sopenharmony_ci#define B36 ((uint64_t)1 << 36)
17261cb0ef41Sopenharmony_ci#define B40 ((uint64_t)1 << 40)
17271cb0ef41Sopenharmony_ciconst FourByteInstr kFourByteBrCondMask = 0xF << 20;
17281cb0ef41Sopenharmony_ciconst SixByteInstr kSixByteBrCondMask = static_cast<SixByteInstr>(0xF) << 36;
17291cb0ef41Sopenharmony_ci
17301cb0ef41Sopenharmony_ci// -----------------------------------------------------------------------------
17311cb0ef41Sopenharmony_ci// Addressing modes and instruction variants.
17321cb0ef41Sopenharmony_ci
17331cb0ef41Sopenharmony_ci// Overflow Exception
17341cb0ef41Sopenharmony_cienum OEBit {
17351cb0ef41Sopenharmony_ci  SetOE = 1 << 10,   // Set overflow exception
17361cb0ef41Sopenharmony_ci  LeaveOE = 0 << 10  // No overflow exception
17371cb0ef41Sopenharmony_ci};
17381cb0ef41Sopenharmony_ci
17391cb0ef41Sopenharmony_ci// Record bit
17401cb0ef41Sopenharmony_cienum RCBit {   // Bit 0
17411cb0ef41Sopenharmony_ci  SetRC = 1,   // LT,GT,EQ,SO
17421cb0ef41Sopenharmony_ci  LeaveRC = 0  // None
17431cb0ef41Sopenharmony_ci};
17441cb0ef41Sopenharmony_ci
17451cb0ef41Sopenharmony_ci// Link bit
17461cb0ef41Sopenharmony_cienum LKBit {   // Bit 0
17471cb0ef41Sopenharmony_ci  SetLK = 1,   // Load effective address of next instruction
17481cb0ef41Sopenharmony_ci  LeaveLK = 0  // No action
17491cb0ef41Sopenharmony_ci};
17501cb0ef41Sopenharmony_ci
17511cb0ef41Sopenharmony_cienum BOfield {        // Bits 25-21
17521cb0ef41Sopenharmony_ci  DCBNZF = 0 << 21,   // Decrement CTR; branch if CTR != 0 and condition false
17531cb0ef41Sopenharmony_ci  DCBEZF = 2 << 21,   // Decrement CTR; branch if CTR == 0 and condition false
17541cb0ef41Sopenharmony_ci  BF = 4 << 21,       // Branch if condition false
17551cb0ef41Sopenharmony_ci  DCBNZT = 8 << 21,   // Decrement CTR; branch if CTR != 0 and condition true
17561cb0ef41Sopenharmony_ci  DCBEZT = 10 << 21,  // Decrement CTR; branch if CTR == 0 and condition true
17571cb0ef41Sopenharmony_ci  BT = 12 << 21,      // Branch if condition true
17581cb0ef41Sopenharmony_ci  DCBNZ = 16 << 21,   // Decrement CTR; branch if CTR != 0
17591cb0ef41Sopenharmony_ci  DCBEZ = 18 << 21,   // Decrement CTR; branch if CTR == 0
17601cb0ef41Sopenharmony_ci  BA = 20 << 21       // Branch always
17611cb0ef41Sopenharmony_ci};
17621cb0ef41Sopenharmony_ci
17631cb0ef41Sopenharmony_ci#ifdef _AIX
17641cb0ef41Sopenharmony_ci#undef CR_LT
17651cb0ef41Sopenharmony_ci#undef CR_GT
17661cb0ef41Sopenharmony_ci#undef CR_EQ
17671cb0ef41Sopenharmony_ci#undef CR_SO
17681cb0ef41Sopenharmony_ci#endif
17691cb0ef41Sopenharmony_ci
17701cb0ef41Sopenharmony_cienum CRBit { CR_LT = 0, CR_GT = 1, CR_EQ = 2, CR_SO = 3, CR_FU = 3 };
17711cb0ef41Sopenharmony_ci
17721cb0ef41Sopenharmony_ci#define CRWIDTH 4
17731cb0ef41Sopenharmony_ci
17741cb0ef41Sopenharmony_ci// -----------------------------------------------------------------------------
17751cb0ef41Sopenharmony_ci// Supervisor Call (svc) specific support.
17761cb0ef41Sopenharmony_ci
17771cb0ef41Sopenharmony_ci// Special Software Interrupt codes when used in the presence of the S390
17781cb0ef41Sopenharmony_ci// simulator.
17791cb0ef41Sopenharmony_ci// SVC provides a 24bit immediate value. Use bits 22:0 for standard
17801cb0ef41Sopenharmony_ci// SoftwareInterrupCode. Bit 23 is reserved for the stop feature.
17811cb0ef41Sopenharmony_cienum SoftwareInterruptCodes {
17821cb0ef41Sopenharmony_ci  // Transition to C code
17831cb0ef41Sopenharmony_ci  kCallRtRedirected = 0x0010,
17841cb0ef41Sopenharmony_ci  // Breakpoint
17851cb0ef41Sopenharmony_ci  kBreakpoint = 0x0000,
17861cb0ef41Sopenharmony_ci  // Stop
17871cb0ef41Sopenharmony_ci  kStopCode = 1 << 23
17881cb0ef41Sopenharmony_ci};
17891cb0ef41Sopenharmony_ciconst uint32_t kStopCodeMask = kStopCode - 1;
17901cb0ef41Sopenharmony_ciconst uint32_t kMaxStopCode = kStopCode - 1;
17911cb0ef41Sopenharmony_ciconst int32_t kDefaultStopCode = -1;
17921cb0ef41Sopenharmony_ci
17931cb0ef41Sopenharmony_ci// FP rounding modes.
17941cb0ef41Sopenharmony_cienum FPRoundingMode {
17951cb0ef41Sopenharmony_ci  CURRENT_ROUNDING_MODE = 0,
17961cb0ef41Sopenharmony_ci  ROUND_TO_NEAREST_AWAY_FROM_0 = 1,
17971cb0ef41Sopenharmony_ci  ROUND_TO_NEAREST_TO_EVEN = 4,
17981cb0ef41Sopenharmony_ci  ROUND_TOWARD_0 = 5,
17991cb0ef41Sopenharmony_ci  ROUND_TOWARD_POS_INF = 6,
18001cb0ef41Sopenharmony_ci  ROUND_TOWARD_NEG_INF = 7,
18011cb0ef41Sopenharmony_ci
18021cb0ef41Sopenharmony_ci  // Aliases.
18031cb0ef41Sopenharmony_ci  kRoundToNearest = ROUND_TO_NEAREST_TO_EVEN,
18041cb0ef41Sopenharmony_ci  kRoundToZero = ROUND_TOWARD_0,
18051cb0ef41Sopenharmony_ci  kRoundToPlusInf = ROUND_TOWARD_POS_INF,
18061cb0ef41Sopenharmony_ci  kRoundToMinusInf = ROUND_TOWARD_NEG_INF
18071cb0ef41Sopenharmony_ci};
18081cb0ef41Sopenharmony_ci
18091cb0ef41Sopenharmony_ciconst uint32_t kFPRoundingModeMask = 3;
18101cb0ef41Sopenharmony_ci
18111cb0ef41Sopenharmony_cienum CheckForInexactConversion {
18121cb0ef41Sopenharmony_ci  kCheckForInexactConversion,
18131cb0ef41Sopenharmony_ci  kDontCheckForInexactConversion
18141cb0ef41Sopenharmony_ci};
18151cb0ef41Sopenharmony_ci
18161cb0ef41Sopenharmony_ci// -----------------------------------------------------------------------------
18171cb0ef41Sopenharmony_ci// Specific instructions, constants, and masks.
18181cb0ef41Sopenharmony_ci
18191cb0ef41Sopenharmony_ci// use TRAP4 to indicate redirection call for simulation mode
18201cb0ef41Sopenharmony_ciconst Instr rtCallRedirInstr = TRAP4;
18211cb0ef41Sopenharmony_ci
18221cb0ef41Sopenharmony_ci// -----------------------------------------------------------------------------
18231cb0ef41Sopenharmony_ci// Instruction abstraction.
18241cb0ef41Sopenharmony_ci
18251cb0ef41Sopenharmony_ci// The class Instruction enables access to individual fields defined in the
18261cb0ef41Sopenharmony_ci// z/Architecture instruction set encoding.
18271cb0ef41Sopenharmony_ciclass Instruction {
18281cb0ef41Sopenharmony_ci public:
18291cb0ef41Sopenharmony_ci  // S390 Opcode Format Types
18301cb0ef41Sopenharmony_ci  //   Based on the first byte of the opcode, we can determine how to extract
18311cb0ef41Sopenharmony_ci  //   the entire opcode of the instruction.  The various favours include:
18321cb0ef41Sopenharmony_ci  enum OpcodeFormatType {
18331cb0ef41Sopenharmony_ci    ONE_BYTE_OPCODE,           // One Byte - Bits 0 to 7
18341cb0ef41Sopenharmony_ci    TWO_BYTE_OPCODE,           // Two Bytes - Bits 0 to 15
18351cb0ef41Sopenharmony_ci    TWO_BYTE_DISJOINT_OPCODE,  // Two Bytes - Bits 0 to 7, 40 to 47
18361cb0ef41Sopenharmony_ci    THREE_NIBBLE_OPCODE        // Three Nibbles - Bits 0 to 7, 12 to 15
18371cb0ef41Sopenharmony_ci  };
18381cb0ef41Sopenharmony_ci
18391cb0ef41Sopenharmony_ci  static OpcodeFormatType OpcodeFormatTable[256];
18401cb0ef41Sopenharmony_ci
18411cb0ef41Sopenharmony_ci  // Get the raw instruction bits.
18421cb0ef41Sopenharmony_ci  template <typename T>
18431cb0ef41Sopenharmony_ci  inline T InstructionBits() const {
18441cb0ef41Sopenharmony_ci    return Instruction::InstructionBits<T>(reinterpret_cast<const byte*>(this));
18451cb0ef41Sopenharmony_ci  }
18461cb0ef41Sopenharmony_ci  inline Instr InstructionBits() const {
18471cb0ef41Sopenharmony_ci    return *reinterpret_cast<const Instr*>(this);
18481cb0ef41Sopenharmony_ci  }
18491cb0ef41Sopenharmony_ci
18501cb0ef41Sopenharmony_ci  // Set the raw instruction bits to value.
18511cb0ef41Sopenharmony_ci  template <typename T>
18521cb0ef41Sopenharmony_ci  inline void SetInstructionBits(T value) const {
18531cb0ef41Sopenharmony_ci    Instruction::SetInstructionBits<T>(reinterpret_cast<const byte*>(this),
18541cb0ef41Sopenharmony_ci                                       value);
18551cb0ef41Sopenharmony_ci  }
18561cb0ef41Sopenharmony_ci  inline void SetInstructionBits(Instr value) {
18571cb0ef41Sopenharmony_ci    *reinterpret_cast<Instr*>(this) = value;
18581cb0ef41Sopenharmony_ci  }
18591cb0ef41Sopenharmony_ci
18601cb0ef41Sopenharmony_ci  // Read one particular bit out of the instruction bits.
18611cb0ef41Sopenharmony_ci  inline int Bit(int nr) const { return (InstructionBits() >> nr) & 1; }
18621cb0ef41Sopenharmony_ci
18631cb0ef41Sopenharmony_ci  // Read a bit field's value out of the instruction bits.
18641cb0ef41Sopenharmony_ci  inline int Bits(int hi, int lo) const {
18651cb0ef41Sopenharmony_ci    return (InstructionBits() >> lo) & ((2 << (hi - lo)) - 1);
18661cb0ef41Sopenharmony_ci  }
18671cb0ef41Sopenharmony_ci
18681cb0ef41Sopenharmony_ci  // Read bits according to instruction type
18691cb0ef41Sopenharmony_ci  template <typename T, typename U>
18701cb0ef41Sopenharmony_ci  inline U Bits(int hi, int lo) const {
18711cb0ef41Sopenharmony_ci    return (InstructionBits<T>() >> lo) & ((2 << (hi - lo)) - 1);
18721cb0ef41Sopenharmony_ci  }
18731cb0ef41Sopenharmony_ci
18741cb0ef41Sopenharmony_ci  // Read a bit field out of the instruction bits.
18751cb0ef41Sopenharmony_ci  inline int BitField(int hi, int lo) const {
18761cb0ef41Sopenharmony_ci    return InstructionBits() & (((2 << (hi - lo)) - 1) << lo);
18771cb0ef41Sopenharmony_ci  }
18781cb0ef41Sopenharmony_ci
18791cb0ef41Sopenharmony_ci  // Determine the instruction length
18801cb0ef41Sopenharmony_ci  inline int InstructionLength() {
18811cb0ef41Sopenharmony_ci    return Instruction::InstructionLength(reinterpret_cast<const byte*>(this));
18821cb0ef41Sopenharmony_ci  }
18831cb0ef41Sopenharmony_ci  // Extract the Instruction Opcode
18841cb0ef41Sopenharmony_ci  inline Opcode S390OpcodeValue() {
18851cb0ef41Sopenharmony_ci    return Instruction::S390OpcodeValue(reinterpret_cast<const byte*>(this));
18861cb0ef41Sopenharmony_ci  }
18871cb0ef41Sopenharmony_ci
18881cb0ef41Sopenharmony_ci  // Static support.
18891cb0ef41Sopenharmony_ci
18901cb0ef41Sopenharmony_ci  // Read one particular bit out of the instruction bits.
18911cb0ef41Sopenharmony_ci  static inline int Bit(Instr instr, int nr) { return (instr >> nr) & 1; }
18921cb0ef41Sopenharmony_ci
18931cb0ef41Sopenharmony_ci  // Read the value of a bit field out of the instruction bits.
18941cb0ef41Sopenharmony_ci  static inline int Bits(Instr instr, int hi, int lo) {
18951cb0ef41Sopenharmony_ci    return (instr >> lo) & ((2 << (hi - lo)) - 1);
18961cb0ef41Sopenharmony_ci  }
18971cb0ef41Sopenharmony_ci
18981cb0ef41Sopenharmony_ci  // Read a bit field out of the instruction bits.
18991cb0ef41Sopenharmony_ci  static inline int BitField(Instr instr, int hi, int lo) {
19001cb0ef41Sopenharmony_ci    return instr & (((2 << (hi - lo)) - 1) << lo);
19011cb0ef41Sopenharmony_ci  }
19021cb0ef41Sopenharmony_ci
19031cb0ef41Sopenharmony_ci  // Determine the instruction length of the given instruction
19041cb0ef41Sopenharmony_ci  static inline int InstructionLength(const byte* instr) {
19051cb0ef41Sopenharmony_ci    // Length can be determined by the first nibble.
19061cb0ef41Sopenharmony_ci    // 0x0 to 0x3 => 2-bytes
19071cb0ef41Sopenharmony_ci    // 0x4 to 0xB => 4-bytes
19081cb0ef41Sopenharmony_ci    // 0xC to 0xF => 6-bytes
19091cb0ef41Sopenharmony_ci    byte topNibble = (*instr >> 4) & 0xF;
19101cb0ef41Sopenharmony_ci    if (topNibble <= 3)
19111cb0ef41Sopenharmony_ci      return 2;
19121cb0ef41Sopenharmony_ci    else if (topNibble <= 0xB)
19131cb0ef41Sopenharmony_ci      return 4;
19141cb0ef41Sopenharmony_ci    return 6;
19151cb0ef41Sopenharmony_ci  }
19161cb0ef41Sopenharmony_ci
19171cb0ef41Sopenharmony_ci  // Returns the instruction bits of the given instruction
19181cb0ef41Sopenharmony_ci  static inline uint64_t InstructionBits(const byte* instr) {
19191cb0ef41Sopenharmony_ci    int length = InstructionLength(instr);
19201cb0ef41Sopenharmony_ci    if (2 == length)
19211cb0ef41Sopenharmony_ci      return static_cast<uint64_t>(InstructionBits<TwoByteInstr>(instr));
19221cb0ef41Sopenharmony_ci    else if (4 == length)
19231cb0ef41Sopenharmony_ci      return static_cast<uint64_t>(InstructionBits<FourByteInstr>(instr));
19241cb0ef41Sopenharmony_ci    else
19251cb0ef41Sopenharmony_ci      return InstructionBits<SixByteInstr>(instr);
19261cb0ef41Sopenharmony_ci  }
19271cb0ef41Sopenharmony_ci
19281cb0ef41Sopenharmony_ci  // Extract the raw instruction bits
19291cb0ef41Sopenharmony_ci  template <typename T>
19301cb0ef41Sopenharmony_ci  static inline T InstructionBits(const byte* instr) {
19311cb0ef41Sopenharmony_ci#if !V8_TARGET_LITTLE_ENDIAN
19321cb0ef41Sopenharmony_ci    if (sizeof(T) <= 4) {
19331cb0ef41Sopenharmony_ci      return *reinterpret_cast<const T*>(instr);
19341cb0ef41Sopenharmony_ci    } else {
19351cb0ef41Sopenharmony_ci      // We cannot read 8-byte instructon address directly, because for a
19361cb0ef41Sopenharmony_ci      // six-byte instruction, the extra 2-byte address might not be
19371cb0ef41Sopenharmony_ci      // allocated.
19381cb0ef41Sopenharmony_ci      uint64_t fourBytes = *reinterpret_cast<const uint32_t*>(instr);
19391cb0ef41Sopenharmony_ci      uint16_t twoBytes = *reinterpret_cast<const uint16_t*>(instr + 4);
19401cb0ef41Sopenharmony_ci      return (fourBytes << 16 | twoBytes);
19411cb0ef41Sopenharmony_ci    }
19421cb0ef41Sopenharmony_ci#else
19431cb0ef41Sopenharmony_ci    // Even on little endian hosts (simulation), the instructions
19441cb0ef41Sopenharmony_ci    // are stored as big-endian in order to decode the opcode and
19451cb0ef41Sopenharmony_ci    // instruction length.
19461cb0ef41Sopenharmony_ci    T instr_bits = 0;
19471cb0ef41Sopenharmony_ci
19481cb0ef41Sopenharmony_ci    // 6-byte instrs are represented by uint64_t
19491cb0ef41Sopenharmony_ci    uint32_t size = (sizeof(T) == 8) ? 6 : sizeof(T);
19501cb0ef41Sopenharmony_ci
19511cb0ef41Sopenharmony_ci    for (T i = 0; i < size; i++) {
19521cb0ef41Sopenharmony_ci      instr_bits <<= 8;
19531cb0ef41Sopenharmony_ci      instr_bits |= *(instr + i);
19541cb0ef41Sopenharmony_ci    }
19551cb0ef41Sopenharmony_ci    return instr_bits;
19561cb0ef41Sopenharmony_ci#endif
19571cb0ef41Sopenharmony_ci  }
19581cb0ef41Sopenharmony_ci
19591cb0ef41Sopenharmony_ci  // Set the Instruction Bits to value
19601cb0ef41Sopenharmony_ci  template <typename T>
19611cb0ef41Sopenharmony_ci  static inline void SetInstructionBits(byte* instr, T value) {
19621cb0ef41Sopenharmony_ci#if V8_TARGET_LITTLE_ENDIAN
19631cb0ef41Sopenharmony_ci    // The instruction bits are stored in big endian format even on little
19641cb0ef41Sopenharmony_ci    // endian hosts, in order to decode instruction length and opcode.
19651cb0ef41Sopenharmony_ci    // The following code will reverse the bytes so that the stores later
19661cb0ef41Sopenharmony_ci    // (which are in native endianess) will effectively save the instruction
19671cb0ef41Sopenharmony_ci    // in big endian.
19681cb0ef41Sopenharmony_ci    if (sizeof(T) == 2) {
19691cb0ef41Sopenharmony_ci      // Two Byte Instruction
19701cb0ef41Sopenharmony_ci      value = ((value & 0x00FF) << 8) | ((value & 0xFF00) >> 8);
19711cb0ef41Sopenharmony_ci    } else if (sizeof(T) == 4) {
19721cb0ef41Sopenharmony_ci      // Four Byte Instruction
19731cb0ef41Sopenharmony_ci      value = ((value & 0x000000FF) << 24) | ((value & 0x0000FF00) << 8) |
19741cb0ef41Sopenharmony_ci              ((value & 0x00FF0000) >> 8) | ((value & 0xFF000000) >> 24);
19751cb0ef41Sopenharmony_ci    } else if (sizeof(T) == 8) {
19761cb0ef41Sopenharmony_ci      // Six Byte Instruction
19771cb0ef41Sopenharmony_ci      uint64_t orig_value = static_cast<uint64_t>(value);
19781cb0ef41Sopenharmony_ci      value = (static_cast<uint64_t>(orig_value & 0xFF) << 40) |
19791cb0ef41Sopenharmony_ci              (static_cast<uint64_t>((orig_value >> 8) & 0xFF) << 32) |
19801cb0ef41Sopenharmony_ci              (static_cast<uint64_t>((orig_value >> 16) & 0xFF) << 24) |
19811cb0ef41Sopenharmony_ci              (static_cast<uint64_t>((orig_value >> 24) & 0xFF) << 16) |
19821cb0ef41Sopenharmony_ci              (static_cast<uint64_t>((orig_value >> 32) & 0xFF) << 8) |
19831cb0ef41Sopenharmony_ci              (static_cast<uint64_t>((orig_value >> 40) & 0xFF));
19841cb0ef41Sopenharmony_ci    }
19851cb0ef41Sopenharmony_ci#endif
19861cb0ef41Sopenharmony_ci    if (sizeof(T) <= 4) {
19871cb0ef41Sopenharmony_ci      *reinterpret_cast<T*>(instr) = value;
19881cb0ef41Sopenharmony_ci    } else {
19891cb0ef41Sopenharmony_ci#if V8_TARGET_LITTLE_ENDIAN
19901cb0ef41Sopenharmony_ci      uint64_t orig_value = static_cast<uint64_t>(value);
19911cb0ef41Sopenharmony_ci      *reinterpret_cast<uint32_t*>(instr) = static_cast<uint32_t>(value);
19921cb0ef41Sopenharmony_ci      *reinterpret_cast<uint16_t*>(instr + 4) =
19931cb0ef41Sopenharmony_ci          static_cast<uint16_t>((orig_value >> 32) & 0xFFFF);
19941cb0ef41Sopenharmony_ci#else
19951cb0ef41Sopenharmony_ci      *reinterpret_cast<uint32_t*>(instr) = static_cast<uint32_t>(value >> 16);
19961cb0ef41Sopenharmony_ci      *reinterpret_cast<uint16_t*>(instr + 4) =
19971cb0ef41Sopenharmony_ci          static_cast<uint16_t>(value & 0xFFFF);
19981cb0ef41Sopenharmony_ci#endif
19991cb0ef41Sopenharmony_ci    }
20001cb0ef41Sopenharmony_ci  }
20011cb0ef41Sopenharmony_ci
20021cb0ef41Sopenharmony_ci  // Get Instruction Format Type
20031cb0ef41Sopenharmony_ci  static OpcodeFormatType getOpcodeFormatType(const byte* instr) {
20041cb0ef41Sopenharmony_ci    const byte firstByte = *instr;
20051cb0ef41Sopenharmony_ci    return OpcodeFormatTable[firstByte];
20061cb0ef41Sopenharmony_ci  }
20071cb0ef41Sopenharmony_ci
20081cb0ef41Sopenharmony_ci  // Extract the full opcode from the instruction.
20091cb0ef41Sopenharmony_ci  static inline Opcode S390OpcodeValue(const byte* instr) {
20101cb0ef41Sopenharmony_ci    OpcodeFormatType opcodeType = getOpcodeFormatType(instr);
20111cb0ef41Sopenharmony_ci
20121cb0ef41Sopenharmony_ci    // The native instructions are encoded in big-endian format
20131cb0ef41Sopenharmony_ci    // even if running on little-endian host.  Hence, we need
20141cb0ef41Sopenharmony_ci    // to ensure we use byte* based bit-wise logic.
20151cb0ef41Sopenharmony_ci    switch (opcodeType) {
20161cb0ef41Sopenharmony_ci      case ONE_BYTE_OPCODE:
20171cb0ef41Sopenharmony_ci        // One Byte - Bits 0 to 7
20181cb0ef41Sopenharmony_ci        return static_cast<Opcode>(*instr);
20191cb0ef41Sopenharmony_ci      case TWO_BYTE_OPCODE:
20201cb0ef41Sopenharmony_ci        // Two Bytes - Bits 0 to 15
20211cb0ef41Sopenharmony_ci        return static_cast<Opcode>((*instr << 8) | (*(instr + 1)));
20221cb0ef41Sopenharmony_ci      case TWO_BYTE_DISJOINT_OPCODE:
20231cb0ef41Sopenharmony_ci        // Two Bytes - Bits 0 to 7, 40 to 47
20241cb0ef41Sopenharmony_ci        return static_cast<Opcode>((*instr << 8) | (*(instr + 5) & 0xFF));
20251cb0ef41Sopenharmony_ci      default:
20261cb0ef41Sopenharmony_ci        // case THREE_NIBBLE_OPCODE:
20271cb0ef41Sopenharmony_ci        // Three Nibbles - Bits 0 to 7, 12 to 15
20281cb0ef41Sopenharmony_ci        return static_cast<Opcode>((*instr << 4) | (*(instr + 1) & 0xF));
20291cb0ef41Sopenharmony_ci    }
20301cb0ef41Sopenharmony_ci
20311cb0ef41Sopenharmony_ci    UNREACHABLE();
20321cb0ef41Sopenharmony_ci  }
20331cb0ef41Sopenharmony_ci
20341cb0ef41Sopenharmony_ci  // Fields used in Software interrupt instructions
20351cb0ef41Sopenharmony_ci  inline SoftwareInterruptCodes SvcValue() const {
20361cb0ef41Sopenharmony_ci    return static_cast<SoftwareInterruptCodes>(Bits<FourByteInstr, int>(15, 0));
20371cb0ef41Sopenharmony_ci  }
20381cb0ef41Sopenharmony_ci
20391cb0ef41Sopenharmony_ci  // Instructions are read of out a code stream. The only way to get a
20401cb0ef41Sopenharmony_ci  // reference to an instruction is to convert a pointer. There is no way
20411cb0ef41Sopenharmony_ci  // to allocate or create instances of class Instruction.
20421cb0ef41Sopenharmony_ci  // Use the At(pc) function to create references to Instruction.
20431cb0ef41Sopenharmony_ci  static Instruction* At(byte* pc) {
20441cb0ef41Sopenharmony_ci    return reinterpret_cast<Instruction*>(pc);
20451cb0ef41Sopenharmony_ci  }
20461cb0ef41Sopenharmony_ci
20471cb0ef41Sopenharmony_ci private:
20481cb0ef41Sopenharmony_ci  // We need to prevent the creation of instances of class Instruction.
20491cb0ef41Sopenharmony_ci  DISALLOW_IMPLICIT_CONSTRUCTORS(Instruction);
20501cb0ef41Sopenharmony_ci};
20511cb0ef41Sopenharmony_ci
20521cb0ef41Sopenharmony_ci#define DECLARE_FIELD_FOR_TWO_BYTE_INSTR(name, T, lo, hi)   \
20531cb0ef41Sopenharmony_ci  inline int name() const {                                 \
20541cb0ef41Sopenharmony_ci    return Bits<TwoByteInstr, T>(15 - (lo), 15 - (hi) + 1); \
20551cb0ef41Sopenharmony_ci  }
20561cb0ef41Sopenharmony_ci
20571cb0ef41Sopenharmony_ci#define DECLARE_FIELD_FOR_FOUR_BYTE_INSTR(name, T, lo, hi)   \
20581cb0ef41Sopenharmony_ci  inline int name() const {                                  \
20591cb0ef41Sopenharmony_ci    return Bits<FourByteInstr, T>(31 - (lo), 31 - (hi) + 1); \
20601cb0ef41Sopenharmony_ci  }
20611cb0ef41Sopenharmony_ci
20621cb0ef41Sopenharmony_ci#define DECLARE_FIELD_FOR_SIX_BYTE_INSTR(name, T, lo, hi)   \
20631cb0ef41Sopenharmony_ci  inline int name() const {                                 \
20641cb0ef41Sopenharmony_ci    return Bits<SixByteInstr, T>(47 - (lo), 47 - (hi) + 1); \
20651cb0ef41Sopenharmony_ci  }
20661cb0ef41Sopenharmony_ci
20671cb0ef41Sopenharmony_ciclass TwoByteInstruction : public Instruction {
20681cb0ef41Sopenharmony_ci public:
20691cb0ef41Sopenharmony_ci  inline int size() const { return 2; }
20701cb0ef41Sopenharmony_ci};
20711cb0ef41Sopenharmony_ci
20721cb0ef41Sopenharmony_ciclass FourByteInstruction : public Instruction {
20731cb0ef41Sopenharmony_ci public:
20741cb0ef41Sopenharmony_ci  inline int size() const { return 4; }
20751cb0ef41Sopenharmony_ci};
20761cb0ef41Sopenharmony_ci
20771cb0ef41Sopenharmony_ciclass SixByteInstruction : public Instruction {
20781cb0ef41Sopenharmony_ci public:
20791cb0ef41Sopenharmony_ci  inline int size() const { return 6; }
20801cb0ef41Sopenharmony_ci};
20811cb0ef41Sopenharmony_ci
20821cb0ef41Sopenharmony_ci// I Instruction
20831cb0ef41Sopenharmony_ciclass IInstruction : public TwoByteInstruction {
20841cb0ef41Sopenharmony_ci public:
20851cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_TWO_BYTE_INSTR(IValue, int, 8, 16)
20861cb0ef41Sopenharmony_ci};
20871cb0ef41Sopenharmony_ci
20881cb0ef41Sopenharmony_ci// E Instruction
20891cb0ef41Sopenharmony_ciclass EInstruction : public TwoByteInstruction {};
20901cb0ef41Sopenharmony_ci
20911cb0ef41Sopenharmony_ci// IE Instruction
20921cb0ef41Sopenharmony_ciclass IEInstruction : public FourByteInstruction {
20931cb0ef41Sopenharmony_ci public:
20941cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_FOUR_BYTE_INSTR(I1Value, int, 24, 28)
20951cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_FOUR_BYTE_INSTR(I2Value, int, 28, 32)
20961cb0ef41Sopenharmony_ci};
20971cb0ef41Sopenharmony_ci
20981cb0ef41Sopenharmony_ci// MII Instruction
20991cb0ef41Sopenharmony_ciclass MIIInstruction : public SixByteInstruction {
21001cb0ef41Sopenharmony_ci public:
21011cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M1Value, uint32_t, 8, 12)
21021cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(RI2Value, int, 12, 24)
21031cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(RI3Value, int, 24, 47)
21041cb0ef41Sopenharmony_ci};
21051cb0ef41Sopenharmony_ci
21061cb0ef41Sopenharmony_ci// RI Instruction
21071cb0ef41Sopenharmony_ciclass RIInstruction : public FourByteInstruction {
21081cb0ef41Sopenharmony_ci public:
21091cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_FOUR_BYTE_INSTR(R1Value, int, 8, 12)
21101cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_FOUR_BYTE_INSTR(I2Value, int, 16, 32)
21111cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_FOUR_BYTE_INSTR(I2UnsignedValue, uint32_t, 16, 32)
21121cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_FOUR_BYTE_INSTR(M1Value, uint32_t, 8, 12)
21131cb0ef41Sopenharmony_ci};
21141cb0ef41Sopenharmony_ci
21151cb0ef41Sopenharmony_ci// RR Instruction
21161cb0ef41Sopenharmony_ciclass RRInstruction : Instruction {
21171cb0ef41Sopenharmony_ci public:
21181cb0ef41Sopenharmony_ci  inline int R1Value() const {
21191cb0ef41Sopenharmony_ci    // the high and low parameters of Bits is the number of bits from
21201cb0ef41Sopenharmony_ci    // rightmost place
21211cb0ef41Sopenharmony_ci    return Bits<TwoByteInstr, int>(7, 4);
21221cb0ef41Sopenharmony_ci  }
21231cb0ef41Sopenharmony_ci  inline int R2Value() const { return Bits<TwoByteInstr, int>(3, 0); }
21241cb0ef41Sopenharmony_ci  inline Condition M1Value() const {
21251cb0ef41Sopenharmony_ci    return static_cast<Condition>(Bits<TwoByteInstr, int>(7, 4));
21261cb0ef41Sopenharmony_ci  }
21271cb0ef41Sopenharmony_ci
21281cb0ef41Sopenharmony_ci  inline int size() const { return 2; }
21291cb0ef41Sopenharmony_ci};
21301cb0ef41Sopenharmony_ci
21311cb0ef41Sopenharmony_ci// RRE Instruction
21321cb0ef41Sopenharmony_ciclass RREInstruction : Instruction {
21331cb0ef41Sopenharmony_ci public:
21341cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<FourByteInstr, int>(7, 4); }
21351cb0ef41Sopenharmony_ci  inline int R2Value() const { return Bits<FourByteInstr, int>(3, 0); }
21361cb0ef41Sopenharmony_ci  inline int M3Value() const { return Bits<FourByteInstr, int>(15, 12); }
21371cb0ef41Sopenharmony_ci  inline int M4Value() const { return Bits<FourByteInstr, int>(19, 16); }
21381cb0ef41Sopenharmony_ci  inline int size() const { return 4; }
21391cb0ef41Sopenharmony_ci};
21401cb0ef41Sopenharmony_ci
21411cb0ef41Sopenharmony_ci// RRF Instruction
21421cb0ef41Sopenharmony_ciclass RRFInstruction : Instruction {
21431cb0ef41Sopenharmony_ci public:
21441cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<FourByteInstr, int>(7, 4); }
21451cb0ef41Sopenharmony_ci  inline int R2Value() const { return Bits<FourByteInstr, int>(3, 0); }
21461cb0ef41Sopenharmony_ci  inline int R3Value() const { return Bits<FourByteInstr, int>(15, 12); }
21471cb0ef41Sopenharmony_ci  inline int M3Value() const { return Bits<FourByteInstr, int>(15, 12); }
21481cb0ef41Sopenharmony_ci  inline int M4Value() const { return Bits<FourByteInstr, int>(11, 8); }
21491cb0ef41Sopenharmony_ci  inline int size() const { return 4; }
21501cb0ef41Sopenharmony_ci};
21511cb0ef41Sopenharmony_ci
21521cb0ef41Sopenharmony_ci// RRD Isntruction
21531cb0ef41Sopenharmony_ciclass RRDInstruction : Instruction {
21541cb0ef41Sopenharmony_ci public:
21551cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<FourByteInstr, int>(15, 12); }
21561cb0ef41Sopenharmony_ci  inline int R2Value() const { return Bits<FourByteInstr, int>(3, 0); }
21571cb0ef41Sopenharmony_ci  inline int R3Value() const { return Bits<FourByteInstr, int>(7, 4); }
21581cb0ef41Sopenharmony_ci  inline int size() const { return 4; }
21591cb0ef41Sopenharmony_ci};
21601cb0ef41Sopenharmony_ci
21611cb0ef41Sopenharmony_ci// RS Instruction
21621cb0ef41Sopenharmony_ciclass RSInstruction : Instruction {
21631cb0ef41Sopenharmony_ci public:
21641cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<FourByteInstr, int>(23, 20); }
21651cb0ef41Sopenharmony_ci  inline int R3Value() const { return Bits<FourByteInstr, int>(19, 16); }
21661cb0ef41Sopenharmony_ci  inline int B2Value() const { return Bits<FourByteInstr, int>(15, 12); }
21671cb0ef41Sopenharmony_ci  inline unsigned int D2Value() const {
21681cb0ef41Sopenharmony_ci    return Bits<FourByteInstr, unsigned int>(11, 0);
21691cb0ef41Sopenharmony_ci  }
21701cb0ef41Sopenharmony_ci  inline int size() const { return 4; }
21711cb0ef41Sopenharmony_ci};
21721cb0ef41Sopenharmony_ci
21731cb0ef41Sopenharmony_ci// RSI Instruction
21741cb0ef41Sopenharmony_ciclass RSIInstruction : Instruction {
21751cb0ef41Sopenharmony_ci public:
21761cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<FourByteInstr, int>(23, 20); }
21771cb0ef41Sopenharmony_ci  inline int R3Value() const { return Bits<FourByteInstr, int>(19, 16); }
21781cb0ef41Sopenharmony_ci  inline int I2Value() const {
21791cb0ef41Sopenharmony_ci    return static_cast<int32_t>(Bits<FourByteInstr, int16_t>(15, 0));
21801cb0ef41Sopenharmony_ci  }
21811cb0ef41Sopenharmony_ci  inline int size() const { return 4; }
21821cb0ef41Sopenharmony_ci};
21831cb0ef41Sopenharmony_ci
21841cb0ef41Sopenharmony_ci// RSY Instruction
21851cb0ef41Sopenharmony_ciclass RSYInstruction : Instruction {
21861cb0ef41Sopenharmony_ci public:
21871cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<SixByteInstr, int>(39, 36); }
21881cb0ef41Sopenharmony_ci  inline int R3Value() const { return Bits<SixByteInstr, int>(35, 32); }
21891cb0ef41Sopenharmony_ci  inline int B2Value() const { return Bits<SixByteInstr, int>(31, 28); }
21901cb0ef41Sopenharmony_ci  inline int32_t D2Value() const {
21911cb0ef41Sopenharmony_ci    int32_t value = Bits<SixByteInstr, int32_t>(27, 16);
21921cb0ef41Sopenharmony_ci    value += Bits<SixByteInstr, int8_t>(15, 8) << 12;
21931cb0ef41Sopenharmony_ci    return value;
21941cb0ef41Sopenharmony_ci  }
21951cb0ef41Sopenharmony_ci  inline int size() const { return 6; }
21961cb0ef41Sopenharmony_ci};
21971cb0ef41Sopenharmony_ci
21981cb0ef41Sopenharmony_ci// RX Instruction
21991cb0ef41Sopenharmony_ciclass RXInstruction : Instruction {
22001cb0ef41Sopenharmony_ci public:
22011cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<FourByteInstr, int>(23, 20); }
22021cb0ef41Sopenharmony_ci  inline int X2Value() const { return Bits<FourByteInstr, int>(19, 16); }
22031cb0ef41Sopenharmony_ci  inline int B2Value() const { return Bits<FourByteInstr, int>(15, 12); }
22041cb0ef41Sopenharmony_ci  inline uint32_t D2Value() const {
22051cb0ef41Sopenharmony_ci    return Bits<FourByteInstr, uint32_t>(11, 0);
22061cb0ef41Sopenharmony_ci  }
22071cb0ef41Sopenharmony_ci  inline int size() const { return 4; }
22081cb0ef41Sopenharmony_ci};
22091cb0ef41Sopenharmony_ci
22101cb0ef41Sopenharmony_ci// RXY Instruction
22111cb0ef41Sopenharmony_ciclass RXYInstruction : Instruction {
22121cb0ef41Sopenharmony_ci public:
22131cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<SixByteInstr, int>(39, 36); }
22141cb0ef41Sopenharmony_ci  inline int X2Value() const { return Bits<SixByteInstr, int>(35, 32); }
22151cb0ef41Sopenharmony_ci  inline int B2Value() const { return Bits<SixByteInstr, int>(31, 28); }
22161cb0ef41Sopenharmony_ci  inline int32_t D2Value() const {
22171cb0ef41Sopenharmony_ci    int32_t value = Bits<SixByteInstr, uint32_t>(27, 16);
22181cb0ef41Sopenharmony_ci    value += Bits<SixByteInstr, int8_t>(15, 8) << 12;
22191cb0ef41Sopenharmony_ci    return value;
22201cb0ef41Sopenharmony_ci  }
22211cb0ef41Sopenharmony_ci  inline int size() const { return 6; }
22221cb0ef41Sopenharmony_ci};
22231cb0ef41Sopenharmony_ci
22241cb0ef41Sopenharmony_ci// RIL Instruction
22251cb0ef41Sopenharmony_ciclass RILInstruction : Instruction {
22261cb0ef41Sopenharmony_ci public:
22271cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<SixByteInstr, int>(39, 36); }
22281cb0ef41Sopenharmony_ci  inline int32_t I2Value() const { return Bits<SixByteInstr, int32_t>(31, 0); }
22291cb0ef41Sopenharmony_ci  inline uint32_t I2UnsignedValue() const {
22301cb0ef41Sopenharmony_ci    return Bits<SixByteInstr, uint32_t>(31, 0);
22311cb0ef41Sopenharmony_ci  }
22321cb0ef41Sopenharmony_ci  inline int size() const { return 6; }
22331cb0ef41Sopenharmony_ci};
22341cb0ef41Sopenharmony_ci
22351cb0ef41Sopenharmony_ci// SI Instruction
22361cb0ef41Sopenharmony_ciclass SIInstruction : Instruction {
22371cb0ef41Sopenharmony_ci public:
22381cb0ef41Sopenharmony_ci  inline int B1Value() const { return Bits<FourByteInstr, int>(15, 12); }
22391cb0ef41Sopenharmony_ci  inline uint32_t D1Value() const {
22401cb0ef41Sopenharmony_ci    return Bits<FourByteInstr, uint32_t>(11, 0);
22411cb0ef41Sopenharmony_ci  }
22421cb0ef41Sopenharmony_ci  inline uint8_t I2Value() const {
22431cb0ef41Sopenharmony_ci    return Bits<FourByteInstr, uint8_t>(23, 16);
22441cb0ef41Sopenharmony_ci  }
22451cb0ef41Sopenharmony_ci  inline int size() const { return 4; }
22461cb0ef41Sopenharmony_ci};
22471cb0ef41Sopenharmony_ci
22481cb0ef41Sopenharmony_ci// SIY Instruction
22491cb0ef41Sopenharmony_ciclass SIYInstruction : Instruction {
22501cb0ef41Sopenharmony_ci public:
22511cb0ef41Sopenharmony_ci  inline int B1Value() const { return Bits<SixByteInstr, int>(31, 28); }
22521cb0ef41Sopenharmony_ci  inline int32_t D1Value() const {
22531cb0ef41Sopenharmony_ci    int32_t value = Bits<SixByteInstr, uint32_t>(27, 16);
22541cb0ef41Sopenharmony_ci    value += Bits<SixByteInstr, int8_t>(15, 8) << 12;
22551cb0ef41Sopenharmony_ci    return value;
22561cb0ef41Sopenharmony_ci  }
22571cb0ef41Sopenharmony_ci  inline uint8_t I2Value() const { return Bits<SixByteInstr, uint8_t>(39, 32); }
22581cb0ef41Sopenharmony_ci  inline int size() const { return 6; }
22591cb0ef41Sopenharmony_ci};
22601cb0ef41Sopenharmony_ci
22611cb0ef41Sopenharmony_ci// SIL Instruction
22621cb0ef41Sopenharmony_ciclass SILInstruction : Instruction {
22631cb0ef41Sopenharmony_ci public:
22641cb0ef41Sopenharmony_ci  inline int B1Value() const { return Bits<SixByteInstr, int>(31, 28); }
22651cb0ef41Sopenharmony_ci  inline int D1Value() const { return Bits<SixByteInstr, int>(27, 16); }
22661cb0ef41Sopenharmony_ci  inline int I2Value() const { return Bits<SixByteInstr, int>(15, 0); }
22671cb0ef41Sopenharmony_ci  inline int size() const { return 6; }
22681cb0ef41Sopenharmony_ci};
22691cb0ef41Sopenharmony_ci
22701cb0ef41Sopenharmony_ci// SS Instruction
22711cb0ef41Sopenharmony_ciclass SSInstruction : Instruction {
22721cb0ef41Sopenharmony_ci public:
22731cb0ef41Sopenharmony_ci  inline int B1Value() const { return Bits<SixByteInstr, int>(31, 28); }
22741cb0ef41Sopenharmony_ci  inline int B2Value() const { return Bits<SixByteInstr, int>(15, 12); }
22751cb0ef41Sopenharmony_ci  inline int D1Value() const { return Bits<SixByteInstr, int>(27, 16); }
22761cb0ef41Sopenharmony_ci  inline int D2Value() const { return Bits<SixByteInstr, int>(11, 0); }
22771cb0ef41Sopenharmony_ci  inline int Length() const { return Bits<SixByteInstr, int>(39, 32); }
22781cb0ef41Sopenharmony_ci  inline int size() const { return 6; }
22791cb0ef41Sopenharmony_ci};
22801cb0ef41Sopenharmony_ci
22811cb0ef41Sopenharmony_ci// RXE Instruction
22821cb0ef41Sopenharmony_ciclass RXEInstruction : Instruction {
22831cb0ef41Sopenharmony_ci public:
22841cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<SixByteInstr, int>(39, 36); }
22851cb0ef41Sopenharmony_ci  inline int X2Value() const { return Bits<SixByteInstr, int>(35, 32); }
22861cb0ef41Sopenharmony_ci  inline int B2Value() const { return Bits<SixByteInstr, int>(31, 28); }
22871cb0ef41Sopenharmony_ci  inline int D2Value() const { return Bits<SixByteInstr, int>(27, 16); }
22881cb0ef41Sopenharmony_ci  inline int size() const { return 6; }
22891cb0ef41Sopenharmony_ci};
22901cb0ef41Sopenharmony_ci
22911cb0ef41Sopenharmony_ci// RIE Instruction
22921cb0ef41Sopenharmony_ciclass RIEInstruction : Instruction {
22931cb0ef41Sopenharmony_ci public:
22941cb0ef41Sopenharmony_ci  inline int R1Value() const { return Bits<SixByteInstr, int>(39, 36); }
22951cb0ef41Sopenharmony_ci  inline int R2Value() const { return Bits<SixByteInstr, int>(35, 32); }
22961cb0ef41Sopenharmony_ci  inline int I3Value() const { return Bits<SixByteInstr, uint32_t>(31, 24); }
22971cb0ef41Sopenharmony_ci  inline int I4Value() const { return Bits<SixByteInstr, uint32_t>(23, 16); }
22981cb0ef41Sopenharmony_ci  inline int I5Value() const { return Bits<SixByteInstr, uint32_t>(15, 8); }
22991cb0ef41Sopenharmony_ci  inline int I6Value() const {
23001cb0ef41Sopenharmony_ci    return static_cast<int32_t>(Bits<SixByteInstr, int16_t>(31, 16));
23011cb0ef41Sopenharmony_ci  }
23021cb0ef41Sopenharmony_ci  inline int size() const { return 6; }
23031cb0ef41Sopenharmony_ci};
23041cb0ef41Sopenharmony_ci
23051cb0ef41Sopenharmony_ci// VRR Instruction
23061cb0ef41Sopenharmony_ciclass VRR_A_Instruction : SixByteInstruction {
23071cb0ef41Sopenharmony_ci public:
23081cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R1Value, int, 8, 12)
23091cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R2Value, int, 12, 16)
23101cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M5Value, uint32_t, 24, 28)
23111cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M4Value, uint32_t, 28, 32)
23121cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M3Value, uint32_t, 32, 36)
23131cb0ef41Sopenharmony_ci};
23141cb0ef41Sopenharmony_ci
23151cb0ef41Sopenharmony_ciclass VRR_B_Instruction : SixByteInstruction {
23161cb0ef41Sopenharmony_ci public:
23171cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R1Value, int, 8, 12)
23181cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R2Value, int, 12, 16)
23191cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R3Value, int, 16, 20)
23201cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M5Value, uint32_t, 24, 28)
23211cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M4Value, uint32_t, 32, 36)
23221cb0ef41Sopenharmony_ci};
23231cb0ef41Sopenharmony_ci
23241cb0ef41Sopenharmony_ciclass VRR_C_Instruction : SixByteInstruction {
23251cb0ef41Sopenharmony_ci public:
23261cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R1Value, int, 8, 12)
23271cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R2Value, int, 12, 16)
23281cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R3Value, int, 16, 20)
23291cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M6Value, uint32_t, 24, 28)
23301cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M5Value, uint32_t, 28, 32)
23311cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M4Value, uint32_t, 32, 36)
23321cb0ef41Sopenharmony_ci};
23331cb0ef41Sopenharmony_ci
23341cb0ef41Sopenharmony_ciclass VRR_E_Instruction : SixByteInstruction {
23351cb0ef41Sopenharmony_ci public:
23361cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R1Value, int, 8, 12)
23371cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R2Value, int, 12, 16)
23381cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R3Value, int, 16, 20)
23391cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R4Value, int, 32, 36)
23401cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M6Value, uint32_t, 20, 24)
23411cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M5Value, uint32_t, 28, 32)
23421cb0ef41Sopenharmony_ci};
23431cb0ef41Sopenharmony_ci
23441cb0ef41Sopenharmony_ciclass VRR_F_Instruction : SixByteInstruction {
23451cb0ef41Sopenharmony_ci public:
23461cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R1Value, int, 8, 12)
23471cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R2Value, int, 12, 16)
23481cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R3Value, int, 16, 20)
23491cb0ef41Sopenharmony_ci};
23501cb0ef41Sopenharmony_ci
23511cb0ef41Sopenharmony_ciclass VRX_Instruction : SixByteInstruction {
23521cb0ef41Sopenharmony_ci public:
23531cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R1Value, int, 8, 12)
23541cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(X2Value, int, 12, 16)
23551cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(B2Value, int, 16, 20)
23561cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(D2Value, int, 20, 32)
23571cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M3Value, uint32_t, 32, 36)
23581cb0ef41Sopenharmony_ci};
23591cb0ef41Sopenharmony_ci
23601cb0ef41Sopenharmony_ciclass VRS_Instruction : SixByteInstruction {
23611cb0ef41Sopenharmony_ci public:
23621cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R1Value, int, 8, 12)
23631cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R3Value, int, 12, 16)
23641cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(B2Value, int, 16, 20)
23651cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(D2Value, int, 20, 32)
23661cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M4Value, uint32_t, 32, 36)
23671cb0ef41Sopenharmony_ci};
23681cb0ef41Sopenharmony_ci
23691cb0ef41Sopenharmony_ciclass VRI_A_Instruction : SixByteInstruction {
23701cb0ef41Sopenharmony_ci public:
23711cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R1Value, int, 8, 12)
23721cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(I2Value, int, 16, 32)
23731cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M3Value, uint32_t, 32, 36)
23741cb0ef41Sopenharmony_ci};
23751cb0ef41Sopenharmony_ci
23761cb0ef41Sopenharmony_ciclass VRI_C_Instruction : SixByteInstruction {
23771cb0ef41Sopenharmony_ci public:
23781cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R1Value, int, 8, 12)
23791cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(R3Value, int, 12, 16)
23801cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(I2Value, int, 16, 32)
23811cb0ef41Sopenharmony_ci  DECLARE_FIELD_FOR_SIX_BYTE_INSTR(M4Value, uint32_t, 32, 36)
23821cb0ef41Sopenharmony_ci};
23831cb0ef41Sopenharmony_ci
23841cb0ef41Sopenharmony_ci// Helper functions for converting between register numbers and names.
23851cb0ef41Sopenharmony_ciclass Registers {
23861cb0ef41Sopenharmony_ci public:
23871cb0ef41Sopenharmony_ci  // Lookup the register number for the name provided.
23881cb0ef41Sopenharmony_ci  static int Number(const char* name);
23891cb0ef41Sopenharmony_ci
23901cb0ef41Sopenharmony_ci private:
23911cb0ef41Sopenharmony_ci  static const char* names_[kNumRegisters];
23921cb0ef41Sopenharmony_ci};
23931cb0ef41Sopenharmony_ci
23941cb0ef41Sopenharmony_ci// Helper functions for converting between FP register numbers and names.
23951cb0ef41Sopenharmony_ciclass DoubleRegisters {
23961cb0ef41Sopenharmony_ci public:
23971cb0ef41Sopenharmony_ci  // Lookup the register number for the name provided.
23981cb0ef41Sopenharmony_ci  static int Number(const char* name);
23991cb0ef41Sopenharmony_ci
24001cb0ef41Sopenharmony_ci private:
24011cb0ef41Sopenharmony_ci  static const char* names_[kNumDoubleRegisters];
24021cb0ef41Sopenharmony_ci};
24031cb0ef41Sopenharmony_ci
24041cb0ef41Sopenharmony_ci}  // namespace internal
24051cb0ef41Sopenharmony_ci}  // namespace v8
24061cb0ef41Sopenharmony_ci
24071cb0ef41Sopenharmony_ci#endif  // V8_CODEGEN_S390_CONSTANTS_S390_H_
2408