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