github.com/gagliardetto/golang-go@v0.0.0-20201020153340-53909ea70814/cmd/internal/obj/s390x/asmz.go (about)

     1  // Based on cmd/internal/obj/ppc64/asm9.go.
     2  //
     3  //    Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
     4  //    Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
     5  //    Portions Copyright © 1997-1999 Vita Nuova Limited
     6  //    Portions Copyright © 2000-2008 Vita Nuova Holdings Limited (www.vitanuova.com)
     7  //    Portions Copyright © 2004,2006 Bruce Ellis
     8  //    Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
     9  //    Revisions Copyright © 2000-2008 Lucent Technologies Inc. and others
    10  //    Portions Copyright © 2009 The Go Authors. All rights reserved.
    11  //
    12  // Permission is hereby granted, free of charge, to any person obtaining a copy
    13  // of this software and associated documentation files (the "Software"), to deal
    14  // in the Software without restriction, including without limitation the rights
    15  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    16  // copies of the Software, and to permit persons to whom the Software is
    17  // furnished to do so, subject to the following conditions:
    18  //
    19  // The above copyright notice and this permission notice shall be included in
    20  // all copies or substantial portions of the Software.
    21  //
    22  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    23  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    24  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    25  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    26  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    27  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    28  // THE SOFTWARE.
    29  
    30  package s390x
    31  
    32  import (
    33  	"github.com/gagliardetto/golang-go/cmd/internal/obj"
    34  	"github.com/gagliardetto/golang-go/cmd/internal/objabi"
    35  	"fmt"
    36  	"log"
    37  	"math"
    38  	"sort"
    39  )
    40  
    41  // ctxtz holds state while assembling a single function.
    42  // Each function gets a fresh ctxtz.
    43  // This allows for multiple functions to be safely concurrently assembled.
    44  type ctxtz struct {
    45  	ctxt       *obj.Link
    46  	newprog    obj.ProgAlloc
    47  	cursym     *obj.LSym
    48  	autosize   int32
    49  	instoffset int64
    50  	pc         int64
    51  }
    52  
    53  // instruction layout.
    54  const (
    55  	funcAlign = 16
    56  )
    57  
    58  type Optab struct {
    59  	as obj.As // opcode
    60  	i  uint8  // handler index
    61  	a1 uint8  // From
    62  	a2 uint8  // Reg
    63  	a3 uint8  // RestArgs[0]
    64  	a4 uint8  // RestArgs[1]
    65  	a5 uint8  // RestArgs[2]
    66  	a6 uint8  // To
    67  }
    68  
    69  var optab = []Optab{
    70  	// zero-length instructions
    71  	{i: 0, as: obj.ATEXT, a1: C_ADDR, a6: C_TEXTSIZE},
    72  	{i: 0, as: obj.ATEXT, a1: C_ADDR, a3: C_LCON, a6: C_TEXTSIZE},
    73  	{i: 0, as: obj.APCDATA, a1: C_LCON, a6: C_LCON},
    74  	{i: 0, as: obj.AFUNCDATA, a1: C_SCON, a6: C_ADDR},
    75  	{i: 0, as: obj.ANOP},
    76  	{i: 0, as: obj.ANOP, a1: C_SAUTO},
    77  
    78  	// move register
    79  	{i: 1, as: AMOVD, a1: C_REG, a6: C_REG},
    80  	{i: 1, as: AMOVB, a1: C_REG, a6: C_REG},
    81  	{i: 1, as: AMOVBZ, a1: C_REG, a6: C_REG},
    82  	{i: 1, as: AMOVW, a1: C_REG, a6: C_REG},
    83  	{i: 1, as: AMOVWZ, a1: C_REG, a6: C_REG},
    84  	{i: 1, as: AFMOVD, a1: C_FREG, a6: C_FREG},
    85  	{i: 1, as: AMOVDBR, a1: C_REG, a6: C_REG},
    86  
    87  	// load constant
    88  	{i: 26, as: AMOVD, a1: C_LACON, a6: C_REG},
    89  	{i: 26, as: AMOVW, a1: C_LACON, a6: C_REG},
    90  	{i: 26, as: AMOVWZ, a1: C_LACON, a6: C_REG},
    91  	{i: 3, as: AMOVD, a1: C_DCON, a6: C_REG},
    92  	{i: 3, as: AMOVW, a1: C_DCON, a6: C_REG},
    93  	{i: 3, as: AMOVWZ, a1: C_DCON, a6: C_REG},
    94  	{i: 3, as: AMOVB, a1: C_DCON, a6: C_REG},
    95  	{i: 3, as: AMOVBZ, a1: C_DCON, a6: C_REG},
    96  
    97  	// store constant
    98  	{i: 72, as: AMOVD, a1: C_SCON, a6: C_LAUTO},
    99  	{i: 72, as: AMOVD, a1: C_ADDCON, a6: C_LAUTO},
   100  	{i: 72, as: AMOVW, a1: C_SCON, a6: C_LAUTO},
   101  	{i: 72, as: AMOVW, a1: C_ADDCON, a6: C_LAUTO},
   102  	{i: 72, as: AMOVWZ, a1: C_SCON, a6: C_LAUTO},
   103  	{i: 72, as: AMOVWZ, a1: C_ADDCON, a6: C_LAUTO},
   104  	{i: 72, as: AMOVB, a1: C_SCON, a6: C_LAUTO},
   105  	{i: 72, as: AMOVB, a1: C_ADDCON, a6: C_LAUTO},
   106  	{i: 72, as: AMOVBZ, a1: C_SCON, a6: C_LAUTO},
   107  	{i: 72, as: AMOVBZ, a1: C_ADDCON, a6: C_LAUTO},
   108  	{i: 72, as: AMOVD, a1: C_SCON, a6: C_LOREG},
   109  	{i: 72, as: AMOVD, a1: C_ADDCON, a6: C_LOREG},
   110  	{i: 72, as: AMOVW, a1: C_SCON, a6: C_LOREG},
   111  	{i: 72, as: AMOVW, a1: C_ADDCON, a6: C_LOREG},
   112  	{i: 72, as: AMOVWZ, a1: C_SCON, a6: C_LOREG},
   113  	{i: 72, as: AMOVWZ, a1: C_ADDCON, a6: C_LOREG},
   114  	{i: 72, as: AMOVB, a1: C_SCON, a6: C_LOREG},
   115  	{i: 72, as: AMOVB, a1: C_ADDCON, a6: C_LOREG},
   116  	{i: 72, as: AMOVBZ, a1: C_SCON, a6: C_LOREG},
   117  	{i: 72, as: AMOVBZ, a1: C_ADDCON, a6: C_LOREG},
   118  
   119  	// store
   120  	{i: 35, as: AMOVD, a1: C_REG, a6: C_LAUTO},
   121  	{i: 35, as: AMOVW, a1: C_REG, a6: C_LAUTO},
   122  	{i: 35, as: AMOVWZ, a1: C_REG, a6: C_LAUTO},
   123  	{i: 35, as: AMOVBZ, a1: C_REG, a6: C_LAUTO},
   124  	{i: 35, as: AMOVB, a1: C_REG, a6: C_LAUTO},
   125  	{i: 35, as: AMOVDBR, a1: C_REG, a6: C_LAUTO},
   126  	{i: 35, as: AMOVHBR, a1: C_REG, a6: C_LAUTO},
   127  	{i: 35, as: AMOVD, a1: C_REG, a6: C_LOREG},
   128  	{i: 35, as: AMOVW, a1: C_REG, a6: C_LOREG},
   129  	{i: 35, as: AMOVWZ, a1: C_REG, a6: C_LOREG},
   130  	{i: 35, as: AMOVBZ, a1: C_REG, a6: C_LOREG},
   131  	{i: 35, as: AMOVB, a1: C_REG, a6: C_LOREG},
   132  	{i: 35, as: AMOVDBR, a1: C_REG, a6: C_LOREG},
   133  	{i: 35, as: AMOVHBR, a1: C_REG, a6: C_LOREG},
   134  	{i: 74, as: AMOVD, a1: C_REG, a6: C_ADDR},
   135  	{i: 74, as: AMOVW, a1: C_REG, a6: C_ADDR},
   136  	{i: 74, as: AMOVWZ, a1: C_REG, a6: C_ADDR},
   137  	{i: 74, as: AMOVBZ, a1: C_REG, a6: C_ADDR},
   138  	{i: 74, as: AMOVB, a1: C_REG, a6: C_ADDR},
   139  
   140  	// load
   141  	{i: 36, as: AMOVD, a1: C_LAUTO, a6: C_REG},
   142  	{i: 36, as: AMOVW, a1: C_LAUTO, a6: C_REG},
   143  	{i: 36, as: AMOVWZ, a1: C_LAUTO, a6: C_REG},
   144  	{i: 36, as: AMOVBZ, a1: C_LAUTO, a6: C_REG},
   145  	{i: 36, as: AMOVB, a1: C_LAUTO, a6: C_REG},
   146  	{i: 36, as: AMOVDBR, a1: C_LAUTO, a6: C_REG},
   147  	{i: 36, as: AMOVHBR, a1: C_LAUTO, a6: C_REG},
   148  	{i: 36, as: AMOVD, a1: C_LOREG, a6: C_REG},
   149  	{i: 36, as: AMOVW, a1: C_LOREG, a6: C_REG},
   150  	{i: 36, as: AMOVWZ, a1: C_LOREG, a6: C_REG},
   151  	{i: 36, as: AMOVBZ, a1: C_LOREG, a6: C_REG},
   152  	{i: 36, as: AMOVB, a1: C_LOREG, a6: C_REG},
   153  	{i: 36, as: AMOVDBR, a1: C_LOREG, a6: C_REG},
   154  	{i: 36, as: AMOVHBR, a1: C_LOREG, a6: C_REG},
   155  	{i: 75, as: AMOVD, a1: C_ADDR, a6: C_REG},
   156  	{i: 75, as: AMOVW, a1: C_ADDR, a6: C_REG},
   157  	{i: 75, as: AMOVWZ, a1: C_ADDR, a6: C_REG},
   158  	{i: 75, as: AMOVBZ, a1: C_ADDR, a6: C_REG},
   159  	{i: 75, as: AMOVB, a1: C_ADDR, a6: C_REG},
   160  
   161  	// interlocked load and op
   162  	{i: 99, as: ALAAG, a1: C_REG, a2: C_REG, a6: C_LOREG},
   163  
   164  	// integer arithmetic
   165  	{i: 2, as: AADD, a1: C_REG, a2: C_REG, a6: C_REG},
   166  	{i: 2, as: AADD, a1: C_REG, a6: C_REG},
   167  	{i: 22, as: AADD, a1: C_LCON, a2: C_REG, a6: C_REG},
   168  	{i: 22, as: AADD, a1: C_LCON, a6: C_REG},
   169  	{i: 12, as: AADD, a1: C_LOREG, a6: C_REG},
   170  	{i: 12, as: AADD, a1: C_LAUTO, a6: C_REG},
   171  	{i: 21, as: ASUB, a1: C_LCON, a2: C_REG, a6: C_REG},
   172  	{i: 21, as: ASUB, a1: C_LCON, a6: C_REG},
   173  	{i: 12, as: ASUB, a1: C_LOREG, a6: C_REG},
   174  	{i: 12, as: ASUB, a1: C_LAUTO, a6: C_REG},
   175  	{i: 4, as: AMULHD, a1: C_REG, a6: C_REG},
   176  	{i: 4, as: AMULHD, a1: C_REG, a2: C_REG, a6: C_REG},
   177  	{i: 62, as: AMLGR, a1: C_REG, a6: C_REG},
   178  	{i: 2, as: ADIVW, a1: C_REG, a2: C_REG, a6: C_REG},
   179  	{i: 2, as: ADIVW, a1: C_REG, a6: C_REG},
   180  	{i: 10, as: ASUB, a1: C_REG, a2: C_REG, a6: C_REG},
   181  	{i: 10, as: ASUB, a1: C_REG, a6: C_REG},
   182  	{i: 47, as: ANEG, a1: C_REG, a6: C_REG},
   183  	{i: 47, as: ANEG, a6: C_REG},
   184  
   185  	// integer logical
   186  	{i: 6, as: AAND, a1: C_REG, a2: C_REG, a6: C_REG},
   187  	{i: 6, as: AAND, a1: C_REG, a6: C_REG},
   188  	{i: 23, as: AAND, a1: C_LCON, a6: C_REG},
   189  	{i: 12, as: AAND, a1: C_LOREG, a6: C_REG},
   190  	{i: 12, as: AAND, a1: C_LAUTO, a6: C_REG},
   191  	{i: 6, as: AANDW, a1: C_REG, a2: C_REG, a6: C_REG},
   192  	{i: 6, as: AANDW, a1: C_REG, a6: C_REG},
   193  	{i: 24, as: AANDW, a1: C_LCON, a6: C_REG},
   194  	{i: 12, as: AANDW, a1: C_LOREG, a6: C_REG},
   195  	{i: 12, as: AANDW, a1: C_LAUTO, a6: C_REG},
   196  	{i: 7, as: ASLD, a1: C_REG, a6: C_REG},
   197  	{i: 7, as: ASLD, a1: C_REG, a2: C_REG, a6: C_REG},
   198  	{i: 7, as: ASLD, a1: C_SCON, a2: C_REG, a6: C_REG},
   199  	{i: 7, as: ASLD, a1: C_SCON, a6: C_REG},
   200  	{i: 13, as: ARNSBG, a1: C_SCON, a3: C_SCON, a4: C_SCON, a5: C_REG, a6: C_REG},
   201  
   202  	// compare and swap
   203  	{i: 79, as: ACSG, a1: C_REG, a2: C_REG, a6: C_SOREG},
   204  
   205  	// floating point
   206  	{i: 32, as: AFADD, a1: C_FREG, a6: C_FREG},
   207  	{i: 33, as: AFABS, a1: C_FREG, a6: C_FREG},
   208  	{i: 33, as: AFABS, a6: C_FREG},
   209  	{i: 34, as: AFMADD, a1: C_FREG, a2: C_FREG, a6: C_FREG},
   210  	{i: 32, as: AFMUL, a1: C_FREG, a6: C_FREG},
   211  	{i: 36, as: AFMOVD, a1: C_LAUTO, a6: C_FREG},
   212  	{i: 36, as: AFMOVD, a1: C_LOREG, a6: C_FREG},
   213  	{i: 75, as: AFMOVD, a1: C_ADDR, a6: C_FREG},
   214  	{i: 35, as: AFMOVD, a1: C_FREG, a6: C_LAUTO},
   215  	{i: 35, as: AFMOVD, a1: C_FREG, a6: C_LOREG},
   216  	{i: 74, as: AFMOVD, a1: C_FREG, a6: C_ADDR},
   217  	{i: 67, as: AFMOVD, a1: C_ZCON, a6: C_FREG},
   218  	{i: 81, as: ALDGR, a1: C_REG, a6: C_FREG},
   219  	{i: 81, as: ALGDR, a1: C_FREG, a6: C_REG},
   220  	{i: 82, as: ACEFBRA, a1: C_REG, a6: C_FREG},
   221  	{i: 83, as: ACFEBRA, a1: C_FREG, a6: C_REG},
   222  	{i: 48, as: AFIEBR, a1: C_SCON, a2: C_FREG, a6: C_FREG},
   223  	{i: 49, as: ACPSDR, a1: C_FREG, a2: C_FREG, a6: C_FREG},
   224  	{i: 50, as: ALTDBR, a1: C_FREG, a6: C_FREG},
   225  	{i: 51, as: ATCDB, a1: C_FREG, a6: C_SCON},
   226  
   227  	// load symbol address (plus offset)
   228  	{i: 19, as: AMOVD, a1: C_SYMADDR, a6: C_REG},
   229  	{i: 93, as: AMOVD, a1: C_GOTADDR, a6: C_REG},
   230  	{i: 94, as: AMOVD, a1: C_TLS_LE, a6: C_REG},
   231  	{i: 95, as: AMOVD, a1: C_TLS_IE, a6: C_REG},
   232  
   233  	// system call
   234  	{i: 5, as: ASYSCALL},
   235  	{i: 77, as: ASYSCALL, a1: C_SCON},
   236  
   237  	// branch
   238  	{i: 16, as: ABEQ, a6: C_SBRA},
   239  	{i: 16, as: ABRC, a1: C_SCON, a6: C_SBRA},
   240  	{i: 11, as: ABR, a6: C_LBRA},
   241  	{i: 16, as: ABC, a1: C_SCON, a2: C_REG, a6: C_LBRA},
   242  	{i: 18, as: ABR, a6: C_REG},
   243  	{i: 18, as: ABR, a1: C_REG, a6: C_REG},
   244  	{i: 15, as: ABR, a6: C_ZOREG},
   245  	{i: 15, as: ABC, a6: C_ZOREG},
   246  
   247  	// compare and branch
   248  	{i: 89, as: ACGRJ, a1: C_SCON, a2: C_REG, a3: C_REG, a6: C_SBRA},
   249  	{i: 89, as: ACMPBEQ, a1: C_REG, a2: C_REG, a6: C_SBRA},
   250  	{i: 89, as: ACLGRJ, a1: C_SCON, a2: C_REG, a3: C_REG, a6: C_SBRA},
   251  	{i: 89, as: ACMPUBEQ, a1: C_REG, a2: C_REG, a6: C_SBRA},
   252  	{i: 90, as: ACGIJ, a1: C_SCON, a2: C_REG, a3: C_ADDCON, a6: C_SBRA},
   253  	{i: 90, as: ACGIJ, a1: C_SCON, a2: C_REG, a3: C_SCON, a6: C_SBRA},
   254  	{i: 90, as: ACMPBEQ, a1: C_REG, a3: C_ADDCON, a6: C_SBRA},
   255  	{i: 90, as: ACMPBEQ, a1: C_REG, a3: C_SCON, a6: C_SBRA},
   256  	{i: 90, as: ACLGIJ, a1: C_SCON, a2: C_REG, a3: C_ADDCON, a6: C_SBRA},
   257  	{i: 90, as: ACMPUBEQ, a1: C_REG, a3: C_ANDCON, a6: C_SBRA},
   258  
   259  	// branch on count
   260  	{i: 41, as: ABRCT, a1: C_REG, a6: C_SBRA},
   261  	{i: 41, as: ABRCTG, a1: C_REG, a6: C_SBRA},
   262  
   263  	// move on condition
   264  	{i: 17, as: AMOVDEQ, a1: C_REG, a6: C_REG},
   265  
   266  	// load on condition
   267  	{i: 25, as: ALOCGR, a1: C_SCON, a2: C_REG, a6: C_REG},
   268  
   269  	// find leftmost one
   270  	{i: 8, as: AFLOGR, a1: C_REG, a6: C_REG},
   271  
   272  	// population count
   273  	{i: 9, as: APOPCNT, a1: C_REG, a6: C_REG},
   274  
   275  	// compare
   276  	{i: 70, as: ACMP, a1: C_REG, a6: C_REG},
   277  	{i: 71, as: ACMP, a1: C_REG, a6: C_LCON},
   278  	{i: 70, as: ACMPU, a1: C_REG, a6: C_REG},
   279  	{i: 71, as: ACMPU, a1: C_REG, a6: C_LCON},
   280  	{i: 70, as: AFCMPO, a1: C_FREG, a6: C_FREG},
   281  	{i: 70, as: AFCMPO, a1: C_FREG, a2: C_REG, a6: C_FREG},
   282  
   283  	// test under mask
   284  	{i: 91, as: ATMHH, a1: C_REG, a6: C_ANDCON},
   285  
   286  	// insert program mask
   287  	{i: 92, as: AIPM, a1: C_REG},
   288  
   289  	// set program mask
   290  	{i: 76, as: ASPM, a1: C_REG},
   291  
   292  	// 32-bit access registers
   293  	{i: 68, as: AMOVW, a1: C_AREG, a6: C_REG},
   294  	{i: 68, as: AMOVWZ, a1: C_AREG, a6: C_REG},
   295  	{i: 69, as: AMOVW, a1: C_REG, a6: C_AREG},
   296  	{i: 69, as: AMOVWZ, a1: C_REG, a6: C_AREG},
   297  
   298  	// macros
   299  	{i: 96, as: ACLEAR, a1: C_LCON, a6: C_LOREG},
   300  	{i: 96, as: ACLEAR, a1: C_LCON, a6: C_LAUTO},
   301  
   302  	// load/store multiple
   303  	{i: 97, as: ASTMG, a1: C_REG, a2: C_REG, a6: C_LOREG},
   304  	{i: 97, as: ASTMG, a1: C_REG, a2: C_REG, a6: C_LAUTO},
   305  	{i: 98, as: ALMG, a1: C_LOREG, a2: C_REG, a6: C_REG},
   306  	{i: 98, as: ALMG, a1: C_LAUTO, a2: C_REG, a6: C_REG},
   307  
   308  	// bytes
   309  	{i: 40, as: ABYTE, a1: C_SCON},
   310  	{i: 40, as: AWORD, a1: C_LCON},
   311  	{i: 31, as: ADWORD, a1: C_LCON},
   312  	{i: 31, as: ADWORD, a1: C_DCON},
   313  
   314  	// fast synchronization
   315  	{i: 80, as: ASYNC},
   316  
   317  	// store clock
   318  	{i: 88, as: ASTCK, a6: C_SAUTO},
   319  	{i: 88, as: ASTCK, a6: C_SOREG},
   320  
   321  	// storage and storage
   322  	{i: 84, as: AMVC, a1: C_SCON, a3: C_LOREG, a6: C_LOREG},
   323  	{i: 84, as: AMVC, a1: C_SCON, a3: C_LOREG, a6: C_LAUTO},
   324  	{i: 84, as: AMVC, a1: C_SCON, a3: C_LAUTO, a6: C_LAUTO},
   325  
   326  	// address
   327  	{i: 85, as: ALARL, a1: C_LCON, a6: C_REG},
   328  	{i: 85, as: ALARL, a1: C_SYMADDR, a6: C_REG},
   329  	{i: 86, as: ALA, a1: C_SOREG, a6: C_REG},
   330  	{i: 86, as: ALA, a1: C_SAUTO, a6: C_REG},
   331  	{i: 87, as: AEXRL, a1: C_SYMADDR, a6: C_REG},
   332  
   333  	// undefined (deliberate illegal instruction)
   334  	{i: 78, as: obj.AUNDEF},
   335  
   336  	// 2 byte no-operation
   337  	{i: 66, as: ANOPH},
   338  
   339  	// vector instructions
   340  
   341  	// VRX store
   342  	{i: 100, as: AVST, a1: C_VREG, a6: C_SOREG},
   343  	{i: 100, as: AVST, a1: C_VREG, a6: C_SAUTO},
   344  	{i: 100, as: AVSTEG, a1: C_SCON, a2: C_VREG, a6: C_SOREG},
   345  	{i: 100, as: AVSTEG, a1: C_SCON, a2: C_VREG, a6: C_SAUTO},
   346  
   347  	// VRX load
   348  	{i: 101, as: AVL, a1: C_SOREG, a6: C_VREG},
   349  	{i: 101, as: AVL, a1: C_SAUTO, a6: C_VREG},
   350  	{i: 101, as: AVLEG, a1: C_SCON, a3: C_SOREG, a6: C_VREG},
   351  	{i: 101, as: AVLEG, a1: C_SCON, a3: C_SAUTO, a6: C_VREG},
   352  
   353  	// VRV scatter
   354  	{i: 102, as: AVSCEG, a1: C_SCON, a2: C_VREG, a6: C_SOREG},
   355  	{i: 102, as: AVSCEG, a1: C_SCON, a2: C_VREG, a6: C_SAUTO},
   356  
   357  	// VRV gather
   358  	{i: 103, as: AVGEG, a1: C_SCON, a3: C_SOREG, a6: C_VREG},
   359  	{i: 103, as: AVGEG, a1: C_SCON, a3: C_SAUTO, a6: C_VREG},
   360  
   361  	// VRS element shift/rotate and load gr to/from vr element
   362  	{i: 104, as: AVESLG, a1: C_SCON, a2: C_VREG, a6: C_VREG},
   363  	{i: 104, as: AVESLG, a1: C_REG, a2: C_VREG, a6: C_VREG},
   364  	{i: 104, as: AVESLG, a1: C_SCON, a6: C_VREG},
   365  	{i: 104, as: AVESLG, a1: C_REG, a6: C_VREG},
   366  	{i: 104, as: AVLGVG, a1: C_SCON, a2: C_VREG, a6: C_REG},
   367  	{i: 104, as: AVLGVG, a1: C_REG, a2: C_VREG, a6: C_REG},
   368  	{i: 104, as: AVLVGG, a1: C_SCON, a2: C_REG, a6: C_VREG},
   369  	{i: 104, as: AVLVGG, a1: C_REG, a2: C_REG, a6: C_VREG},
   370  
   371  	// VRS store multiple
   372  	{i: 105, as: AVSTM, a1: C_VREG, a2: C_VREG, a6: C_SOREG},
   373  	{i: 105, as: AVSTM, a1: C_VREG, a2: C_VREG, a6: C_SAUTO},
   374  
   375  	// VRS load multiple
   376  	{i: 106, as: AVLM, a1: C_SOREG, a2: C_VREG, a6: C_VREG},
   377  	{i: 106, as: AVLM, a1: C_SAUTO, a2: C_VREG, a6: C_VREG},
   378  
   379  	// VRS store with length
   380  	{i: 107, as: AVSTL, a1: C_REG, a2: C_VREG, a6: C_SOREG},
   381  	{i: 107, as: AVSTL, a1: C_REG, a2: C_VREG, a6: C_SAUTO},
   382  
   383  	// VRS load with length
   384  	{i: 108, as: AVLL, a1: C_REG, a3: C_SOREG, a6: C_VREG},
   385  	{i: 108, as: AVLL, a1: C_REG, a3: C_SAUTO, a6: C_VREG},
   386  
   387  	// VRI-a
   388  	{i: 109, as: AVGBM, a1: C_ANDCON, a6: C_VREG},
   389  	{i: 109, as: AVZERO, a6: C_VREG},
   390  	{i: 109, as: AVREPIG, a1: C_ADDCON, a6: C_VREG},
   391  	{i: 109, as: AVREPIG, a1: C_SCON, a6: C_VREG},
   392  	{i: 109, as: AVLEIG, a1: C_SCON, a3: C_ADDCON, a6: C_VREG},
   393  	{i: 109, as: AVLEIG, a1: C_SCON, a3: C_SCON, a6: C_VREG},
   394  
   395  	// VRI-b generate mask
   396  	{i: 110, as: AVGMG, a1: C_SCON, a3: C_SCON, a6: C_VREG},
   397  
   398  	// VRI-c replicate
   399  	{i: 111, as: AVREPG, a1: C_UCON, a2: C_VREG, a6: C_VREG},
   400  
   401  	// VRI-d element rotate and insert under mask and
   402  	// shift left double by byte
   403  	{i: 112, as: AVERIMG, a1: C_SCON, a2: C_VREG, a3: C_VREG, a6: C_VREG},
   404  	{i: 112, as: AVSLDB, a1: C_SCON, a2: C_VREG, a3: C_VREG, a6: C_VREG},
   405  
   406  	// VRI-d fp test data class immediate
   407  	{i: 113, as: AVFTCIDB, a1: C_SCON, a2: C_VREG, a6: C_VREG},
   408  
   409  	// VRR-a load reg
   410  	{i: 114, as: AVLR, a1: C_VREG, a6: C_VREG},
   411  
   412  	// VRR-a compare
   413  	{i: 115, as: AVECG, a1: C_VREG, a6: C_VREG},
   414  
   415  	// VRR-b
   416  	{i: 117, as: AVCEQG, a1: C_VREG, a2: C_VREG, a6: C_VREG},
   417  	{i: 117, as: AVFAEF, a1: C_VREG, a2: C_VREG, a6: C_VREG},
   418  	{i: 117, as: AVPKSG, a1: C_VREG, a2: C_VREG, a6: C_VREG},
   419  
   420  	// VRR-c
   421  	{i: 118, as: AVAQ, a1: C_VREG, a2: C_VREG, a6: C_VREG},
   422  	{i: 118, as: AVAQ, a1: C_VREG, a6: C_VREG},
   423  	{i: 118, as: AVNOT, a1: C_VREG, a6: C_VREG},
   424  	{i: 123, as: AVPDI, a1: C_SCON, a2: C_VREG, a3: C_VREG, a6: C_VREG},
   425  
   426  	// VRR-c shifts
   427  	{i: 119, as: AVERLLVG, a1: C_VREG, a2: C_VREG, a6: C_VREG},
   428  	{i: 119, as: AVERLLVG, a1: C_VREG, a6: C_VREG},
   429  
   430  	// VRR-d
   431  	{i: 120, as: AVACQ, a1: C_VREG, a2: C_VREG, a3: C_VREG, a6: C_VREG},
   432  
   433  	// VRR-e
   434  	{i: 121, as: AVSEL, a1: C_VREG, a2: C_VREG, a3: C_VREG, a6: C_VREG},
   435  
   436  	// VRR-f
   437  	{i: 122, as: AVLVGP, a1: C_REG, a2: C_REG, a6: C_VREG},
   438  }
   439  
   440  var oprange [ALAST & obj.AMask][]Optab
   441  
   442  var xcmp [C_NCLASS][C_NCLASS]bool
   443  
   444  func spanz(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
   445  	p := cursym.Func.Text
   446  	if p == nil || p.Link == nil { // handle external functions and ELF section symbols
   447  		return
   448  	}
   449  
   450  	if oprange[AORW&obj.AMask] == nil {
   451  		ctxt.Diag("s390x ops not initialized, call s390x.buildop first")
   452  	}
   453  
   454  	c := ctxtz{ctxt: ctxt, newprog: newprog, cursym: cursym, autosize: int32(p.To.Offset)}
   455  
   456  	buffer := make([]byte, 0)
   457  	changed := true
   458  	loop := 0
   459  	for changed {
   460  		if loop > 100 {
   461  			c.ctxt.Diag("stuck in spanz loop")
   462  			break
   463  		}
   464  		changed = false
   465  		buffer = buffer[:0]
   466  		c.cursym.R = make([]obj.Reloc, 0)
   467  		for p := c.cursym.Func.Text; p != nil; p = p.Link {
   468  			pc := int64(len(buffer))
   469  			if pc != p.Pc {
   470  				changed = true
   471  			}
   472  			p.Pc = pc
   473  			c.pc = p.Pc
   474  			c.asmout(p, &buffer)
   475  			if pc == int64(len(buffer)) {
   476  				switch p.As {
   477  				case obj.ANOP, obj.AFUNCDATA, obj.APCDATA, obj.ATEXT:
   478  					// ok
   479  				default:
   480  					c.ctxt.Diag("zero-width instruction\n%v", p)
   481  				}
   482  			}
   483  		}
   484  		loop++
   485  	}
   486  
   487  	c.cursym.Size = int64(len(buffer))
   488  	if c.cursym.Size%funcAlign != 0 {
   489  		c.cursym.Size += funcAlign - (c.cursym.Size % funcAlign)
   490  	}
   491  	c.cursym.Grow(c.cursym.Size)
   492  	copy(c.cursym.P, buffer)
   493  
   494  	// Mark nonpreemptible instruction sequences.
   495  	// We use REGTMP as a scratch register during call injection,
   496  	// so instruction sequences that use REGTMP are unsafe to
   497  	// preempt asynchronously.
   498  	obj.MarkUnsafePoints(c.ctxt, c.cursym.Func.Text, c.newprog, c.isUnsafePoint)
   499  }
   500  
   501  // Return whether p is an unsafe point.
   502  func (c *ctxtz) isUnsafePoint(p *obj.Prog) bool {
   503  	if p.From.Reg == REGTMP || p.To.Reg == REGTMP || p.Reg == REGTMP {
   504  		return true
   505  	}
   506  	for _, a := range p.RestArgs {
   507  		if a.Reg == REGTMP {
   508  			return true
   509  		}
   510  	}
   511  	return p.Mark&USETMP != 0
   512  }
   513  
   514  func isint32(v int64) bool {
   515  	return int64(int32(v)) == v
   516  }
   517  
   518  func isuint32(v uint64) bool {
   519  	return uint64(uint32(v)) == v
   520  }
   521  
   522  func (c *ctxtz) aclass(a *obj.Addr) int {
   523  	switch a.Type {
   524  	case obj.TYPE_NONE:
   525  		return C_NONE
   526  
   527  	case obj.TYPE_REG:
   528  		if REG_R0 <= a.Reg && a.Reg <= REG_R15 {
   529  			return C_REG
   530  		}
   531  		if REG_F0 <= a.Reg && a.Reg <= REG_F15 {
   532  			return C_FREG
   533  		}
   534  		if REG_AR0 <= a.Reg && a.Reg <= REG_AR15 {
   535  			return C_AREG
   536  		}
   537  		if REG_V0 <= a.Reg && a.Reg <= REG_V31 {
   538  			return C_VREG
   539  		}
   540  		return C_GOK
   541  
   542  	case obj.TYPE_MEM:
   543  		switch a.Name {
   544  		case obj.NAME_EXTERN,
   545  			obj.NAME_STATIC:
   546  			if a.Sym == nil {
   547  				// must have a symbol
   548  				break
   549  			}
   550  			c.instoffset = a.Offset
   551  			if a.Sym.Type == objabi.STLSBSS {
   552  				if c.ctxt.Flag_shared {
   553  					return C_TLS_IE // initial exec model
   554  				}
   555  				return C_TLS_LE // local exec model
   556  			}
   557  			return C_ADDR
   558  
   559  		case obj.NAME_GOTREF:
   560  			return C_GOTADDR
   561  
   562  		case obj.NAME_AUTO:
   563  			if a.Reg == REGSP {
   564  				// unset base register for better printing, since
   565  				// a.Offset is still relative to pseudo-SP.
   566  				a.Reg = obj.REG_NONE
   567  			}
   568  			c.instoffset = int64(c.autosize) + a.Offset
   569  			if c.instoffset >= -BIG && c.instoffset < BIG {
   570  				return C_SAUTO
   571  			}
   572  			return C_LAUTO
   573  
   574  		case obj.NAME_PARAM:
   575  			if a.Reg == REGSP {
   576  				// unset base register for better printing, since
   577  				// a.Offset is still relative to pseudo-FP.
   578  				a.Reg = obj.REG_NONE
   579  			}
   580  			c.instoffset = int64(c.autosize) + a.Offset + c.ctxt.FixedFrameSize()
   581  			if c.instoffset >= -BIG && c.instoffset < BIG {
   582  				return C_SAUTO
   583  			}
   584  			return C_LAUTO
   585  
   586  		case obj.NAME_NONE:
   587  			c.instoffset = a.Offset
   588  			if c.instoffset == 0 {
   589  				return C_ZOREG
   590  			}
   591  			if c.instoffset >= -BIG && c.instoffset < BIG {
   592  				return C_SOREG
   593  			}
   594  			return C_LOREG
   595  		}
   596  
   597  		return C_GOK
   598  
   599  	case obj.TYPE_TEXTSIZE:
   600  		return C_TEXTSIZE
   601  
   602  	case obj.TYPE_FCONST:
   603  		if f64, ok := a.Val.(float64); ok && math.Float64bits(f64) == 0 {
   604  			return C_ZCON
   605  		}
   606  		c.ctxt.Diag("cannot handle the floating point constant %v", a.Val)
   607  
   608  	case obj.TYPE_CONST,
   609  		obj.TYPE_ADDR:
   610  		switch a.Name {
   611  		case obj.NAME_NONE:
   612  			c.instoffset = a.Offset
   613  			if a.Reg != 0 {
   614  				if -BIG <= c.instoffset && c.instoffset <= BIG {
   615  					return C_SACON
   616  				}
   617  				if isint32(c.instoffset) {
   618  					return C_LACON
   619  				}
   620  				return C_DACON
   621  			}
   622  
   623  		case obj.NAME_EXTERN,
   624  			obj.NAME_STATIC:
   625  			s := a.Sym
   626  			if s == nil {
   627  				return C_GOK
   628  			}
   629  			c.instoffset = a.Offset
   630  
   631  			return C_SYMADDR
   632  
   633  		case obj.NAME_AUTO:
   634  			if a.Reg == REGSP {
   635  				// unset base register for better printing, since
   636  				// a.Offset is still relative to pseudo-SP.
   637  				a.Reg = obj.REG_NONE
   638  			}
   639  			c.instoffset = int64(c.autosize) + a.Offset
   640  			if c.instoffset >= -BIG && c.instoffset < BIG {
   641  				return C_SACON
   642  			}
   643  			return C_LACON
   644  
   645  		case obj.NAME_PARAM:
   646  			if a.Reg == REGSP {
   647  				// unset base register for better printing, since
   648  				// a.Offset is still relative to pseudo-FP.
   649  				a.Reg = obj.REG_NONE
   650  			}
   651  			c.instoffset = int64(c.autosize) + a.Offset + c.ctxt.FixedFrameSize()
   652  			if c.instoffset >= -BIG && c.instoffset < BIG {
   653  				return C_SACON
   654  			}
   655  			return C_LACON
   656  
   657  		default:
   658  			return C_GOK
   659  		}
   660  
   661  		if c.instoffset == 0 {
   662  			return C_ZCON
   663  		}
   664  		if c.instoffset >= 0 {
   665  			if c.instoffset <= 0x7fff {
   666  				return C_SCON
   667  			}
   668  			if c.instoffset <= 0xffff {
   669  				return C_ANDCON
   670  			}
   671  			if c.instoffset&0xffff == 0 && isuint32(uint64(c.instoffset)) { /* && (instoffset & (1<<31)) == 0) */
   672  				return C_UCON
   673  			}
   674  			if isint32(c.instoffset) || isuint32(uint64(c.instoffset)) {
   675  				return C_LCON
   676  			}
   677  			return C_DCON
   678  		}
   679  
   680  		if c.instoffset >= -0x8000 {
   681  			return C_ADDCON
   682  		}
   683  		if c.instoffset&0xffff == 0 && isint32(c.instoffset) {
   684  			return C_UCON
   685  		}
   686  		if isint32(c.instoffset) {
   687  			return C_LCON
   688  		}
   689  		return C_DCON
   690  
   691  	case obj.TYPE_BRANCH:
   692  		return C_SBRA
   693  	}
   694  
   695  	return C_GOK
   696  }
   697  
   698  func (c *ctxtz) oplook(p *obj.Prog) *Optab {
   699  	// Return cached optab entry if available.
   700  	if p.Optab != 0 {
   701  		return &optab[p.Optab-1]
   702  	}
   703  	if len(p.RestArgs) > 3 {
   704  		c.ctxt.Diag("too many RestArgs: got %v, maximum is 3\n", len(p.RestArgs))
   705  		return nil
   706  	}
   707  
   708  	// Initialize classes for all arguments.
   709  	p.From.Class = int8(c.aclass(&p.From) + 1)
   710  	p.To.Class = int8(c.aclass(&p.To) + 1)
   711  	for i := range p.RestArgs {
   712  		p.RestArgs[i].Class = int8(c.aclass(&p.RestArgs[i]) + 1)
   713  	}
   714  
   715  	// Mirrors the argument list in Optab.
   716  	args := [...]int8{
   717  		p.From.Class - 1,
   718  		C_NONE, // p.Reg
   719  		C_NONE, // p.RestArgs[0]
   720  		C_NONE, // p.RestArgs[1]
   721  		C_NONE, // p.RestArgs[2]
   722  		p.To.Class - 1,
   723  	}
   724  	// Fill in argument class for p.Reg.
   725  	switch {
   726  	case REG_R0 <= p.Reg && p.Reg <= REG_R15:
   727  		args[1] = C_REG
   728  	case REG_V0 <= p.Reg && p.Reg <= REG_V31:
   729  		args[1] = C_VREG
   730  	case REG_F0 <= p.Reg && p.Reg <= REG_F15:
   731  		args[1] = C_FREG
   732  	case REG_AR0 <= p.Reg && p.Reg <= REG_AR15:
   733  		args[1] = C_AREG
   734  	}
   735  	// Fill in argument classes for p.RestArgs.
   736  	for i, a := range p.RestArgs {
   737  		args[2+i] = a.Class - 1
   738  	}
   739  
   740  	// Lookup op in optab.
   741  	ops := oprange[p.As&obj.AMask]
   742  	cmp := [len(args)]*[C_NCLASS]bool{}
   743  	for i := range cmp {
   744  		cmp[i] = &xcmp[args[i]]
   745  	}
   746  	for i := range ops {
   747  		op := &ops[i]
   748  		if cmp[0][op.a1] && cmp[1][op.a2] &&
   749  			cmp[2][op.a3] && cmp[3][op.a4] &&
   750  			cmp[4][op.a5] && cmp[5][op.a6] {
   751  			p.Optab = uint16(cap(optab) - cap(ops) + i + 1)
   752  			return op
   753  		}
   754  	}
   755  
   756  	// Cannot find a case; abort.
   757  	s := ""
   758  	for _, a := range args {
   759  		s += fmt.Sprintf(" %v", DRconv(int(a)))
   760  	}
   761  	c.ctxt.Diag("illegal combination %v%v\n", p.As, s)
   762  	c.ctxt.Diag("prog: %v\n", p)
   763  	return nil
   764  }
   765  
   766  func cmp(a int, b int) bool {
   767  	if a == b {
   768  		return true
   769  	}
   770  	switch a {
   771  	case C_DCON:
   772  		if b == C_LCON {
   773  			return true
   774  		}
   775  		fallthrough
   776  	case C_LCON:
   777  		if b == C_ZCON || b == C_SCON || b == C_UCON || b == C_ADDCON || b == C_ANDCON {
   778  			return true
   779  		}
   780  
   781  	case C_ADDCON:
   782  		if b == C_ZCON || b == C_SCON {
   783  			return true
   784  		}
   785  
   786  	case C_ANDCON:
   787  		if b == C_ZCON || b == C_SCON {
   788  			return true
   789  		}
   790  
   791  	case C_UCON:
   792  		if b == C_ZCON || b == C_SCON {
   793  			return true
   794  		}
   795  
   796  	case C_SCON:
   797  		if b == C_ZCON {
   798  			return true
   799  		}
   800  
   801  	case C_LACON:
   802  		if b == C_SACON {
   803  			return true
   804  		}
   805  
   806  	case C_LBRA:
   807  		if b == C_SBRA {
   808  			return true
   809  		}
   810  
   811  	case C_LAUTO:
   812  		if b == C_SAUTO {
   813  			return true
   814  		}
   815  
   816  	case C_LOREG:
   817  		if b == C_ZOREG || b == C_SOREG {
   818  			return true
   819  		}
   820  
   821  	case C_SOREG:
   822  		if b == C_ZOREG {
   823  			return true
   824  		}
   825  
   826  	case C_ANY:
   827  		return true
   828  	}
   829  
   830  	return false
   831  }
   832  
   833  type ocmp []Optab
   834  
   835  func (x ocmp) Len() int {
   836  	return len(x)
   837  }
   838  
   839  func (x ocmp) Swap(i, j int) {
   840  	x[i], x[j] = x[j], x[i]
   841  }
   842  
   843  func (x ocmp) Less(i, j int) bool {
   844  	p1 := &x[i]
   845  	p2 := &x[j]
   846  	n := int(p1.as) - int(p2.as)
   847  	if n != 0 {
   848  		return n < 0
   849  	}
   850  	n = int(p1.a1) - int(p2.a1)
   851  	if n != 0 {
   852  		return n < 0
   853  	}
   854  	n = int(p1.a2) - int(p2.a2)
   855  	if n != 0 {
   856  		return n < 0
   857  	}
   858  	n = int(p1.a3) - int(p2.a3)
   859  	if n != 0 {
   860  		return n < 0
   861  	}
   862  	n = int(p1.a4) - int(p2.a4)
   863  	if n != 0 {
   864  		return n < 0
   865  	}
   866  	return false
   867  }
   868  func opset(a, b obj.As) {
   869  	oprange[a&obj.AMask] = oprange[b&obj.AMask]
   870  }
   871  
   872  func buildop(ctxt *obj.Link) {
   873  	if oprange[AORW&obj.AMask] != nil {
   874  		// Already initialized; stop now.
   875  		// This happens in the cmd/asm tests,
   876  		// each of which re-initializes the arch.
   877  		return
   878  	}
   879  
   880  	for i := 0; i < C_NCLASS; i++ {
   881  		for n := 0; n < C_NCLASS; n++ {
   882  			if cmp(n, i) {
   883  				xcmp[i][n] = true
   884  			}
   885  		}
   886  	}
   887  	sort.Sort(ocmp(optab))
   888  	for i := 0; i < len(optab); i++ {
   889  		r := optab[i].as
   890  		start := i
   891  		for ; i+1 < len(optab); i++ {
   892  			if optab[i+1].as != r {
   893  				break
   894  			}
   895  		}
   896  		oprange[r&obj.AMask] = optab[start : i+1]
   897  
   898  		// opset() aliases optab ranges for similar instructions, to reduce the number of optabs in the array.
   899  		// oprange[] is used by oplook() to find the Optab entry that applies to a given Prog.
   900  		switch r {
   901  		case AADD:
   902  			opset(AADDC, r)
   903  			opset(AADDW, r)
   904  			opset(AMULLD, r)
   905  			opset(AMULLW, r)
   906  		case ADIVW:
   907  			opset(AADDE, r)
   908  			opset(ADIVD, r)
   909  			opset(ADIVDU, r)
   910  			opset(ADIVWU, r)
   911  			opset(AMODD, r)
   912  			opset(AMODDU, r)
   913  			opset(AMODW, r)
   914  			opset(AMODWU, r)
   915  		case AMULHD:
   916  			opset(AMULHDU, r)
   917  		case AMOVBZ:
   918  			opset(AMOVH, r)
   919  			opset(AMOVHZ, r)
   920  		case ALA:
   921  			opset(ALAY, r)
   922  		case AMVC:
   923  			opset(ACLC, r)
   924  			opset(AXC, r)
   925  			opset(AOC, r)
   926  			opset(ANC, r)
   927  		case ASTCK:
   928  			opset(ASTCKC, r)
   929  			opset(ASTCKE, r)
   930  			opset(ASTCKF, r)
   931  		case ALAAG:
   932  			opset(ALAA, r)
   933  			opset(ALAAL, r)
   934  			opset(ALAALG, r)
   935  			opset(ALAN, r)
   936  			opset(ALANG, r)
   937  			opset(ALAX, r)
   938  			opset(ALAXG, r)
   939  			opset(ALAO, r)
   940  			opset(ALAOG, r)
   941  		case ASTMG:
   942  			opset(ASTMY, r)
   943  		case ALMG:
   944  			opset(ALMY, r)
   945  		case ABEQ:
   946  			opset(ABGE, r)
   947  			opset(ABGT, r)
   948  			opset(ABLE, r)
   949  			opset(ABLT, r)
   950  			opset(ABNE, r)
   951  			opset(ABVC, r)
   952  			opset(ABVS, r)
   953  			opset(ABLEU, r)
   954  			opset(ABLTU, r)
   955  		case ABR:
   956  			opset(ABL, r)
   957  		case ABC:
   958  			opset(ABCL, r)
   959  		case AFABS:
   960  			opset(AFNABS, r)
   961  			opset(ALPDFR, r)
   962  			opset(ALNDFR, r)
   963  			opset(AFNEG, r)
   964  			opset(AFNEGS, r)
   965  			opset(ALEDBR, r)
   966  			opset(ALDEBR, r)
   967  			opset(AFSQRT, r)
   968  			opset(AFSQRTS, r)
   969  		case AFADD:
   970  			opset(AFADDS, r)
   971  			opset(AFDIV, r)
   972  			opset(AFDIVS, r)
   973  			opset(AFSUB, r)
   974  			opset(AFSUBS, r)
   975  		case AFMADD:
   976  			opset(AFMADDS, r)
   977  			opset(AFMSUB, r)
   978  			opset(AFMSUBS, r)
   979  		case AFMUL:
   980  			opset(AFMULS, r)
   981  		case AFCMPO:
   982  			opset(AFCMPU, r)
   983  			opset(ACEBR, r)
   984  		case AAND:
   985  			opset(AOR, r)
   986  			opset(AXOR, r)
   987  		case AANDW:
   988  			opset(AORW, r)
   989  			opset(AXORW, r)
   990  		case ASLD:
   991  			opset(ASRD, r)
   992  			opset(ASLW, r)
   993  			opset(ASRW, r)
   994  			opset(ASRAD, r)
   995  			opset(ASRAW, r)
   996  			opset(ARLL, r)
   997  			opset(ARLLG, r)
   998  		case ARNSBG:
   999  			opset(ARXSBG, r)
  1000  			opset(AROSBG, r)
  1001  			opset(ARNSBGT, r)
  1002  			opset(ARXSBGT, r)
  1003  			opset(AROSBGT, r)
  1004  			opset(ARISBG, r)
  1005  			opset(ARISBGN, r)
  1006  			opset(ARISBGZ, r)
  1007  			opset(ARISBGNZ, r)
  1008  			opset(ARISBHG, r)
  1009  			opset(ARISBLG, r)
  1010  			opset(ARISBHGZ, r)
  1011  			opset(ARISBLGZ, r)
  1012  		case ACSG:
  1013  			opset(ACS, r)
  1014  		case ASUB:
  1015  			opset(ASUBC, r)
  1016  			opset(ASUBE, r)
  1017  			opset(ASUBW, r)
  1018  		case ANEG:
  1019  			opset(ANEGW, r)
  1020  		case AFMOVD:
  1021  			opset(AFMOVS, r)
  1022  		case AMOVDBR:
  1023  			opset(AMOVWBR, r)
  1024  		case ACMP:
  1025  			opset(ACMPW, r)
  1026  		case ACMPU:
  1027  			opset(ACMPWU, r)
  1028  		case ATMHH:
  1029  			opset(ATMHL, r)
  1030  			opset(ATMLH, r)
  1031  			opset(ATMLL, r)
  1032  		case ACEFBRA:
  1033  			opset(ACDFBRA, r)
  1034  			opset(ACEGBRA, r)
  1035  			opset(ACDGBRA, r)
  1036  			opset(ACELFBR, r)
  1037  			opset(ACDLFBR, r)
  1038  			opset(ACELGBR, r)
  1039  			opset(ACDLGBR, r)
  1040  		case ACFEBRA:
  1041  			opset(ACFDBRA, r)
  1042  			opset(ACGEBRA, r)
  1043  			opset(ACGDBRA, r)
  1044  			opset(ACLFEBR, r)
  1045  			opset(ACLFDBR, r)
  1046  			opset(ACLGEBR, r)
  1047  			opset(ACLGDBR, r)
  1048  		case AFIEBR:
  1049  			opset(AFIDBR, r)
  1050  		case ACMPBEQ:
  1051  			opset(ACMPBGE, r)
  1052  			opset(ACMPBGT, r)
  1053  			opset(ACMPBLE, r)
  1054  			opset(ACMPBLT, r)
  1055  			opset(ACMPBNE, r)
  1056  		case ACMPUBEQ:
  1057  			opset(ACMPUBGE, r)
  1058  			opset(ACMPUBGT, r)
  1059  			opset(ACMPUBLE, r)
  1060  			opset(ACMPUBLT, r)
  1061  			opset(ACMPUBNE, r)
  1062  		case ACGRJ:
  1063  			opset(ACRJ, r)
  1064  		case ACLGRJ:
  1065  			opset(ACLRJ, r)
  1066  		case ACGIJ:
  1067  			opset(ACIJ, r)
  1068  		case ACLGIJ:
  1069  			opset(ACLIJ, r)
  1070  		case AMOVDEQ:
  1071  			opset(AMOVDGE, r)
  1072  			opset(AMOVDGT, r)
  1073  			opset(AMOVDLE, r)
  1074  			opset(AMOVDLT, r)
  1075  			opset(AMOVDNE, r)
  1076  		case ALOCGR:
  1077  			opset(ALOCR, r)
  1078  		case ALTDBR:
  1079  			opset(ALTEBR, r)
  1080  		case ATCDB:
  1081  			opset(ATCEB, r)
  1082  		case AVL:
  1083  			opset(AVLLEZB, r)
  1084  			opset(AVLLEZH, r)
  1085  			opset(AVLLEZF, r)
  1086  			opset(AVLLEZG, r)
  1087  			opset(AVLREPB, r)
  1088  			opset(AVLREPH, r)
  1089  			opset(AVLREPF, r)
  1090  			opset(AVLREPG, r)
  1091  		case AVLEG:
  1092  			opset(AVLBB, r)
  1093  			opset(AVLEB, r)
  1094  			opset(AVLEH, r)
  1095  			opset(AVLEF, r)
  1096  			opset(AVLEG, r)
  1097  			opset(AVLREP, r)
  1098  		case AVSTEG:
  1099  			opset(AVSTEB, r)
  1100  			opset(AVSTEH, r)
  1101  			opset(AVSTEF, r)
  1102  		case AVSCEG:
  1103  			opset(AVSCEF, r)
  1104  		case AVGEG:
  1105  			opset(AVGEF, r)
  1106  		case AVESLG:
  1107  			opset(AVESLB, r)
  1108  			opset(AVESLH, r)
  1109  			opset(AVESLF, r)
  1110  			opset(AVERLLB, r)
  1111  			opset(AVERLLH, r)
  1112  			opset(AVERLLF, r)
  1113  			opset(AVERLLG, r)
  1114  			opset(AVESRAB, r)
  1115  			opset(AVESRAH, r)
  1116  			opset(AVESRAF, r)
  1117  			opset(AVESRAG, r)
  1118  			opset(AVESRLB, r)
  1119  			opset(AVESRLH, r)
  1120  			opset(AVESRLF, r)
  1121  			opset(AVESRLG, r)
  1122  		case AVLGVG:
  1123  			opset(AVLGVB, r)
  1124  			opset(AVLGVH, r)
  1125  			opset(AVLGVF, r)
  1126  		case AVLVGG:
  1127  			opset(AVLVGB, r)
  1128  			opset(AVLVGH, r)
  1129  			opset(AVLVGF, r)
  1130  		case AVZERO:
  1131  			opset(AVONE, r)
  1132  		case AVREPIG:
  1133  			opset(AVREPIB, r)
  1134  			opset(AVREPIH, r)
  1135  			opset(AVREPIF, r)
  1136  		case AVLEIG:
  1137  			opset(AVLEIB, r)
  1138  			opset(AVLEIH, r)
  1139  			opset(AVLEIF, r)
  1140  		case AVGMG:
  1141  			opset(AVGMB, r)
  1142  			opset(AVGMH, r)
  1143  			opset(AVGMF, r)
  1144  		case AVREPG:
  1145  			opset(AVREPB, r)
  1146  			opset(AVREPH, r)
  1147  			opset(AVREPF, r)
  1148  		case AVERIMG:
  1149  			opset(AVERIMB, r)
  1150  			opset(AVERIMH, r)
  1151  			opset(AVERIMF, r)
  1152  		case AVFTCIDB:
  1153  			opset(AWFTCIDB, r)
  1154  		case AVLR:
  1155  			opset(AVUPHB, r)
  1156  			opset(AVUPHH, r)
  1157  			opset(AVUPHF, r)
  1158  			opset(AVUPLHB, r)
  1159  			opset(AVUPLHH, r)
  1160  			opset(AVUPLHF, r)
  1161  			opset(AVUPLB, r)
  1162  			opset(AVUPLHW, r)
  1163  			opset(AVUPLF, r)
  1164  			opset(AVUPLLB, r)
  1165  			opset(AVUPLLH, r)
  1166  			opset(AVUPLLF, r)
  1167  			opset(AVCLZB, r)
  1168  			opset(AVCLZH, r)
  1169  			opset(AVCLZF, r)
  1170  			opset(AVCLZG, r)
  1171  			opset(AVCTZB, r)
  1172  			opset(AVCTZH, r)
  1173  			opset(AVCTZF, r)
  1174  			opset(AVCTZG, r)
  1175  			opset(AVLDEB, r)
  1176  			opset(AWLDEB, r)
  1177  			opset(AVFLCDB, r)
  1178  			opset(AWFLCDB, r)
  1179  			opset(AVFLNDB, r)
  1180  			opset(AWFLNDB, r)
  1181  			opset(AVFLPDB, r)
  1182  			opset(AWFLPDB, r)
  1183  			opset(AVFSQDB, r)
  1184  			opset(AWFSQDB, r)
  1185  			opset(AVISTRB, r)
  1186  			opset(AVISTRH, r)
  1187  			opset(AVISTRF, r)
  1188  			opset(AVISTRBS, r)
  1189  			opset(AVISTRHS, r)
  1190  			opset(AVISTRFS, r)
  1191  			opset(AVLCB, r)
  1192  			opset(AVLCH, r)
  1193  			opset(AVLCF, r)
  1194  			opset(AVLCG, r)
  1195  			opset(AVLPB, r)
  1196  			opset(AVLPH, r)
  1197  			opset(AVLPF, r)
  1198  			opset(AVLPG, r)
  1199  			opset(AVPOPCT, r)
  1200  			opset(AVSEGB, r)
  1201  			opset(AVSEGH, r)
  1202  			opset(AVSEGF, r)
  1203  		case AVECG:
  1204  			opset(AVECB, r)
  1205  			opset(AVECH, r)
  1206  			opset(AVECF, r)
  1207  			opset(AVECLB, r)
  1208  			opset(AVECLH, r)
  1209  			opset(AVECLF, r)
  1210  			opset(AVECLG, r)
  1211  			opset(AWFCDB, r)
  1212  			opset(AWFKDB, r)
  1213  		case AVCEQG:
  1214  			opset(AVCEQB, r)
  1215  			opset(AVCEQH, r)
  1216  			opset(AVCEQF, r)
  1217  			opset(AVCEQBS, r)
  1218  			opset(AVCEQHS, r)
  1219  			opset(AVCEQFS, r)
  1220  			opset(AVCEQGS, r)
  1221  			opset(AVCHB, r)
  1222  			opset(AVCHH, r)
  1223  			opset(AVCHF, r)
  1224  			opset(AVCHG, r)
  1225  			opset(AVCHBS, r)
  1226  			opset(AVCHHS, r)
  1227  			opset(AVCHFS, r)
  1228  			opset(AVCHGS, r)
  1229  			opset(AVCHLB, r)
  1230  			opset(AVCHLH, r)
  1231  			opset(AVCHLF, r)
  1232  			opset(AVCHLG, r)
  1233  			opset(AVCHLBS, r)
  1234  			opset(AVCHLHS, r)
  1235  			opset(AVCHLFS, r)
  1236  			opset(AVCHLGS, r)
  1237  		case AVFAEF:
  1238  			opset(AVFAEB, r)
  1239  			opset(AVFAEH, r)
  1240  			opset(AVFAEBS, r)
  1241  			opset(AVFAEHS, r)
  1242  			opset(AVFAEFS, r)
  1243  			opset(AVFAEZB, r)
  1244  			opset(AVFAEZH, r)
  1245  			opset(AVFAEZF, r)
  1246  			opset(AVFAEZBS, r)
  1247  			opset(AVFAEZHS, r)
  1248  			opset(AVFAEZFS, r)
  1249  			opset(AVFEEB, r)
  1250  			opset(AVFEEH, r)
  1251  			opset(AVFEEF, r)
  1252  			opset(AVFEEBS, r)
  1253  			opset(AVFEEHS, r)
  1254  			opset(AVFEEFS, r)
  1255  			opset(AVFEEZB, r)
  1256  			opset(AVFEEZH, r)
  1257  			opset(AVFEEZF, r)
  1258  			opset(AVFEEZBS, r)
  1259  			opset(AVFEEZHS, r)
  1260  			opset(AVFEEZFS, r)
  1261  			opset(AVFENEB, r)
  1262  			opset(AVFENEH, r)
  1263  			opset(AVFENEF, r)
  1264  			opset(AVFENEBS, r)
  1265  			opset(AVFENEHS, r)
  1266  			opset(AVFENEFS, r)
  1267  			opset(AVFENEZB, r)
  1268  			opset(AVFENEZH, r)
  1269  			opset(AVFENEZF, r)
  1270  			opset(AVFENEZBS, r)
  1271  			opset(AVFENEZHS, r)
  1272  			opset(AVFENEZFS, r)
  1273  		case AVPKSG:
  1274  			opset(AVPKSH, r)
  1275  			opset(AVPKSF, r)
  1276  			opset(AVPKSHS, r)
  1277  			opset(AVPKSFS, r)
  1278  			opset(AVPKSGS, r)
  1279  			opset(AVPKLSH, r)
  1280  			opset(AVPKLSF, r)
  1281  			opset(AVPKLSG, r)
  1282  			opset(AVPKLSHS, r)
  1283  			opset(AVPKLSFS, r)
  1284  			opset(AVPKLSGS, r)
  1285  		case AVAQ:
  1286  			opset(AVAB, r)
  1287  			opset(AVAH, r)
  1288  			opset(AVAF, r)
  1289  			opset(AVAG, r)
  1290  			opset(AVACCB, r)
  1291  			opset(AVACCH, r)
  1292  			opset(AVACCF, r)
  1293  			opset(AVACCG, r)
  1294  			opset(AVACCQ, r)
  1295  			opset(AVN, r)
  1296  			opset(AVNC, r)
  1297  			opset(AVAVGB, r)
  1298  			opset(AVAVGH, r)
  1299  			opset(AVAVGF, r)
  1300  			opset(AVAVGG, r)
  1301  			opset(AVAVGLB, r)
  1302  			opset(AVAVGLH, r)
  1303  			opset(AVAVGLF, r)
  1304  			opset(AVAVGLG, r)
  1305  			opset(AVCKSM, r)
  1306  			opset(AVX, r)
  1307  			opset(AVFADB, r)
  1308  			opset(AWFADB, r)
  1309  			opset(AVFCEDB, r)
  1310  			opset(AVFCEDBS, r)
  1311  			opset(AWFCEDB, r)
  1312  			opset(AWFCEDBS, r)
  1313  			opset(AVFCHDB, r)
  1314  			opset(AVFCHDBS, r)
  1315  			opset(AWFCHDB, r)
  1316  			opset(AWFCHDBS, r)
  1317  			opset(AVFCHEDB, r)
  1318  			opset(AVFCHEDBS, r)
  1319  			opset(AWFCHEDB, r)
  1320  			opset(AWFCHEDBS, r)
  1321  			opset(AVFMDB, r)
  1322  			opset(AWFMDB, r)
  1323  			opset(AVGFMB, r)
  1324  			opset(AVGFMH, r)
  1325  			opset(AVGFMF, r)
  1326  			opset(AVGFMG, r)
  1327  			opset(AVMXB, r)
  1328  			opset(AVMXH, r)
  1329  			opset(AVMXF, r)
  1330  			opset(AVMXG, r)
  1331  			opset(AVMXLB, r)
  1332  			opset(AVMXLH, r)
  1333  			opset(AVMXLF, r)
  1334  			opset(AVMXLG, r)
  1335  			opset(AVMNB, r)
  1336  			opset(AVMNH, r)
  1337  			opset(AVMNF, r)
  1338  			opset(AVMNG, r)
  1339  			opset(AVMNLB, r)
  1340  			opset(AVMNLH, r)
  1341  			opset(AVMNLF, r)
  1342  			opset(AVMNLG, r)
  1343  			opset(AVMRHB, r)
  1344  			opset(AVMRHH, r)
  1345  			opset(AVMRHF, r)
  1346  			opset(AVMRHG, r)
  1347  			opset(AVMRLB, r)
  1348  			opset(AVMRLH, r)
  1349  			opset(AVMRLF, r)
  1350  			opset(AVMRLG, r)
  1351  			opset(AVMEB, r)
  1352  			opset(AVMEH, r)
  1353  			opset(AVMEF, r)
  1354  			opset(AVMLEB, r)
  1355  			opset(AVMLEH, r)
  1356  			opset(AVMLEF, r)
  1357  			opset(AVMOB, r)
  1358  			opset(AVMOH, r)
  1359  			opset(AVMOF, r)
  1360  			opset(AVMLOB, r)
  1361  			opset(AVMLOH, r)
  1362  			opset(AVMLOF, r)
  1363  			opset(AVMHB, r)
  1364  			opset(AVMHH, r)
  1365  			opset(AVMHF, r)
  1366  			opset(AVMLHB, r)
  1367  			opset(AVMLHH, r)
  1368  			opset(AVMLHF, r)
  1369  			opset(AVMLH, r)
  1370  			opset(AVMLHW, r)
  1371  			opset(AVMLF, r)
  1372  			opset(AVNO, r)
  1373  			opset(AVO, r)
  1374  			opset(AVPKH, r)
  1375  			opset(AVPKF, r)
  1376  			opset(AVPKG, r)
  1377  			opset(AVSUMGH, r)
  1378  			opset(AVSUMGF, r)
  1379  			opset(AVSUMQF, r)
  1380  			opset(AVSUMQG, r)
  1381  			opset(AVSUMB, r)
  1382  			opset(AVSUMH, r)
  1383  		case AVERLLVG:
  1384  			opset(AVERLLVB, r)
  1385  			opset(AVERLLVH, r)
  1386  			opset(AVERLLVF, r)
  1387  			opset(AVESLVB, r)
  1388  			opset(AVESLVH, r)
  1389  			opset(AVESLVF, r)
  1390  			opset(AVESLVG, r)
  1391  			opset(AVESRAVB, r)
  1392  			opset(AVESRAVH, r)
  1393  			opset(AVESRAVF, r)
  1394  			opset(AVESRAVG, r)
  1395  			opset(AVESRLVB, r)
  1396  			opset(AVESRLVH, r)
  1397  			opset(AVESRLVF, r)
  1398  			opset(AVESRLVG, r)
  1399  			opset(AVFDDB, r)
  1400  			opset(AWFDDB, r)
  1401  			opset(AVFSDB, r)
  1402  			opset(AWFSDB, r)
  1403  			opset(AVSL, r)
  1404  			opset(AVSLB, r)
  1405  			opset(AVSRA, r)
  1406  			opset(AVSRAB, r)
  1407  			opset(AVSRL, r)
  1408  			opset(AVSRLB, r)
  1409  			opset(AVSB, r)
  1410  			opset(AVSH, r)
  1411  			opset(AVSF, r)
  1412  			opset(AVSG, r)
  1413  			opset(AVSQ, r)
  1414  			opset(AVSCBIB, r)
  1415  			opset(AVSCBIH, r)
  1416  			opset(AVSCBIF, r)
  1417  			opset(AVSCBIG, r)
  1418  			opset(AVSCBIQ, r)
  1419  		case AVACQ:
  1420  			opset(AVACCCQ, r)
  1421  			opset(AVGFMAB, r)
  1422  			opset(AVGFMAH, r)
  1423  			opset(AVGFMAF, r)
  1424  			opset(AVGFMAG, r)
  1425  			opset(AVMALB, r)
  1426  			opset(AVMALHW, r)
  1427  			opset(AVMALF, r)
  1428  			opset(AVMAHB, r)
  1429  			opset(AVMAHH, r)
  1430  			opset(AVMAHF, r)
  1431  			opset(AVMALHB, r)
  1432  			opset(AVMALHH, r)
  1433  			opset(AVMALHF, r)
  1434  			opset(AVMAEB, r)
  1435  			opset(AVMAEH, r)
  1436  			opset(AVMAEF, r)
  1437  			opset(AVMALEB, r)
  1438  			opset(AVMALEH, r)
  1439  			opset(AVMALEF, r)
  1440  			opset(AVMAOB, r)
  1441  			opset(AVMAOH, r)
  1442  			opset(AVMAOF, r)
  1443  			opset(AVMALOB, r)
  1444  			opset(AVMALOH, r)
  1445  			opset(AVMALOF, r)
  1446  			opset(AVSTRCB, r)
  1447  			opset(AVSTRCH, r)
  1448  			opset(AVSTRCF, r)
  1449  			opset(AVSTRCBS, r)
  1450  			opset(AVSTRCHS, r)
  1451  			opset(AVSTRCFS, r)
  1452  			opset(AVSTRCZB, r)
  1453  			opset(AVSTRCZH, r)
  1454  			opset(AVSTRCZF, r)
  1455  			opset(AVSTRCZBS, r)
  1456  			opset(AVSTRCZHS, r)
  1457  			opset(AVSTRCZFS, r)
  1458  			opset(AVSBCBIQ, r)
  1459  			opset(AVSBIQ, r)
  1460  			opset(AVMSLG, r)
  1461  			opset(AVMSLEG, r)
  1462  			opset(AVMSLOG, r)
  1463  			opset(AVMSLEOG, r)
  1464  		case AVSEL:
  1465  			opset(AVFMADB, r)
  1466  			opset(AWFMADB, r)
  1467  			opset(AVFMSDB, r)
  1468  			opset(AWFMSDB, r)
  1469  			opset(AVPERM, r)
  1470  		}
  1471  	}
  1472  }
  1473  
  1474  const (
  1475  	op_A       uint32 = 0x5A00 // FORMAT_RX1        ADD (32)
  1476  	op_AD      uint32 = 0x6A00 // FORMAT_RX1        ADD NORMALIZED (long HFP)
  1477  	op_ADB     uint32 = 0xED1A // FORMAT_RXE        ADD (long BFP)
  1478  	op_ADBR    uint32 = 0xB31A // FORMAT_RRE        ADD (long BFP)
  1479  	op_ADR     uint32 = 0x2A00 // FORMAT_RR         ADD NORMALIZED (long HFP)
  1480  	op_ADTR    uint32 = 0xB3D2 // FORMAT_RRF1       ADD (long DFP)
  1481  	op_ADTRA   uint32 = 0xB3D2 // FORMAT_RRF1       ADD (long DFP)
  1482  	op_AE      uint32 = 0x7A00 // FORMAT_RX1        ADD NORMALIZED (short HFP)
  1483  	op_AEB     uint32 = 0xED0A // FORMAT_RXE        ADD (short BFP)
  1484  	op_AEBR    uint32 = 0xB30A // FORMAT_RRE        ADD (short BFP)
  1485  	op_AER     uint32 = 0x3A00 // FORMAT_RR         ADD NORMALIZED (short HFP)
  1486  	op_AFI     uint32 = 0xC209 // FORMAT_RIL1       ADD IMMEDIATE (32)
  1487  	op_AG      uint32 = 0xE308 // FORMAT_RXY1       ADD (64)
  1488  	op_AGF     uint32 = 0xE318 // FORMAT_RXY1       ADD (64<-32)
  1489  	op_AGFI    uint32 = 0xC208 // FORMAT_RIL1       ADD IMMEDIATE (64<-32)
  1490  	op_AGFR    uint32 = 0xB918 // FORMAT_RRE        ADD (64<-32)
  1491  	op_AGHI    uint32 = 0xA70B // FORMAT_RI1        ADD HALFWORD IMMEDIATE (64)
  1492  	op_AGHIK   uint32 = 0xECD9 // FORMAT_RIE4       ADD IMMEDIATE (64<-16)
  1493  	op_AGR     uint32 = 0xB908 // FORMAT_RRE        ADD (64)
  1494  	op_AGRK    uint32 = 0xB9E8 // FORMAT_RRF1       ADD (64)
  1495  	op_AGSI    uint32 = 0xEB7A // FORMAT_SIY        ADD IMMEDIATE (64<-8)
  1496  	op_AH      uint32 = 0x4A00 // FORMAT_RX1        ADD HALFWORD
  1497  	op_AHHHR   uint32 = 0xB9C8 // FORMAT_RRF1       ADD HIGH (32)
  1498  	op_AHHLR   uint32 = 0xB9D8 // FORMAT_RRF1       ADD HIGH (32)
  1499  	op_AHI     uint32 = 0xA70A // FORMAT_RI1        ADD HALFWORD IMMEDIATE (32)
  1500  	op_AHIK    uint32 = 0xECD8 // FORMAT_RIE4       ADD IMMEDIATE (32<-16)
  1501  	op_AHY     uint32 = 0xE37A // FORMAT_RXY1       ADD HALFWORD
  1502  	op_AIH     uint32 = 0xCC08 // FORMAT_RIL1       ADD IMMEDIATE HIGH (32)
  1503  	op_AL      uint32 = 0x5E00 // FORMAT_RX1        ADD LOGICAL (32)
  1504  	op_ALC     uint32 = 0xE398 // FORMAT_RXY1       ADD LOGICAL WITH CARRY (32)
  1505  	op_ALCG    uint32 = 0xE388 // FORMAT_RXY1       ADD LOGICAL WITH CARRY (64)
  1506  	op_ALCGR   uint32 = 0xB988 // FORMAT_RRE        ADD LOGICAL WITH CARRY (64)
  1507  	op_ALCR    uint32 = 0xB998 // FORMAT_RRE        ADD LOGICAL WITH CARRY (32)
  1508  	op_ALFI    uint32 = 0xC20B // FORMAT_RIL1       ADD LOGICAL IMMEDIATE (32)
  1509  	op_ALG     uint32 = 0xE30A // FORMAT_RXY1       ADD LOGICAL (64)
  1510  	op_ALGF    uint32 = 0xE31A // FORMAT_RXY1       ADD LOGICAL (64<-32)
  1511  	op_ALGFI   uint32 = 0xC20A // FORMAT_RIL1       ADD LOGICAL IMMEDIATE (64<-32)
  1512  	op_ALGFR   uint32 = 0xB91A // FORMAT_RRE        ADD LOGICAL (64<-32)
  1513  	op_ALGHSIK uint32 = 0xECDB // FORMAT_RIE4       ADD LOGICAL WITH SIGNED IMMEDIATE (64<-16)
  1514  	op_ALGR    uint32 = 0xB90A // FORMAT_RRE        ADD LOGICAL (64)
  1515  	op_ALGRK   uint32 = 0xB9EA // FORMAT_RRF1       ADD LOGICAL (64)
  1516  	op_ALGSI   uint32 = 0xEB7E // FORMAT_SIY        ADD LOGICAL WITH SIGNED IMMEDIATE (64<-8)
  1517  	op_ALHHHR  uint32 = 0xB9CA // FORMAT_RRF1       ADD LOGICAL HIGH (32)
  1518  	op_ALHHLR  uint32 = 0xB9DA // FORMAT_RRF1       ADD LOGICAL HIGH (32)
  1519  	op_ALHSIK  uint32 = 0xECDA // FORMAT_RIE4       ADD LOGICAL WITH SIGNED IMMEDIATE (32<-16)
  1520  	op_ALR     uint32 = 0x1E00 // FORMAT_RR         ADD LOGICAL (32)
  1521  	op_ALRK    uint32 = 0xB9FA // FORMAT_RRF1       ADD LOGICAL (32)
  1522  	op_ALSI    uint32 = 0xEB6E // FORMAT_SIY        ADD LOGICAL WITH SIGNED IMMEDIATE (32<-8)
  1523  	op_ALSIH   uint32 = 0xCC0A // FORMAT_RIL1       ADD LOGICAL WITH SIGNED IMMEDIATE HIGH (32)
  1524  	op_ALSIHN  uint32 = 0xCC0B // FORMAT_RIL1       ADD LOGICAL WITH SIGNED IMMEDIATE HIGH (32)
  1525  	op_ALY     uint32 = 0xE35E // FORMAT_RXY1       ADD LOGICAL (32)
  1526  	op_AP      uint32 = 0xFA00 // FORMAT_SS2        ADD DECIMAL
  1527  	op_AR      uint32 = 0x1A00 // FORMAT_RR         ADD (32)
  1528  	op_ARK     uint32 = 0xB9F8 // FORMAT_RRF1       ADD (32)
  1529  	op_ASI     uint32 = 0xEB6A // FORMAT_SIY        ADD IMMEDIATE (32<-8)
  1530  	op_AU      uint32 = 0x7E00 // FORMAT_RX1        ADD UNNORMALIZED (short HFP)
  1531  	op_AUR     uint32 = 0x3E00 // FORMAT_RR         ADD UNNORMALIZED (short HFP)
  1532  	op_AW      uint32 = 0x6E00 // FORMAT_RX1        ADD UNNORMALIZED (long HFP)
  1533  	op_AWR     uint32 = 0x2E00 // FORMAT_RR         ADD UNNORMALIZED (long HFP)
  1534  	op_AXBR    uint32 = 0xB34A // FORMAT_RRE        ADD (extended BFP)
  1535  	op_AXR     uint32 = 0x3600 // FORMAT_RR         ADD NORMALIZED (extended HFP)
  1536  	op_AXTR    uint32 = 0xB3DA // FORMAT_RRF1       ADD (extended DFP)
  1537  	op_AXTRA   uint32 = 0xB3DA // FORMAT_RRF1       ADD (extended DFP)
  1538  	op_AY      uint32 = 0xE35A // FORMAT_RXY1       ADD (32)
  1539  	op_BAKR    uint32 = 0xB240 // FORMAT_RRE        BRANCH AND STACK
  1540  	op_BAL     uint32 = 0x4500 // FORMAT_RX1        BRANCH AND LINK
  1541  	op_BALR    uint32 = 0x0500 // FORMAT_RR         BRANCH AND LINK
  1542  	op_BAS     uint32 = 0x4D00 // FORMAT_RX1        BRANCH AND SAVE
  1543  	op_BASR    uint32 = 0x0D00 // FORMAT_RR         BRANCH AND SAVE
  1544  	op_BASSM   uint32 = 0x0C00 // FORMAT_RR         BRANCH AND SAVE AND SET MODE
  1545  	op_BC      uint32 = 0x4700 // FORMAT_RX2        BRANCH ON CONDITION
  1546  	op_BCR     uint32 = 0x0700 // FORMAT_RR         BRANCH ON CONDITION
  1547  	op_BCT     uint32 = 0x4600 // FORMAT_RX1        BRANCH ON COUNT (32)
  1548  	op_BCTG    uint32 = 0xE346 // FORMAT_RXY1       BRANCH ON COUNT (64)
  1549  	op_BCTGR   uint32 = 0xB946 // FORMAT_RRE        BRANCH ON COUNT (64)
  1550  	op_BCTR    uint32 = 0x0600 // FORMAT_RR         BRANCH ON COUNT (32)
  1551  	op_BPP     uint32 = 0xC700 // FORMAT_SMI        BRANCH PREDICTION PRELOAD
  1552  	op_BPRP    uint32 = 0xC500 // FORMAT_MII        BRANCH PREDICTION RELATIVE PRELOAD
  1553  	op_BRAS    uint32 = 0xA705 // FORMAT_RI2        BRANCH RELATIVE AND SAVE
  1554  	op_BRASL   uint32 = 0xC005 // FORMAT_RIL2       BRANCH RELATIVE AND SAVE LONG
  1555  	op_BRC     uint32 = 0xA704 // FORMAT_RI3        BRANCH RELATIVE ON CONDITION
  1556  	op_BRCL    uint32 = 0xC004 // FORMAT_RIL3       BRANCH RELATIVE ON CONDITION LONG
  1557  	op_BRCT    uint32 = 0xA706 // FORMAT_RI2        BRANCH RELATIVE ON COUNT (32)
  1558  	op_BRCTG   uint32 = 0xA707 // FORMAT_RI2        BRANCH RELATIVE ON COUNT (64)
  1559  	op_BRCTH   uint32 = 0xCC06 // FORMAT_RIL2       BRANCH RELATIVE ON COUNT HIGH (32)
  1560  	op_BRXH    uint32 = 0x8400 // FORMAT_RSI        BRANCH RELATIVE ON INDEX HIGH (32)
  1561  	op_BRXHG   uint32 = 0xEC44 // FORMAT_RIE5       BRANCH RELATIVE ON INDEX HIGH (64)
  1562  	op_BRXLE   uint32 = 0x8500 // FORMAT_RSI        BRANCH RELATIVE ON INDEX LOW OR EQ. (32)
  1563  	op_BRXLG   uint32 = 0xEC45 // FORMAT_RIE5       BRANCH RELATIVE ON INDEX LOW OR EQ. (64)
  1564  	op_BSA     uint32 = 0xB25A // FORMAT_RRE        BRANCH AND SET AUTHORITY
  1565  	op_BSG     uint32 = 0xB258 // FORMAT_RRE        BRANCH IN SUBSPACE GROUP
  1566  	op_BSM     uint32 = 0x0B00 // FORMAT_RR         BRANCH AND SET MODE
  1567  	op_BXH     uint32 = 0x8600 // FORMAT_RS1        BRANCH ON INDEX HIGH (32)
  1568  	op_BXHG    uint32 = 0xEB44 // FORMAT_RSY1       BRANCH ON INDEX HIGH (64)
  1569  	op_BXLE    uint32 = 0x8700 // FORMAT_RS1        BRANCH ON INDEX LOW OR EQUAL (32)
  1570  	op_BXLEG   uint32 = 0xEB45 // FORMAT_RSY1       BRANCH ON INDEX LOW OR EQUAL (64)
  1571  	op_C       uint32 = 0x5900 // FORMAT_RX1        COMPARE (32)
  1572  	op_CD      uint32 = 0x6900 // FORMAT_RX1        COMPARE (long HFP)
  1573  	op_CDB     uint32 = 0xED19 // FORMAT_RXE        COMPARE (long BFP)
  1574  	op_CDBR    uint32 = 0xB319 // FORMAT_RRE        COMPARE (long BFP)
  1575  	op_CDFBR   uint32 = 0xB395 // FORMAT_RRE        CONVERT FROM FIXED (32 to long BFP)
  1576  	op_CDFBRA  uint32 = 0xB395 // FORMAT_RRF5       CONVERT FROM FIXED (32 to long BFP)
  1577  	op_CDFR    uint32 = 0xB3B5 // FORMAT_RRE        CONVERT FROM FIXED (32 to long HFP)
  1578  	op_CDFTR   uint32 = 0xB951 // FORMAT_RRE        CONVERT FROM FIXED (32 to long DFP)
  1579  	op_CDGBR   uint32 = 0xB3A5 // FORMAT_RRE        CONVERT FROM FIXED (64 to long BFP)
  1580  	op_CDGBRA  uint32 = 0xB3A5 // FORMAT_RRF5       CONVERT FROM FIXED (64 to long BFP)
  1581  	op_CDGR    uint32 = 0xB3C5 // FORMAT_RRE        CONVERT FROM FIXED (64 to long HFP)
  1582  	op_CDGTR   uint32 = 0xB3F1 // FORMAT_RRE        CONVERT FROM FIXED (64 to long DFP)
  1583  	op_CDGTRA  uint32 = 0xB3F1 // FORMAT_RRF5       CONVERT FROM FIXED (64 to long DFP)
  1584  	op_CDLFBR  uint32 = 0xB391 // FORMAT_RRF5       CONVERT FROM LOGICAL (32 to long BFP)
  1585  	op_CDLFTR  uint32 = 0xB953 // FORMAT_RRF5       CONVERT FROM LOGICAL (32 to long DFP)
  1586  	op_CDLGBR  uint32 = 0xB3A1 // FORMAT_RRF5       CONVERT FROM LOGICAL (64 to long BFP)
  1587  	op_CDLGTR  uint32 = 0xB952 // FORMAT_RRF5       CONVERT FROM LOGICAL (64 to long DFP)
  1588  	op_CDR     uint32 = 0x2900 // FORMAT_RR         COMPARE (long HFP)
  1589  	op_CDS     uint32 = 0xBB00 // FORMAT_RS1        COMPARE DOUBLE AND SWAP (32)
  1590  	op_CDSG    uint32 = 0xEB3E // FORMAT_RSY1       COMPARE DOUBLE AND SWAP (64)
  1591  	op_CDSTR   uint32 = 0xB3F3 // FORMAT_RRE        CONVERT FROM SIGNED PACKED (64 to long DFP)
  1592  	op_CDSY    uint32 = 0xEB31 // FORMAT_RSY1       COMPARE DOUBLE AND SWAP (32)
  1593  	op_CDTR    uint32 = 0xB3E4 // FORMAT_RRE        COMPARE (long DFP)
  1594  	op_CDUTR   uint32 = 0xB3F2 // FORMAT_RRE        CONVERT FROM UNSIGNED PACKED (64 to long DFP)
  1595  	op_CDZT    uint32 = 0xEDAA // FORMAT_RSL        CONVERT FROM ZONED (to long DFP)
  1596  	op_CE      uint32 = 0x7900 // FORMAT_RX1        COMPARE (short HFP)
  1597  	op_CEB     uint32 = 0xED09 // FORMAT_RXE        COMPARE (short BFP)
  1598  	op_CEBR    uint32 = 0xB309 // FORMAT_RRE        COMPARE (short BFP)
  1599  	op_CEDTR   uint32 = 0xB3F4 // FORMAT_RRE        COMPARE BIASED EXPONENT (long DFP)
  1600  	op_CEFBR   uint32 = 0xB394 // FORMAT_RRE        CONVERT FROM FIXED (32 to short BFP)
  1601  	op_CEFBRA  uint32 = 0xB394 // FORMAT_RRF5       CONVERT FROM FIXED (32 to short BFP)
  1602  	op_CEFR    uint32 = 0xB3B4 // FORMAT_RRE        CONVERT FROM FIXED (32 to short HFP)
  1603  	op_CEGBR   uint32 = 0xB3A4 // FORMAT_RRE        CONVERT FROM FIXED (64 to short BFP)
  1604  	op_CEGBRA  uint32 = 0xB3A4 // FORMAT_RRF5       CONVERT FROM FIXED (64 to short BFP)
  1605  	op_CEGR    uint32 = 0xB3C4 // FORMAT_RRE        CONVERT FROM FIXED (64 to short HFP)
  1606  	op_CELFBR  uint32 = 0xB390 // FORMAT_RRF5       CONVERT FROM LOGICAL (32 to short BFP)
  1607  	op_CELGBR  uint32 = 0xB3A0 // FORMAT_RRF5       CONVERT FROM LOGICAL (64 to short BFP)
  1608  	op_CER     uint32 = 0x3900 // FORMAT_RR         COMPARE (short HFP)
  1609  	op_CEXTR   uint32 = 0xB3FC // FORMAT_RRE        COMPARE BIASED EXPONENT (extended DFP)
  1610  	op_CFC     uint32 = 0xB21A // FORMAT_S          COMPARE AND FORM CODEWORD
  1611  	op_CFDBR   uint32 = 0xB399 // FORMAT_RRF5       CONVERT TO FIXED (long BFP to 32)
  1612  	op_CFDBRA  uint32 = 0xB399 // FORMAT_RRF5       CONVERT TO FIXED (long BFP to 32)
  1613  	op_CFDR    uint32 = 0xB3B9 // FORMAT_RRF5       CONVERT TO FIXED (long HFP to 32)
  1614  	op_CFDTR   uint32 = 0xB941 // FORMAT_RRF5       CONVERT TO FIXED (long DFP to 32)
  1615  	op_CFEBR   uint32 = 0xB398 // FORMAT_RRF5       CONVERT TO FIXED (short BFP to 32)
  1616  	op_CFEBRA  uint32 = 0xB398 // FORMAT_RRF5       CONVERT TO FIXED (short BFP to 32)
  1617  	op_CFER    uint32 = 0xB3B8 // FORMAT_RRF5       CONVERT TO FIXED (short HFP to 32)
  1618  	op_CFI     uint32 = 0xC20D // FORMAT_RIL1       COMPARE IMMEDIATE (32)
  1619  	op_CFXBR   uint32 = 0xB39A // FORMAT_RRF5       CONVERT TO FIXED (extended BFP to 32)
  1620  	op_CFXBRA  uint32 = 0xB39A // FORMAT_RRF5       CONVERT TO FIXED (extended BFP to 32)
  1621  	op_CFXR    uint32 = 0xB3BA // FORMAT_RRF5       CONVERT TO FIXED (extended HFP to 32)
  1622  	op_CFXTR   uint32 = 0xB949 // FORMAT_RRF5       CONVERT TO FIXED (extended DFP to 32)
  1623  	op_CG      uint32 = 0xE320 // FORMAT_RXY1       COMPARE (64)
  1624  	op_CGDBR   uint32 = 0xB3A9 // FORMAT_RRF5       CONVERT TO FIXED (long BFP to 64)
  1625  	op_CGDBRA  uint32 = 0xB3A9 // FORMAT_RRF5       CONVERT TO FIXED (long BFP to 64)
  1626  	op_CGDR    uint32 = 0xB3C9 // FORMAT_RRF5       CONVERT TO FIXED (long HFP to 64)
  1627  	op_CGDTR   uint32 = 0xB3E1 // FORMAT_RRF5       CONVERT TO FIXED (long DFP to 64)
  1628  	op_CGDTRA  uint32 = 0xB3E1 // FORMAT_RRF5       CONVERT TO FIXED (long DFP to 64)
  1629  	op_CGEBR   uint32 = 0xB3A8 // FORMAT_RRF5       CONVERT TO FIXED (short BFP to 64)
  1630  	op_CGEBRA  uint32 = 0xB3A8 // FORMAT_RRF5       CONVERT TO FIXED (short BFP to 64)
  1631  	op_CGER    uint32 = 0xB3C8 // FORMAT_RRF5       CONVERT TO FIXED (short HFP to 64)
  1632  	op_CGF     uint32 = 0xE330 // FORMAT_RXY1       COMPARE (64<-32)
  1633  	op_CGFI    uint32 = 0xC20C // FORMAT_RIL1       COMPARE IMMEDIATE (64<-32)
  1634  	op_CGFR    uint32 = 0xB930 // FORMAT_RRE        COMPARE (64<-32)
  1635  	op_CGFRL   uint32 = 0xC60C // FORMAT_RIL2       COMPARE RELATIVE LONG (64<-32)
  1636  	op_CGH     uint32 = 0xE334 // FORMAT_RXY1       COMPARE HALFWORD (64<-16)
  1637  	op_CGHI    uint32 = 0xA70F // FORMAT_RI1        COMPARE HALFWORD IMMEDIATE (64<-16)
  1638  	op_CGHRL   uint32 = 0xC604 // FORMAT_RIL2       COMPARE HALFWORD RELATIVE LONG (64<-16)
  1639  	op_CGHSI   uint32 = 0xE558 // FORMAT_SIL        COMPARE HALFWORD IMMEDIATE (64<-16)
  1640  	op_CGIB    uint32 = 0xECFC // FORMAT_RIS        COMPARE IMMEDIATE AND BRANCH (64<-8)
  1641  	op_CGIJ    uint32 = 0xEC7C // FORMAT_RIE3       COMPARE IMMEDIATE AND BRANCH RELATIVE (64<-8)
  1642  	op_CGIT    uint32 = 0xEC70 // FORMAT_RIE1       COMPARE IMMEDIATE AND TRAP (64<-16)
  1643  	op_CGR     uint32 = 0xB920 // FORMAT_RRE        COMPARE (64)
  1644  	op_CGRB    uint32 = 0xECE4 // FORMAT_RRS        COMPARE AND BRANCH (64)
  1645  	op_CGRJ    uint32 = 0xEC64 // FORMAT_RIE2       COMPARE AND BRANCH RELATIVE (64)
  1646  	op_CGRL    uint32 = 0xC608 // FORMAT_RIL2       COMPARE RELATIVE LONG (64)
  1647  	op_CGRT    uint32 = 0xB960 // FORMAT_RRF3       COMPARE AND TRAP (64)
  1648  	op_CGXBR   uint32 = 0xB3AA // FORMAT_RRF5       CONVERT TO FIXED (extended BFP to 64)
  1649  	op_CGXBRA  uint32 = 0xB3AA // FORMAT_RRF5       CONVERT TO FIXED (extended BFP to 64)
  1650  	op_CGXR    uint32 = 0xB3CA // FORMAT_RRF5       CONVERT TO FIXED (extended HFP to 64)
  1651  	op_CGXTR   uint32 = 0xB3E9 // FORMAT_RRF5       CONVERT TO FIXED (extended DFP to 64)
  1652  	op_CGXTRA  uint32 = 0xB3E9 // FORMAT_RRF5       CONVERT TO FIXED (extended DFP to 64)
  1653  	op_CH      uint32 = 0x4900 // FORMAT_RX1        COMPARE HALFWORD (32<-16)
  1654  	op_CHF     uint32 = 0xE3CD // FORMAT_RXY1       COMPARE HIGH (32)
  1655  	op_CHHR    uint32 = 0xB9CD // FORMAT_RRE        COMPARE HIGH (32)
  1656  	op_CHHSI   uint32 = 0xE554 // FORMAT_SIL        COMPARE HALFWORD IMMEDIATE (16)
  1657  	op_CHI     uint32 = 0xA70E // FORMAT_RI1        COMPARE HALFWORD IMMEDIATE (32<-16)
  1658  	op_CHLR    uint32 = 0xB9DD // FORMAT_RRE        COMPARE HIGH (32)
  1659  	op_CHRL    uint32 = 0xC605 // FORMAT_RIL2       COMPARE HALFWORD RELATIVE LONG (32<-16)
  1660  	op_CHSI    uint32 = 0xE55C // FORMAT_SIL        COMPARE HALFWORD IMMEDIATE (32<-16)
  1661  	op_CHY     uint32 = 0xE379 // FORMAT_RXY1       COMPARE HALFWORD (32<-16)
  1662  	op_CIB     uint32 = 0xECFE // FORMAT_RIS        COMPARE IMMEDIATE AND BRANCH (32<-8)
  1663  	op_CIH     uint32 = 0xCC0D // FORMAT_RIL1       COMPARE IMMEDIATE HIGH (32)
  1664  	op_CIJ     uint32 = 0xEC7E // FORMAT_RIE3       COMPARE IMMEDIATE AND BRANCH RELATIVE (32<-8)
  1665  	op_CIT     uint32 = 0xEC72 // FORMAT_RIE1       COMPARE IMMEDIATE AND TRAP (32<-16)
  1666  	op_CKSM    uint32 = 0xB241 // FORMAT_RRE        CHECKSUM
  1667  	op_CL      uint32 = 0x5500 // FORMAT_RX1        COMPARE LOGICAL (32)
  1668  	op_CLC     uint32 = 0xD500 // FORMAT_SS1        COMPARE LOGICAL (character)
  1669  	op_CLCL    uint32 = 0x0F00 // FORMAT_RR         COMPARE LOGICAL LONG
  1670  	op_CLCLE   uint32 = 0xA900 // FORMAT_RS1        COMPARE LOGICAL LONG EXTENDED
  1671  	op_CLCLU   uint32 = 0xEB8F // FORMAT_RSY1       COMPARE LOGICAL LONG UNICODE
  1672  	op_CLFDBR  uint32 = 0xB39D // FORMAT_RRF5       CONVERT TO LOGICAL (long BFP to 32)
  1673  	op_CLFDTR  uint32 = 0xB943 // FORMAT_RRF5       CONVERT TO LOGICAL (long DFP to 32)
  1674  	op_CLFEBR  uint32 = 0xB39C // FORMAT_RRF5       CONVERT TO LOGICAL (short BFP to 32)
  1675  	op_CLFHSI  uint32 = 0xE55D // FORMAT_SIL        COMPARE LOGICAL IMMEDIATE (32<-16)
  1676  	op_CLFI    uint32 = 0xC20F // FORMAT_RIL1       COMPARE LOGICAL IMMEDIATE (32)
  1677  	op_CLFIT   uint32 = 0xEC73 // FORMAT_RIE1       COMPARE LOGICAL IMMEDIATE AND TRAP (32<-16)
  1678  	op_CLFXBR  uint32 = 0xB39E // FORMAT_RRF5       CONVERT TO LOGICAL (extended BFP to 32)
  1679  	op_CLFXTR  uint32 = 0xB94B // FORMAT_RRF5       CONVERT TO LOGICAL (extended DFP to 32)
  1680  	op_CLG     uint32 = 0xE321 // FORMAT_RXY1       COMPARE LOGICAL (64)
  1681  	op_CLGDBR  uint32 = 0xB3AD // FORMAT_RRF5       CONVERT TO LOGICAL (long BFP to 64)
  1682  	op_CLGDTR  uint32 = 0xB942 // FORMAT_RRF5       CONVERT TO LOGICAL (long DFP to 64)
  1683  	op_CLGEBR  uint32 = 0xB3AC // FORMAT_RRF5       CONVERT TO LOGICAL (short BFP to 64)
  1684  	op_CLGF    uint32 = 0xE331 // FORMAT_RXY1       COMPARE LOGICAL (64<-32)
  1685  	op_CLGFI   uint32 = 0xC20E // FORMAT_RIL1       COMPARE LOGICAL IMMEDIATE (64<-32)
  1686  	op_CLGFR   uint32 = 0xB931 // FORMAT_RRE        COMPARE LOGICAL (64<-32)
  1687  	op_CLGFRL  uint32 = 0xC60E // FORMAT_RIL2       COMPARE LOGICAL RELATIVE LONG (64<-32)
  1688  	op_CLGHRL  uint32 = 0xC606 // FORMAT_RIL2       COMPARE LOGICAL RELATIVE LONG (64<-16)
  1689  	op_CLGHSI  uint32 = 0xE559 // FORMAT_SIL        COMPARE LOGICAL IMMEDIATE (64<-16)
  1690  	op_CLGIB   uint32 = 0xECFD // FORMAT_RIS        COMPARE LOGICAL IMMEDIATE AND BRANCH (64<-8)
  1691  	op_CLGIJ   uint32 = 0xEC7D // FORMAT_RIE3       COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE (64<-8)
  1692  	op_CLGIT   uint32 = 0xEC71 // FORMAT_RIE1       COMPARE LOGICAL IMMEDIATE AND TRAP (64<-16)
  1693  	op_CLGR    uint32 = 0xB921 // FORMAT_RRE        COMPARE LOGICAL (64)
  1694  	op_CLGRB   uint32 = 0xECE5 // FORMAT_RRS        COMPARE LOGICAL AND BRANCH (64)
  1695  	op_CLGRJ   uint32 = 0xEC65 // FORMAT_RIE2       COMPARE LOGICAL AND BRANCH RELATIVE (64)
  1696  	op_CLGRL   uint32 = 0xC60A // FORMAT_RIL2       COMPARE LOGICAL RELATIVE LONG (64)
  1697  	op_CLGRT   uint32 = 0xB961 // FORMAT_RRF3       COMPARE LOGICAL AND TRAP (64)
  1698  	op_CLGT    uint32 = 0xEB2B // FORMAT_RSY2       COMPARE LOGICAL AND TRAP (64)
  1699  	op_CLGXBR  uint32 = 0xB3AE // FORMAT_RRF5       CONVERT TO LOGICAL (extended BFP to 64)
  1700  	op_CLGXTR  uint32 = 0xB94A // FORMAT_RRF5       CONVERT TO LOGICAL (extended DFP to 64)
  1701  	op_CLHF    uint32 = 0xE3CF // FORMAT_RXY1       COMPARE LOGICAL HIGH (32)
  1702  	op_CLHHR   uint32 = 0xB9CF // FORMAT_RRE        COMPARE LOGICAL HIGH (32)
  1703  	op_CLHHSI  uint32 = 0xE555 // FORMAT_SIL        COMPARE LOGICAL IMMEDIATE (16)
  1704  	op_CLHLR   uint32 = 0xB9DF // FORMAT_RRE        COMPARE LOGICAL HIGH (32)
  1705  	op_CLHRL   uint32 = 0xC607 // FORMAT_RIL2       COMPARE LOGICAL RELATIVE LONG (32<-16)
  1706  	op_CLI     uint32 = 0x9500 // FORMAT_SI         COMPARE LOGICAL (immediate)
  1707  	op_CLIB    uint32 = 0xECFF // FORMAT_RIS        COMPARE LOGICAL IMMEDIATE AND BRANCH (32<-8)
  1708  	op_CLIH    uint32 = 0xCC0F // FORMAT_RIL1       COMPARE LOGICAL IMMEDIATE HIGH (32)
  1709  	op_CLIJ    uint32 = 0xEC7F // FORMAT_RIE3       COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE (32<-8)
  1710  	op_CLIY    uint32 = 0xEB55 // FORMAT_SIY        COMPARE LOGICAL (immediate)
  1711  	op_CLM     uint32 = 0xBD00 // FORMAT_RS2        COMPARE LOGICAL CHAR. UNDER MASK (low)
  1712  	op_CLMH    uint32 = 0xEB20 // FORMAT_RSY2       COMPARE LOGICAL CHAR. UNDER MASK (high)
  1713  	op_CLMY    uint32 = 0xEB21 // FORMAT_RSY2       COMPARE LOGICAL CHAR. UNDER MASK (low)
  1714  	op_CLR     uint32 = 0x1500 // FORMAT_RR         COMPARE LOGICAL (32)
  1715  	op_CLRB    uint32 = 0xECF7 // FORMAT_RRS        COMPARE LOGICAL AND BRANCH (32)
  1716  	op_CLRJ    uint32 = 0xEC77 // FORMAT_RIE2       COMPARE LOGICAL AND BRANCH RELATIVE (32)
  1717  	op_CLRL    uint32 = 0xC60F // FORMAT_RIL2       COMPARE LOGICAL RELATIVE LONG (32)
  1718  	op_CLRT    uint32 = 0xB973 // FORMAT_RRF3       COMPARE LOGICAL AND TRAP (32)
  1719  	op_CLST    uint32 = 0xB25D // FORMAT_RRE        COMPARE LOGICAL STRING
  1720  	op_CLT     uint32 = 0xEB23 // FORMAT_RSY2       COMPARE LOGICAL AND TRAP (32)
  1721  	op_CLY     uint32 = 0xE355 // FORMAT_RXY1       COMPARE LOGICAL (32)
  1722  	op_CMPSC   uint32 = 0xB263 // FORMAT_RRE        COMPRESSION CALL
  1723  	op_CP      uint32 = 0xF900 // FORMAT_SS2        COMPARE DECIMAL
  1724  	op_CPSDR   uint32 = 0xB372 // FORMAT_RRF2       COPY SIGN (long)
  1725  	op_CPYA    uint32 = 0xB24D // FORMAT_RRE        COPY ACCESS
  1726  	op_CR      uint32 = 0x1900 // FORMAT_RR         COMPARE (32)
  1727  	op_CRB     uint32 = 0xECF6 // FORMAT_RRS        COMPARE AND BRANCH (32)
  1728  	op_CRDTE   uint32 = 0xB98F // FORMAT_RRF2       COMPARE AND REPLACE DAT TABLE ENTRY
  1729  	op_CRJ     uint32 = 0xEC76 // FORMAT_RIE2       COMPARE AND BRANCH RELATIVE (32)
  1730  	op_CRL     uint32 = 0xC60D // FORMAT_RIL2       COMPARE RELATIVE LONG (32)
  1731  	op_CRT     uint32 = 0xB972 // FORMAT_RRF3       COMPARE AND TRAP (32)
  1732  	op_CS      uint32 = 0xBA00 // FORMAT_RS1        COMPARE AND SWAP (32)
  1733  	op_CSCH    uint32 = 0xB230 // FORMAT_S          CLEAR SUBCHANNEL
  1734  	op_CSDTR   uint32 = 0xB3E3 // FORMAT_RRF4       CONVERT TO SIGNED PACKED (long DFP to 64)
  1735  	op_CSG     uint32 = 0xEB30 // FORMAT_RSY1       COMPARE AND SWAP (64)
  1736  	op_CSP     uint32 = 0xB250 // FORMAT_RRE        COMPARE AND SWAP AND PURGE
  1737  	op_CSPG    uint32 = 0xB98A // FORMAT_RRE        COMPARE AND SWAP AND PURGE
  1738  	op_CSST    uint32 = 0xC802 // FORMAT_SSF        COMPARE AND SWAP AND STORE
  1739  	op_CSXTR   uint32 = 0xB3EB // FORMAT_RRF4       CONVERT TO SIGNED PACKED (extended DFP to 128)
  1740  	op_CSY     uint32 = 0xEB14 // FORMAT_RSY1       COMPARE AND SWAP (32)
  1741  	op_CU12    uint32 = 0xB2A7 // FORMAT_RRF3       CONVERT UTF-8 TO UTF-16
  1742  	op_CU14    uint32 = 0xB9B0 // FORMAT_RRF3       CONVERT UTF-8 TO UTF-32
  1743  	op_CU21    uint32 = 0xB2A6 // FORMAT_RRF3       CONVERT UTF-16 TO UTF-8
  1744  	op_CU24    uint32 = 0xB9B1 // FORMAT_RRF3       CONVERT UTF-16 TO UTF-32
  1745  	op_CU41    uint32 = 0xB9B2 // FORMAT_RRE        CONVERT UTF-32 TO UTF-8
  1746  	op_CU42    uint32 = 0xB9B3 // FORMAT_RRE        CONVERT UTF-32 TO UTF-16
  1747  	op_CUDTR   uint32 = 0xB3E2 // FORMAT_RRE        CONVERT TO UNSIGNED PACKED (long DFP to 64)
  1748  	op_CUSE    uint32 = 0xB257 // FORMAT_RRE        COMPARE UNTIL SUBSTRING EQUAL
  1749  	op_CUTFU   uint32 = 0xB2A7 // FORMAT_RRF3       CONVERT UTF-8 TO UNICODE
  1750  	op_CUUTF   uint32 = 0xB2A6 // FORMAT_RRF3       CONVERT UNICODE TO UTF-8
  1751  	op_CUXTR   uint32 = 0xB3EA // FORMAT_RRE        CONVERT TO UNSIGNED PACKED (extended DFP to 128)
  1752  	op_CVB     uint32 = 0x4F00 // FORMAT_RX1        CONVERT TO BINARY (32)
  1753  	op_CVBG    uint32 = 0xE30E // FORMAT_RXY1       CONVERT TO BINARY (64)
  1754  	op_CVBY    uint32 = 0xE306 // FORMAT_RXY1       CONVERT TO BINARY (32)
  1755  	op_CVD     uint32 = 0x4E00 // FORMAT_RX1        CONVERT TO DECIMAL (32)
  1756  	op_CVDG    uint32 = 0xE32E // FORMAT_RXY1       CONVERT TO DECIMAL (64)
  1757  	op_CVDY    uint32 = 0xE326 // FORMAT_RXY1       CONVERT TO DECIMAL (32)
  1758  	op_CXBR    uint32 = 0xB349 // FORMAT_RRE        COMPARE (extended BFP)
  1759  	op_CXFBR   uint32 = 0xB396 // FORMAT_RRE        CONVERT FROM FIXED (32 to extended BFP)
  1760  	op_CXFBRA  uint32 = 0xB396 // FORMAT_RRF5       CONVERT FROM FIXED (32 to extended BFP)
  1761  	op_CXFR    uint32 = 0xB3B6 // FORMAT_RRE        CONVERT FROM FIXED (32 to extended HFP)
  1762  	op_CXFTR   uint32 = 0xB959 // FORMAT_RRE        CONVERT FROM FIXED (32 to extended DFP)
  1763  	op_CXGBR   uint32 = 0xB3A6 // FORMAT_RRE        CONVERT FROM FIXED (64 to extended BFP)
  1764  	op_CXGBRA  uint32 = 0xB3A6 // FORMAT_RRF5       CONVERT FROM FIXED (64 to extended BFP)
  1765  	op_CXGR    uint32 = 0xB3C6 // FORMAT_RRE        CONVERT FROM FIXED (64 to extended HFP)
  1766  	op_CXGTR   uint32 = 0xB3F9 // FORMAT_RRE        CONVERT FROM FIXED (64 to extended DFP)
  1767  	op_CXGTRA  uint32 = 0xB3F9 // FORMAT_RRF5       CONVERT FROM FIXED (64 to extended DFP)
  1768  	op_CXLFBR  uint32 = 0xB392 // FORMAT_RRF5       CONVERT FROM LOGICAL (32 to extended BFP)
  1769  	op_CXLFTR  uint32 = 0xB95B // FORMAT_RRF5       CONVERT FROM LOGICAL (32 to extended DFP)
  1770  	op_CXLGBR  uint32 = 0xB3A2 // FORMAT_RRF5       CONVERT FROM LOGICAL (64 to extended BFP)
  1771  	op_CXLGTR  uint32 = 0xB95A // FORMAT_RRF5       CONVERT FROM LOGICAL (64 to extended DFP)
  1772  	op_CXR     uint32 = 0xB369 // FORMAT_RRE        COMPARE (extended HFP)
  1773  	op_CXSTR   uint32 = 0xB3FB // FORMAT_RRE        CONVERT FROM SIGNED PACKED (128 to extended DFP)
  1774  	op_CXTR    uint32 = 0xB3EC // FORMAT_RRE        COMPARE (extended DFP)
  1775  	op_CXUTR   uint32 = 0xB3FA // FORMAT_RRE        CONVERT FROM UNSIGNED PACKED (128 to ext. DFP)
  1776  	op_CXZT    uint32 = 0xEDAB // FORMAT_RSL        CONVERT FROM ZONED (to extended DFP)
  1777  	op_CY      uint32 = 0xE359 // FORMAT_RXY1       COMPARE (32)
  1778  	op_CZDT    uint32 = 0xEDA8 // FORMAT_RSL        CONVERT TO ZONED (from long DFP)
  1779  	op_CZXT    uint32 = 0xEDA9 // FORMAT_RSL        CONVERT TO ZONED (from extended DFP)
  1780  	op_D       uint32 = 0x5D00 // FORMAT_RX1        DIVIDE (32<-64)
  1781  	op_DD      uint32 = 0x6D00 // FORMAT_RX1        DIVIDE (long HFP)
  1782  	op_DDB     uint32 = 0xED1D // FORMAT_RXE        DIVIDE (long BFP)
  1783  	op_DDBR    uint32 = 0xB31D // FORMAT_RRE        DIVIDE (long BFP)
  1784  	op_DDR     uint32 = 0x2D00 // FORMAT_RR         DIVIDE (long HFP)
  1785  	op_DDTR    uint32 = 0xB3D1 // FORMAT_RRF1       DIVIDE (long DFP)
  1786  	op_DDTRA   uint32 = 0xB3D1 // FORMAT_RRF1       DIVIDE (long DFP)
  1787  	op_DE      uint32 = 0x7D00 // FORMAT_RX1        DIVIDE (short HFP)
  1788  	op_DEB     uint32 = 0xED0D // FORMAT_RXE        DIVIDE (short BFP)
  1789  	op_DEBR    uint32 = 0xB30D // FORMAT_RRE        DIVIDE (short BFP)
  1790  	op_DER     uint32 = 0x3D00 // FORMAT_RR         DIVIDE (short HFP)
  1791  	op_DIDBR   uint32 = 0xB35B // FORMAT_RRF2       DIVIDE TO INTEGER (long BFP)
  1792  	op_DIEBR   uint32 = 0xB353 // FORMAT_RRF2       DIVIDE TO INTEGER (short BFP)
  1793  	op_DL      uint32 = 0xE397 // FORMAT_RXY1       DIVIDE LOGICAL (32<-64)
  1794  	op_DLG     uint32 = 0xE387 // FORMAT_RXY1       DIVIDE LOGICAL (64<-128)
  1795  	op_DLGR    uint32 = 0xB987 // FORMAT_RRE        DIVIDE LOGICAL (64<-128)
  1796  	op_DLR     uint32 = 0xB997 // FORMAT_RRE        DIVIDE LOGICAL (32<-64)
  1797  	op_DP      uint32 = 0xFD00 // FORMAT_SS2        DIVIDE DECIMAL
  1798  	op_DR      uint32 = 0x1D00 // FORMAT_RR         DIVIDE (32<-64)
  1799  	op_DSG     uint32 = 0xE30D // FORMAT_RXY1       DIVIDE SINGLE (64)
  1800  	op_DSGF    uint32 = 0xE31D // FORMAT_RXY1       DIVIDE SINGLE (64<-32)
  1801  	op_DSGFR   uint32 = 0xB91D // FORMAT_RRE        DIVIDE SINGLE (64<-32)
  1802  	op_DSGR    uint32 = 0xB90D // FORMAT_RRE        DIVIDE SINGLE (64)
  1803  	op_DXBR    uint32 = 0xB34D // FORMAT_RRE        DIVIDE (extended BFP)
  1804  	op_DXR     uint32 = 0xB22D // FORMAT_RRE        DIVIDE (extended HFP)
  1805  	op_DXTR    uint32 = 0xB3D9 // FORMAT_RRF1       DIVIDE (extended DFP)
  1806  	op_DXTRA   uint32 = 0xB3D9 // FORMAT_RRF1       DIVIDE (extended DFP)
  1807  	op_EAR     uint32 = 0xB24F // FORMAT_RRE        EXTRACT ACCESS
  1808  	op_ECAG    uint32 = 0xEB4C // FORMAT_RSY1       EXTRACT CACHE ATTRIBUTE
  1809  	op_ECTG    uint32 = 0xC801 // FORMAT_SSF        EXTRACT CPU TIME
  1810  	op_ED      uint32 = 0xDE00 // FORMAT_SS1        EDIT
  1811  	op_EDMK    uint32 = 0xDF00 // FORMAT_SS1        EDIT AND MARK
  1812  	op_EEDTR   uint32 = 0xB3E5 // FORMAT_RRE        EXTRACT BIASED EXPONENT (long DFP to 64)
  1813  	op_EEXTR   uint32 = 0xB3ED // FORMAT_RRE        EXTRACT BIASED EXPONENT (extended DFP to 64)
  1814  	op_EFPC    uint32 = 0xB38C // FORMAT_RRE        EXTRACT FPC
  1815  	op_EPAIR   uint32 = 0xB99A // FORMAT_RRE        EXTRACT PRIMARY ASN AND INSTANCE
  1816  	op_EPAR    uint32 = 0xB226 // FORMAT_RRE        EXTRACT PRIMARY ASN
  1817  	op_EPSW    uint32 = 0xB98D // FORMAT_RRE        EXTRACT PSW
  1818  	op_EREG    uint32 = 0xB249 // FORMAT_RRE        EXTRACT STACKED REGISTERS (32)
  1819  	op_EREGG   uint32 = 0xB90E // FORMAT_RRE        EXTRACT STACKED REGISTERS (64)
  1820  	op_ESAIR   uint32 = 0xB99B // FORMAT_RRE        EXTRACT SECONDARY ASN AND INSTANCE
  1821  	op_ESAR    uint32 = 0xB227 // FORMAT_RRE        EXTRACT SECONDARY ASN
  1822  	op_ESDTR   uint32 = 0xB3E7 // FORMAT_RRE        EXTRACT SIGNIFICANCE (long DFP)
  1823  	op_ESEA    uint32 = 0xB99D // FORMAT_RRE        EXTRACT AND SET EXTENDED AUTHORITY
  1824  	op_ESTA    uint32 = 0xB24A // FORMAT_RRE        EXTRACT STACKED STATE
  1825  	op_ESXTR   uint32 = 0xB3EF // FORMAT_RRE        EXTRACT SIGNIFICANCE (extended DFP)
  1826  	op_ETND    uint32 = 0xB2EC // FORMAT_RRE        EXTRACT TRANSACTION NESTING DEPTH
  1827  	op_EX      uint32 = 0x4400 // FORMAT_RX1        EXECUTE
  1828  	op_EXRL    uint32 = 0xC600 // FORMAT_RIL2       EXECUTE RELATIVE LONG
  1829  	op_FIDBR   uint32 = 0xB35F // FORMAT_RRF5       LOAD FP INTEGER (long BFP)
  1830  	op_FIDBRA  uint32 = 0xB35F // FORMAT_RRF5       LOAD FP INTEGER (long BFP)
  1831  	op_FIDR    uint32 = 0xB37F // FORMAT_RRE        LOAD FP INTEGER (long HFP)
  1832  	op_FIDTR   uint32 = 0xB3D7 // FORMAT_RRF5       LOAD FP INTEGER (long DFP)
  1833  	op_FIEBR   uint32 = 0xB357 // FORMAT_RRF5       LOAD FP INTEGER (short BFP)
  1834  	op_FIEBRA  uint32 = 0xB357 // FORMAT_RRF5       LOAD FP INTEGER (short BFP)
  1835  	op_FIER    uint32 = 0xB377 // FORMAT_RRE        LOAD FP INTEGER (short HFP)
  1836  	op_FIXBR   uint32 = 0xB347 // FORMAT_RRF5       LOAD FP INTEGER (extended BFP)
  1837  	op_FIXBRA  uint32 = 0xB347 // FORMAT_RRF5       LOAD FP INTEGER (extended BFP)
  1838  	op_FIXR    uint32 = 0xB367 // FORMAT_RRE        LOAD FP INTEGER (extended HFP)
  1839  	op_FIXTR   uint32 = 0xB3DF // FORMAT_RRF5       LOAD FP INTEGER (extended DFP)
  1840  	op_FLOGR   uint32 = 0xB983 // FORMAT_RRE        FIND LEFTMOST ONE
  1841  	op_HDR     uint32 = 0x2400 // FORMAT_RR         HALVE (long HFP)
  1842  	op_HER     uint32 = 0x3400 // FORMAT_RR         HALVE (short HFP)
  1843  	op_HSCH    uint32 = 0xB231 // FORMAT_S          HALT SUBCHANNEL
  1844  	op_IAC     uint32 = 0xB224 // FORMAT_RRE        INSERT ADDRESS SPACE CONTROL
  1845  	op_IC      uint32 = 0x4300 // FORMAT_RX1        INSERT CHARACTER
  1846  	op_ICM     uint32 = 0xBF00 // FORMAT_RS2        INSERT CHARACTERS UNDER MASK (low)
  1847  	op_ICMH    uint32 = 0xEB80 // FORMAT_RSY2       INSERT CHARACTERS UNDER MASK (high)
  1848  	op_ICMY    uint32 = 0xEB81 // FORMAT_RSY2       INSERT CHARACTERS UNDER MASK (low)
  1849  	op_ICY     uint32 = 0xE373 // FORMAT_RXY1       INSERT CHARACTER
  1850  	op_IDTE    uint32 = 0xB98E // FORMAT_RRF2       INVALIDATE DAT TABLE ENTRY
  1851  	op_IEDTR   uint32 = 0xB3F6 // FORMAT_RRF2       INSERT BIASED EXPONENT (64 to long DFP)
  1852  	op_IEXTR   uint32 = 0xB3FE // FORMAT_RRF2       INSERT BIASED EXPONENT (64 to extended DFP)
  1853  	op_IIHF    uint32 = 0xC008 // FORMAT_RIL1       INSERT IMMEDIATE (high)
  1854  	op_IIHH    uint32 = 0xA500 // FORMAT_RI1        INSERT IMMEDIATE (high high)
  1855  	op_IIHL    uint32 = 0xA501 // FORMAT_RI1        INSERT IMMEDIATE (high low)
  1856  	op_IILF    uint32 = 0xC009 // FORMAT_RIL1       INSERT IMMEDIATE (low)
  1857  	op_IILH    uint32 = 0xA502 // FORMAT_RI1        INSERT IMMEDIATE (low high)
  1858  	op_IILL    uint32 = 0xA503 // FORMAT_RI1        INSERT IMMEDIATE (low low)
  1859  	op_IPK     uint32 = 0xB20B // FORMAT_S          INSERT PSW KEY
  1860  	op_IPM     uint32 = 0xB222 // FORMAT_RRE        INSERT PROGRAM MASK
  1861  	op_IPTE    uint32 = 0xB221 // FORMAT_RRF1       INVALIDATE PAGE TABLE ENTRY
  1862  	op_ISKE    uint32 = 0xB229 // FORMAT_RRE        INSERT STORAGE KEY EXTENDED
  1863  	op_IVSK    uint32 = 0xB223 // FORMAT_RRE        INSERT VIRTUAL STORAGE KEY
  1864  	op_KDB     uint32 = 0xED18 // FORMAT_RXE        COMPARE AND SIGNAL (long BFP)
  1865  	op_KDBR    uint32 = 0xB318 // FORMAT_RRE        COMPARE AND SIGNAL (long BFP)
  1866  	op_KDTR    uint32 = 0xB3E0 // FORMAT_RRE        COMPARE AND SIGNAL (long DFP)
  1867  	op_KEB     uint32 = 0xED08 // FORMAT_RXE        COMPARE AND SIGNAL (short BFP)
  1868  	op_KEBR    uint32 = 0xB308 // FORMAT_RRE        COMPARE AND SIGNAL (short BFP)
  1869  	op_KIMD    uint32 = 0xB93E // FORMAT_RRE        COMPUTE INTERMEDIATE MESSAGE DIGEST
  1870  	op_KLMD    uint32 = 0xB93F // FORMAT_RRE        COMPUTE LAST MESSAGE DIGEST
  1871  	op_KM      uint32 = 0xB92E // FORMAT_RRE        CIPHER MESSAGE
  1872  	op_KMAC    uint32 = 0xB91E // FORMAT_RRE        COMPUTE MESSAGE AUTHENTICATION CODE
  1873  	op_KMC     uint32 = 0xB92F // FORMAT_RRE        CIPHER MESSAGE WITH CHAINING
  1874  	op_KMCTR   uint32 = 0xB92D // FORMAT_RRF2       CIPHER MESSAGE WITH COUNTER
  1875  	op_KMF     uint32 = 0xB92A // FORMAT_RRE        CIPHER MESSAGE WITH CFB
  1876  	op_KMO     uint32 = 0xB92B // FORMAT_RRE        CIPHER MESSAGE WITH OFB
  1877  	op_KXBR    uint32 = 0xB348 // FORMAT_RRE        COMPARE AND SIGNAL (extended BFP)
  1878  	op_KXTR    uint32 = 0xB3E8 // FORMAT_RRE        COMPARE AND SIGNAL (extended DFP)
  1879  	op_L       uint32 = 0x5800 // FORMAT_RX1        LOAD (32)
  1880  	op_LA      uint32 = 0x4100 // FORMAT_RX1        LOAD ADDRESS
  1881  	op_LAA     uint32 = 0xEBF8 // FORMAT_RSY1       LOAD AND ADD (32)
  1882  	op_LAAG    uint32 = 0xEBE8 // FORMAT_RSY1       LOAD AND ADD (64)
  1883  	op_LAAL    uint32 = 0xEBFA // FORMAT_RSY1       LOAD AND ADD LOGICAL (32)
  1884  	op_LAALG   uint32 = 0xEBEA // FORMAT_RSY1       LOAD AND ADD LOGICAL (64)
  1885  	op_LAE     uint32 = 0x5100 // FORMAT_RX1        LOAD ADDRESS EXTENDED
  1886  	op_LAEY    uint32 = 0xE375 // FORMAT_RXY1       LOAD ADDRESS EXTENDED
  1887  	op_LAM     uint32 = 0x9A00 // FORMAT_RS1        LOAD ACCESS MULTIPLE
  1888  	op_LAMY    uint32 = 0xEB9A // FORMAT_RSY1       LOAD ACCESS MULTIPLE
  1889  	op_LAN     uint32 = 0xEBF4 // FORMAT_RSY1       LOAD AND AND (32)
  1890  	op_LANG    uint32 = 0xEBE4 // FORMAT_RSY1       LOAD AND AND (64)
  1891  	op_LAO     uint32 = 0xEBF6 // FORMAT_RSY1       LOAD AND OR (32)
  1892  	op_LAOG    uint32 = 0xEBE6 // FORMAT_RSY1       LOAD AND OR (64)
  1893  	op_LARL    uint32 = 0xC000 // FORMAT_RIL2       LOAD ADDRESS RELATIVE LONG
  1894  	op_LASP    uint32 = 0xE500 // FORMAT_SSE        LOAD ADDRESS SPACE PARAMETERS
  1895  	op_LAT     uint32 = 0xE39F // FORMAT_RXY1       LOAD AND TRAP (32L<-32)
  1896  	op_LAX     uint32 = 0xEBF7 // FORMAT_RSY1       LOAD AND EXCLUSIVE OR (32)
  1897  	op_LAXG    uint32 = 0xEBE7 // FORMAT_RSY1       LOAD AND EXCLUSIVE OR (64)
  1898  	op_LAY     uint32 = 0xE371 // FORMAT_RXY1       LOAD ADDRESS
  1899  	op_LB      uint32 = 0xE376 // FORMAT_RXY1       LOAD BYTE (32)
  1900  	op_LBH     uint32 = 0xE3C0 // FORMAT_RXY1       LOAD BYTE HIGH (32<-8)
  1901  	op_LBR     uint32 = 0xB926 // FORMAT_RRE        LOAD BYTE (32)
  1902  	op_LCDBR   uint32 = 0xB313 // FORMAT_RRE        LOAD COMPLEMENT (long BFP)
  1903  	op_LCDFR   uint32 = 0xB373 // FORMAT_RRE        LOAD COMPLEMENT (long)
  1904  	op_LCDR    uint32 = 0x2300 // FORMAT_RR         LOAD COMPLEMENT (long HFP)
  1905  	op_LCEBR   uint32 = 0xB303 // FORMAT_RRE        LOAD COMPLEMENT (short BFP)
  1906  	op_LCER    uint32 = 0x3300 // FORMAT_RR         LOAD COMPLEMENT (short HFP)
  1907  	op_LCGFR   uint32 = 0xB913 // FORMAT_RRE        LOAD COMPLEMENT (64<-32)
  1908  	op_LCGR    uint32 = 0xB903 // FORMAT_RRE        LOAD COMPLEMENT (64)
  1909  	op_LCR     uint32 = 0x1300 // FORMAT_RR         LOAD COMPLEMENT (32)
  1910  	op_LCTL    uint32 = 0xB700 // FORMAT_RS1        LOAD CONTROL (32)
  1911  	op_LCTLG   uint32 = 0xEB2F // FORMAT_RSY1       LOAD CONTROL (64)
  1912  	op_LCXBR   uint32 = 0xB343 // FORMAT_RRE        LOAD COMPLEMENT (extended BFP)
  1913  	op_LCXR    uint32 = 0xB363 // FORMAT_RRE        LOAD COMPLEMENT (extended HFP)
  1914  	op_LD      uint32 = 0x6800 // FORMAT_RX1        LOAD (long)
  1915  	op_LDE     uint32 = 0xED24 // FORMAT_RXE        LOAD LENGTHENED (short to long HFP)
  1916  	op_LDEB    uint32 = 0xED04 // FORMAT_RXE        LOAD LENGTHENED (short to long BFP)
  1917  	op_LDEBR   uint32 = 0xB304 // FORMAT_RRE        LOAD LENGTHENED (short to long BFP)
  1918  	op_LDER    uint32 = 0xB324 // FORMAT_RRE        LOAD LENGTHENED (short to long HFP)
  1919  	op_LDETR   uint32 = 0xB3D4 // FORMAT_RRF4       LOAD LENGTHENED (short to long DFP)
  1920  	op_LDGR    uint32 = 0xB3C1 // FORMAT_RRE        LOAD FPR FROM GR (64 to long)
  1921  	op_LDR     uint32 = 0x2800 // FORMAT_RR         LOAD (long)
  1922  	op_LDXBR   uint32 = 0xB345 // FORMAT_RRE        LOAD ROUNDED (extended to long BFP)
  1923  	op_LDXBRA  uint32 = 0xB345 // FORMAT_RRF5       LOAD ROUNDED (extended to long BFP)
  1924  	op_LDXR    uint32 = 0x2500 // FORMAT_RR         LOAD ROUNDED (extended to long HFP)
  1925  	op_LDXTR   uint32 = 0xB3DD // FORMAT_RRF5       LOAD ROUNDED (extended to long DFP)
  1926  	op_LDY     uint32 = 0xED65 // FORMAT_RXY1       LOAD (long)
  1927  	op_LE      uint32 = 0x7800 // FORMAT_RX1        LOAD (short)
  1928  	op_LEDBR   uint32 = 0xB344 // FORMAT_RRE        LOAD ROUNDED (long to short BFP)
  1929  	op_LEDBRA  uint32 = 0xB344 // FORMAT_RRF5       LOAD ROUNDED (long to short BFP)
  1930  	op_LEDR    uint32 = 0x3500 // FORMAT_RR         LOAD ROUNDED (long to short HFP)
  1931  	op_LEDTR   uint32 = 0xB3D5 // FORMAT_RRF5       LOAD ROUNDED (long to short DFP)
  1932  	op_LER     uint32 = 0x3800 // FORMAT_RR         LOAD (short)
  1933  	op_LEXBR   uint32 = 0xB346 // FORMAT_RRE        LOAD ROUNDED (extended to short BFP)
  1934  	op_LEXBRA  uint32 = 0xB346 // FORMAT_RRF5       LOAD ROUNDED (extended to short BFP)
  1935  	op_LEXR    uint32 = 0xB366 // FORMAT_RRE        LOAD ROUNDED (extended to short HFP)
  1936  	op_LEY     uint32 = 0xED64 // FORMAT_RXY1       LOAD (short)
  1937  	op_LFAS    uint32 = 0xB2BD // FORMAT_S          LOAD FPC AND SIGNAL
  1938  	op_LFH     uint32 = 0xE3CA // FORMAT_RXY1       LOAD HIGH (32)
  1939  	op_LFHAT   uint32 = 0xE3C8 // FORMAT_RXY1       LOAD HIGH AND TRAP (32H<-32)
  1940  	op_LFPC    uint32 = 0xB29D // FORMAT_S          LOAD FPC
  1941  	op_LG      uint32 = 0xE304 // FORMAT_RXY1       LOAD (64)
  1942  	op_LGAT    uint32 = 0xE385 // FORMAT_RXY1       LOAD AND TRAP (64)
  1943  	op_LGB     uint32 = 0xE377 // FORMAT_RXY1       LOAD BYTE (64)
  1944  	op_LGBR    uint32 = 0xB906 // FORMAT_RRE        LOAD BYTE (64)
  1945  	op_LGDR    uint32 = 0xB3CD // FORMAT_RRE        LOAD GR FROM FPR (long to 64)
  1946  	op_LGF     uint32 = 0xE314 // FORMAT_RXY1       LOAD (64<-32)
  1947  	op_LGFI    uint32 = 0xC001 // FORMAT_RIL1       LOAD IMMEDIATE (64<-32)
  1948  	op_LGFR    uint32 = 0xB914 // FORMAT_RRE        LOAD (64<-32)
  1949  	op_LGFRL   uint32 = 0xC40C // FORMAT_RIL2       LOAD RELATIVE LONG (64<-32)
  1950  	op_LGH     uint32 = 0xE315 // FORMAT_RXY1       LOAD HALFWORD (64)
  1951  	op_LGHI    uint32 = 0xA709 // FORMAT_RI1        LOAD HALFWORD IMMEDIATE (64)
  1952  	op_LGHR    uint32 = 0xB907 // FORMAT_RRE        LOAD HALFWORD (64)
  1953  	op_LGHRL   uint32 = 0xC404 // FORMAT_RIL2       LOAD HALFWORD RELATIVE LONG (64<-16)
  1954  	op_LGR     uint32 = 0xB904 // FORMAT_RRE        LOAD (64)
  1955  	op_LGRL    uint32 = 0xC408 // FORMAT_RIL2       LOAD RELATIVE LONG (64)
  1956  	op_LH      uint32 = 0x4800 // FORMAT_RX1        LOAD HALFWORD (32)
  1957  	op_LHH     uint32 = 0xE3C4 // FORMAT_RXY1       LOAD HALFWORD HIGH (32<-16)
  1958  	op_LHI     uint32 = 0xA708 // FORMAT_RI1        LOAD HALFWORD IMMEDIATE (32)
  1959  	op_LHR     uint32 = 0xB927 // FORMAT_RRE        LOAD HALFWORD (32)
  1960  	op_LHRL    uint32 = 0xC405 // FORMAT_RIL2       LOAD HALFWORD RELATIVE LONG (32<-16)
  1961  	op_LHY     uint32 = 0xE378 // FORMAT_RXY1       LOAD HALFWORD (32)
  1962  	op_LLC     uint32 = 0xE394 // FORMAT_RXY1       LOAD LOGICAL CHARACTER (32)
  1963  	op_LLCH    uint32 = 0xE3C2 // FORMAT_RXY1       LOAD LOGICAL CHARACTER HIGH (32<-8)
  1964  	op_LLCR    uint32 = 0xB994 // FORMAT_RRE        LOAD LOGICAL CHARACTER (32)
  1965  	op_LLGC    uint32 = 0xE390 // FORMAT_RXY1       LOAD LOGICAL CHARACTER (64)
  1966  	op_LLGCR   uint32 = 0xB984 // FORMAT_RRE        LOAD LOGICAL CHARACTER (64)
  1967  	op_LLGF    uint32 = 0xE316 // FORMAT_RXY1       LOAD LOGICAL (64<-32)
  1968  	op_LLGFAT  uint32 = 0xE39D // FORMAT_RXY1       LOAD LOGICAL AND TRAP (64<-32)
  1969  	op_LLGFR   uint32 = 0xB916 // FORMAT_RRE        LOAD LOGICAL (64<-32)
  1970  	op_LLGFRL  uint32 = 0xC40E // FORMAT_RIL2       LOAD LOGICAL RELATIVE LONG (64<-32)
  1971  	op_LLGH    uint32 = 0xE391 // FORMAT_RXY1       LOAD LOGICAL HALFWORD (64)
  1972  	op_LLGHR   uint32 = 0xB985 // FORMAT_RRE        LOAD LOGICAL HALFWORD (64)
  1973  	op_LLGHRL  uint32 = 0xC406 // FORMAT_RIL2       LOAD LOGICAL HALFWORD RELATIVE LONG (64<-16)
  1974  	op_LLGT    uint32 = 0xE317 // FORMAT_RXY1       LOAD LOGICAL THIRTY ONE BITS
  1975  	op_LLGTAT  uint32 = 0xE39C // FORMAT_RXY1       LOAD LOGICAL THIRTY ONE BITS AND TRAP (64<-31)
  1976  	op_LLGTR   uint32 = 0xB917 // FORMAT_RRE        LOAD LOGICAL THIRTY ONE BITS
  1977  	op_LLH     uint32 = 0xE395 // FORMAT_RXY1       LOAD LOGICAL HALFWORD (32)
  1978  	op_LLHH    uint32 = 0xE3C6 // FORMAT_RXY1       LOAD LOGICAL HALFWORD HIGH (32<-16)
  1979  	op_LLHR    uint32 = 0xB995 // FORMAT_RRE        LOAD LOGICAL HALFWORD (32)
  1980  	op_LLHRL   uint32 = 0xC402 // FORMAT_RIL2       LOAD LOGICAL HALFWORD RELATIVE LONG (32<-16)
  1981  	op_LLIHF   uint32 = 0xC00E // FORMAT_RIL1       LOAD LOGICAL IMMEDIATE (high)
  1982  	op_LLIHH   uint32 = 0xA50C // FORMAT_RI1        LOAD LOGICAL IMMEDIATE (high high)
  1983  	op_LLIHL   uint32 = 0xA50D // FORMAT_RI1        LOAD LOGICAL IMMEDIATE (high low)
  1984  	op_LLILF   uint32 = 0xC00F // FORMAT_RIL1       LOAD LOGICAL IMMEDIATE (low)
  1985  	op_LLILH   uint32 = 0xA50E // FORMAT_RI1        LOAD LOGICAL IMMEDIATE (low high)
  1986  	op_LLILL   uint32 = 0xA50F // FORMAT_RI1        LOAD LOGICAL IMMEDIATE (low low)
  1987  	op_LM      uint32 = 0x9800 // FORMAT_RS1        LOAD MULTIPLE (32)
  1988  	op_LMD     uint32 = 0xEF00 // FORMAT_SS5        LOAD MULTIPLE DISJOINT
  1989  	op_LMG     uint32 = 0xEB04 // FORMAT_RSY1       LOAD MULTIPLE (64)
  1990  	op_LMH     uint32 = 0xEB96 // FORMAT_RSY1       LOAD MULTIPLE HIGH
  1991  	op_LMY     uint32 = 0xEB98 // FORMAT_RSY1       LOAD MULTIPLE (32)
  1992  	op_LNDBR   uint32 = 0xB311 // FORMAT_RRE        LOAD NEGATIVE (long BFP)
  1993  	op_LNDFR   uint32 = 0xB371 // FORMAT_RRE        LOAD NEGATIVE (long)
  1994  	op_LNDR    uint32 = 0x2100 // FORMAT_RR         LOAD NEGATIVE (long HFP)
  1995  	op_LNEBR   uint32 = 0xB301 // FORMAT_RRE        LOAD NEGATIVE (short BFP)
  1996  	op_LNER    uint32 = 0x3100 // FORMAT_RR         LOAD NEGATIVE (short HFP)
  1997  	op_LNGFR   uint32 = 0xB911 // FORMAT_RRE        LOAD NEGATIVE (64<-32)
  1998  	op_LNGR    uint32 = 0xB901 // FORMAT_RRE        LOAD NEGATIVE (64)
  1999  	op_LNR     uint32 = 0x1100 // FORMAT_RR         LOAD NEGATIVE (32)
  2000  	op_LNXBR   uint32 = 0xB341 // FORMAT_RRE        LOAD NEGATIVE (extended BFP)
  2001  	op_LNXR    uint32 = 0xB361 // FORMAT_RRE        LOAD NEGATIVE (extended HFP)
  2002  	op_LOC     uint32 = 0xEBF2 // FORMAT_RSY2       LOAD ON CONDITION (32)
  2003  	op_LOCG    uint32 = 0xEBE2 // FORMAT_RSY2       LOAD ON CONDITION (64)
  2004  	op_LOCGR   uint32 = 0xB9E2 // FORMAT_RRF3       LOAD ON CONDITION (64)
  2005  	op_LOCR    uint32 = 0xB9F2 // FORMAT_RRF3       LOAD ON CONDITION (32)
  2006  	op_LPD     uint32 = 0xC804 // FORMAT_SSF        LOAD PAIR DISJOINT (32)
  2007  	op_LPDBR   uint32 = 0xB310 // FORMAT_RRE        LOAD POSITIVE (long BFP)
  2008  	op_LPDFR   uint32 = 0xB370 // FORMAT_RRE        LOAD POSITIVE (long)
  2009  	op_LPDG    uint32 = 0xC805 // FORMAT_SSF        LOAD PAIR DISJOINT (64)
  2010  	op_LPDR    uint32 = 0x2000 // FORMAT_RR         LOAD POSITIVE (long HFP)
  2011  	op_LPEBR   uint32 = 0xB300 // FORMAT_RRE        LOAD POSITIVE (short BFP)
  2012  	op_LPER    uint32 = 0x3000 // FORMAT_RR         LOAD POSITIVE (short HFP)
  2013  	op_LPGFR   uint32 = 0xB910 // FORMAT_RRE        LOAD POSITIVE (64<-32)
  2014  	op_LPGR    uint32 = 0xB900 // FORMAT_RRE        LOAD POSITIVE (64)
  2015  	op_LPQ     uint32 = 0xE38F // FORMAT_RXY1       LOAD PAIR FROM QUADWORD
  2016  	op_LPR     uint32 = 0x1000 // FORMAT_RR         LOAD POSITIVE (32)
  2017  	op_LPSW    uint32 = 0x8200 // FORMAT_S          LOAD PSW
  2018  	op_LPSWE   uint32 = 0xB2B2 // FORMAT_S          LOAD PSW EXTENDED
  2019  	op_LPTEA   uint32 = 0xB9AA // FORMAT_RRF2       LOAD PAGE TABLE ENTRY ADDRESS
  2020  	op_LPXBR   uint32 = 0xB340 // FORMAT_RRE        LOAD POSITIVE (extended BFP)
  2021  	op_LPXR    uint32 = 0xB360 // FORMAT_RRE        LOAD POSITIVE (extended HFP)
  2022  	op_LR      uint32 = 0x1800 // FORMAT_RR         LOAD (32)
  2023  	op_LRA     uint32 = 0xB100 // FORMAT_RX1        LOAD REAL ADDRESS (32)
  2024  	op_LRAG    uint32 = 0xE303 // FORMAT_RXY1       LOAD REAL ADDRESS (64)
  2025  	op_LRAY    uint32 = 0xE313 // FORMAT_RXY1       LOAD REAL ADDRESS (32)
  2026  	op_LRDR    uint32 = 0x2500 // FORMAT_RR         LOAD ROUNDED (extended to long HFP)
  2027  	op_LRER    uint32 = 0x3500 // FORMAT_RR         LOAD ROUNDED (long to short HFP)
  2028  	op_LRL     uint32 = 0xC40D // FORMAT_RIL2       LOAD RELATIVE LONG (32)
  2029  	op_LRV     uint32 = 0xE31E // FORMAT_RXY1       LOAD REVERSED (32)
  2030  	op_LRVG    uint32 = 0xE30F // FORMAT_RXY1       LOAD REVERSED (64)
  2031  	op_LRVGR   uint32 = 0xB90F // FORMAT_RRE        LOAD REVERSED (64)
  2032  	op_LRVH    uint32 = 0xE31F // FORMAT_RXY1       LOAD REVERSED (16)
  2033  	op_LRVR    uint32 = 0xB91F // FORMAT_RRE        LOAD REVERSED (32)
  2034  	op_LT      uint32 = 0xE312 // FORMAT_RXY1       LOAD AND TEST (32)
  2035  	op_LTDBR   uint32 = 0xB312 // FORMAT_RRE        LOAD AND TEST (long BFP)
  2036  	op_LTDR    uint32 = 0x2200 // FORMAT_RR         LOAD AND TEST (long HFP)
  2037  	op_LTDTR   uint32 = 0xB3D6 // FORMAT_RRE        LOAD AND TEST (long DFP)
  2038  	op_LTEBR   uint32 = 0xB302 // FORMAT_RRE        LOAD AND TEST (short BFP)
  2039  	op_LTER    uint32 = 0x3200 // FORMAT_RR         LOAD AND TEST (short HFP)
  2040  	op_LTG     uint32 = 0xE302 // FORMAT_RXY1       LOAD AND TEST (64)
  2041  	op_LTGF    uint32 = 0xE332 // FORMAT_RXY1       LOAD AND TEST (64<-32)
  2042  	op_LTGFR   uint32 = 0xB912 // FORMAT_RRE        LOAD AND TEST (64<-32)
  2043  	op_LTGR    uint32 = 0xB902 // FORMAT_RRE        LOAD AND TEST (64)
  2044  	op_LTR     uint32 = 0x1200 // FORMAT_RR         LOAD AND TEST (32)
  2045  	op_LTXBR   uint32 = 0xB342 // FORMAT_RRE        LOAD AND TEST (extended BFP)
  2046  	op_LTXR    uint32 = 0xB362 // FORMAT_RRE        LOAD AND TEST (extended HFP)
  2047  	op_LTXTR   uint32 = 0xB3DE // FORMAT_RRE        LOAD AND TEST (extended DFP)
  2048  	op_LURA    uint32 = 0xB24B // FORMAT_RRE        LOAD USING REAL ADDRESS (32)
  2049  	op_LURAG   uint32 = 0xB905 // FORMAT_RRE        LOAD USING REAL ADDRESS (64)
  2050  	op_LXD     uint32 = 0xED25 // FORMAT_RXE        LOAD LENGTHENED (long to extended HFP)
  2051  	op_LXDB    uint32 = 0xED05 // FORMAT_RXE        LOAD LENGTHENED (long to extended BFP)
  2052  	op_LXDBR   uint32 = 0xB305 // FORMAT_RRE        LOAD LENGTHENED (long to extended BFP)
  2053  	op_LXDR    uint32 = 0xB325 // FORMAT_RRE        LOAD LENGTHENED (long to extended HFP)
  2054  	op_LXDTR   uint32 = 0xB3DC // FORMAT_RRF4       LOAD LENGTHENED (long to extended DFP)
  2055  	op_LXE     uint32 = 0xED26 // FORMAT_RXE        LOAD LENGTHENED (short to extended HFP)
  2056  	op_LXEB    uint32 = 0xED06 // FORMAT_RXE        LOAD LENGTHENED (short to extended BFP)
  2057  	op_LXEBR   uint32 = 0xB306 // FORMAT_RRE        LOAD LENGTHENED (short to extended BFP)
  2058  	op_LXER    uint32 = 0xB326 // FORMAT_RRE        LOAD LENGTHENED (short to extended HFP)
  2059  	op_LXR     uint32 = 0xB365 // FORMAT_RRE        LOAD (extended)
  2060  	op_LY      uint32 = 0xE358 // FORMAT_RXY1       LOAD (32)
  2061  	op_LZDR    uint32 = 0xB375 // FORMAT_RRE        LOAD ZERO (long)
  2062  	op_LZER    uint32 = 0xB374 // FORMAT_RRE        LOAD ZERO (short)
  2063  	op_LZXR    uint32 = 0xB376 // FORMAT_RRE        LOAD ZERO (extended)
  2064  	op_M       uint32 = 0x5C00 // FORMAT_RX1        MULTIPLY (64<-32)
  2065  	op_MAD     uint32 = 0xED3E // FORMAT_RXF        MULTIPLY AND ADD (long HFP)
  2066  	op_MADB    uint32 = 0xED1E // FORMAT_RXF        MULTIPLY AND ADD (long BFP)
  2067  	op_MADBR   uint32 = 0xB31E // FORMAT_RRD        MULTIPLY AND ADD (long BFP)
  2068  	op_MADR    uint32 = 0xB33E // FORMAT_RRD        MULTIPLY AND ADD (long HFP)
  2069  	op_MAE     uint32 = 0xED2E // FORMAT_RXF        MULTIPLY AND ADD (short HFP)
  2070  	op_MAEB    uint32 = 0xED0E // FORMAT_RXF        MULTIPLY AND ADD (short BFP)
  2071  	op_MAEBR   uint32 = 0xB30E // FORMAT_RRD        MULTIPLY AND ADD (short BFP)
  2072  	op_MAER    uint32 = 0xB32E // FORMAT_RRD        MULTIPLY AND ADD (short HFP)
  2073  	op_MAY     uint32 = 0xED3A // FORMAT_RXF        MULTIPLY & ADD UNNORMALIZED (long to ext. HFP)
  2074  	op_MAYH    uint32 = 0xED3C // FORMAT_RXF        MULTIPLY AND ADD UNNRM. (long to ext. high HFP)
  2075  	op_MAYHR   uint32 = 0xB33C // FORMAT_RRD        MULTIPLY AND ADD UNNRM. (long to ext. high HFP)
  2076  	op_MAYL    uint32 = 0xED38 // FORMAT_RXF        MULTIPLY AND ADD UNNRM. (long to ext. low HFP)
  2077  	op_MAYLR   uint32 = 0xB338 // FORMAT_RRD        MULTIPLY AND ADD UNNRM. (long to ext. low HFP)
  2078  	op_MAYR    uint32 = 0xB33A // FORMAT_RRD        MULTIPLY & ADD UNNORMALIZED (long to ext. HFP)
  2079  	op_MC      uint32 = 0xAF00 // FORMAT_SI         MONITOR CALL
  2080  	op_MD      uint32 = 0x6C00 // FORMAT_RX1        MULTIPLY (long HFP)
  2081  	op_MDB     uint32 = 0xED1C // FORMAT_RXE        MULTIPLY (long BFP)
  2082  	op_MDBR    uint32 = 0xB31C // FORMAT_RRE        MULTIPLY (long BFP)
  2083  	op_MDE     uint32 = 0x7C00 // FORMAT_RX1        MULTIPLY (short to long HFP)
  2084  	op_MDEB    uint32 = 0xED0C // FORMAT_RXE        MULTIPLY (short to long BFP)
  2085  	op_MDEBR   uint32 = 0xB30C // FORMAT_RRE        MULTIPLY (short to long BFP)
  2086  	op_MDER    uint32 = 0x3C00 // FORMAT_RR         MULTIPLY (short to long HFP)
  2087  	op_MDR     uint32 = 0x2C00 // FORMAT_RR         MULTIPLY (long HFP)
  2088  	op_MDTR    uint32 = 0xB3D0 // FORMAT_RRF1       MULTIPLY (long DFP)
  2089  	op_MDTRA   uint32 = 0xB3D0 // FORMAT_RRF1       MULTIPLY (long DFP)
  2090  	op_ME      uint32 = 0x7C00 // FORMAT_RX1        MULTIPLY (short to long HFP)
  2091  	op_MEE     uint32 = 0xED37 // FORMAT_RXE        MULTIPLY (short HFP)
  2092  	op_MEEB    uint32 = 0xED17 // FORMAT_RXE        MULTIPLY (short BFP)
  2093  	op_MEEBR   uint32 = 0xB317 // FORMAT_RRE        MULTIPLY (short BFP)
  2094  	op_MEER    uint32 = 0xB337 // FORMAT_RRE        MULTIPLY (short HFP)
  2095  	op_MER     uint32 = 0x3C00 // FORMAT_RR         MULTIPLY (short to long HFP)
  2096  	op_MFY     uint32 = 0xE35C // FORMAT_RXY1       MULTIPLY (64<-32)
  2097  	op_MGHI    uint32 = 0xA70D // FORMAT_RI1        MULTIPLY HALFWORD IMMEDIATE (64)
  2098  	op_MH      uint32 = 0x4C00 // FORMAT_RX1        MULTIPLY HALFWORD (32)
  2099  	op_MHI     uint32 = 0xA70C // FORMAT_RI1        MULTIPLY HALFWORD IMMEDIATE (32)
  2100  	op_MHY     uint32 = 0xE37C // FORMAT_RXY1       MULTIPLY HALFWORD (32)
  2101  	op_ML      uint32 = 0xE396 // FORMAT_RXY1       MULTIPLY LOGICAL (64<-32)
  2102  	op_MLG     uint32 = 0xE386 // FORMAT_RXY1       MULTIPLY LOGICAL (128<-64)
  2103  	op_MLGR    uint32 = 0xB986 // FORMAT_RRE        MULTIPLY LOGICAL (128<-64)
  2104  	op_MLR     uint32 = 0xB996 // FORMAT_RRE        MULTIPLY LOGICAL (64<-32)
  2105  	op_MP      uint32 = 0xFC00 // FORMAT_SS2        MULTIPLY DECIMAL
  2106  	op_MR      uint32 = 0x1C00 // FORMAT_RR         MULTIPLY (64<-32)
  2107  	op_MS      uint32 = 0x7100 // FORMAT_RX1        MULTIPLY SINGLE (32)
  2108  	op_MSCH    uint32 = 0xB232 // FORMAT_S          MODIFY SUBCHANNEL
  2109  	op_MSD     uint32 = 0xED3F // FORMAT_RXF        MULTIPLY AND SUBTRACT (long HFP)
  2110  	op_MSDB    uint32 = 0xED1F // FORMAT_RXF        MULTIPLY AND SUBTRACT (long BFP)
  2111  	op_MSDBR   uint32 = 0xB31F // FORMAT_RRD        MULTIPLY AND SUBTRACT (long BFP)
  2112  	op_MSDR    uint32 = 0xB33F // FORMAT_RRD        MULTIPLY AND SUBTRACT (long HFP)
  2113  	op_MSE     uint32 = 0xED2F // FORMAT_RXF        MULTIPLY AND SUBTRACT (short HFP)
  2114  	op_MSEB    uint32 = 0xED0F // FORMAT_RXF        MULTIPLY AND SUBTRACT (short BFP)
  2115  	op_MSEBR   uint32 = 0xB30F // FORMAT_RRD        MULTIPLY AND SUBTRACT (short BFP)
  2116  	op_MSER    uint32 = 0xB32F // FORMAT_RRD        MULTIPLY AND SUBTRACT (short HFP)
  2117  	op_MSFI    uint32 = 0xC201 // FORMAT_RIL1       MULTIPLY SINGLE IMMEDIATE (32)
  2118  	op_MSG     uint32 = 0xE30C // FORMAT_RXY1       MULTIPLY SINGLE (64)
  2119  	op_MSGF    uint32 = 0xE31C // FORMAT_RXY1       MULTIPLY SINGLE (64<-32)
  2120  	op_MSGFI   uint32 = 0xC200 // FORMAT_RIL1       MULTIPLY SINGLE IMMEDIATE (64<-32)
  2121  	op_MSGFR   uint32 = 0xB91C // FORMAT_RRE        MULTIPLY SINGLE (64<-32)
  2122  	op_MSGR    uint32 = 0xB90C // FORMAT_RRE        MULTIPLY SINGLE (64)
  2123  	op_MSR     uint32 = 0xB252 // FORMAT_RRE        MULTIPLY SINGLE (32)
  2124  	op_MSTA    uint32 = 0xB247 // FORMAT_RRE        MODIFY STACKED STATE
  2125  	op_MSY     uint32 = 0xE351 // FORMAT_RXY1       MULTIPLY SINGLE (32)
  2126  	op_MVC     uint32 = 0xD200 // FORMAT_SS1        MOVE (character)
  2127  	op_MVCDK   uint32 = 0xE50F // FORMAT_SSE        MOVE WITH DESTINATION KEY
  2128  	op_MVCIN   uint32 = 0xE800 // FORMAT_SS1        MOVE INVERSE
  2129  	op_MVCK    uint32 = 0xD900 // FORMAT_SS4        MOVE WITH KEY
  2130  	op_MVCL    uint32 = 0x0E00 // FORMAT_RR         MOVE LONG
  2131  	op_MVCLE   uint32 = 0xA800 // FORMAT_RS1        MOVE LONG EXTENDED
  2132  	op_MVCLU   uint32 = 0xEB8E // FORMAT_RSY1       MOVE LONG UNICODE
  2133  	op_MVCOS   uint32 = 0xC800 // FORMAT_SSF        MOVE WITH OPTIONAL SPECIFICATIONS
  2134  	op_MVCP    uint32 = 0xDA00 // FORMAT_SS4        MOVE TO PRIMARY
  2135  	op_MVCS    uint32 = 0xDB00 // FORMAT_SS4        MOVE TO SECONDARY
  2136  	op_MVCSK   uint32 = 0xE50E // FORMAT_SSE        MOVE WITH SOURCE KEY
  2137  	op_MVGHI   uint32 = 0xE548 // FORMAT_SIL        MOVE (64<-16)
  2138  	op_MVHHI   uint32 = 0xE544 // FORMAT_SIL        MOVE (16<-16)
  2139  	op_MVHI    uint32 = 0xE54C // FORMAT_SIL        MOVE (32<-16)
  2140  	op_MVI     uint32 = 0x9200 // FORMAT_SI         MOVE (immediate)
  2141  	op_MVIY    uint32 = 0xEB52 // FORMAT_SIY        MOVE (immediate)
  2142  	op_MVN     uint32 = 0xD100 // FORMAT_SS1        MOVE NUMERICS
  2143  	op_MVO     uint32 = 0xF100 // FORMAT_SS2        MOVE WITH OFFSET
  2144  	op_MVPG    uint32 = 0xB254 // FORMAT_RRE        MOVE PAGE
  2145  	op_MVST    uint32 = 0xB255 // FORMAT_RRE        MOVE STRING
  2146  	op_MVZ     uint32 = 0xD300 // FORMAT_SS1        MOVE ZONES
  2147  	op_MXBR    uint32 = 0xB34C // FORMAT_RRE        MULTIPLY (extended BFP)
  2148  	op_MXD     uint32 = 0x6700 // FORMAT_RX1        MULTIPLY (long to extended HFP)
  2149  	op_MXDB    uint32 = 0xED07 // FORMAT_RXE        MULTIPLY (long to extended BFP)
  2150  	op_MXDBR   uint32 = 0xB307 // FORMAT_RRE        MULTIPLY (long to extended BFP)
  2151  	op_MXDR    uint32 = 0x2700 // FORMAT_RR         MULTIPLY (long to extended HFP)
  2152  	op_MXR     uint32 = 0x2600 // FORMAT_RR         MULTIPLY (extended HFP)
  2153  	op_MXTR    uint32 = 0xB3D8 // FORMAT_RRF1       MULTIPLY (extended DFP)
  2154  	op_MXTRA   uint32 = 0xB3D8 // FORMAT_RRF1       MULTIPLY (extended DFP)
  2155  	op_MY      uint32 = 0xED3B // FORMAT_RXF        MULTIPLY UNNORMALIZED (long to ext. HFP)
  2156  	op_MYH     uint32 = 0xED3D // FORMAT_RXF        MULTIPLY UNNORM. (long to ext. high HFP)
  2157  	op_MYHR    uint32 = 0xB33D // FORMAT_RRD        MULTIPLY UNNORM. (long to ext. high HFP)
  2158  	op_MYL     uint32 = 0xED39 // FORMAT_RXF        MULTIPLY UNNORM. (long to ext. low HFP)
  2159  	op_MYLR    uint32 = 0xB339 // FORMAT_RRD        MULTIPLY UNNORM. (long to ext. low HFP)
  2160  	op_MYR     uint32 = 0xB33B // FORMAT_RRD        MULTIPLY UNNORMALIZED (long to ext. HFP)
  2161  	op_N       uint32 = 0x5400 // FORMAT_RX1        AND (32)
  2162  	op_NC      uint32 = 0xD400 // FORMAT_SS1        AND (character)
  2163  	op_NG      uint32 = 0xE380 // FORMAT_RXY1       AND (64)
  2164  	op_NGR     uint32 = 0xB980 // FORMAT_RRE        AND (64)
  2165  	op_NGRK    uint32 = 0xB9E4 // FORMAT_RRF1       AND (64)
  2166  	op_NI      uint32 = 0x9400 // FORMAT_SI         AND (immediate)
  2167  	op_NIAI    uint32 = 0xB2FA // FORMAT_IE         NEXT INSTRUCTION ACCESS INTENT
  2168  	op_NIHF    uint32 = 0xC00A // FORMAT_RIL1       AND IMMEDIATE (high)
  2169  	op_NIHH    uint32 = 0xA504 // FORMAT_RI1        AND IMMEDIATE (high high)
  2170  	op_NIHL    uint32 = 0xA505 // FORMAT_RI1        AND IMMEDIATE (high low)
  2171  	op_NILF    uint32 = 0xC00B // FORMAT_RIL1       AND IMMEDIATE (low)
  2172  	op_NILH    uint32 = 0xA506 // FORMAT_RI1        AND IMMEDIATE (low high)
  2173  	op_NILL    uint32 = 0xA507 // FORMAT_RI1        AND IMMEDIATE (low low)
  2174  	op_NIY     uint32 = 0xEB54 // FORMAT_SIY        AND (immediate)
  2175  	op_NR      uint32 = 0x1400 // FORMAT_RR         AND (32)
  2176  	op_NRK     uint32 = 0xB9F4 // FORMAT_RRF1       AND (32)
  2177  	op_NTSTG   uint32 = 0xE325 // FORMAT_RXY1       NONTRANSACTIONAL STORE
  2178  	op_NY      uint32 = 0xE354 // FORMAT_RXY1       AND (32)
  2179  	op_O       uint32 = 0x5600 // FORMAT_RX1        OR (32)
  2180  	op_OC      uint32 = 0xD600 // FORMAT_SS1        OR (character)
  2181  	op_OG      uint32 = 0xE381 // FORMAT_RXY1       OR (64)
  2182  	op_OGR     uint32 = 0xB981 // FORMAT_RRE        OR (64)
  2183  	op_OGRK    uint32 = 0xB9E6 // FORMAT_RRF1       OR (64)
  2184  	op_OI      uint32 = 0x9600 // FORMAT_SI         OR (immediate)
  2185  	op_OIHF    uint32 = 0xC00C // FORMAT_RIL1       OR IMMEDIATE (high)
  2186  	op_OIHH    uint32 = 0xA508 // FORMAT_RI1        OR IMMEDIATE (high high)
  2187  	op_OIHL    uint32 = 0xA509 // FORMAT_RI1        OR IMMEDIATE (high low)
  2188  	op_OILF    uint32 = 0xC00D // FORMAT_RIL1       OR IMMEDIATE (low)
  2189  	op_OILH    uint32 = 0xA50A // FORMAT_RI1        OR IMMEDIATE (low high)
  2190  	op_OILL    uint32 = 0xA50B // FORMAT_RI1        OR IMMEDIATE (low low)
  2191  	op_OIY     uint32 = 0xEB56 // FORMAT_SIY        OR (immediate)
  2192  	op_OR      uint32 = 0x1600 // FORMAT_RR         OR (32)
  2193  	op_ORK     uint32 = 0xB9F6 // FORMAT_RRF1       OR (32)
  2194  	op_OY      uint32 = 0xE356 // FORMAT_RXY1       OR (32)
  2195  	op_PACK    uint32 = 0xF200 // FORMAT_SS2        PACK
  2196  	op_PALB    uint32 = 0xB248 // FORMAT_RRE        PURGE ALB
  2197  	op_PC      uint32 = 0xB218 // FORMAT_S          PROGRAM CALL
  2198  	op_PCC     uint32 = 0xB92C // FORMAT_RRE        PERFORM CRYPTOGRAPHIC COMPUTATION
  2199  	op_PCKMO   uint32 = 0xB928 // FORMAT_RRE        PERFORM CRYPTOGRAPHIC KEY MGMT. OPERATIONS
  2200  	op_PFD     uint32 = 0xE336 // FORMAT_RXY2       PREFETCH DATA
  2201  	op_PFDRL   uint32 = 0xC602 // FORMAT_RIL3       PREFETCH DATA RELATIVE LONG
  2202  	op_PFMF    uint32 = 0xB9AF // FORMAT_RRE        PERFORM FRAME MANAGEMENT FUNCTION
  2203  	op_PFPO    uint32 = 0x010A // FORMAT_E          PERFORM FLOATING-POINT OPERATION
  2204  	op_PGIN    uint32 = 0xB22E // FORMAT_RRE        PAGE IN
  2205  	op_PGOUT   uint32 = 0xB22F // FORMAT_RRE        PAGE OUT
  2206  	op_PKA     uint32 = 0xE900 // FORMAT_SS6        PACK ASCII
  2207  	op_PKU     uint32 = 0xE100 // FORMAT_SS6        PACK UNICODE
  2208  	op_PLO     uint32 = 0xEE00 // FORMAT_SS5        PERFORM LOCKED OPERATION
  2209  	op_POPCNT  uint32 = 0xB9E1 // FORMAT_RRE        POPULATION COUNT
  2210  	op_PPA     uint32 = 0xB2E8 // FORMAT_RRF3       PERFORM PROCESSOR ASSIST
  2211  	op_PR      uint32 = 0x0101 // FORMAT_E          PROGRAM RETURN
  2212  	op_PT      uint32 = 0xB228 // FORMAT_RRE        PROGRAM TRANSFER
  2213  	op_PTF     uint32 = 0xB9A2 // FORMAT_RRE        PERFORM TOPOLOGY FUNCTION
  2214  	op_PTFF    uint32 = 0x0104 // FORMAT_E          PERFORM TIMING FACILITY FUNCTION
  2215  	op_PTI     uint32 = 0xB99E // FORMAT_RRE        PROGRAM TRANSFER WITH INSTANCE
  2216  	op_PTLB    uint32 = 0xB20D // FORMAT_S          PURGE TLB
  2217  	op_QADTR   uint32 = 0xB3F5 // FORMAT_RRF2       QUANTIZE (long DFP)
  2218  	op_QAXTR   uint32 = 0xB3FD // FORMAT_RRF2       QUANTIZE (extended DFP)
  2219  	op_RCHP    uint32 = 0xB23B // FORMAT_S          RESET CHANNEL PATH
  2220  	op_RISBG   uint32 = 0xEC55 // FORMAT_RIE6       ROTATE THEN INSERT SELECTED BITS
  2221  	op_RISBGN  uint32 = 0xEC59 // FORMAT_RIE6       ROTATE THEN INSERT SELECTED BITS
  2222  	op_RISBHG  uint32 = 0xEC5D // FORMAT_RIE6       ROTATE THEN INSERT SELECTED BITS HIGH
  2223  	op_RISBLG  uint32 = 0xEC51 // FORMAT_RIE6       ROTATE THEN INSERT SELECTED BITS LOW
  2224  	op_RLL     uint32 = 0xEB1D // FORMAT_RSY1       ROTATE LEFT SINGLE LOGICAL (32)
  2225  	op_RLLG    uint32 = 0xEB1C // FORMAT_RSY1       ROTATE LEFT SINGLE LOGICAL (64)
  2226  	op_RNSBG   uint32 = 0xEC54 // FORMAT_RIE6       ROTATE THEN AND SELECTED BITS
  2227  	op_ROSBG   uint32 = 0xEC56 // FORMAT_RIE6       ROTATE THEN OR SELECTED BITS
  2228  	op_RP      uint32 = 0xB277 // FORMAT_S          RESUME PROGRAM
  2229  	op_RRBE    uint32 = 0xB22A // FORMAT_RRE        RESET REFERENCE BIT EXTENDED
  2230  	op_RRBM    uint32 = 0xB9AE // FORMAT_RRE        RESET REFERENCE BITS MULTIPLE
  2231  	op_RRDTR   uint32 = 0xB3F7 // FORMAT_RRF2       REROUND (long DFP)
  2232  	op_RRXTR   uint32 = 0xB3FF // FORMAT_RRF2       REROUND (extended DFP)
  2233  	op_RSCH    uint32 = 0xB238 // FORMAT_S          RESUME SUBCHANNEL
  2234  	op_RXSBG   uint32 = 0xEC57 // FORMAT_RIE6       ROTATE THEN EXCLUSIVE OR SELECTED BITS
  2235  	op_S       uint32 = 0x5B00 // FORMAT_RX1        SUBTRACT (32)
  2236  	op_SAC     uint32 = 0xB219 // FORMAT_S          SET ADDRESS SPACE CONTROL
  2237  	op_SACF    uint32 = 0xB279 // FORMAT_S          SET ADDRESS SPACE CONTROL FAST
  2238  	op_SAL     uint32 = 0xB237 // FORMAT_S          SET ADDRESS LIMIT
  2239  	op_SAM24   uint32 = 0x010C // FORMAT_E          SET ADDRESSING MODE (24)
  2240  	op_SAM31   uint32 = 0x010D // FORMAT_E          SET ADDRESSING MODE (31)
  2241  	op_SAM64   uint32 = 0x010E // FORMAT_E          SET ADDRESSING MODE (64)
  2242  	op_SAR     uint32 = 0xB24E // FORMAT_RRE        SET ACCESS
  2243  	op_SCHM    uint32 = 0xB23C // FORMAT_S          SET CHANNEL MONITOR
  2244  	op_SCK     uint32 = 0xB204 // FORMAT_S          SET CLOCK
  2245  	op_SCKC    uint32 = 0xB206 // FORMAT_S          SET CLOCK COMPARATOR
  2246  	op_SCKPF   uint32 = 0x0107 // FORMAT_E          SET CLOCK PROGRAMMABLE FIELD
  2247  	op_SD      uint32 = 0x6B00 // FORMAT_RX1        SUBTRACT NORMALIZED (long HFP)
  2248  	op_SDB     uint32 = 0xED1B // FORMAT_RXE        SUBTRACT (long BFP)
  2249  	op_SDBR    uint32 = 0xB31B // FORMAT_RRE        SUBTRACT (long BFP)
  2250  	op_SDR     uint32 = 0x2B00 // FORMAT_RR         SUBTRACT NORMALIZED (long HFP)
  2251  	op_SDTR    uint32 = 0xB3D3 // FORMAT_RRF1       SUBTRACT (long DFP)
  2252  	op_SDTRA   uint32 = 0xB3D3 // FORMAT_RRF1       SUBTRACT (long DFP)
  2253  	op_SE      uint32 = 0x7B00 // FORMAT_RX1        SUBTRACT NORMALIZED (short HFP)
  2254  	op_SEB     uint32 = 0xED0B // FORMAT_RXE        SUBTRACT (short BFP)
  2255  	op_SEBR    uint32 = 0xB30B // FORMAT_RRE        SUBTRACT (short BFP)
  2256  	op_SER     uint32 = 0x3B00 // FORMAT_RR         SUBTRACT NORMALIZED (short HFP)
  2257  	op_SFASR   uint32 = 0xB385 // FORMAT_RRE        SET FPC AND SIGNAL
  2258  	op_SFPC    uint32 = 0xB384 // FORMAT_RRE        SET FPC
  2259  	op_SG      uint32 = 0xE309 // FORMAT_RXY1       SUBTRACT (64)
  2260  	op_SGF     uint32 = 0xE319 // FORMAT_RXY1       SUBTRACT (64<-32)
  2261  	op_SGFR    uint32 = 0xB919 // FORMAT_RRE        SUBTRACT (64<-32)
  2262  	op_SGR     uint32 = 0xB909 // FORMAT_RRE        SUBTRACT (64)
  2263  	op_SGRK    uint32 = 0xB9E9 // FORMAT_RRF1       SUBTRACT (64)
  2264  	op_SH      uint32 = 0x4B00 // FORMAT_RX1        SUBTRACT HALFWORD
  2265  	op_SHHHR   uint32 = 0xB9C9 // FORMAT_RRF1       SUBTRACT HIGH (32)
  2266  	op_SHHLR   uint32 = 0xB9D9 // FORMAT_RRF1       SUBTRACT HIGH (32)
  2267  	op_SHY     uint32 = 0xE37B // FORMAT_RXY1       SUBTRACT HALFWORD
  2268  	op_SIGP    uint32 = 0xAE00 // FORMAT_RS1        SIGNAL PROCESSOR
  2269  	op_SL      uint32 = 0x5F00 // FORMAT_RX1        SUBTRACT LOGICAL (32)
  2270  	op_SLA     uint32 = 0x8B00 // FORMAT_RS1        SHIFT LEFT SINGLE (32)
  2271  	op_SLAG    uint32 = 0xEB0B // FORMAT_RSY1       SHIFT LEFT SINGLE (64)
  2272  	op_SLAK    uint32 = 0xEBDD // FORMAT_RSY1       SHIFT LEFT SINGLE (32)
  2273  	op_SLB     uint32 = 0xE399 // FORMAT_RXY1       SUBTRACT LOGICAL WITH BORROW (32)
  2274  	op_SLBG    uint32 = 0xE389 // FORMAT_RXY1       SUBTRACT LOGICAL WITH BORROW (64)
  2275  	op_SLBGR   uint32 = 0xB989 // FORMAT_RRE        SUBTRACT LOGICAL WITH BORROW (64)
  2276  	op_SLBR    uint32 = 0xB999 // FORMAT_RRE        SUBTRACT LOGICAL WITH BORROW (32)
  2277  	op_SLDA    uint32 = 0x8F00 // FORMAT_RS1        SHIFT LEFT DOUBLE
  2278  	op_SLDL    uint32 = 0x8D00 // FORMAT_RS1        SHIFT LEFT DOUBLE LOGICAL
  2279  	op_SLDT    uint32 = 0xED40 // FORMAT_RXF        SHIFT SIGNIFICAND LEFT (long DFP)
  2280  	op_SLFI    uint32 = 0xC205 // FORMAT_RIL1       SUBTRACT LOGICAL IMMEDIATE (32)
  2281  	op_SLG     uint32 = 0xE30B // FORMAT_RXY1       SUBTRACT LOGICAL (64)
  2282  	op_SLGF    uint32 = 0xE31B // FORMAT_RXY1       SUBTRACT LOGICAL (64<-32)
  2283  	op_SLGFI   uint32 = 0xC204 // FORMAT_RIL1       SUBTRACT LOGICAL IMMEDIATE (64<-32)
  2284  	op_SLGFR   uint32 = 0xB91B // FORMAT_RRE        SUBTRACT LOGICAL (64<-32)
  2285  	op_SLGR    uint32 = 0xB90B // FORMAT_RRE        SUBTRACT LOGICAL (64)
  2286  	op_SLGRK   uint32 = 0xB9EB // FORMAT_RRF1       SUBTRACT LOGICAL (64)
  2287  	op_SLHHHR  uint32 = 0xB9CB // FORMAT_RRF1       SUBTRACT LOGICAL HIGH (32)
  2288  	op_SLHHLR  uint32 = 0xB9DB // FORMAT_RRF1       SUBTRACT LOGICAL HIGH (32)
  2289  	op_SLL     uint32 = 0x8900 // FORMAT_RS1        SHIFT LEFT SINGLE LOGICAL (32)
  2290  	op_SLLG    uint32 = 0xEB0D // FORMAT_RSY1       SHIFT LEFT SINGLE LOGICAL (64)
  2291  	op_SLLK    uint32 = 0xEBDF // FORMAT_RSY1       SHIFT LEFT SINGLE LOGICAL (32)
  2292  	op_SLR     uint32 = 0x1F00 // FORMAT_RR         SUBTRACT LOGICAL (32)
  2293  	op_SLRK    uint32 = 0xB9FB // FORMAT_RRF1       SUBTRACT LOGICAL (32)
  2294  	op_SLXT    uint32 = 0xED48 // FORMAT_RXF        SHIFT SIGNIFICAND LEFT (extended DFP)
  2295  	op_SLY     uint32 = 0xE35F // FORMAT_RXY1       SUBTRACT LOGICAL (32)
  2296  	op_SP      uint32 = 0xFB00 // FORMAT_SS2        SUBTRACT DECIMAL
  2297  	op_SPKA    uint32 = 0xB20A // FORMAT_S          SET PSW KEY FROM ADDRESS
  2298  	op_SPM     uint32 = 0x0400 // FORMAT_RR         SET PROGRAM MASK
  2299  	op_SPT     uint32 = 0xB208 // FORMAT_S          SET CPU TIMER
  2300  	op_SPX     uint32 = 0xB210 // FORMAT_S          SET PREFIX
  2301  	op_SQD     uint32 = 0xED35 // FORMAT_RXE        SQUARE ROOT (long HFP)
  2302  	op_SQDB    uint32 = 0xED15 // FORMAT_RXE        SQUARE ROOT (long BFP)
  2303  	op_SQDBR   uint32 = 0xB315 // FORMAT_RRE        SQUARE ROOT (long BFP)
  2304  	op_SQDR    uint32 = 0xB244 // FORMAT_RRE        SQUARE ROOT (long HFP)
  2305  	op_SQE     uint32 = 0xED34 // FORMAT_RXE        SQUARE ROOT (short HFP)
  2306  	op_SQEB    uint32 = 0xED14 // FORMAT_RXE        SQUARE ROOT (short BFP)
  2307  	op_SQEBR   uint32 = 0xB314 // FORMAT_RRE        SQUARE ROOT (short BFP)
  2308  	op_SQER    uint32 = 0xB245 // FORMAT_RRE        SQUARE ROOT (short HFP)
  2309  	op_SQXBR   uint32 = 0xB316 // FORMAT_RRE        SQUARE ROOT (extended BFP)
  2310  	op_SQXR    uint32 = 0xB336 // FORMAT_RRE        SQUARE ROOT (extended HFP)
  2311  	op_SR      uint32 = 0x1B00 // FORMAT_RR         SUBTRACT (32)
  2312  	op_SRA     uint32 = 0x8A00 // FORMAT_RS1        SHIFT RIGHT SINGLE (32)
  2313  	op_SRAG    uint32 = 0xEB0A // FORMAT_RSY1       SHIFT RIGHT SINGLE (64)
  2314  	op_SRAK    uint32 = 0xEBDC // FORMAT_RSY1       SHIFT RIGHT SINGLE (32)
  2315  	op_SRDA    uint32 = 0x8E00 // FORMAT_RS1        SHIFT RIGHT DOUBLE
  2316  	op_SRDL    uint32 = 0x8C00 // FORMAT_RS1        SHIFT RIGHT DOUBLE LOGICAL
  2317  	op_SRDT    uint32 = 0xED41 // FORMAT_RXF        SHIFT SIGNIFICAND RIGHT (long DFP)
  2318  	op_SRK     uint32 = 0xB9F9 // FORMAT_RRF1       SUBTRACT (32)
  2319  	op_SRL     uint32 = 0x8800 // FORMAT_RS1        SHIFT RIGHT SINGLE LOGICAL (32)
  2320  	op_SRLG    uint32 = 0xEB0C // FORMAT_RSY1       SHIFT RIGHT SINGLE LOGICAL (64)
  2321  	op_SRLK    uint32 = 0xEBDE // FORMAT_RSY1       SHIFT RIGHT SINGLE LOGICAL (32)
  2322  	op_SRNM    uint32 = 0xB299 // FORMAT_S          SET BFP ROUNDING MODE (2 bit)
  2323  	op_SRNMB   uint32 = 0xB2B8 // FORMAT_S          SET BFP ROUNDING MODE (3 bit)
  2324  	op_SRNMT   uint32 = 0xB2B9 // FORMAT_S          SET DFP ROUNDING MODE
  2325  	op_SRP     uint32 = 0xF000 // FORMAT_SS3        SHIFT AND ROUND DECIMAL
  2326  	op_SRST    uint32 = 0xB25E // FORMAT_RRE        SEARCH STRING
  2327  	op_SRSTU   uint32 = 0xB9BE // FORMAT_RRE        SEARCH STRING UNICODE
  2328  	op_SRXT    uint32 = 0xED49 // FORMAT_RXF        SHIFT SIGNIFICAND RIGHT (extended DFP)
  2329  	op_SSAIR   uint32 = 0xB99F // FORMAT_RRE        SET SECONDARY ASN WITH INSTANCE
  2330  	op_SSAR    uint32 = 0xB225 // FORMAT_RRE        SET SECONDARY ASN
  2331  	op_SSCH    uint32 = 0xB233 // FORMAT_S          START SUBCHANNEL
  2332  	op_SSKE    uint32 = 0xB22B // FORMAT_RRF3       SET STORAGE KEY EXTENDED
  2333  	op_SSM     uint32 = 0x8000 // FORMAT_S          SET SYSTEM MASK
  2334  	op_ST      uint32 = 0x5000 // FORMAT_RX1        STORE (32)
  2335  	op_STAM    uint32 = 0x9B00 // FORMAT_RS1        STORE ACCESS MULTIPLE
  2336  	op_STAMY   uint32 = 0xEB9B // FORMAT_RSY1       STORE ACCESS MULTIPLE
  2337  	op_STAP    uint32 = 0xB212 // FORMAT_S          STORE CPU ADDRESS
  2338  	op_STC     uint32 = 0x4200 // FORMAT_RX1        STORE CHARACTER
  2339  	op_STCH    uint32 = 0xE3C3 // FORMAT_RXY1       STORE CHARACTER HIGH (8)
  2340  	op_STCK    uint32 = 0xB205 // FORMAT_S          STORE CLOCK
  2341  	op_STCKC   uint32 = 0xB207 // FORMAT_S          STORE CLOCK COMPARATOR
  2342  	op_STCKE   uint32 = 0xB278 // FORMAT_S          STORE CLOCK EXTENDED
  2343  	op_STCKF   uint32 = 0xB27C // FORMAT_S          STORE CLOCK FAST
  2344  	op_STCM    uint32 = 0xBE00 // FORMAT_RS2        STORE CHARACTERS UNDER MASK (low)
  2345  	op_STCMH   uint32 = 0xEB2C // FORMAT_RSY2       STORE CHARACTERS UNDER MASK (high)
  2346  	op_STCMY   uint32 = 0xEB2D // FORMAT_RSY2       STORE CHARACTERS UNDER MASK (low)
  2347  	op_STCPS   uint32 = 0xB23A // FORMAT_S          STORE CHANNEL PATH STATUS
  2348  	op_STCRW   uint32 = 0xB239 // FORMAT_S          STORE CHANNEL REPORT WORD
  2349  	op_STCTG   uint32 = 0xEB25 // FORMAT_RSY1       STORE CONTROL (64)
  2350  	op_STCTL   uint32 = 0xB600 // FORMAT_RS1        STORE CONTROL (32)
  2351  	op_STCY    uint32 = 0xE372 // FORMAT_RXY1       STORE CHARACTER
  2352  	op_STD     uint32 = 0x6000 // FORMAT_RX1        STORE (long)
  2353  	op_STDY    uint32 = 0xED67 // FORMAT_RXY1       STORE (long)
  2354  	op_STE     uint32 = 0x7000 // FORMAT_RX1        STORE (short)
  2355  	op_STEY    uint32 = 0xED66 // FORMAT_RXY1       STORE (short)
  2356  	op_STFH    uint32 = 0xE3CB // FORMAT_RXY1       STORE HIGH (32)
  2357  	op_STFL    uint32 = 0xB2B1 // FORMAT_S          STORE FACILITY LIST
  2358  	op_STFLE   uint32 = 0xB2B0 // FORMAT_S          STORE FACILITY LIST EXTENDED
  2359  	op_STFPC   uint32 = 0xB29C // FORMAT_S          STORE FPC
  2360  	op_STG     uint32 = 0xE324 // FORMAT_RXY1       STORE (64)
  2361  	op_STGRL   uint32 = 0xC40B // FORMAT_RIL2       STORE RELATIVE LONG (64)
  2362  	op_STH     uint32 = 0x4000 // FORMAT_RX1        STORE HALFWORD
  2363  	op_STHH    uint32 = 0xE3C7 // FORMAT_RXY1       STORE HALFWORD HIGH (16)
  2364  	op_STHRL   uint32 = 0xC407 // FORMAT_RIL2       STORE HALFWORD RELATIVE LONG
  2365  	op_STHY    uint32 = 0xE370 // FORMAT_RXY1       STORE HALFWORD
  2366  	op_STIDP   uint32 = 0xB202 // FORMAT_S          STORE CPU ID
  2367  	op_STM     uint32 = 0x9000 // FORMAT_RS1        STORE MULTIPLE (32)
  2368  	op_STMG    uint32 = 0xEB24 // FORMAT_RSY1       STORE MULTIPLE (64)
  2369  	op_STMH    uint32 = 0xEB26 // FORMAT_RSY1       STORE MULTIPLE HIGH
  2370  	op_STMY    uint32 = 0xEB90 // FORMAT_RSY1       STORE MULTIPLE (32)
  2371  	op_STNSM   uint32 = 0xAC00 // FORMAT_SI         STORE THEN AND SYSTEM MASK
  2372  	op_STOC    uint32 = 0xEBF3 // FORMAT_RSY2       STORE ON CONDITION (32)
  2373  	op_STOCG   uint32 = 0xEBE3 // FORMAT_RSY2       STORE ON CONDITION (64)
  2374  	op_STOSM   uint32 = 0xAD00 // FORMAT_SI         STORE THEN OR SYSTEM MASK
  2375  	op_STPQ    uint32 = 0xE38E // FORMAT_RXY1       STORE PAIR TO QUADWORD
  2376  	op_STPT    uint32 = 0xB209 // FORMAT_S          STORE CPU TIMER
  2377  	op_STPX    uint32 = 0xB211 // FORMAT_S          STORE PREFIX
  2378  	op_STRAG   uint32 = 0xE502 // FORMAT_SSE        STORE REAL ADDRESS
  2379  	op_STRL    uint32 = 0xC40F // FORMAT_RIL2       STORE RELATIVE LONG (32)
  2380  	op_STRV    uint32 = 0xE33E // FORMAT_RXY1       STORE REVERSED (32)
  2381  	op_STRVG   uint32 = 0xE32F // FORMAT_RXY1       STORE REVERSED (64)
  2382  	op_STRVH   uint32 = 0xE33F // FORMAT_RXY1       STORE REVERSED (16)
  2383  	op_STSCH   uint32 = 0xB234 // FORMAT_S          STORE SUBCHANNEL
  2384  	op_STSI    uint32 = 0xB27D // FORMAT_S          STORE SYSTEM INFORMATION
  2385  	op_STURA   uint32 = 0xB246 // FORMAT_RRE        STORE USING REAL ADDRESS (32)
  2386  	op_STURG   uint32 = 0xB925 // FORMAT_RRE        STORE USING REAL ADDRESS (64)
  2387  	op_STY     uint32 = 0xE350 // FORMAT_RXY1       STORE (32)
  2388  	op_SU      uint32 = 0x7F00 // FORMAT_RX1        SUBTRACT UNNORMALIZED (short HFP)
  2389  	op_SUR     uint32 = 0x3F00 // FORMAT_RR         SUBTRACT UNNORMALIZED (short HFP)
  2390  	op_SVC     uint32 = 0x0A00 // FORMAT_I          SUPERVISOR CALL
  2391  	op_SW      uint32 = 0x6F00 // FORMAT_RX1        SUBTRACT UNNORMALIZED (long HFP)
  2392  	op_SWR     uint32 = 0x2F00 // FORMAT_RR         SUBTRACT UNNORMALIZED (long HFP)
  2393  	op_SXBR    uint32 = 0xB34B // FORMAT_RRE        SUBTRACT (extended BFP)
  2394  	op_SXR     uint32 = 0x3700 // FORMAT_RR         SUBTRACT NORMALIZED (extended HFP)
  2395  	op_SXTR    uint32 = 0xB3DB // FORMAT_RRF1       SUBTRACT (extended DFP)
  2396  	op_SXTRA   uint32 = 0xB3DB // FORMAT_RRF1       SUBTRACT (extended DFP)
  2397  	op_SY      uint32 = 0xE35B // FORMAT_RXY1       SUBTRACT (32)
  2398  	op_TABORT  uint32 = 0xB2FC // FORMAT_S          TRANSACTION ABORT
  2399  	op_TAM     uint32 = 0x010B // FORMAT_E          TEST ADDRESSING MODE
  2400  	op_TAR     uint32 = 0xB24C // FORMAT_RRE        TEST ACCESS
  2401  	op_TB      uint32 = 0xB22C // FORMAT_RRE        TEST BLOCK
  2402  	op_TBDR    uint32 = 0xB351 // FORMAT_RRF5       CONVERT HFP TO BFP (long)
  2403  	op_TBEDR   uint32 = 0xB350 // FORMAT_RRF5       CONVERT HFP TO BFP (long to short)
  2404  	op_TBEGIN  uint32 = 0xE560 // FORMAT_SIL        TRANSACTION BEGIN
  2405  	op_TBEGINC uint32 = 0xE561 // FORMAT_SIL        TRANSACTION BEGIN
  2406  	op_TCDB    uint32 = 0xED11 // FORMAT_RXE        TEST DATA CLASS (long BFP)
  2407  	op_TCEB    uint32 = 0xED10 // FORMAT_RXE        TEST DATA CLASS (short BFP)
  2408  	op_TCXB    uint32 = 0xED12 // FORMAT_RXE        TEST DATA CLASS (extended BFP)
  2409  	op_TDCDT   uint32 = 0xED54 // FORMAT_RXE        TEST DATA CLASS (long DFP)
  2410  	op_TDCET   uint32 = 0xED50 // FORMAT_RXE        TEST DATA CLASS (short DFP)
  2411  	op_TDCXT   uint32 = 0xED58 // FORMAT_RXE        TEST DATA CLASS (extended DFP)
  2412  	op_TDGDT   uint32 = 0xED55 // FORMAT_RXE        TEST DATA GROUP (long DFP)
  2413  	op_TDGET   uint32 = 0xED51 // FORMAT_RXE        TEST DATA GROUP (short DFP)
  2414  	op_TDGXT   uint32 = 0xED59 // FORMAT_RXE        TEST DATA GROUP (extended DFP)
  2415  	op_TEND    uint32 = 0xB2F8 // FORMAT_S          TRANSACTION END
  2416  	op_THDER   uint32 = 0xB358 // FORMAT_RRE        CONVERT BFP TO HFP (short to long)
  2417  	op_THDR    uint32 = 0xB359 // FORMAT_RRE        CONVERT BFP TO HFP (long)
  2418  	op_TM      uint32 = 0x9100 // FORMAT_SI         TEST UNDER MASK
  2419  	op_TMH     uint32 = 0xA700 // FORMAT_RI1        TEST UNDER MASK HIGH
  2420  	op_TMHH    uint32 = 0xA702 // FORMAT_RI1        TEST UNDER MASK (high high)
  2421  	op_TMHL    uint32 = 0xA703 // FORMAT_RI1        TEST UNDER MASK (high low)
  2422  	op_TML     uint32 = 0xA701 // FORMAT_RI1        TEST UNDER MASK LOW
  2423  	op_TMLH    uint32 = 0xA700 // FORMAT_RI1        TEST UNDER MASK (low high)
  2424  	op_TMLL    uint32 = 0xA701 // FORMAT_RI1        TEST UNDER MASK (low low)
  2425  	op_TMY     uint32 = 0xEB51 // FORMAT_SIY        TEST UNDER MASK
  2426  	op_TP      uint32 = 0xEBC0 // FORMAT_RSL        TEST DECIMAL
  2427  	op_TPI     uint32 = 0xB236 // FORMAT_S          TEST PENDING INTERRUPTION
  2428  	op_TPROT   uint32 = 0xE501 // FORMAT_SSE        TEST PROTECTION
  2429  	op_TR      uint32 = 0xDC00 // FORMAT_SS1        TRANSLATE
  2430  	op_TRACE   uint32 = 0x9900 // FORMAT_RS1        TRACE (32)
  2431  	op_TRACG   uint32 = 0xEB0F // FORMAT_RSY1       TRACE (64)
  2432  	op_TRAP2   uint32 = 0x01FF // FORMAT_E          TRAP
  2433  	op_TRAP4   uint32 = 0xB2FF // FORMAT_S          TRAP
  2434  	op_TRE     uint32 = 0xB2A5 // FORMAT_RRE        TRANSLATE EXTENDED
  2435  	op_TROO    uint32 = 0xB993 // FORMAT_RRF3       TRANSLATE ONE TO ONE
  2436  	op_TROT    uint32 = 0xB992 // FORMAT_RRF3       TRANSLATE ONE TO TWO
  2437  	op_TRT     uint32 = 0xDD00 // FORMAT_SS1        TRANSLATE AND TEST
  2438  	op_TRTE    uint32 = 0xB9BF // FORMAT_RRF3       TRANSLATE AND TEST EXTENDED
  2439  	op_TRTO    uint32 = 0xB991 // FORMAT_RRF3       TRANSLATE TWO TO ONE
  2440  	op_TRTR    uint32 = 0xD000 // FORMAT_SS1        TRANSLATE AND TEST REVERSE
  2441  	op_TRTRE   uint32 = 0xB9BD // FORMAT_RRF3       TRANSLATE AND TEST REVERSE EXTENDED
  2442  	op_TRTT    uint32 = 0xB990 // FORMAT_RRF3       TRANSLATE TWO TO TWO
  2443  	op_TS      uint32 = 0x9300 // FORMAT_S          TEST AND SET
  2444  	op_TSCH    uint32 = 0xB235 // FORMAT_S          TEST SUBCHANNEL
  2445  	op_UNPK    uint32 = 0xF300 // FORMAT_SS2        UNPACK
  2446  	op_UNPKA   uint32 = 0xEA00 // FORMAT_SS1        UNPACK ASCII
  2447  	op_UNPKU   uint32 = 0xE200 // FORMAT_SS1        UNPACK UNICODE
  2448  	op_UPT     uint32 = 0x0102 // FORMAT_E          UPDATE TREE
  2449  	op_X       uint32 = 0x5700 // FORMAT_RX1        EXCLUSIVE OR (32)
  2450  	op_XC      uint32 = 0xD700 // FORMAT_SS1        EXCLUSIVE OR (character)
  2451  	op_XG      uint32 = 0xE382 // FORMAT_RXY1       EXCLUSIVE OR (64)
  2452  	op_XGR     uint32 = 0xB982 // FORMAT_RRE        EXCLUSIVE OR (64)
  2453  	op_XGRK    uint32 = 0xB9E7 // FORMAT_RRF1       EXCLUSIVE OR (64)
  2454  	op_XI      uint32 = 0x9700 // FORMAT_SI         EXCLUSIVE OR (immediate)
  2455  	op_XIHF    uint32 = 0xC006 // FORMAT_RIL1       EXCLUSIVE OR IMMEDIATE (high)
  2456  	op_XILF    uint32 = 0xC007 // FORMAT_RIL1       EXCLUSIVE OR IMMEDIATE (low)
  2457  	op_XIY     uint32 = 0xEB57 // FORMAT_SIY        EXCLUSIVE OR (immediate)
  2458  	op_XR      uint32 = 0x1700 // FORMAT_RR         EXCLUSIVE OR (32)
  2459  	op_XRK     uint32 = 0xB9F7 // FORMAT_RRF1       EXCLUSIVE OR (32)
  2460  	op_XSCH    uint32 = 0xB276 // FORMAT_S          CANCEL SUBCHANNEL
  2461  	op_XY      uint32 = 0xE357 // FORMAT_RXY1       EXCLUSIVE OR (32)
  2462  	op_ZAP     uint32 = 0xF800 // FORMAT_SS2        ZERO AND ADD
  2463  
  2464  	// added in z13
  2465  	op_CXPT   uint32 = 0xEDAF // 	RSL-b	CONVERT FROM PACKED (to extended DFP)
  2466  	op_CDPT   uint32 = 0xEDAE // 	RSL-b	CONVERT FROM PACKED (to long DFP)
  2467  	op_CPXT   uint32 = 0xEDAD // 	RSL-b	CONVERT TO PACKED (from extended DFP)
  2468  	op_CPDT   uint32 = 0xEDAC // 	RSL-b	CONVERT TO PACKED (from long DFP)
  2469  	op_LZRF   uint32 = 0xE33B // 	RXY-a	LOAD AND ZERO RIGHTMOST BYTE (32)
  2470  	op_LZRG   uint32 = 0xE32A // 	RXY-a	LOAD AND ZERO RIGHTMOST BYTE (64)
  2471  	op_LCCB   uint32 = 0xE727 // 	RXE	LOAD COUNT TO BLOCK BOUNDARY
  2472  	op_LOCHHI uint32 = 0xEC4E // 	RIE-g	LOAD HALFWORD HIGH IMMEDIATE ON CONDITION (32←16)
  2473  	op_LOCHI  uint32 = 0xEC42 // 	RIE-g	LOAD HALFWORD IMMEDIATE ON CONDITION (32←16)
  2474  	op_LOCGHI uint32 = 0xEC46 // 	RIE-g	LOAD HALFWORD IMMEDIATE ON CONDITION (64←16)
  2475  	op_LOCFH  uint32 = 0xEBE0 // 	RSY-b	LOAD HIGH ON CONDITION (32)
  2476  	op_LOCFHR uint32 = 0xB9E0 // 	RRF-c	LOAD HIGH ON CONDITION (32)
  2477  	op_LLZRGF uint32 = 0xE33A // 	RXY-a	LOAD LOGICAL AND ZERO RIGHTMOST BYTE (64←32)
  2478  	op_STOCFH uint32 = 0xEBE1 // 	RSY-b	STORE HIGH ON CONDITION
  2479  	op_VA     uint32 = 0xE7F3 // 	VRR-c	VECTOR ADD
  2480  	op_VACC   uint32 = 0xE7F1 // 	VRR-c	VECTOR ADD COMPUTE CARRY
  2481  	op_VAC    uint32 = 0xE7BB // 	VRR-d	VECTOR ADD WITH CARRY
  2482  	op_VACCC  uint32 = 0xE7B9 // 	VRR-d	VECTOR ADD WITH CARRY COMPUTE CARRY
  2483  	op_VN     uint32 = 0xE768 // 	VRR-c	VECTOR AND
  2484  	op_VNC    uint32 = 0xE769 // 	VRR-c	VECTOR AND WITH COMPLEMENT
  2485  	op_VAVG   uint32 = 0xE7F2 // 	VRR-c	VECTOR AVERAGE
  2486  	op_VAVGL  uint32 = 0xE7F0 // 	VRR-c	VECTOR AVERAGE LOGICAL
  2487  	op_VCKSM  uint32 = 0xE766 // 	VRR-c	VECTOR CHECKSUM
  2488  	op_VCEQ   uint32 = 0xE7F8 // 	VRR-b	VECTOR COMPARE EQUAL
  2489  	op_VCH    uint32 = 0xE7FB // 	VRR-b	VECTOR COMPARE HIGH
  2490  	op_VCHL   uint32 = 0xE7F9 // 	VRR-b	VECTOR COMPARE HIGH LOGICAL
  2491  	op_VCLZ   uint32 = 0xE753 // 	VRR-a	VECTOR COUNT LEADING ZEROS
  2492  	op_VCTZ   uint32 = 0xE752 // 	VRR-a	VECTOR COUNT TRAILING ZEROS
  2493  	op_VEC    uint32 = 0xE7DB // 	VRR-a	VECTOR ELEMENT COMPARE
  2494  	op_VECL   uint32 = 0xE7D9 // 	VRR-a	VECTOR ELEMENT COMPARE LOGICAL
  2495  	op_VERIM  uint32 = 0xE772 // 	VRI-d	VECTOR ELEMENT ROTATE AND INSERT UNDER MASK
  2496  	op_VERLL  uint32 = 0xE733 // 	VRS-a	VECTOR ELEMENT ROTATE LEFT LOGICAL
  2497  	op_VERLLV uint32 = 0xE773 // 	VRR-c	VECTOR ELEMENT ROTATE LEFT LOGICAL
  2498  	op_VESLV  uint32 = 0xE770 // 	VRR-c	VECTOR ELEMENT SHIFT LEFT
  2499  	op_VESL   uint32 = 0xE730 // 	VRS-a	VECTOR ELEMENT SHIFT LEFT
  2500  	op_VESRA  uint32 = 0xE73A // 	VRS-a	VECTOR ELEMENT SHIFT RIGHT ARITHMETIC
  2501  	op_VESRAV uint32 = 0xE77A // 	VRR-c	VECTOR ELEMENT SHIFT RIGHT ARITHMETIC
  2502  	op_VESRL  uint32 = 0xE738 // 	VRS-a	VECTOR ELEMENT SHIFT RIGHT LOGICAL
  2503  	op_VESRLV uint32 = 0xE778 // 	VRR-c	VECTOR ELEMENT SHIFT RIGHT LOGICAL
  2504  	op_VX     uint32 = 0xE76D // 	VRR-c	VECTOR EXCLUSIVE OR
  2505  	op_VFAE   uint32 = 0xE782 // 	VRR-b	VECTOR FIND ANY ELEMENT EQUAL
  2506  	op_VFEE   uint32 = 0xE780 // 	VRR-b	VECTOR FIND ELEMENT EQUAL
  2507  	op_VFENE  uint32 = 0xE781 // 	VRR-b	VECTOR FIND ELEMENT NOT EQUAL
  2508  	op_VFA    uint32 = 0xE7E3 // 	VRR-c	VECTOR FP ADD
  2509  	op_WFK    uint32 = 0xE7CA // 	VRR-a	VECTOR FP COMPARE AND SIGNAL SCALAR
  2510  	op_VFCE   uint32 = 0xE7E8 // 	VRR-c	VECTOR FP COMPARE EQUAL
  2511  	op_VFCH   uint32 = 0xE7EB // 	VRR-c	VECTOR FP COMPARE HIGH
  2512  	op_VFCHE  uint32 = 0xE7EA // 	VRR-c	VECTOR FP COMPARE HIGH OR EQUAL
  2513  	op_WFC    uint32 = 0xE7CB // 	VRR-a	VECTOR FP COMPARE SCALAR
  2514  	op_VCDG   uint32 = 0xE7C3 // 	VRR-a	VECTOR FP CONVERT FROM FIXED 64-BIT
  2515  	op_VCDLG  uint32 = 0xE7C1 // 	VRR-a	VECTOR FP CONVERT FROM LOGICAL 64-BIT
  2516  	op_VCGD   uint32 = 0xE7C2 // 	VRR-a	VECTOR FP CONVERT TO FIXED 64-BIT
  2517  	op_VCLGD  uint32 = 0xE7C0 // 	VRR-a	VECTOR FP CONVERT TO LOGICAL 64-BIT
  2518  	op_VFD    uint32 = 0xE7E5 // 	VRR-c	VECTOR FP DIVIDE
  2519  	op_VLDE   uint32 = 0xE7C4 // 	VRR-a	VECTOR FP LOAD LENGTHENED
  2520  	op_VLED   uint32 = 0xE7C5 // 	VRR-a	VECTOR FP LOAD ROUNDED
  2521  	op_VFM    uint32 = 0xE7E7 // 	VRR-c	VECTOR FP MULTIPLY
  2522  	op_VFMA   uint32 = 0xE78F // 	VRR-e	VECTOR FP MULTIPLY AND ADD
  2523  	op_VFMS   uint32 = 0xE78E // 	VRR-e	VECTOR FP MULTIPLY AND SUBTRACT
  2524  	op_VFPSO  uint32 = 0xE7CC // 	VRR-a	VECTOR FP PERFORM SIGN OPERATION
  2525  	op_VFSQ   uint32 = 0xE7CE // 	VRR-a	VECTOR FP SQUARE ROOT
  2526  	op_VFS    uint32 = 0xE7E2 // 	VRR-c	VECTOR FP SUBTRACT
  2527  	op_VFTCI  uint32 = 0xE74A // 	VRI-e	VECTOR FP TEST DATA CLASS IMMEDIATE
  2528  	op_VGFM   uint32 = 0xE7B4 // 	VRR-c	VECTOR GALOIS FIELD MULTIPLY SUM
  2529  	op_VGFMA  uint32 = 0xE7BC // 	VRR-d	VECTOR GALOIS FIELD MULTIPLY SUM AND ACCUMULATE
  2530  	op_VGEF   uint32 = 0xE713 // 	VRV	VECTOR GATHER ELEMENT (32)
  2531  	op_VGEG   uint32 = 0xE712 // 	VRV	VECTOR GATHER ELEMENT (64)
  2532  	op_VGBM   uint32 = 0xE744 // 	VRI-a	VECTOR GENERATE BYTE MASK
  2533  	op_VGM    uint32 = 0xE746 // 	VRI-b	VECTOR GENERATE MASK
  2534  	op_VISTR  uint32 = 0xE75C // 	VRR-a	VECTOR ISOLATE STRING
  2535  	op_VL     uint32 = 0xE706 // 	VRX	VECTOR LOAD
  2536  	op_VLR    uint32 = 0xE756 // 	VRR-a	VECTOR LOAD
  2537  	op_VLREP  uint32 = 0xE705 // 	VRX	VECTOR LOAD AND REPLICATE
  2538  	op_VLC    uint32 = 0xE7DE // 	VRR-a	VECTOR LOAD COMPLEMENT
  2539  	op_VLEH   uint32 = 0xE701 // 	VRX	VECTOR LOAD ELEMENT (16)
  2540  	op_VLEF   uint32 = 0xE703 // 	VRX	VECTOR LOAD ELEMENT (32)
  2541  	op_VLEG   uint32 = 0xE702 // 	VRX	VECTOR LOAD ELEMENT (64)
  2542  	op_VLEB   uint32 = 0xE700 // 	VRX	VECTOR LOAD ELEMENT (8)
  2543  	op_VLEIH  uint32 = 0xE741 // 	VRI-a	VECTOR LOAD ELEMENT IMMEDIATE (16)
  2544  	op_VLEIF  uint32 = 0xE743 // 	VRI-a	VECTOR LOAD ELEMENT IMMEDIATE (32)
  2545  	op_VLEIG  uint32 = 0xE742 // 	VRI-a	VECTOR LOAD ELEMENT IMMEDIATE (64)
  2546  	op_VLEIB  uint32 = 0xE740 // 	VRI-a	VECTOR LOAD ELEMENT IMMEDIATE (8)
  2547  	op_VFI    uint32 = 0xE7C7 // 	VRR-a	VECTOR LOAD FP INTEGER
  2548  	op_VLGV   uint32 = 0xE721 // 	VRS-c	VECTOR LOAD GR FROM VR ELEMENT
  2549  	op_VLLEZ  uint32 = 0xE704 // 	VRX	VECTOR LOAD LOGICAL ELEMENT AND ZERO
  2550  	op_VLM    uint32 = 0xE736 // 	VRS-a	VECTOR LOAD MULTIPLE
  2551  	op_VLP    uint32 = 0xE7DF // 	VRR-a	VECTOR LOAD POSITIVE
  2552  	op_VLBB   uint32 = 0xE707 // 	VRX	VECTOR LOAD TO BLOCK BOUNDARY
  2553  	op_VLVG   uint32 = 0xE722 // 	VRS-b	VECTOR LOAD VR ELEMENT FROM GR
  2554  	op_VLVGP  uint32 = 0xE762 // 	VRR-f	VECTOR LOAD VR FROM GRS DISJOINT
  2555  	op_VLL    uint32 = 0xE737 // 	VRS-b	VECTOR LOAD WITH LENGTH
  2556  	op_VMX    uint32 = 0xE7FF // 	VRR-c	VECTOR MAXIMUM
  2557  	op_VMXL   uint32 = 0xE7FD // 	VRR-c	VECTOR MAXIMUM LOGICAL
  2558  	op_VMRH   uint32 = 0xE761 // 	VRR-c	VECTOR MERGE HIGH
  2559  	op_VMRL   uint32 = 0xE760 // 	VRR-c	VECTOR MERGE LOW
  2560  	op_VMN    uint32 = 0xE7FE // 	VRR-c	VECTOR MINIMUM
  2561  	op_VMNL   uint32 = 0xE7FC // 	VRR-c	VECTOR MINIMUM LOGICAL
  2562  	op_VMAE   uint32 = 0xE7AE // 	VRR-d	VECTOR MULTIPLY AND ADD EVEN
  2563  	op_VMAH   uint32 = 0xE7AB // 	VRR-d	VECTOR MULTIPLY AND ADD HIGH
  2564  	op_VMALE  uint32 = 0xE7AC // 	VRR-d	VECTOR MULTIPLY AND ADD LOGICAL EVEN
  2565  	op_VMALH  uint32 = 0xE7A9 // 	VRR-d	VECTOR MULTIPLY AND ADD LOGICAL HIGH
  2566  	op_VMALO  uint32 = 0xE7AD // 	VRR-d	VECTOR MULTIPLY AND ADD LOGICAL ODD
  2567  	op_VMAL   uint32 = 0xE7AA // 	VRR-d	VECTOR MULTIPLY AND ADD LOW
  2568  	op_VMAO   uint32 = 0xE7AF // 	VRR-d	VECTOR MULTIPLY AND ADD ODD
  2569  	op_VME    uint32 = 0xE7A6 // 	VRR-c	VECTOR MULTIPLY EVEN
  2570  	op_VMH    uint32 = 0xE7A3 // 	VRR-c	VECTOR MULTIPLY HIGH
  2571  	op_VMLE   uint32 = 0xE7A4 // 	VRR-c	VECTOR MULTIPLY EVEN LOGICAL
  2572  	op_VMLH   uint32 = 0xE7A1 // 	VRR-c	VECTOR MULTIPLY HIGH LOGICAL
  2573  	op_VMLO   uint32 = 0xE7A5 // 	VRR-c	VECTOR MULTIPLY ODD LOGICAL
  2574  	op_VML    uint32 = 0xE7A2 // 	VRR-c	VECTOR MULTIPLY LOW
  2575  	op_VMO    uint32 = 0xE7A7 // 	VRR-c	VECTOR MULTIPLY ODD
  2576  	op_VNO    uint32 = 0xE76B // 	VRR-c	VECTOR NOR
  2577  	op_VO     uint32 = 0xE76A // 	VRR-c	VECTOR OR
  2578  	op_VPK    uint32 = 0xE794 // 	VRR-c	VECTOR PACK
  2579  	op_VPKLS  uint32 = 0xE795 // 	VRR-b	VECTOR PACK LOGICAL SATURATE
  2580  	op_VPKS   uint32 = 0xE797 // 	VRR-b	VECTOR PACK SATURATE
  2581  	op_VPERM  uint32 = 0xE78C // 	VRR-e	VECTOR PERMUTE
  2582  	op_VPDI   uint32 = 0xE784 // 	VRR-c	VECTOR PERMUTE DOUBLEWORD IMMEDIATE
  2583  	op_VPOPCT uint32 = 0xE750 // 	VRR-a	VECTOR POPULATION COUNT
  2584  	op_VREP   uint32 = 0xE74D // 	VRI-c	VECTOR REPLICATE
  2585  	op_VREPI  uint32 = 0xE745 // 	VRI-a	VECTOR REPLICATE IMMEDIATE
  2586  	op_VSCEF  uint32 = 0xE71B // 	VRV	VECTOR SCATTER ELEMENT (32)
  2587  	op_VSCEG  uint32 = 0xE71A // 	VRV	VECTOR SCATTER ELEMENT (64)
  2588  	op_VSEL   uint32 = 0xE78D // 	VRR-e	VECTOR SELECT
  2589  	op_VSL    uint32 = 0xE774 // 	VRR-c	VECTOR SHIFT LEFT
  2590  	op_VSLB   uint32 = 0xE775 // 	VRR-c	VECTOR SHIFT LEFT BY BYTE
  2591  	op_VSLDB  uint32 = 0xE777 // 	VRI-d	VECTOR SHIFT LEFT DOUBLE BY BYTE
  2592  	op_VSRA   uint32 = 0xE77E // 	VRR-c	VECTOR SHIFT RIGHT ARITHMETIC
  2593  	op_VSRAB  uint32 = 0xE77F // 	VRR-c	VECTOR SHIFT RIGHT ARITHMETIC BY BYTE
  2594  	op_VSRL   uint32 = 0xE77C // 	VRR-c	VECTOR SHIFT RIGHT LOGICAL
  2595  	op_VSRLB  uint32 = 0xE77D // 	VRR-c	VECTOR SHIFT RIGHT LOGICAL BY BYTE
  2596  	op_VSEG   uint32 = 0xE75F // 	VRR-a	VECTOR SIGN EXTEND TO DOUBLEWORD
  2597  	op_VST    uint32 = 0xE70E // 	VRX	VECTOR STORE
  2598  	op_VSTEH  uint32 = 0xE709 // 	VRX	VECTOR STORE ELEMENT (16)
  2599  	op_VSTEF  uint32 = 0xE70B // 	VRX	VECTOR STORE ELEMENT (32)
  2600  	op_VSTEG  uint32 = 0xE70A // 	VRX	VECTOR STORE ELEMENT (64)
  2601  	op_VSTEB  uint32 = 0xE708 // 	VRX	VECTOR STORE ELEMENT (8)
  2602  	op_VSTM   uint32 = 0xE73E // 	VRS-a	VECTOR STORE MULTIPLE
  2603  	op_VSTL   uint32 = 0xE73F // 	VRS-b	VECTOR STORE WITH LENGTH
  2604  	op_VSTRC  uint32 = 0xE78A // 	VRR-d	VECTOR STRING RANGE COMPARE
  2605  	op_VS     uint32 = 0xE7F7 // 	VRR-c	VECTOR SUBTRACT
  2606  	op_VSCBI  uint32 = 0xE7F5 // 	VRR-c	VECTOR SUBTRACT COMPUTE BORROW INDICATION
  2607  	op_VSBCBI uint32 = 0xE7BD // 	VRR-d	VECTOR SUBTRACT WITH BORROW COMPUTE BORROW INDICATION
  2608  	op_VSBI   uint32 = 0xE7BF // 	VRR-d	VECTOR SUBTRACT WITH BORROW INDICATION
  2609  	op_VSUMG  uint32 = 0xE765 // 	VRR-c	VECTOR SUM ACROSS DOUBLEWORD
  2610  	op_VSUMQ  uint32 = 0xE767 // 	VRR-c	VECTOR SUM ACROSS QUADWORD
  2611  	op_VSUM   uint32 = 0xE764 // 	VRR-c	VECTOR SUM ACROSS WORD
  2612  	op_VTM    uint32 = 0xE7D8 // 	VRR-a	VECTOR TEST UNDER MASK
  2613  	op_VUPH   uint32 = 0xE7D7 // 	VRR-a	VECTOR UNPACK HIGH
  2614  	op_VUPLH  uint32 = 0xE7D5 // 	VRR-a	VECTOR UNPACK LOGICAL HIGH
  2615  	op_VUPLL  uint32 = 0xE7D4 // 	VRR-a	VECTOR UNPACK LOGICAL LOW
  2616  	op_VUPL   uint32 = 0xE7D6 // 	VRR-a	VECTOR UNPACK LOW
  2617  	op_VMSL   uint32 = 0xE7B8 // 	VRR-d	VECTOR MULTIPLY SUM LOGICAL
  2618  )
  2619  
  2620  func oclass(a *obj.Addr) int {
  2621  	return int(a.Class) - 1
  2622  }
  2623  
  2624  // Add a relocation for the immediate in a RIL style instruction.
  2625  // The addend will be adjusted as required.
  2626  func (c *ctxtz) addrilreloc(sym *obj.LSym, add int64) *obj.Reloc {
  2627  	if sym == nil {
  2628  		c.ctxt.Diag("require symbol to apply relocation")
  2629  	}
  2630  	offset := int64(2) // relocation offset from start of instruction
  2631  	rel := obj.Addrel(c.cursym)
  2632  	rel.Off = int32(c.pc + offset)
  2633  	rel.Siz = 4
  2634  	rel.Sym = sym
  2635  	rel.Add = add + offset + int64(rel.Siz)
  2636  	rel.Type = objabi.R_PCRELDBL
  2637  	return rel
  2638  }
  2639  
  2640  func (c *ctxtz) addrilrelocoffset(sym *obj.LSym, add, offset int64) *obj.Reloc {
  2641  	if sym == nil {
  2642  		c.ctxt.Diag("require symbol to apply relocation")
  2643  	}
  2644  	offset += int64(2) // relocation offset from start of instruction
  2645  	rel := obj.Addrel(c.cursym)
  2646  	rel.Off = int32(c.pc + offset)
  2647  	rel.Siz = 4
  2648  	rel.Sym = sym
  2649  	rel.Add = add + offset + int64(rel.Siz)
  2650  	rel.Type = objabi.R_PCRELDBL
  2651  	return rel
  2652  }
  2653  
  2654  // Add a CALL relocation for the immediate in a RIL style instruction.
  2655  // The addend will be adjusted as required.
  2656  func (c *ctxtz) addcallreloc(sym *obj.LSym, add int64) *obj.Reloc {
  2657  	if sym == nil {
  2658  		c.ctxt.Diag("require symbol to apply relocation")
  2659  	}
  2660  	offset := int64(2) // relocation offset from start of instruction
  2661  	rel := obj.Addrel(c.cursym)
  2662  	rel.Off = int32(c.pc + offset)
  2663  	rel.Siz = 4
  2664  	rel.Sym = sym
  2665  	rel.Add = add + offset + int64(rel.Siz)
  2666  	rel.Type = objabi.R_CALL
  2667  	return rel
  2668  }
  2669  
  2670  func (c *ctxtz) branchMask(p *obj.Prog) CCMask {
  2671  	switch p.As {
  2672  	case ABRC, ALOCR, ALOCGR,
  2673  		ACRJ, ACGRJ, ACIJ, ACGIJ,
  2674  		ACLRJ, ACLGRJ, ACLIJ, ACLGIJ:
  2675  		return CCMask(p.From.Offset)
  2676  	case ABEQ, ACMPBEQ, ACMPUBEQ, AMOVDEQ:
  2677  		return Equal
  2678  	case ABGE, ACMPBGE, ACMPUBGE, AMOVDGE:
  2679  		return GreaterOrEqual
  2680  	case ABGT, ACMPBGT, ACMPUBGT, AMOVDGT:
  2681  		return Greater
  2682  	case ABLE, ACMPBLE, ACMPUBLE, AMOVDLE:
  2683  		return LessOrEqual
  2684  	case ABLT, ACMPBLT, ACMPUBLT, AMOVDLT:
  2685  		return Less
  2686  	case ABNE, ACMPBNE, ACMPUBNE, AMOVDNE:
  2687  		return NotEqual
  2688  	case ABLEU: // LE or unordered
  2689  		return NotGreater
  2690  	case ABLTU: // LT or unordered
  2691  		return LessOrUnordered
  2692  	case ABVC:
  2693  		return Never // needs extra instruction
  2694  	case ABVS:
  2695  		return Unordered
  2696  	}
  2697  	c.ctxt.Diag("unknown conditional branch %v", p.As)
  2698  	return Always
  2699  }
  2700  
  2701  func regtmp(p *obj.Prog) uint32 {
  2702  	p.Mark |= USETMP
  2703  	return REGTMP
  2704  }
  2705  
  2706  func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
  2707  	o := c.oplook(p)
  2708  
  2709  	if o == nil {
  2710  		return
  2711  	}
  2712  
  2713  	// If REGTMP is used in generated code, we need to set USETMP on p.Mark.
  2714  	// So we use regtmp(p) for REGTMP.
  2715  
  2716  	switch o.i {
  2717  	default:
  2718  		c.ctxt.Diag("unknown index %d", o.i)
  2719  
  2720  	case 0: // PSEUDO OPS
  2721  		break
  2722  
  2723  	case 1: // mov reg reg
  2724  		switch p.As {
  2725  		default:
  2726  			c.ctxt.Diag("unhandled operation: %v", p.As)
  2727  		case AMOVD:
  2728  			zRRE(op_LGR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2729  		// sign extend
  2730  		case AMOVW:
  2731  			zRRE(op_LGFR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2732  		case AMOVH:
  2733  			zRRE(op_LGHR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2734  		case AMOVB:
  2735  			zRRE(op_LGBR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2736  		// zero extend
  2737  		case AMOVWZ:
  2738  			zRRE(op_LLGFR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2739  		case AMOVHZ:
  2740  			zRRE(op_LLGHR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2741  		case AMOVBZ:
  2742  			zRRE(op_LLGCR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2743  		// reverse bytes
  2744  		case AMOVDBR:
  2745  			zRRE(op_LRVGR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2746  		case AMOVWBR:
  2747  			zRRE(op_LRVR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2748  		// floating point
  2749  		case AFMOVD, AFMOVS:
  2750  			zRR(op_LDR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2751  		}
  2752  
  2753  	case 2: // arithmetic op reg [reg] reg
  2754  		r := p.Reg
  2755  		if r == 0 {
  2756  			r = p.To.Reg
  2757  		}
  2758  
  2759  		var opcode uint32
  2760  
  2761  		switch p.As {
  2762  		default:
  2763  			c.ctxt.Diag("invalid opcode")
  2764  		case AADD:
  2765  			opcode = op_AGRK
  2766  		case AADDC:
  2767  			opcode = op_ALGRK
  2768  		case AADDE:
  2769  			opcode = op_ALCGR
  2770  		case AADDW:
  2771  			opcode = op_ARK
  2772  		case AMULLW:
  2773  			opcode = op_MSGFR
  2774  		case AMULLD:
  2775  			opcode = op_MSGR
  2776  		case ADIVW, AMODW:
  2777  			opcode = op_DSGFR
  2778  		case ADIVWU, AMODWU:
  2779  			opcode = op_DLR
  2780  		case ADIVD, AMODD:
  2781  			opcode = op_DSGR
  2782  		case ADIVDU, AMODDU:
  2783  			opcode = op_DLGR
  2784  		}
  2785  
  2786  		switch p.As {
  2787  		default:
  2788  
  2789  		case AADD, AADDC, AADDW:
  2790  			if p.As == AADDW && r == p.To.Reg {
  2791  				zRR(op_AR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2792  			} else {
  2793  				zRRF(opcode, uint32(p.From.Reg), 0, uint32(p.To.Reg), uint32(r), asm)
  2794  			}
  2795  
  2796  		case AADDE, AMULLW, AMULLD:
  2797  			if r == p.To.Reg {
  2798  				zRRE(opcode, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2799  			} else if p.From.Reg == p.To.Reg {
  2800  				zRRE(opcode, uint32(p.To.Reg), uint32(r), asm)
  2801  			} else {
  2802  				zRRE(op_LGR, uint32(p.To.Reg), uint32(r), asm)
  2803  				zRRE(opcode, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2804  			}
  2805  
  2806  		case ADIVW, ADIVWU, ADIVD, ADIVDU:
  2807  			if p.As == ADIVWU || p.As == ADIVDU {
  2808  				zRI(op_LGHI, regtmp(p), 0, asm)
  2809  			}
  2810  			zRRE(op_LGR, REGTMP2, uint32(r), asm)
  2811  			zRRE(opcode, regtmp(p), uint32(p.From.Reg), asm)
  2812  			zRRE(op_LGR, uint32(p.To.Reg), REGTMP2, asm)
  2813  
  2814  		case AMODW, AMODWU, AMODD, AMODDU:
  2815  			if p.As == AMODWU || p.As == AMODDU {
  2816  				zRI(op_LGHI, regtmp(p), 0, asm)
  2817  			}
  2818  			zRRE(op_LGR, REGTMP2, uint32(r), asm)
  2819  			zRRE(opcode, regtmp(p), uint32(p.From.Reg), asm)
  2820  			zRRE(op_LGR, uint32(p.To.Reg), regtmp(p), asm)
  2821  
  2822  		}
  2823  
  2824  	case 3: // mov $constant reg
  2825  		v := c.vregoff(&p.From)
  2826  		switch p.As {
  2827  		case AMOVBZ:
  2828  			v = int64(uint8(v))
  2829  		case AMOVHZ:
  2830  			v = int64(uint16(v))
  2831  		case AMOVWZ:
  2832  			v = int64(uint32(v))
  2833  		case AMOVB:
  2834  			v = int64(int8(v))
  2835  		case AMOVH:
  2836  			v = int64(int16(v))
  2837  		case AMOVW:
  2838  			v = int64(int32(v))
  2839  		}
  2840  		if int64(int16(v)) == v {
  2841  			zRI(op_LGHI, uint32(p.To.Reg), uint32(v), asm)
  2842  		} else if v&0xffff0000 == v {
  2843  			zRI(op_LLILH, uint32(p.To.Reg), uint32(v>>16), asm)
  2844  		} else if v&0xffff00000000 == v {
  2845  			zRI(op_LLIHL, uint32(p.To.Reg), uint32(v>>32), asm)
  2846  		} else if uint64(v)&0xffff000000000000 == uint64(v) {
  2847  			zRI(op_LLIHH, uint32(p.To.Reg), uint32(v>>48), asm)
  2848  		} else if int64(int32(v)) == v {
  2849  			zRIL(_a, op_LGFI, uint32(p.To.Reg), uint32(v), asm)
  2850  		} else if int64(uint32(v)) == v {
  2851  			zRIL(_a, op_LLILF, uint32(p.To.Reg), uint32(v), asm)
  2852  		} else if uint64(v)&0xffffffff00000000 == uint64(v) {
  2853  			zRIL(_a, op_LLIHF, uint32(p.To.Reg), uint32(v>>32), asm)
  2854  		} else {
  2855  			zRIL(_a, op_LLILF, uint32(p.To.Reg), uint32(v), asm)
  2856  			zRIL(_a, op_IIHF, uint32(p.To.Reg), uint32(v>>32), asm)
  2857  		}
  2858  
  2859  	case 4: // multiply high (a*b)>>64
  2860  		r := p.Reg
  2861  		if r == 0 {
  2862  			r = p.To.Reg
  2863  		}
  2864  		zRRE(op_LGR, REGTMP2, uint32(r), asm)
  2865  		zRRE(op_MLGR, regtmp(p), uint32(p.From.Reg), asm)
  2866  		switch p.As {
  2867  		case AMULHDU:
  2868  			// Unsigned: move result into correct register.
  2869  			zRRE(op_LGR, uint32(p.To.Reg), regtmp(p), asm)
  2870  		case AMULHD:
  2871  			// Signed: need to convert result.
  2872  			// See Hacker's Delight 8-3.
  2873  			zRSY(op_SRAG, REGTMP2, uint32(p.From.Reg), 0, 63, asm)
  2874  			zRRE(op_NGR, REGTMP2, uint32(r), asm)
  2875  			zRRE(op_SGR, regtmp(p), REGTMP2, asm)
  2876  			zRSY(op_SRAG, REGTMP2, uint32(r), 0, 63, asm)
  2877  			zRRE(op_NGR, REGTMP2, uint32(p.From.Reg), asm)
  2878  			zRRF(op_SGRK, REGTMP2, 0, uint32(p.To.Reg), regtmp(p), asm)
  2879  		}
  2880  
  2881  	case 5: // syscall
  2882  		zI(op_SVC, 0, asm)
  2883  
  2884  	case 6: // logical op reg [reg] reg
  2885  		var oprr, oprre, oprrf uint32
  2886  		switch p.As {
  2887  		case AAND:
  2888  			oprre = op_NGR
  2889  			oprrf = op_NGRK
  2890  		case AANDW:
  2891  			oprr = op_NR
  2892  			oprrf = op_NRK
  2893  		case AOR:
  2894  			oprre = op_OGR
  2895  			oprrf = op_OGRK
  2896  		case AORW:
  2897  			oprr = op_OR
  2898  			oprrf = op_ORK
  2899  		case AXOR:
  2900  			oprre = op_XGR
  2901  			oprrf = op_XGRK
  2902  		case AXORW:
  2903  			oprr = op_XR
  2904  			oprrf = op_XRK
  2905  		}
  2906  		if p.Reg == 0 {
  2907  			if oprr != 0 {
  2908  				zRR(oprr, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2909  			} else {
  2910  				zRRE(oprre, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2911  			}
  2912  		} else {
  2913  			zRRF(oprrf, uint32(p.Reg), 0, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2914  		}
  2915  
  2916  	case 7: // shift/rotate reg [reg] reg
  2917  		d2 := c.vregoff(&p.From)
  2918  		b2 := p.From.Reg
  2919  		r3 := p.Reg
  2920  		if r3 == 0 {
  2921  			r3 = p.To.Reg
  2922  		}
  2923  		r1 := p.To.Reg
  2924  		var opcode uint32
  2925  		switch p.As {
  2926  		default:
  2927  		case ASLD:
  2928  			opcode = op_SLLG
  2929  		case ASRD:
  2930  			opcode = op_SRLG
  2931  		case ASLW:
  2932  			opcode = op_SLLK
  2933  		case ASRW:
  2934  			opcode = op_SRLK
  2935  		case ARLL:
  2936  			opcode = op_RLL
  2937  		case ARLLG:
  2938  			opcode = op_RLLG
  2939  		case ASRAW:
  2940  			opcode = op_SRAK
  2941  		case ASRAD:
  2942  			opcode = op_SRAG
  2943  		}
  2944  		zRSY(opcode, uint32(r1), uint32(r3), uint32(b2), uint32(d2), asm)
  2945  
  2946  	case 8: // find leftmost one
  2947  		if p.To.Reg&1 != 0 {
  2948  			c.ctxt.Diag("target must be an even-numbered register")
  2949  		}
  2950  		// FLOGR also writes a mask to p.To.Reg+1.
  2951  		zRRE(op_FLOGR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2952  
  2953  	case 9: // population count
  2954  		zRRE(op_POPCNT, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2955  
  2956  	case 10: // subtract reg [reg] reg
  2957  		r := int(p.Reg)
  2958  
  2959  		switch p.As {
  2960  		default:
  2961  		case ASUB:
  2962  			if r == 0 {
  2963  				zRRE(op_SGR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2964  			} else {
  2965  				zRRF(op_SGRK, uint32(p.From.Reg), 0, uint32(p.To.Reg), uint32(r), asm)
  2966  			}
  2967  		case ASUBC:
  2968  			if r == 0 {
  2969  				zRRE(op_SLGR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2970  			} else {
  2971  				zRRF(op_SLGRK, uint32(p.From.Reg), 0, uint32(p.To.Reg), uint32(r), asm)
  2972  			}
  2973  		case ASUBE:
  2974  			if r == 0 {
  2975  				r = int(p.To.Reg)
  2976  			}
  2977  			if r == int(p.To.Reg) {
  2978  				zRRE(op_SLBGR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2979  			} else if p.From.Reg == p.To.Reg {
  2980  				zRRE(op_LGR, regtmp(p), uint32(p.From.Reg), asm)
  2981  				zRRE(op_LGR, uint32(p.To.Reg), uint32(r), asm)
  2982  				zRRE(op_SLBGR, uint32(p.To.Reg), regtmp(p), asm)
  2983  			} else {
  2984  				zRRE(op_LGR, uint32(p.To.Reg), uint32(r), asm)
  2985  				zRRE(op_SLBGR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2986  			}
  2987  		case ASUBW:
  2988  			if r == 0 {
  2989  				zRR(op_SR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  2990  			} else {
  2991  				zRRF(op_SRK, uint32(p.From.Reg), 0, uint32(p.To.Reg), uint32(r), asm)
  2992  			}
  2993  		}
  2994  
  2995  	case 11: // br/bl
  2996  		v := int32(0)
  2997  
  2998  		if p.Pcond != nil {
  2999  			v = int32((p.Pcond.Pc - p.Pc) >> 1)
  3000  		}
  3001  
  3002  		if p.As == ABR && p.To.Sym == nil && int32(int16(v)) == v {
  3003  			zRI(op_BRC, 0xF, uint32(v), asm)
  3004  		} else {
  3005  			if p.As == ABL {
  3006  				zRIL(_b, op_BRASL, uint32(REG_LR), uint32(v), asm)
  3007  			} else {
  3008  				zRIL(_c, op_BRCL, 0xF, uint32(v), asm)
  3009  			}
  3010  			if p.To.Sym != nil {
  3011  				c.addcallreloc(p.To.Sym, p.To.Offset)
  3012  			}
  3013  		}
  3014  
  3015  	case 12:
  3016  		r1 := p.To.Reg
  3017  		d2 := c.vregoff(&p.From)
  3018  		b2 := p.From.Reg
  3019  		if b2 == 0 {
  3020  			b2 = REGSP
  3021  		}
  3022  		x2 := p.From.Index
  3023  		if -DISP20/2 > d2 || d2 >= DISP20/2 {
  3024  			zRIL(_a, op_LGFI, regtmp(p), uint32(d2), asm)
  3025  			if x2 != 0 {
  3026  				zRX(op_LA, regtmp(p), regtmp(p), uint32(x2), 0, asm)
  3027  			}
  3028  			x2 = int16(regtmp(p))
  3029  			d2 = 0
  3030  		}
  3031  		var opx, opxy uint32
  3032  		switch p.As {
  3033  		case AADD:
  3034  			opxy = op_AG
  3035  		case AADDC:
  3036  			opxy = op_ALG
  3037  		case AADDW:
  3038  			opx = op_A
  3039  			opxy = op_AY
  3040  		case AMULLW:
  3041  			opx = op_MS
  3042  			opxy = op_MSY
  3043  		case AMULLD:
  3044  			opxy = op_MSG
  3045  		case ASUB:
  3046  			opxy = op_SG
  3047  		case ASUBC:
  3048  			opxy = op_SLG
  3049  		case ASUBE:
  3050  			opxy = op_SLBG
  3051  		case ASUBW:
  3052  			opx = op_S
  3053  			opxy = op_SY
  3054  		case AAND:
  3055  			opxy = op_NG
  3056  		case AANDW:
  3057  			opx = op_N
  3058  			opxy = op_NY
  3059  		case AOR:
  3060  			opxy = op_OG
  3061  		case AORW:
  3062  			opx = op_O
  3063  			opxy = op_OY
  3064  		case AXOR:
  3065  			opxy = op_XG
  3066  		case AXORW:
  3067  			opx = op_X
  3068  			opxy = op_XY
  3069  		}
  3070  		if opx != 0 && 0 <= d2 && d2 < DISP12 {
  3071  			zRX(opx, uint32(r1), uint32(x2), uint32(b2), uint32(d2), asm)
  3072  		} else {
  3073  			zRXY(opxy, uint32(r1), uint32(x2), uint32(b2), uint32(d2), asm)
  3074  		}
  3075  
  3076  	case 13: // rotate, followed by operation
  3077  		r1 := p.To.Reg
  3078  		r2 := p.RestArgs[2].Reg
  3079  		i3 := uint8(p.From.Offset)        // start
  3080  		i4 := uint8(p.RestArgs[0].Offset) // end
  3081  		i5 := uint8(p.RestArgs[1].Offset) // rotate amount
  3082  		switch p.As {
  3083  		case ARNSBGT, ARXSBGT, AROSBGT:
  3084  			i3 |= 0x80 // test-results
  3085  		case ARISBGZ, ARISBGNZ, ARISBHGZ, ARISBLGZ:
  3086  			i4 |= 0x80 // zero-remaining-bits
  3087  		}
  3088  		var opcode uint32
  3089  		switch p.As {
  3090  		case ARNSBG, ARNSBGT:
  3091  			opcode = op_RNSBG
  3092  		case ARXSBG, ARXSBGT:
  3093  			opcode = op_RXSBG
  3094  		case AROSBG, AROSBGT:
  3095  			opcode = op_ROSBG
  3096  		case ARISBG, ARISBGZ:
  3097  			opcode = op_RISBG
  3098  		case ARISBGN, ARISBGNZ:
  3099  			opcode = op_RISBGN
  3100  		case ARISBHG, ARISBHGZ:
  3101  			opcode = op_RISBHG
  3102  		case ARISBLG, ARISBLGZ:
  3103  			opcode = op_RISBLG
  3104  		}
  3105  		zRIE(_f, uint32(opcode), uint32(r1), uint32(r2), 0, uint32(i3), uint32(i4), 0, uint32(i5), asm)
  3106  
  3107  	case 15: // br/bl (reg)
  3108  		r := p.To.Reg
  3109  		if p.As == ABCL || p.As == ABL {
  3110  			zRR(op_BASR, uint32(REG_LR), uint32(r), asm)
  3111  		} else {
  3112  			zRR(op_BCR, uint32(Always), uint32(r), asm)
  3113  		}
  3114  
  3115  	case 16: // conditional branch
  3116  		v := int32(0)
  3117  		if p.Pcond != nil {
  3118  			v = int32((p.Pcond.Pc - p.Pc) >> 1)
  3119  		}
  3120  		mask := uint32(c.branchMask(p))
  3121  		if p.To.Sym == nil && int32(int16(v)) == v {
  3122  			zRI(op_BRC, mask, uint32(v), asm)
  3123  		} else {
  3124  			zRIL(_c, op_BRCL, mask, uint32(v), asm)
  3125  		}
  3126  		if p.To.Sym != nil {
  3127  			c.addrilreloc(p.To.Sym, p.To.Offset)
  3128  		}
  3129  
  3130  	case 17: // move on condition
  3131  		m3 := uint32(c.branchMask(p))
  3132  		zRRF(op_LOCGR, m3, 0, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  3133  
  3134  	case 18: // br/bl reg
  3135  		if p.As == ABL {
  3136  			zRR(op_BASR, uint32(REG_LR), uint32(p.To.Reg), asm)
  3137  		} else {
  3138  			zRR(op_BCR, uint32(Always), uint32(p.To.Reg), asm)
  3139  		}
  3140  
  3141  	case 19: // mov $sym+n(SB) reg
  3142  		d := c.vregoff(&p.From)
  3143  		zRIL(_b, op_LARL, uint32(p.To.Reg), 0, asm)
  3144  		if d&1 != 0 {
  3145  			zRX(op_LA, uint32(p.To.Reg), uint32(p.To.Reg), 0, 1, asm)
  3146  			d -= 1
  3147  		}
  3148  		c.addrilreloc(p.From.Sym, d)
  3149  
  3150  	case 21: // subtract $constant [reg] reg
  3151  		v := c.vregoff(&p.From)
  3152  		r := p.Reg
  3153  		if r == 0 {
  3154  			r = p.To.Reg
  3155  		}
  3156  		switch p.As {
  3157  		case ASUB:
  3158  			zRIL(_a, op_LGFI, uint32(regtmp(p)), uint32(v), asm)
  3159  			zRRF(op_SLGRK, uint32(regtmp(p)), 0, uint32(p.To.Reg), uint32(r), asm)
  3160  		case ASUBC:
  3161  			if r != p.To.Reg {
  3162  				zRRE(op_LGR, uint32(p.To.Reg), uint32(r), asm)
  3163  			}
  3164  			zRIL(_a, op_SLGFI, uint32(p.To.Reg), uint32(v), asm)
  3165  		case ASUBW:
  3166  			if r != p.To.Reg {
  3167  				zRR(op_LR, uint32(p.To.Reg), uint32(r), asm)
  3168  			}
  3169  			zRIL(_a, op_SLFI, uint32(p.To.Reg), uint32(v), asm)
  3170  		}
  3171  
  3172  	case 22: // add/multiply $constant [reg] reg
  3173  		v := c.vregoff(&p.From)
  3174  		r := p.Reg
  3175  		if r == 0 {
  3176  			r = p.To.Reg
  3177  		}
  3178  		var opri, opril, oprie uint32
  3179  		switch p.As {
  3180  		case AADD:
  3181  			opri = op_AGHI
  3182  			opril = op_AGFI
  3183  			oprie = op_AGHIK
  3184  		case AADDC:
  3185  			opril = op_ALGFI
  3186  			oprie = op_ALGHSIK
  3187  		case AADDW:
  3188  			opri = op_AHI
  3189  			opril = op_AFI
  3190  			oprie = op_AHIK
  3191  		case AMULLW:
  3192  			opri = op_MHI
  3193  			opril = op_MSFI
  3194  		case AMULLD:
  3195  			opri = op_MGHI
  3196  			opril = op_MSGFI
  3197  		}
  3198  		if r != p.To.Reg && (oprie == 0 || int64(int16(v)) != v) {
  3199  			switch p.As {
  3200  			case AADD, AADDC, AMULLD:
  3201  				zRRE(op_LGR, uint32(p.To.Reg), uint32(r), asm)
  3202  			case AADDW, AMULLW:
  3203  				zRR(op_LR, uint32(p.To.Reg), uint32(r), asm)
  3204  			}
  3205  			r = p.To.Reg
  3206  		}
  3207  		if opri != 0 && r == p.To.Reg && int64(int16(v)) == v {
  3208  			zRI(opri, uint32(p.To.Reg), uint32(v), asm)
  3209  		} else if oprie != 0 && int64(int16(v)) == v {
  3210  			zRIE(_d, oprie, uint32(p.To.Reg), uint32(r), uint32(v), 0, 0, 0, 0, asm)
  3211  		} else {
  3212  			zRIL(_a, opril, uint32(p.To.Reg), uint32(v), asm)
  3213  		}
  3214  
  3215  	case 23: // 64-bit logical op $constant reg
  3216  		// TODO(mundaym): merge with case 24.
  3217  		v := c.vregoff(&p.From)
  3218  		switch p.As {
  3219  		default:
  3220  			c.ctxt.Diag("%v is not supported", p)
  3221  		case AAND:
  3222  			if v >= 0 { // needs zero extend
  3223  				zRIL(_a, op_LGFI, regtmp(p), uint32(v), asm)
  3224  				zRRE(op_NGR, uint32(p.To.Reg), regtmp(p), asm)
  3225  			} else if int64(int16(v)) == v {
  3226  				zRI(op_NILL, uint32(p.To.Reg), uint32(v), asm)
  3227  			} else { //  r.To.Reg & 0xffffffff00000000 & uint32(v)
  3228  				zRIL(_a, op_NILF, uint32(p.To.Reg), uint32(v), asm)
  3229  			}
  3230  		case AOR:
  3231  			if int64(uint32(v)) != v { // needs sign extend
  3232  				zRIL(_a, op_LGFI, regtmp(p), uint32(v), asm)
  3233  				zRRE(op_OGR, uint32(p.To.Reg), regtmp(p), asm)
  3234  			} else if int64(uint16(v)) == v {
  3235  				zRI(op_OILL, uint32(p.To.Reg), uint32(v), asm)
  3236  			} else {
  3237  				zRIL(_a, op_OILF, uint32(p.To.Reg), uint32(v), asm)
  3238  			}
  3239  		case AXOR:
  3240  			if int64(uint32(v)) != v { // needs sign extend
  3241  				zRIL(_a, op_LGFI, regtmp(p), uint32(v), asm)
  3242  				zRRE(op_XGR, uint32(p.To.Reg), regtmp(p), asm)
  3243  			} else {
  3244  				zRIL(_a, op_XILF, uint32(p.To.Reg), uint32(v), asm)
  3245  			}
  3246  		}
  3247  
  3248  	case 24: // 32-bit logical op $constant reg
  3249  		v := c.vregoff(&p.From)
  3250  		switch p.As {
  3251  		case AANDW:
  3252  			if uint32(v&0xffff0000) == 0xffff0000 {
  3253  				zRI(op_NILL, uint32(p.To.Reg), uint32(v), asm)
  3254  			} else if uint32(v&0x0000ffff) == 0x0000ffff {
  3255  				zRI(op_NILH, uint32(p.To.Reg), uint32(v)>>16, asm)
  3256  			} else {
  3257  				zRIL(_a, op_NILF, uint32(p.To.Reg), uint32(v), asm)
  3258  			}
  3259  		case AORW:
  3260  			if uint32(v&0xffff0000) == 0 {
  3261  				zRI(op_OILL, uint32(p.To.Reg), uint32(v), asm)
  3262  			} else if uint32(v&0x0000ffff) == 0 {
  3263  				zRI(op_OILH, uint32(p.To.Reg), uint32(v)>>16, asm)
  3264  			} else {
  3265  				zRIL(_a, op_OILF, uint32(p.To.Reg), uint32(v), asm)
  3266  			}
  3267  		case AXORW:
  3268  			zRIL(_a, op_XILF, uint32(p.To.Reg), uint32(v), asm)
  3269  		}
  3270  
  3271  	case 25: // load on condition (register)
  3272  		m3 := uint32(c.branchMask(p))
  3273  		var opcode uint32
  3274  		switch p.As {
  3275  		case ALOCR:
  3276  			opcode = op_LOCR
  3277  		case ALOCGR:
  3278  			opcode = op_LOCGR
  3279  		}
  3280  		zRRF(opcode, m3, 0, uint32(p.To.Reg), uint32(p.Reg), asm)
  3281  
  3282  	case 26: // MOVD $offset(base)(index), reg
  3283  		v := c.regoff(&p.From)
  3284  		r := p.From.Reg
  3285  		if r == 0 {
  3286  			r = REGSP
  3287  		}
  3288  		i := p.From.Index
  3289  		if v >= 0 && v < DISP12 {
  3290  			zRX(op_LA, uint32(p.To.Reg), uint32(r), uint32(i), uint32(v), asm)
  3291  		} else if v >= -DISP20/2 && v < DISP20/2 {
  3292  			zRXY(op_LAY, uint32(p.To.Reg), uint32(r), uint32(i), uint32(v), asm)
  3293  		} else {
  3294  			zRIL(_a, op_LGFI, regtmp(p), uint32(v), asm)
  3295  			zRX(op_LA, uint32(p.To.Reg), uint32(r), regtmp(p), uint32(i), asm)
  3296  		}
  3297  
  3298  	case 31: // dword
  3299  		wd := uint64(c.vregoff(&p.From))
  3300  		*asm = append(*asm,
  3301  			uint8(wd>>56),
  3302  			uint8(wd>>48),
  3303  			uint8(wd>>40),
  3304  			uint8(wd>>32),
  3305  			uint8(wd>>24),
  3306  			uint8(wd>>16),
  3307  			uint8(wd>>8),
  3308  			uint8(wd))
  3309  
  3310  	case 32: // float op freg freg
  3311  		var opcode uint32
  3312  		switch p.As {
  3313  		default:
  3314  			c.ctxt.Diag("invalid opcode")
  3315  		case AFADD:
  3316  			opcode = op_ADBR
  3317  		case AFADDS:
  3318  			opcode = op_AEBR
  3319  		case AFDIV:
  3320  			opcode = op_DDBR
  3321  		case AFDIVS:
  3322  			opcode = op_DEBR
  3323  		case AFMUL:
  3324  			opcode = op_MDBR
  3325  		case AFMULS:
  3326  			opcode = op_MEEBR
  3327  		case AFSUB:
  3328  			opcode = op_SDBR
  3329  		case AFSUBS:
  3330  			opcode = op_SEBR
  3331  		}
  3332  		zRRE(opcode, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  3333  
  3334  	case 33: // float op [freg] freg
  3335  		r := p.From.Reg
  3336  		if oclass(&p.From) == C_NONE {
  3337  			r = p.To.Reg
  3338  		}
  3339  		var opcode uint32
  3340  		switch p.As {
  3341  		default:
  3342  		case AFABS:
  3343  			opcode = op_LPDBR
  3344  		case AFNABS:
  3345  			opcode = op_LNDBR
  3346  		case ALPDFR:
  3347  			opcode = op_LPDFR
  3348  		case ALNDFR:
  3349  			opcode = op_LNDFR
  3350  		case AFNEG:
  3351  			opcode = op_LCDFR
  3352  		case AFNEGS:
  3353  			opcode = op_LCEBR
  3354  		case ALEDBR:
  3355  			opcode = op_LEDBR
  3356  		case ALDEBR:
  3357  			opcode = op_LDEBR
  3358  		case AFSQRT:
  3359  			opcode = op_SQDBR
  3360  		case AFSQRTS:
  3361  			opcode = op_SQEBR
  3362  		}
  3363  		zRRE(opcode, uint32(p.To.Reg), uint32(r), asm)
  3364  
  3365  	case 34: // float multiply-add freg freg freg
  3366  		var opcode uint32
  3367  		switch p.As {
  3368  		default:
  3369  			c.ctxt.Diag("invalid opcode")
  3370  		case AFMADD:
  3371  			opcode = op_MADBR
  3372  		case AFMADDS:
  3373  			opcode = op_MAEBR
  3374  		case AFMSUB:
  3375  			opcode = op_MSDBR
  3376  		case AFMSUBS:
  3377  			opcode = op_MSEBR
  3378  		}
  3379  		zRRD(opcode, uint32(p.To.Reg), uint32(p.From.Reg), uint32(p.Reg), asm)
  3380  
  3381  	case 35: // mov reg mem (no relocation)
  3382  		d2 := c.regoff(&p.To)
  3383  		b2 := p.To.Reg
  3384  		if b2 == 0 {
  3385  			b2 = REGSP
  3386  		}
  3387  		x2 := p.To.Index
  3388  		if d2 < -DISP20/2 || d2 >= DISP20/2 {
  3389  			zRIL(_a, op_LGFI, regtmp(p), uint32(d2), asm)
  3390  			if x2 != 0 {
  3391  				zRX(op_LA, regtmp(p), regtmp(p), uint32(x2), 0, asm)
  3392  			}
  3393  			x2 = int16(regtmp(p))
  3394  			d2 = 0
  3395  		}
  3396  		// Emits an RX instruction if an appropriate one exists and the displacement fits in 12 bits. Otherwise use an RXY instruction.
  3397  		if op, ok := c.zopstore12(p.As); ok && isU12(d2) {
  3398  			zRX(op, uint32(p.From.Reg), uint32(x2), uint32(b2), uint32(d2), asm)
  3399  		} else {
  3400  			zRXY(c.zopstore(p.As), uint32(p.From.Reg), uint32(x2), uint32(b2), uint32(d2), asm)
  3401  		}
  3402  
  3403  	case 36: // mov mem reg (no relocation)
  3404  		d2 := c.regoff(&p.From)
  3405  		b2 := p.From.Reg
  3406  		if b2 == 0 {
  3407  			b2 = REGSP
  3408  		}
  3409  		x2 := p.From.Index
  3410  		if d2 < -DISP20/2 || d2 >= DISP20/2 {
  3411  			zRIL(_a, op_LGFI, regtmp(p), uint32(d2), asm)
  3412  			if x2 != 0 {
  3413  				zRX(op_LA, regtmp(p), regtmp(p), uint32(x2), 0, asm)
  3414  			}
  3415  			x2 = int16(regtmp(p))
  3416  			d2 = 0
  3417  		}
  3418  		// Emits an RX instruction if an appropriate one exists and the displacement fits in 12 bits. Otherwise use an RXY instruction.
  3419  		if op, ok := c.zopload12(p.As); ok && isU12(d2) {
  3420  			zRX(op, uint32(p.To.Reg), uint32(x2), uint32(b2), uint32(d2), asm)
  3421  		} else {
  3422  			zRXY(c.zopload(p.As), uint32(p.To.Reg), uint32(x2), uint32(b2), uint32(d2), asm)
  3423  		}
  3424  
  3425  	case 40: // word/byte
  3426  		wd := uint32(c.regoff(&p.From))
  3427  		if p.As == AWORD { //WORD
  3428  			*asm = append(*asm, uint8(wd>>24), uint8(wd>>16), uint8(wd>>8), uint8(wd))
  3429  		} else { //BYTE
  3430  			*asm = append(*asm, uint8(wd))
  3431  		}
  3432  
  3433  	case 41: // branch on count
  3434  		r1 := p.From.Reg
  3435  		ri2 := (p.Pcond.Pc - p.Pc) >> 1
  3436  		if int64(int16(ri2)) != ri2 {
  3437  			c.ctxt.Diag("branch target too far away")
  3438  		}
  3439  		var opcode uint32
  3440  		switch p.As {
  3441  		case ABRCT:
  3442  			opcode = op_BRCT
  3443  		case ABRCTG:
  3444  			opcode = op_BRCTG
  3445  		}
  3446  		zRI(opcode, uint32(r1), uint32(ri2), asm)
  3447  
  3448  	case 47: // negate [reg] reg
  3449  		r := p.From.Reg
  3450  		if r == 0 {
  3451  			r = p.To.Reg
  3452  		}
  3453  		switch p.As {
  3454  		case ANEG:
  3455  			zRRE(op_LCGR, uint32(p.To.Reg), uint32(r), asm)
  3456  		case ANEGW:
  3457  			zRRE(op_LCGFR, uint32(p.To.Reg), uint32(r), asm)
  3458  		}
  3459  
  3460  	case 48: // floating-point round to integer
  3461  		m3 := c.vregoff(&p.From)
  3462  		if 0 > m3 || m3 > 7 {
  3463  			c.ctxt.Diag("mask (%v) must be in the range [0, 7]", m3)
  3464  		}
  3465  		var opcode uint32
  3466  		switch p.As {
  3467  		case AFIEBR:
  3468  			opcode = op_FIEBR
  3469  		case AFIDBR:
  3470  			opcode = op_FIDBR
  3471  		}
  3472  		zRRF(opcode, uint32(m3), 0, uint32(p.To.Reg), uint32(p.Reg), asm)
  3473  
  3474  	case 49: // copysign
  3475  		zRRF(op_CPSDR, uint32(p.From.Reg), 0, uint32(p.To.Reg), uint32(p.Reg), asm)
  3476  
  3477  	case 50: // load and test
  3478  		var opcode uint32
  3479  		switch p.As {
  3480  		case ALTEBR:
  3481  			opcode = op_LTEBR
  3482  		case ALTDBR:
  3483  			opcode = op_LTDBR
  3484  		}
  3485  		zRRE(opcode, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  3486  
  3487  	case 51: // test data class (immediate only)
  3488  		var opcode uint32
  3489  		switch p.As {
  3490  		case ATCEB:
  3491  			opcode = op_TCEB
  3492  		case ATCDB:
  3493  			opcode = op_TCDB
  3494  		}
  3495  		d2 := c.regoff(&p.To)
  3496  		zRXE(opcode, uint32(p.From.Reg), 0, 0, uint32(d2), 0, asm)
  3497  
  3498  	case 62: // equivalent of Mul64 in math/bits
  3499  		zRRE(op_MLGR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  3500  
  3501  	case 66:
  3502  		zRR(op_BCR, uint32(Never), 0, asm)
  3503  
  3504  	case 67: // fmov $0 freg
  3505  		var opcode uint32
  3506  		switch p.As {
  3507  		case AFMOVS:
  3508  			opcode = op_LZER
  3509  		case AFMOVD:
  3510  			opcode = op_LZDR
  3511  		}
  3512  		zRRE(opcode, uint32(p.To.Reg), 0, asm)
  3513  
  3514  	case 68: // movw areg reg
  3515  		zRRE(op_EAR, uint32(p.To.Reg), uint32(p.From.Reg-REG_AR0), asm)
  3516  
  3517  	case 69: // movw reg areg
  3518  		zRRE(op_SAR, uint32(p.To.Reg-REG_AR0), uint32(p.From.Reg), asm)
  3519  
  3520  	case 70: // cmp reg reg
  3521  		if p.As == ACMPW || p.As == ACMPWU {
  3522  			zRR(c.zoprr(p.As), uint32(p.From.Reg), uint32(p.To.Reg), asm)
  3523  		} else {
  3524  			zRRE(c.zoprre(p.As), uint32(p.From.Reg), uint32(p.To.Reg), asm)
  3525  		}
  3526  
  3527  	case 71: // cmp reg $constant
  3528  		v := c.vregoff(&p.To)
  3529  		switch p.As {
  3530  		case ACMP, ACMPW:
  3531  			if int64(int32(v)) != v {
  3532  				c.ctxt.Diag("%v overflows an int32", v)
  3533  			}
  3534  		case ACMPU, ACMPWU:
  3535  			if int64(uint32(v)) != v {
  3536  				c.ctxt.Diag("%v overflows a uint32", v)
  3537  			}
  3538  		}
  3539  		if p.As == ACMP && int64(int16(v)) == v {
  3540  			zRI(op_CGHI, uint32(p.From.Reg), uint32(v), asm)
  3541  		} else if p.As == ACMPW && int64(int16(v)) == v {
  3542  			zRI(op_CHI, uint32(p.From.Reg), uint32(v), asm)
  3543  		} else {
  3544  			zRIL(_a, c.zopril(p.As), uint32(p.From.Reg), uint32(v), asm)
  3545  		}
  3546  
  3547  	case 72: // mov $constant mem
  3548  		v := c.regoff(&p.From)
  3549  		d := c.regoff(&p.To)
  3550  		r := p.To.Reg
  3551  		if p.To.Index != 0 {
  3552  			c.ctxt.Diag("cannot use index register")
  3553  		}
  3554  		if r == 0 {
  3555  			r = REGSP
  3556  		}
  3557  		var opcode uint32
  3558  		switch p.As {
  3559  		case AMOVD:
  3560  			opcode = op_MVGHI
  3561  		case AMOVW, AMOVWZ:
  3562  			opcode = op_MVHI
  3563  		case AMOVH, AMOVHZ:
  3564  			opcode = op_MVHHI
  3565  		case AMOVB, AMOVBZ:
  3566  			opcode = op_MVI
  3567  		}
  3568  		if d < 0 || d >= DISP12 {
  3569  			if r == int16(regtmp(p)) {
  3570  				c.ctxt.Diag("displacement must be in range [0, 4096) to use %v", r)
  3571  			}
  3572  			if d >= -DISP20/2 && d < DISP20/2 {
  3573  				if opcode == op_MVI {
  3574  					opcode = op_MVIY
  3575  				} else {
  3576  					zRXY(op_LAY, uint32(regtmp(p)), 0, uint32(r), uint32(d), asm)
  3577  					r = int16(regtmp(p))
  3578  					d = 0
  3579  				}
  3580  			} else {
  3581  				zRIL(_a, op_LGFI, regtmp(p), uint32(d), asm)
  3582  				zRX(op_LA, regtmp(p), regtmp(p), uint32(r), 0, asm)
  3583  				r = int16(regtmp(p))
  3584  				d = 0
  3585  			}
  3586  		}
  3587  		switch opcode {
  3588  		case op_MVI:
  3589  			zSI(opcode, uint32(v), uint32(r), uint32(d), asm)
  3590  		case op_MVIY:
  3591  			zSIY(opcode, uint32(v), uint32(r), uint32(d), asm)
  3592  		default:
  3593  			zSIL(opcode, uint32(r), uint32(d), uint32(v), asm)
  3594  		}
  3595  
  3596  	case 74: // mov reg addr (including relocation)
  3597  		i2 := c.regoff(&p.To)
  3598  		switch p.As {
  3599  		case AMOVD:
  3600  			zRIL(_b, op_STGRL, uint32(p.From.Reg), 0, asm)
  3601  		case AMOVW, AMOVWZ: // The zero extension doesn't affect store instructions
  3602  			zRIL(_b, op_STRL, uint32(p.From.Reg), 0, asm)
  3603  		case AMOVH, AMOVHZ: // The zero extension doesn't affect store instructions
  3604  			zRIL(_b, op_STHRL, uint32(p.From.Reg), 0, asm)
  3605  		case AMOVB, AMOVBZ: // The zero extension doesn't affect store instructions
  3606  			zRIL(_b, op_LARL, regtmp(p), 0, asm)
  3607  			adj := uint32(0) // adjustment needed for odd addresses
  3608  			if i2&1 != 0 {
  3609  				i2 -= 1
  3610  				adj = 1
  3611  			}
  3612  			zRX(op_STC, uint32(p.From.Reg), 0, regtmp(p), adj, asm)
  3613  		case AFMOVD:
  3614  			zRIL(_b, op_LARL, regtmp(p), 0, asm)
  3615  			zRX(op_STD, uint32(p.From.Reg), 0, regtmp(p), 0, asm)
  3616  		case AFMOVS:
  3617  			zRIL(_b, op_LARL, regtmp(p), 0, asm)
  3618  			zRX(op_STE, uint32(p.From.Reg), 0, regtmp(p), 0, asm)
  3619  		}
  3620  		c.addrilreloc(p.To.Sym, int64(i2))
  3621  
  3622  	case 75: // mov addr reg (including relocation)
  3623  		i2 := c.regoff(&p.From)
  3624  		switch p.As {
  3625  		case AMOVD:
  3626  			if i2&1 != 0 {
  3627  				zRIL(_b, op_LARL, regtmp(p), 0, asm)
  3628  				zRXY(op_LG, uint32(p.To.Reg), regtmp(p), 0, 1, asm)
  3629  				i2 -= 1
  3630  			} else {
  3631  				zRIL(_b, op_LGRL, uint32(p.To.Reg), 0, asm)
  3632  			}
  3633  		case AMOVW:
  3634  			zRIL(_b, op_LGFRL, uint32(p.To.Reg), 0, asm)
  3635  		case AMOVWZ:
  3636  			zRIL(_b, op_LLGFRL, uint32(p.To.Reg), 0, asm)
  3637  		case AMOVH:
  3638  			zRIL(_b, op_LGHRL, uint32(p.To.Reg), 0, asm)
  3639  		case AMOVHZ:
  3640  			zRIL(_b, op_LLGHRL, uint32(p.To.Reg), 0, asm)
  3641  		case AMOVB, AMOVBZ:
  3642  			zRIL(_b, op_LARL, regtmp(p), 0, asm)
  3643  			adj := uint32(0) // adjustment needed for odd addresses
  3644  			if i2&1 != 0 {
  3645  				i2 -= 1
  3646  				adj = 1
  3647  			}
  3648  			switch p.As {
  3649  			case AMOVB:
  3650  				zRXY(op_LGB, uint32(p.To.Reg), 0, regtmp(p), adj, asm)
  3651  			case AMOVBZ:
  3652  				zRXY(op_LLGC, uint32(p.To.Reg), 0, regtmp(p), adj, asm)
  3653  			}
  3654  		case AFMOVD:
  3655  			zRIL(_a, op_LARL, regtmp(p), 0, asm)
  3656  			zRX(op_LD, uint32(p.To.Reg), 0, regtmp(p), 0, asm)
  3657  		case AFMOVS:
  3658  			zRIL(_a, op_LARL, regtmp(p), 0, asm)
  3659  			zRX(op_LE, uint32(p.To.Reg), 0, regtmp(p), 0, asm)
  3660  		}
  3661  		c.addrilreloc(p.From.Sym, int64(i2))
  3662  
  3663  	case 76: // set program mask
  3664  		zRR(op_SPM, uint32(p.From.Reg), 0, asm)
  3665  
  3666  	case 77: // syscall $constant
  3667  		if p.From.Offset > 255 || p.From.Offset < 1 {
  3668  			c.ctxt.Diag("illegal system call; system call number out of range: %v", p)
  3669  			zE(op_TRAP2, asm) // trap always
  3670  		} else {
  3671  			zI(op_SVC, uint32(p.From.Offset), asm)
  3672  		}
  3673  
  3674  	case 78: // undef
  3675  		// "An instruction consisting entirely of binary 0s is guaranteed
  3676  		// always to be an illegal instruction."
  3677  		*asm = append(*asm, 0, 0, 0, 0)
  3678  
  3679  	case 79: // compare and swap reg reg reg
  3680  		v := c.regoff(&p.To)
  3681  		if v < 0 {
  3682  			v = 0
  3683  		}
  3684  		if p.As == ACS {
  3685  			zRS(op_CS, uint32(p.From.Reg), uint32(p.Reg), uint32(p.To.Reg), uint32(v), asm)
  3686  		} else if p.As == ACSG {
  3687  			zRSY(op_CSG, uint32(p.From.Reg), uint32(p.Reg), uint32(p.To.Reg), uint32(v), asm)
  3688  		}
  3689  
  3690  	case 80: // sync
  3691  		zRR(op_BCR, uint32(NotEqual), 0, asm)
  3692  
  3693  	case 81: // float to fixed and fixed to float moves (no conversion)
  3694  		switch p.As {
  3695  		case ALDGR:
  3696  			zRRE(op_LDGR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  3697  		case ALGDR:
  3698  			zRRE(op_LGDR, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  3699  		}
  3700  
  3701  	case 82: // fixed to float conversion
  3702  		var opcode uint32
  3703  		switch p.As {
  3704  		default:
  3705  			log.Fatalf("unexpected opcode %v", p.As)
  3706  		case ACEFBRA:
  3707  			opcode = op_CEFBRA
  3708  		case ACDFBRA:
  3709  			opcode = op_CDFBRA
  3710  		case ACEGBRA:
  3711  			opcode = op_CEGBRA
  3712  		case ACDGBRA:
  3713  			opcode = op_CDGBRA
  3714  		case ACELFBR:
  3715  			opcode = op_CELFBR
  3716  		case ACDLFBR:
  3717  			opcode = op_CDLFBR
  3718  		case ACELGBR:
  3719  			opcode = op_CELGBR
  3720  		case ACDLGBR:
  3721  			opcode = op_CDLGBR
  3722  		}
  3723  		// set immediate operand M3 to 0 to use the default BFP rounding mode
  3724  		// (usually round to nearest, ties to even)
  3725  		// TODO(mundaym): should this be fixed at round to nearest, ties to even?
  3726  		// M4 is reserved and must be 0
  3727  		zRRF(opcode, 0, 0, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  3728  
  3729  	case 83: // float to fixed conversion
  3730  		var opcode uint32
  3731  		switch p.As {
  3732  		default:
  3733  			log.Fatalf("unexpected opcode %v", p.As)
  3734  		case ACFEBRA:
  3735  			opcode = op_CFEBRA
  3736  		case ACFDBRA:
  3737  			opcode = op_CFDBRA
  3738  		case ACGEBRA:
  3739  			opcode = op_CGEBRA
  3740  		case ACGDBRA:
  3741  			opcode = op_CGDBRA
  3742  		case ACLFEBR:
  3743  			opcode = op_CLFEBR
  3744  		case ACLFDBR:
  3745  			opcode = op_CLFDBR
  3746  		case ACLGEBR:
  3747  			opcode = op_CLGEBR
  3748  		case ACLGDBR:
  3749  			opcode = op_CLGDBR
  3750  		}
  3751  		// set immediate operand M3 to 5 for rounding toward zero (required by Go spec)
  3752  		// M4 is reserved and must be 0
  3753  		zRRF(opcode, 5, 0, uint32(p.To.Reg), uint32(p.From.Reg), asm)
  3754  
  3755  	case 84: // storage-and-storage operations $length mem mem
  3756  		l := c.regoff(&p.From)
  3757  		if l < 1 || l > 256 {
  3758  			c.ctxt.Diag("number of bytes (%v) not in range [1,256]", l)
  3759  		}
  3760  		if p.GetFrom3().Index != 0 || p.To.Index != 0 {
  3761  			c.ctxt.Diag("cannot use index reg")
  3762  		}
  3763  		b1 := p.To.Reg
  3764  		b2 := p.GetFrom3().Reg
  3765  		if b1 == 0 {
  3766  			b1 = REGSP
  3767  		}
  3768  		if b2 == 0 {
  3769  			b2 = REGSP
  3770  		}
  3771  		d1 := c.regoff(&p.To)
  3772  		d2 := c.regoff(p.GetFrom3())
  3773  		if d1 < 0 || d1 >= DISP12 {
  3774  			if b2 == int16(regtmp(p)) {
  3775  				c.ctxt.Diag("regtmp(p) conflict")
  3776  			}
  3777  			if b1 != int16(regtmp(p)) {
  3778  				zRRE(op_LGR, regtmp(p), uint32(b1), asm)
  3779  			}
  3780  			zRIL(_a, op_AGFI, regtmp(p), uint32(d1), asm)
  3781  			if d1 == d2 && b1 == b2 {
  3782  				d2 = 0
  3783  				b2 = int16(regtmp(p))
  3784  			}
  3785  			d1 = 0
  3786  			b1 = int16(regtmp(p))
  3787  		}
  3788  		if d2 < 0 || d2 >= DISP12 {
  3789  			if b1 == REGTMP2 {
  3790  				c.ctxt.Diag("REGTMP2 conflict")
  3791  			}
  3792  			if b2 != REGTMP2 {
  3793  				zRRE(op_LGR, REGTMP2, uint32(b2), asm)
  3794  			}
  3795  			zRIL(_a, op_AGFI, REGTMP2, uint32(d2), asm)
  3796  			d2 = 0
  3797  			b2 = REGTMP2
  3798  		}
  3799  		var opcode uint32
  3800  		switch p.As {
  3801  		default:
  3802  			c.ctxt.Diag("unexpected opcode %v", p.As)
  3803  		case AMVC:
  3804  			opcode = op_MVC
  3805  		case ACLC:
  3806  			opcode = op_CLC
  3807  			// swap operand order for CLC so that it matches CMP
  3808  			b1, b2 = b2, b1
  3809  			d1, d2 = d2, d1
  3810  		case AXC:
  3811  			opcode = op_XC
  3812  		case AOC:
  3813  			opcode = op_OC
  3814  		case ANC:
  3815  			opcode = op_NC
  3816  		}
  3817  		zSS(_a, opcode, uint32(l-1), 0, uint32(b1), uint32(d1), uint32(b2), uint32(d2), asm)
  3818  
  3819  	case 85: // load address relative long
  3820  		v := c.regoff(&p.From)
  3821  		if p.From.Sym == nil {
  3822  			if (v & 1) != 0 {
  3823  				c.ctxt.Diag("cannot use LARL with odd offset: %v", v)
  3824  			}
  3825  		} else {
  3826  			c.addrilreloc(p.From.Sym, int64(v))
  3827  			v = 0
  3828  		}
  3829  		zRIL(_b, op_LARL, uint32(p.To.Reg), uint32(v>>1), asm)
  3830  
  3831  	case 86: // load address
  3832  		d := c.vregoff(&p.From)
  3833  		x := p.From.Index
  3834  		b := p.From.Reg
  3835  		if b == 0 {
  3836  			b = REGSP
  3837  		}
  3838  		switch p.As {
  3839  		case ALA:
  3840  			zRX(op_LA, uint32(p.To.Reg), uint32(x), uint32(b), uint32(d), asm)
  3841  		case ALAY:
  3842  			zRXY(op_LAY, uint32(p.To.Reg), uint32(x), uint32(b), uint32(d), asm)
  3843  		}
  3844  
  3845  	case 87: // execute relative long
  3846  		v := c.vregoff(&p.From)
  3847  		if p.From.Sym == nil {
  3848  			if v&1 != 0 {
  3849  				c.ctxt.Diag("cannot use EXRL with odd offset: %v", v)
  3850  			}
  3851  		} else {
  3852  			c.addrilreloc(p.From.Sym, v)
  3853  			v = 0
  3854  		}
  3855  		zRIL(_b, op_EXRL, uint32(p.To.Reg), uint32(v>>1), asm)
  3856  
  3857  	case 88: // store clock
  3858  		var opcode uint32
  3859  		switch p.As {
  3860  		case ASTCK:
  3861  			opcode = op_STCK
  3862  		case ASTCKC:
  3863  			opcode = op_STCKC
  3864  		case ASTCKE:
  3865  			opcode = op_STCKE
  3866  		case ASTCKF:
  3867  			opcode = op_STCKF
  3868  		}
  3869  		v := c.vregoff(&p.To)
  3870  		r := p.To.Reg
  3871  		if r == 0 {
  3872  			r = REGSP
  3873  		}
  3874  		zS(opcode, uint32(r), uint32(v), asm)
  3875  
  3876  	case 89: // compare and branch reg reg
  3877  		var v int32
  3878  		if p.Pcond != nil {
  3879  			v = int32((p.Pcond.Pc - p.Pc) >> 1)
  3880  		}
  3881  
  3882  		// Some instructions take a mask as the first argument.
  3883  		r1, r2 := p.From.Reg, p.Reg
  3884  		if p.From.Type == obj.TYPE_CONST {
  3885  			r1, r2 = p.Reg, p.RestArgs[0].Reg
  3886  		}
  3887  		m3 := uint32(c.branchMask(p))
  3888  
  3889  		var opcode uint32
  3890  		switch p.As {
  3891  		case ACRJ:
  3892  			// COMPARE AND BRANCH RELATIVE (32)
  3893  			opcode = op_CRJ
  3894  		case ACGRJ, ACMPBEQ, ACMPBGE, ACMPBGT, ACMPBLE, ACMPBLT, ACMPBNE:
  3895  			// COMPARE AND BRANCH RELATIVE (64)
  3896  			opcode = op_CGRJ
  3897  		case ACLRJ:
  3898  			// COMPARE LOGICAL AND BRANCH RELATIVE (32)
  3899  			opcode = op_CLRJ
  3900  		case ACLGRJ, ACMPUBEQ, ACMPUBGE, ACMPUBGT, ACMPUBLE, ACMPUBLT, ACMPUBNE:
  3901  			// COMPARE LOGICAL AND BRANCH RELATIVE (64)
  3902  			opcode = op_CLGRJ
  3903  		}
  3904  
  3905  		if int32(int16(v)) != v {
  3906  			// The branch is too far for one instruction so crack
  3907  			// `CMPBEQ x, y, target` into:
  3908  			//
  3909  			//     CMPBNE x, y, 2(PC)
  3910  			//     BR     target
  3911  			//
  3912  			// Note that the instruction sequence MUST NOT clobber
  3913  			// the condition code.
  3914  			m3 ^= 0xe // invert 3-bit mask
  3915  			zRIE(_b, opcode, uint32(r1), uint32(r2), uint32(sizeRIE+sizeRIL)/2, 0, 0, m3, 0, asm)
  3916  			zRIL(_c, op_BRCL, uint32(Always), uint32(v-sizeRIE/2), asm)
  3917  		} else {
  3918  			zRIE(_b, opcode, uint32(r1), uint32(r2), uint32(v), 0, 0, m3, 0, asm)
  3919  		}
  3920  
  3921  	case 90: // compare and branch reg $constant
  3922  		var v int32
  3923  		if p.Pcond != nil {
  3924  			v = int32((p.Pcond.Pc - p.Pc) >> 1)
  3925  		}
  3926  
  3927  		// Some instructions take a mask as the first argument.
  3928  		r1, i2 := p.From.Reg, p.RestArgs[0].Offset
  3929  		if p.From.Type == obj.TYPE_CONST {
  3930  			r1 = p.Reg
  3931  		}
  3932  		m3 := uint32(c.branchMask(p))
  3933  
  3934  		var opcode uint32
  3935  		switch p.As {
  3936  		case ACIJ:
  3937  			opcode = op_CIJ
  3938  		case ACGIJ, ACMPBEQ, ACMPBGE, ACMPBGT, ACMPBLE, ACMPBLT, ACMPBNE:
  3939  			opcode = op_CGIJ
  3940  		case ACLIJ:
  3941  			opcode = op_CLIJ
  3942  		case ACLGIJ, ACMPUBEQ, ACMPUBGE, ACMPUBGT, ACMPUBLE, ACMPUBLT, ACMPUBNE:
  3943  			opcode = op_CLGIJ
  3944  		}
  3945  		if int32(int16(v)) != v {
  3946  			// The branch is too far for one instruction so crack
  3947  			// `CMPBEQ x, $0, target` into:
  3948  			//
  3949  			//     CMPBNE x, $0, 2(PC)
  3950  			//     BR     target
  3951  			//
  3952  			// Note that the instruction sequence MUST NOT clobber
  3953  			// the condition code.
  3954  			m3 ^= 0xe // invert 3-bit mask
  3955  			zRIE(_c, opcode, uint32(r1), m3, uint32(sizeRIE+sizeRIL)/2, 0, 0, 0, uint32(i2), asm)
  3956  			zRIL(_c, op_BRCL, uint32(Always), uint32(v-sizeRIE/2), asm)
  3957  		} else {
  3958  			zRIE(_c, opcode, uint32(r1), m3, uint32(v), 0, 0, 0, uint32(i2), asm)
  3959  		}
  3960  
  3961  	case 91: // test under mask (immediate)
  3962  		var opcode uint32
  3963  		switch p.As {
  3964  		case ATMHH:
  3965  			opcode = op_TMHH
  3966  		case ATMHL:
  3967  			opcode = op_TMHL
  3968  		case ATMLH:
  3969  			opcode = op_TMLH
  3970  		case ATMLL:
  3971  			opcode = op_TMLL
  3972  		}
  3973  		zRI(opcode, uint32(p.From.Reg), uint32(c.vregoff(&p.To)), asm)
  3974  
  3975  	case 92: // insert program mask
  3976  		zRRE(op_IPM, uint32(p.From.Reg), 0, asm)
  3977  
  3978  	case 93: // GOT lookup
  3979  		v := c.vregoff(&p.To)
  3980  		if v != 0 {
  3981  			c.ctxt.Diag("invalid offset against GOT slot %v", p)
  3982  		}
  3983  		zRIL(_b, op_LGRL, uint32(p.To.Reg), 0, asm)
  3984  		rel := obj.Addrel(c.cursym)
  3985  		rel.Off = int32(c.pc + 2)
  3986  		rel.Siz = 4
  3987  		rel.Sym = p.From.Sym
  3988  		rel.Type = objabi.R_GOTPCREL
  3989  		rel.Add = 2 + int64(rel.Siz)
  3990  
  3991  	case 94: // TLS local exec model
  3992  		zRIL(_b, op_LARL, regtmp(p), (sizeRIL+sizeRXY+sizeRI)>>1, asm)
  3993  		zRXY(op_LG, uint32(p.To.Reg), regtmp(p), 0, 0, asm)
  3994  		zRI(op_BRC, 0xF, (sizeRI+8)>>1, asm)
  3995  		*asm = append(*asm, 0, 0, 0, 0, 0, 0, 0, 0)
  3996  		rel := obj.Addrel(c.cursym)
  3997  		rel.Off = int32(c.pc + sizeRIL + sizeRXY + sizeRI)
  3998  		rel.Siz = 8
  3999  		rel.Sym = p.From.Sym
  4000  		rel.Type = objabi.R_TLS_LE
  4001  		rel.Add = 0
  4002  
  4003  	case 95: // TLS initial exec model
  4004  		// Assembly                   | Relocation symbol    | Done Here?
  4005  		// --------------------------------------------------------------
  4006  		// ear  %r11, %a0             |                      |
  4007  		// sllg %r11, %r11, 32        |                      |
  4008  		// ear  %r11, %a1             |                      |
  4009  		// larl %r10, <var>@indntpoff | R_390_TLS_IEENT      | Y
  4010  		// lg   %r10, 0(%r10)         | R_390_TLS_LOAD (tag) | Y
  4011  		// la   %r10, 0(%r10, %r11)   |                      |
  4012  		// --------------------------------------------------------------
  4013  
  4014  		// R_390_TLS_IEENT
  4015  		zRIL(_b, op_LARL, regtmp(p), 0, asm)
  4016  		ieent := obj.Addrel(c.cursym)
  4017  		ieent.Off = int32(c.pc + 2)
  4018  		ieent.Siz = 4
  4019  		ieent.Sym = p.From.Sym
  4020  		ieent.Type = objabi.R_TLS_IE
  4021  		ieent.Add = 2 + int64(ieent.Siz)
  4022  
  4023  		// R_390_TLS_LOAD
  4024  		zRXY(op_LGF, uint32(p.To.Reg), regtmp(p), 0, 0, asm)
  4025  		// TODO(mundaym): add R_390_TLS_LOAD relocation here
  4026  		// not strictly required but might allow the linker to optimize
  4027  
  4028  	case 96: // clear macro
  4029  		length := c.vregoff(&p.From)
  4030  		offset := c.vregoff(&p.To)
  4031  		reg := p.To.Reg
  4032  		if reg == 0 {
  4033  			reg = REGSP
  4034  		}
  4035  		if length <= 0 {
  4036  			c.ctxt.Diag("cannot CLEAR %d bytes, must be greater than 0", length)
  4037  		}
  4038  		for length > 0 {
  4039  			if offset < 0 || offset >= DISP12 {
  4040  				if offset >= -DISP20/2 && offset < DISP20/2 {
  4041  					zRXY(op_LAY, regtmp(p), uint32(reg), 0, uint32(offset), asm)
  4042  				} else {
  4043  					if reg != int16(regtmp(p)) {
  4044  						zRRE(op_LGR, regtmp(p), uint32(reg), asm)
  4045  					}
  4046  					zRIL(_a, op_AGFI, regtmp(p), uint32(offset), asm)
  4047  				}
  4048  				reg = int16(regtmp(p))
  4049  				offset = 0
  4050  			}
  4051  			size := length
  4052  			if size > 256 {
  4053  				size = 256
  4054  			}
  4055  
  4056  			switch size {
  4057  			case 1:
  4058  				zSI(op_MVI, 0, uint32(reg), uint32(offset), asm)
  4059  			case 2:
  4060  				zSIL(op_MVHHI, uint32(reg), uint32(offset), 0, asm)
  4061  			case 4:
  4062  				zSIL(op_MVHI, uint32(reg), uint32(offset), 0, asm)
  4063  			case 8:
  4064  				zSIL(op_MVGHI, uint32(reg), uint32(offset), 0, asm)
  4065  			default:
  4066  				zSS(_a, op_XC, uint32(size-1), 0, uint32(reg), uint32(offset), uint32(reg), uint32(offset), asm)
  4067  			}
  4068  
  4069  			length -= size
  4070  			offset += size
  4071  		}
  4072  
  4073  	case 97: // store multiple
  4074  		rstart := p.From.Reg
  4075  		rend := p.Reg
  4076  		offset := c.regoff(&p.To)
  4077  		reg := p.To.Reg
  4078  		if reg == 0 {
  4079  			reg = REGSP
  4080  		}
  4081  		if offset < -DISP20/2 || offset >= DISP20/2 {
  4082  			if reg != int16(regtmp(p)) {
  4083  				zRRE(op_LGR, regtmp(p), uint32(reg), asm)
  4084  			}
  4085  			zRIL(_a, op_AGFI, regtmp(p), uint32(offset), asm)
  4086  			reg = int16(regtmp(p))
  4087  			offset = 0
  4088  		}
  4089  		switch p.As {
  4090  		case ASTMY:
  4091  			if offset >= 0 && offset < DISP12 {
  4092  				zRS(op_STM, uint32(rstart), uint32(rend), uint32(reg), uint32(offset), asm)
  4093  			} else {
  4094  				zRSY(op_STMY, uint32(rstart), uint32(rend), uint32(reg), uint32(offset), asm)
  4095  			}
  4096  		case ASTMG:
  4097  			zRSY(op_STMG, uint32(rstart), uint32(rend), uint32(reg), uint32(offset), asm)
  4098  		}
  4099  
  4100  	case 98: // load multiple
  4101  		rstart := p.Reg
  4102  		rend := p.To.Reg
  4103  		offset := c.regoff(&p.From)
  4104  		reg := p.From.Reg
  4105  		if reg == 0 {
  4106  			reg = REGSP
  4107  		}
  4108  		if offset < -DISP20/2 || offset >= DISP20/2 {
  4109  			if reg != int16(regtmp(p)) {
  4110  				zRRE(op_LGR, regtmp(p), uint32(reg), asm)
  4111  			}
  4112  			zRIL(_a, op_AGFI, regtmp(p), uint32(offset), asm)
  4113  			reg = int16(regtmp(p))
  4114  			offset = 0
  4115  		}
  4116  		switch p.As {
  4117  		case ALMY:
  4118  			if offset >= 0 && offset < DISP12 {
  4119  				zRS(op_LM, uint32(rstart), uint32(rend), uint32(reg), uint32(offset), asm)
  4120  			} else {
  4121  				zRSY(op_LMY, uint32(rstart), uint32(rend), uint32(reg), uint32(offset), asm)
  4122  			}
  4123  		case ALMG:
  4124  			zRSY(op_LMG, uint32(rstart), uint32(rend), uint32(reg), uint32(offset), asm)
  4125  		}
  4126  
  4127  	case 99: // interlocked load and op
  4128  		if p.To.Index != 0 {
  4129  			c.ctxt.Diag("cannot use indexed address")
  4130  		}
  4131  		offset := c.regoff(&p.To)
  4132  		if offset < -DISP20/2 || offset >= DISP20/2 {
  4133  			c.ctxt.Diag("%v does not fit into 20-bit signed integer", offset)
  4134  		}
  4135  		var opcode uint32
  4136  		switch p.As {
  4137  		case ALAA:
  4138  			opcode = op_LAA
  4139  		case ALAAG:
  4140  			opcode = op_LAAG
  4141  		case ALAAL:
  4142  			opcode = op_LAAL
  4143  		case ALAALG:
  4144  			opcode = op_LAALG
  4145  		case ALAN:
  4146  			opcode = op_LAN
  4147  		case ALANG:
  4148  			opcode = op_LANG
  4149  		case ALAX:
  4150  			opcode = op_LAX
  4151  		case ALAXG:
  4152  			opcode = op_LAXG
  4153  		case ALAO:
  4154  			opcode = op_LAO
  4155  		case ALAOG:
  4156  			opcode = op_LAOG
  4157  		}
  4158  		zRSY(opcode, uint32(p.Reg), uint32(p.From.Reg), uint32(p.To.Reg), uint32(offset), asm)
  4159  
  4160  	case 100: // VRX STORE
  4161  		op, m3, _ := vop(p.As)
  4162  		v1 := p.From.Reg
  4163  		if p.Reg != 0 {
  4164  			m3 = uint32(c.vregoff(&p.From))
  4165  			v1 = p.Reg
  4166  		}
  4167  		b2 := p.To.Reg
  4168  		if b2 == 0 {
  4169  			b2 = REGSP
  4170  		}
  4171  		d2 := uint32(c.vregoff(&p.To))
  4172  		zVRX(op, uint32(v1), uint32(p.To.Index), uint32(b2), d2, m3, asm)
  4173  
  4174  	case 101: // VRX LOAD
  4175  		op, m3, _ := vop(p.As)
  4176  		src := &p.From
  4177  		if p.GetFrom3() != nil {
  4178  			m3 = uint32(c.vregoff(&p.From))
  4179  			src = p.GetFrom3()
  4180  		}
  4181  		b2 := src.Reg
  4182  		if b2 == 0 {
  4183  			b2 = REGSP
  4184  		}
  4185  		d2 := uint32(c.vregoff(src))
  4186  		zVRX(op, uint32(p.To.Reg), uint32(src.Index), uint32(b2), d2, m3, asm)
  4187  
  4188  	case 102: // VRV SCATTER
  4189  		op, _, _ := vop(p.As)
  4190  		m3 := uint32(c.vregoff(&p.From))
  4191  		b2 := p.To.Reg
  4192  		if b2 == 0 {
  4193  			b2 = REGSP
  4194  		}
  4195  		d2 := uint32(c.vregoff(&p.To))
  4196  		zVRV(op, uint32(p.Reg), uint32(p.To.Index), uint32(b2), d2, m3, asm)
  4197  
  4198  	case 103: // VRV GATHER
  4199  		op, _, _ := vop(p.As)
  4200  		m3 := uint32(c.vregoff(&p.From))
  4201  		b2 := p.GetFrom3().Reg
  4202  		if b2 == 0 {
  4203  			b2 = REGSP
  4204  		}
  4205  		d2 := uint32(c.vregoff(p.GetFrom3()))
  4206  		zVRV(op, uint32(p.To.Reg), uint32(p.GetFrom3().Index), uint32(b2), d2, m3, asm)
  4207  
  4208  	case 104: // VRS SHIFT/ROTATE and LOAD GR FROM VR ELEMENT
  4209  		op, m4, _ := vop(p.As)
  4210  		fr := p.Reg
  4211  		if fr == 0 {
  4212  			fr = p.To.Reg
  4213  		}
  4214  		bits := uint32(c.vregoff(&p.From))
  4215  		zVRS(op, uint32(p.To.Reg), uint32(fr), uint32(p.From.Reg), bits, m4, asm)
  4216  
  4217  	case 105: // VRS STORE MULTIPLE
  4218  		op, _, _ := vop(p.As)
  4219  		offset := uint32(c.vregoff(&p.To))
  4220  		reg := p.To.Reg
  4221  		if reg == 0 {
  4222  			reg = REGSP
  4223  		}
  4224  		zVRS(op, uint32(p.From.Reg), uint32(p.Reg), uint32(reg), offset, 0, asm)
  4225  
  4226  	case 106: // VRS LOAD MULTIPLE
  4227  		op, _, _ := vop(p.As)
  4228  		offset := uint32(c.vregoff(&p.From))
  4229  		reg := p.From.Reg
  4230  		if reg == 0 {
  4231  			reg = REGSP
  4232  		}
  4233  		zVRS(op, uint32(p.Reg), uint32(p.To.Reg), uint32(reg), offset, 0, asm)
  4234  
  4235  	case 107: // VRS STORE WITH LENGTH
  4236  		op, _, _ := vop(p.As)
  4237  		offset := uint32(c.vregoff(&p.To))
  4238  		reg := p.To.Reg
  4239  		if reg == 0 {
  4240  			reg = REGSP
  4241  		}
  4242  		zVRS(op, uint32(p.Reg), uint32(p.From.Reg), uint32(reg), offset, 0, asm)
  4243  
  4244  	case 108: // VRS LOAD WITH LENGTH
  4245  		op, _, _ := vop(p.As)
  4246  		offset := uint32(c.vregoff(p.GetFrom3()))
  4247  		reg := p.GetFrom3().Reg
  4248  		if reg == 0 {
  4249  			reg = REGSP
  4250  		}
  4251  		zVRS(op, uint32(p.To.Reg), uint32(p.From.Reg), uint32(reg), offset, 0, asm)
  4252  
  4253  	case 109: // VRI-a
  4254  		op, m3, _ := vop(p.As)
  4255  		i2 := uint32(c.vregoff(&p.From))
  4256  		if p.GetFrom3() != nil {
  4257  			m3 = uint32(c.vregoff(&p.From))
  4258  			i2 = uint32(c.vregoff(p.GetFrom3()))
  4259  		}
  4260  		switch p.As {
  4261  		case AVZERO:
  4262  			i2 = 0
  4263  		case AVONE:
  4264  			i2 = 0xffff
  4265  		}
  4266  		zVRIa(op, uint32(p.To.Reg), i2, m3, asm)
  4267  
  4268  	case 110:
  4269  		op, m4, _ := vop(p.As)
  4270  		i2 := uint32(c.vregoff(&p.From))
  4271  		i3 := uint32(c.vregoff(p.GetFrom3()))
  4272  		zVRIb(op, uint32(p.To.Reg), i2, i3, m4, asm)
  4273  
  4274  	case 111:
  4275  		op, m4, _ := vop(p.As)
  4276  		i2 := uint32(c.vregoff(&p.From))
  4277  		zVRIc(op, uint32(p.To.Reg), uint32(p.Reg), i2, m4, asm)
  4278  
  4279  	case 112:
  4280  		op, m5, _ := vop(p.As)
  4281  		i4 := uint32(c.vregoff(&p.From))
  4282  		zVRId(op, uint32(p.To.Reg), uint32(p.Reg), uint32(p.GetFrom3().Reg), i4, m5, asm)
  4283  
  4284  	case 113:
  4285  		op, m4, _ := vop(p.As)
  4286  		m5 := singleElementMask(p.As)
  4287  		i3 := uint32(c.vregoff(&p.From))
  4288  		zVRIe(op, uint32(p.To.Reg), uint32(p.Reg), i3, m5, m4, asm)
  4289  
  4290  	case 114: // VRR-a
  4291  		op, m3, m5 := vop(p.As)
  4292  		m4 := singleElementMask(p.As)
  4293  		zVRRa(op, uint32(p.To.Reg), uint32(p.From.Reg), m5, m4, m3, asm)
  4294  
  4295  	case 115: // VRR-a COMPARE
  4296  		op, m3, m5 := vop(p.As)
  4297  		m4 := singleElementMask(p.As)
  4298  		zVRRa(op, uint32(p.From.Reg), uint32(p.To.Reg), m5, m4, m3, asm)
  4299  
  4300  	case 117: // VRR-b
  4301  		op, m4, m5 := vop(p.As)
  4302  		zVRRb(op, uint32(p.To.Reg), uint32(p.From.Reg), uint32(p.Reg), m5, m4, asm)
  4303  
  4304  	case 118: // VRR-c
  4305  		op, m4, m6 := vop(p.As)
  4306  		m5 := singleElementMask(p.As)
  4307  		v3 := p.Reg
  4308  		if v3 == 0 {
  4309  			v3 = p.To.Reg
  4310  		}
  4311  		zVRRc(op, uint32(p.To.Reg), uint32(p.From.Reg), uint32(v3), m6, m5, m4, asm)
  4312  
  4313  	case 119: // VRR-c SHIFT/ROTATE/DIVIDE/SUB (rhs value on the left, like SLD, DIV etc.)
  4314  		op, m4, m6 := vop(p.As)
  4315  		m5 := singleElementMask(p.As)
  4316  		v2 := p.Reg
  4317  		if v2 == 0 {
  4318  			v2 = p.To.Reg
  4319  		}
  4320  		zVRRc(op, uint32(p.To.Reg), uint32(v2), uint32(p.From.Reg), m6, m5, m4, asm)
  4321  
  4322  	case 120: // VRR-d
  4323  		op, m6, _ := vop(p.As)
  4324  		m5 := singleElementMask(p.As)
  4325  		v1 := uint32(p.To.Reg)
  4326  		v2 := uint32(p.From.Reg)
  4327  		v3 := uint32(p.Reg)
  4328  		v4 := uint32(p.GetFrom3().Reg)
  4329  		zVRRd(op, v1, v2, v3, m6, m5, v4, asm)
  4330  
  4331  	case 121: // VRR-e
  4332  		op, m6, _ := vop(p.As)
  4333  		m5 := singleElementMask(p.As)
  4334  		v1 := uint32(p.To.Reg)
  4335  		v2 := uint32(p.From.Reg)
  4336  		v3 := uint32(p.Reg)
  4337  		v4 := uint32(p.GetFrom3().Reg)
  4338  		zVRRe(op, v1, v2, v3, m6, m5, v4, asm)
  4339  
  4340  	case 122: // VRR-f LOAD VRS FROM GRS DISJOINT
  4341  		op, _, _ := vop(p.As)
  4342  		zVRRf(op, uint32(p.To.Reg), uint32(p.From.Reg), uint32(p.Reg), asm)
  4343  
  4344  	case 123: // VPDI $m4, V2, V3, V1
  4345  		op, _, _ := vop(p.As)
  4346  		m4 := c.regoff(&p.From)
  4347  		zVRRc(op, uint32(p.To.Reg), uint32(p.Reg), uint32(p.GetFrom3().Reg), 0, 0, uint32(m4), asm)
  4348  	}
  4349  }
  4350  
  4351  func (c *ctxtz) vregoff(a *obj.Addr) int64 {
  4352  	c.instoffset = 0
  4353  	if a != nil {
  4354  		c.aclass(a)
  4355  	}
  4356  	return c.instoffset
  4357  }
  4358  
  4359  func (c *ctxtz) regoff(a *obj.Addr) int32 {
  4360  	return int32(c.vregoff(a))
  4361  }
  4362  
  4363  // find if the displacement is within 12 bit
  4364  func isU12(displacement int32) bool {
  4365  	return displacement >= 0 && displacement < DISP12
  4366  }
  4367  
  4368  // zopload12 returns the RX op with 12 bit displacement for the given load
  4369  func (c *ctxtz) zopload12(a obj.As) (uint32, bool) {
  4370  	switch a {
  4371  	case AFMOVD:
  4372  		return op_LD, true
  4373  	case AFMOVS:
  4374  		return op_LE, true
  4375  	}
  4376  	return 0, false
  4377  }
  4378  
  4379  // zopload returns the RXY op for the given load
  4380  func (c *ctxtz) zopload(a obj.As) uint32 {
  4381  	switch a {
  4382  	// fixed point load
  4383  	case AMOVD:
  4384  		return op_LG
  4385  	case AMOVW:
  4386  		return op_LGF
  4387  	case AMOVWZ:
  4388  		return op_LLGF
  4389  	case AMOVH:
  4390  		return op_LGH
  4391  	case AMOVHZ:
  4392  		return op_LLGH
  4393  	case AMOVB:
  4394  		return op_LGB
  4395  	case AMOVBZ:
  4396  		return op_LLGC
  4397  
  4398  	// floating point load
  4399  	case AFMOVD:
  4400  		return op_LDY
  4401  	case AFMOVS:
  4402  		return op_LEY
  4403  
  4404  	// byte reversed load
  4405  	case AMOVDBR:
  4406  		return op_LRVG
  4407  	case AMOVWBR:
  4408  		return op_LRV
  4409  	case AMOVHBR:
  4410  		return op_LRVH
  4411  	}
  4412  
  4413  	c.ctxt.Diag("unknown store opcode %v", a)
  4414  	return 0
  4415  }
  4416  
  4417  // zopstore12 returns the RX op with 12 bit displacement for the given store
  4418  func (c *ctxtz) zopstore12(a obj.As) (uint32, bool) {
  4419  	switch a {
  4420  	case AFMOVD:
  4421  		return op_STD, true
  4422  	case AFMOVS:
  4423  		return op_STE, true
  4424  	case AMOVW, AMOVWZ:
  4425  		return op_ST, true
  4426  	case AMOVH, AMOVHZ:
  4427  		return op_STH, true
  4428  	case AMOVB, AMOVBZ:
  4429  		return op_STC, true
  4430  	}
  4431  	return 0, false
  4432  }
  4433  
  4434  // zopstore returns the RXY op for the given store
  4435  func (c *ctxtz) zopstore(a obj.As) uint32 {
  4436  	switch a {
  4437  	// fixed point store
  4438  	case AMOVD:
  4439  		return op_STG
  4440  	case AMOVW, AMOVWZ:
  4441  		return op_STY
  4442  	case AMOVH, AMOVHZ:
  4443  		return op_STHY
  4444  	case AMOVB, AMOVBZ:
  4445  		return op_STCY
  4446  
  4447  	// floating point store
  4448  	case AFMOVD:
  4449  		return op_STDY
  4450  	case AFMOVS:
  4451  		return op_STEY
  4452  
  4453  	// byte reversed store
  4454  	case AMOVDBR:
  4455  		return op_STRVG
  4456  	case AMOVWBR:
  4457  		return op_STRV
  4458  	case AMOVHBR:
  4459  		return op_STRVH
  4460  	}
  4461  
  4462  	c.ctxt.Diag("unknown store opcode %v", a)
  4463  	return 0
  4464  }
  4465  
  4466  // zoprre returns the RRE op for the given a
  4467  func (c *ctxtz) zoprre(a obj.As) uint32 {
  4468  	switch a {
  4469  	case ACMP:
  4470  		return op_CGR
  4471  	case ACMPU:
  4472  		return op_CLGR
  4473  	case AFCMPO: //ordered
  4474  		return op_KDBR
  4475  	case AFCMPU: //unordered
  4476  		return op_CDBR
  4477  	case ACEBR:
  4478  		return op_CEBR
  4479  	}
  4480  	c.ctxt.Diag("unknown rre opcode %v", a)
  4481  	return 0
  4482  }
  4483  
  4484  // zoprr returns the RR op for the given a
  4485  func (c *ctxtz) zoprr(a obj.As) uint32 {
  4486  	switch a {
  4487  	case ACMPW:
  4488  		return op_CR
  4489  	case ACMPWU:
  4490  		return op_CLR
  4491  	}
  4492  	c.ctxt.Diag("unknown rr opcode %v", a)
  4493  	return 0
  4494  }
  4495  
  4496  // zopril returns the RIL op for the given a
  4497  func (c *ctxtz) zopril(a obj.As) uint32 {
  4498  	switch a {
  4499  	case ACMP:
  4500  		return op_CGFI
  4501  	case ACMPU:
  4502  		return op_CLGFI
  4503  	case ACMPW:
  4504  		return op_CFI
  4505  	case ACMPWU:
  4506  		return op_CLFI
  4507  	}
  4508  	c.ctxt.Diag("unknown ril opcode %v", a)
  4509  	return 0
  4510  }
  4511  
  4512  // z instructions sizes
  4513  const (
  4514  	sizeE    = 2
  4515  	sizeI    = 2
  4516  	sizeIE   = 4
  4517  	sizeMII  = 6
  4518  	sizeRI   = 4
  4519  	sizeRI1  = 4
  4520  	sizeRI2  = 4
  4521  	sizeRI3  = 4
  4522  	sizeRIE  = 6
  4523  	sizeRIE1 = 6
  4524  	sizeRIE2 = 6
  4525  	sizeRIE3 = 6
  4526  	sizeRIE4 = 6
  4527  	sizeRIE5 = 6
  4528  	sizeRIE6 = 6
  4529  	sizeRIL  = 6
  4530  	sizeRIL1 = 6
  4531  	sizeRIL2 = 6
  4532  	sizeRIL3 = 6
  4533  	sizeRIS  = 6
  4534  	sizeRR   = 2
  4535  	sizeRRD  = 4
  4536  	sizeRRE  = 4
  4537  	sizeRRF  = 4
  4538  	sizeRRF1 = 4
  4539  	sizeRRF2 = 4
  4540  	sizeRRF3 = 4
  4541  	sizeRRF4 = 4
  4542  	sizeRRF5 = 4
  4543  	sizeRRR  = 2
  4544  	sizeRRS  = 6
  4545  	sizeRS   = 4
  4546  	sizeRS1  = 4
  4547  	sizeRS2  = 4
  4548  	sizeRSI  = 4
  4549  	sizeRSL  = 6
  4550  	sizeRSY  = 6
  4551  	sizeRSY1 = 6
  4552  	sizeRSY2 = 6
  4553  	sizeRX   = 4
  4554  	sizeRX1  = 4
  4555  	sizeRX2  = 4
  4556  	sizeRXE  = 6
  4557  	sizeRXF  = 6
  4558  	sizeRXY  = 6
  4559  	sizeRXY1 = 6
  4560  	sizeRXY2 = 6
  4561  	sizeS    = 4
  4562  	sizeSI   = 4
  4563  	sizeSIL  = 6
  4564  	sizeSIY  = 6
  4565  	sizeSMI  = 6
  4566  	sizeSS   = 6
  4567  	sizeSS1  = 6
  4568  	sizeSS2  = 6
  4569  	sizeSS3  = 6
  4570  	sizeSS4  = 6
  4571  	sizeSS5  = 6
  4572  	sizeSS6  = 6
  4573  	sizeSSE  = 6
  4574  	sizeSSF  = 6
  4575  )
  4576  
  4577  // instruction format variations
  4578  type form int
  4579  
  4580  const (
  4581  	_a form = iota
  4582  	_b
  4583  	_c
  4584  	_d
  4585  	_e
  4586  	_f
  4587  )
  4588  
  4589  func zE(op uint32, asm *[]byte) {
  4590  	*asm = append(*asm, uint8(op>>8), uint8(op))
  4591  }
  4592  
  4593  func zI(op, i1 uint32, asm *[]byte) {
  4594  	*asm = append(*asm, uint8(op>>8), uint8(i1))
  4595  }
  4596  
  4597  func zMII(op, m1, ri2, ri3 uint32, asm *[]byte) {
  4598  	*asm = append(*asm,
  4599  		uint8(op>>8),
  4600  		(uint8(m1)<<4)|uint8((ri2>>8)&0x0F),
  4601  		uint8(ri2),
  4602  		uint8(ri3>>16),
  4603  		uint8(ri3>>8),
  4604  		uint8(ri3))
  4605  }
  4606  
  4607  func zRI(op, r1_m1, i2_ri2 uint32, asm *[]byte) {
  4608  	*asm = append(*asm,
  4609  		uint8(op>>8),
  4610  		(uint8(r1_m1)<<4)|(uint8(op)&0x0F),
  4611  		uint8(i2_ri2>>8),
  4612  		uint8(i2_ri2))
  4613  }
  4614  
  4615  // Expected argument values for the instruction formats.
  4616  //
  4617  // Format    a1  a2   a3  a4  a5  a6  a7
  4618  // ------------------------------------
  4619  // a         r1,  0,  i2,  0,  0, m3,  0
  4620  // b         r1, r2, ri4,  0,  0, m3,  0
  4621  // c         r1, m3, ri4,  0,  0,  0, i2
  4622  // d         r1, r3,  i2,  0,  0,  0,  0
  4623  // e         r1, r3, ri2,  0,  0,  0,  0
  4624  // f         r1, r2,   0, i3, i4,  0, i5
  4625  // g         r1, m3,  i2,  0,  0,  0,  0
  4626  func zRIE(f form, op, r1, r2_m3_r3, i2_ri4_ri2, i3, i4, m3, i2_i5 uint32, asm *[]byte) {
  4627  	*asm = append(*asm, uint8(op>>8), uint8(r1)<<4|uint8(r2_m3_r3&0x0F))
  4628  
  4629  	switch f {
  4630  	default:
  4631  		*asm = append(*asm, uint8(i2_ri4_ri2>>8), uint8(i2_ri4_ri2))
  4632  	case _f:
  4633  		*asm = append(*asm, uint8(i3), uint8(i4))
  4634  	}
  4635  
  4636  	switch f {
  4637  	case _a, _b:
  4638  		*asm = append(*asm, uint8(m3)<<4)
  4639  	default:
  4640  		*asm = append(*asm, uint8(i2_i5))
  4641  	}
  4642  
  4643  	*asm = append(*asm, uint8(op))
  4644  }
  4645  
  4646  func zRIL(f form, op, r1_m1, i2_ri2 uint32, asm *[]byte) {
  4647  	if f == _a || f == _b {
  4648  		r1_m1 = r1_m1 - obj.RBaseS390X // this is a register base
  4649  	}
  4650  	*asm = append(*asm,
  4651  		uint8(op>>8),
  4652  		(uint8(r1_m1)<<4)|(uint8(op)&0x0F),
  4653  		uint8(i2_ri2>>24),
  4654  		uint8(i2_ri2>>16),
  4655  		uint8(i2_ri2>>8),
  4656  		uint8(i2_ri2))
  4657  }
  4658  
  4659  func zRIS(op, r1, m3, b4, d4, i2 uint32, asm *[]byte) {
  4660  	*asm = append(*asm,
  4661  		uint8(op>>8),
  4662  		(uint8(r1)<<4)|uint8(m3&0x0F),
  4663  		(uint8(b4)<<4)|(uint8(d4>>8)&0x0F),
  4664  		uint8(d4),
  4665  		uint8(i2),
  4666  		uint8(op))
  4667  }
  4668  
  4669  func zRR(op, r1, r2 uint32, asm *[]byte) {
  4670  	*asm = append(*asm, uint8(op>>8), (uint8(r1)<<4)|uint8(r2&0x0F))
  4671  }
  4672  
  4673  func zRRD(op, r1, r3, r2 uint32, asm *[]byte) {
  4674  	*asm = append(*asm,
  4675  		uint8(op>>8),
  4676  		uint8(op),
  4677  		uint8(r1)<<4,
  4678  		(uint8(r3)<<4)|uint8(r2&0x0F))
  4679  }
  4680  
  4681  func zRRE(op, r1, r2 uint32, asm *[]byte) {
  4682  	*asm = append(*asm,
  4683  		uint8(op>>8),
  4684  		uint8(op),
  4685  		0,
  4686  		(uint8(r1)<<4)|uint8(r2&0x0F))
  4687  }
  4688  
  4689  func zRRF(op, r3_m3, m4, r1, r2 uint32, asm *[]byte) {
  4690  	*asm = append(*asm,
  4691  		uint8(op>>8),
  4692  		uint8(op),
  4693  		(uint8(r3_m3)<<4)|uint8(m4&0x0F),
  4694  		(uint8(r1)<<4)|uint8(r2&0x0F))
  4695  }
  4696  
  4697  func zRRS(op, r1, r2, b4, d4, m3 uint32, asm *[]byte) {
  4698  	*asm = append(*asm,
  4699  		uint8(op>>8),
  4700  		(uint8(r1)<<4)|uint8(r2&0x0F),
  4701  		(uint8(b4)<<4)|uint8((d4>>8)&0x0F),
  4702  		uint8(d4),
  4703  		uint8(m3)<<4,
  4704  		uint8(op))
  4705  }
  4706  
  4707  func zRS(op, r1, r3_m3, b2, d2 uint32, asm *[]byte) {
  4708  	*asm = append(*asm,
  4709  		uint8(op>>8),
  4710  		(uint8(r1)<<4)|uint8(r3_m3&0x0F),
  4711  		(uint8(b2)<<4)|uint8((d2>>8)&0x0F),
  4712  		uint8(d2))
  4713  }
  4714  
  4715  func zRSI(op, r1, r3, ri2 uint32, asm *[]byte) {
  4716  	*asm = append(*asm,
  4717  		uint8(op>>8),
  4718  		(uint8(r1)<<4)|uint8(r3&0x0F),
  4719  		uint8(ri2>>8),
  4720  		uint8(ri2))
  4721  }
  4722  
  4723  func zRSL(op, l1, b2, d2 uint32, asm *[]byte) {
  4724  	*asm = append(*asm,
  4725  		uint8(op>>8),
  4726  		uint8(l1),
  4727  		(uint8(b2)<<4)|uint8((d2>>8)&0x0F),
  4728  		uint8(d2),
  4729  		uint8(op))
  4730  }
  4731  
  4732  func zRSY(op, r1, r3_m3, b2, d2 uint32, asm *[]byte) {
  4733  	dl2 := uint16(d2) & 0x0FFF
  4734  	*asm = append(*asm,
  4735  		uint8(op>>8),
  4736  		(uint8(r1)<<4)|uint8(r3_m3&0x0F),
  4737  		(uint8(b2)<<4)|(uint8(dl2>>8)&0x0F),
  4738  		uint8(dl2),
  4739  		uint8(d2>>12),
  4740  		uint8(op))
  4741  }
  4742  
  4743  func zRX(op, r1_m1, x2, b2, d2 uint32, asm *[]byte) {
  4744  	*asm = append(*asm,
  4745  		uint8(op>>8),
  4746  		(uint8(r1_m1)<<4)|uint8(x2&0x0F),
  4747  		(uint8(b2)<<4)|uint8((d2>>8)&0x0F),
  4748  		uint8(d2))
  4749  }
  4750  
  4751  func zRXE(op, r1, x2, b2, d2, m3 uint32, asm *[]byte) {
  4752  	*asm = append(*asm,
  4753  		uint8(op>>8),
  4754  		(uint8(r1)<<4)|uint8(x2&0x0F),
  4755  		(uint8(b2)<<4)|uint8((d2>>8)&0x0F),
  4756  		uint8(d2),
  4757  		uint8(m3)<<4,
  4758  		uint8(op))
  4759  }
  4760  
  4761  func zRXF(op, r3, x2, b2, d2, m1 uint32, asm *[]byte) {
  4762  	*asm = append(*asm,
  4763  		uint8(op>>8),
  4764  		(uint8(r3)<<4)|uint8(x2&0x0F),
  4765  		(uint8(b2)<<4)|uint8((d2>>8)&0x0F),
  4766  		uint8(d2),
  4767  		uint8(m1)<<4,
  4768  		uint8(op))
  4769  }
  4770  
  4771  func zRXY(op, r1_m1, x2, b2, d2 uint32, asm *[]byte) {
  4772  	dl2 := uint16(d2) & 0x0FFF
  4773  	*asm = append(*asm,
  4774  		uint8(op>>8),
  4775  		(uint8(r1_m1)<<4)|uint8(x2&0x0F),
  4776  		(uint8(b2)<<4)|(uint8(dl2>>8)&0x0F),
  4777  		uint8(dl2),
  4778  		uint8(d2>>12),
  4779  		uint8(op))
  4780  }
  4781  
  4782  func zS(op, b2, d2 uint32, asm *[]byte) {
  4783  	*asm = append(*asm,
  4784  		uint8(op>>8),
  4785  		uint8(op),
  4786  		(uint8(b2)<<4)|uint8((d2>>8)&0x0F),
  4787  		uint8(d2))
  4788  }
  4789  
  4790  func zSI(op, i2, b1, d1 uint32, asm *[]byte) {
  4791  	*asm = append(*asm,
  4792  		uint8(op>>8),
  4793  		uint8(i2),
  4794  		(uint8(b1)<<4)|uint8((d1>>8)&0x0F),
  4795  		uint8(d1))
  4796  }
  4797  
  4798  func zSIL(op, b1, d1, i2 uint32, asm *[]byte) {
  4799  	*asm = append(*asm,
  4800  		uint8(op>>8),
  4801  		uint8(op),
  4802  		(uint8(b1)<<4)|uint8((d1>>8)&0x0F),
  4803  		uint8(d1),
  4804  		uint8(i2>>8),
  4805  		uint8(i2))
  4806  }
  4807  
  4808  func zSIY(op, i2, b1, d1 uint32, asm *[]byte) {
  4809  	dl1 := uint16(d1) & 0x0FFF
  4810  	*asm = append(*asm,
  4811  		uint8(op>>8),
  4812  		uint8(i2),
  4813  		(uint8(b1)<<4)|(uint8(dl1>>8)&0x0F),
  4814  		uint8(dl1),
  4815  		uint8(d1>>12),
  4816  		uint8(op))
  4817  }
  4818  
  4819  func zSMI(op, m1, b3, d3, ri2 uint32, asm *[]byte) {
  4820  	*asm = append(*asm,
  4821  		uint8(op>>8),
  4822  		uint8(m1)<<4,
  4823  		(uint8(b3)<<4)|uint8((d3>>8)&0x0F),
  4824  		uint8(d3),
  4825  		uint8(ri2>>8),
  4826  		uint8(ri2))
  4827  }
  4828  
  4829  // Expected argument values for the instruction formats.
  4830  //
  4831  // Format    a1  a2  a3  a4  a5  a6
  4832  // -------------------------------
  4833  // a         l1,  0, b1, d1, b2, d2
  4834  // b         l1, l2, b1, d1, b2, d2
  4835  // c         l1, i3, b1, d1, b2, d2
  4836  // d         r1, r3, b1, d1, b2, d2
  4837  // e         r1, r3, b2, d2, b4, d4
  4838  // f          0, l2, b1, d1, b2, d2
  4839  func zSS(f form, op, l1_r1, l2_i3_r3, b1_b2, d1_d2, b2_b4, d2_d4 uint32, asm *[]byte) {
  4840  	*asm = append(*asm, uint8(op>>8))
  4841  
  4842  	switch f {
  4843  	case _a:
  4844  		*asm = append(*asm, uint8(l1_r1))
  4845  	case _b, _c, _d, _e:
  4846  		*asm = append(*asm, (uint8(l1_r1)<<4)|uint8(l2_i3_r3&0x0F))
  4847  	case _f:
  4848  		*asm = append(*asm, uint8(l2_i3_r3))
  4849  	}
  4850  
  4851  	*asm = append(*asm,
  4852  		(uint8(b1_b2)<<4)|uint8((d1_d2>>8)&0x0F),
  4853  		uint8(d1_d2),
  4854  		(uint8(b2_b4)<<4)|uint8((d2_d4>>8)&0x0F),
  4855  		uint8(d2_d4))
  4856  }
  4857  
  4858  func zSSE(op, b1, d1, b2, d2 uint32, asm *[]byte) {
  4859  	*asm = append(*asm,
  4860  		uint8(op>>8),
  4861  		uint8(op),
  4862  		(uint8(b1)<<4)|uint8((d1>>8)&0x0F),
  4863  		uint8(d1),
  4864  		(uint8(b2)<<4)|uint8((d2>>8)&0x0F),
  4865  		uint8(d2))
  4866  }
  4867  
  4868  func zSSF(op, r3, b1, d1, b2, d2 uint32, asm *[]byte) {
  4869  	*asm = append(*asm,
  4870  		uint8(op>>8),
  4871  		(uint8(r3)<<4)|(uint8(op)&0x0F),
  4872  		(uint8(b1)<<4)|uint8((d1>>8)&0x0F),
  4873  		uint8(d1),
  4874  		(uint8(b2)<<4)|uint8((d2>>8)&0x0F),
  4875  		uint8(d2))
  4876  }
  4877  
  4878  func rxb(va, vb, vc, vd uint32) uint8 {
  4879  	mask := uint8(0)
  4880  	if va >= REG_V16 && va <= REG_V31 {
  4881  		mask |= 0x8
  4882  	}
  4883  	if vb >= REG_V16 && vb <= REG_V31 {
  4884  		mask |= 0x4
  4885  	}
  4886  	if vc >= REG_V16 && vc <= REG_V31 {
  4887  		mask |= 0x2
  4888  	}
  4889  	if vd >= REG_V16 && vd <= REG_V31 {
  4890  		mask |= 0x1
  4891  	}
  4892  	return mask
  4893  }
  4894  
  4895  func zVRX(op, v1, x2, b2, d2, m3 uint32, asm *[]byte) {
  4896  	*asm = append(*asm,
  4897  		uint8(op>>8),
  4898  		(uint8(v1)<<4)|(uint8(x2)&0xf),
  4899  		(uint8(b2)<<4)|(uint8(d2>>8)&0xf),
  4900  		uint8(d2),
  4901  		(uint8(m3)<<4)|rxb(v1, 0, 0, 0),
  4902  		uint8(op))
  4903  }
  4904  
  4905  func zVRV(op, v1, v2, b2, d2, m3 uint32, asm *[]byte) {
  4906  	*asm = append(*asm,
  4907  		uint8(op>>8),
  4908  		(uint8(v1)<<4)|(uint8(v2)&0xf),
  4909  		(uint8(b2)<<4)|(uint8(d2>>8)&0xf),
  4910  		uint8(d2),
  4911  		(uint8(m3)<<4)|rxb(v1, v2, 0, 0),
  4912  		uint8(op))
  4913  }
  4914  
  4915  func zVRS(op, v1, v3_r3, b2, d2, m4 uint32, asm *[]byte) {
  4916  	*asm = append(*asm,
  4917  		uint8(op>>8),
  4918  		(uint8(v1)<<4)|(uint8(v3_r3)&0xf),
  4919  		(uint8(b2)<<4)|(uint8(d2>>8)&0xf),
  4920  		uint8(d2),
  4921  		(uint8(m4)<<4)|rxb(v1, v3_r3, 0, 0),
  4922  		uint8(op))
  4923  }
  4924  
  4925  func zVRRa(op, v1, v2, m5, m4, m3 uint32, asm *[]byte) {
  4926  	*asm = append(*asm,
  4927  		uint8(op>>8),
  4928  		(uint8(v1)<<4)|(uint8(v2)&0xf),
  4929  		0,
  4930  		(uint8(m5)<<4)|(uint8(m4)&0xf),
  4931  		(uint8(m3)<<4)|rxb(v1, v2, 0, 0),
  4932  		uint8(op))
  4933  }
  4934  
  4935  func zVRRb(op, v1, v2, v3, m5, m4 uint32, asm *[]byte) {
  4936  	*asm = append(*asm,
  4937  		uint8(op>>8),
  4938  		(uint8(v1)<<4)|(uint8(v2)&0xf),
  4939  		uint8(v3)<<4,
  4940  		uint8(m5)<<4,
  4941  		(uint8(m4)<<4)|rxb(v1, v2, v3, 0),
  4942  		uint8(op))
  4943  }
  4944  
  4945  func zVRRc(op, v1, v2, v3, m6, m5, m4 uint32, asm *[]byte) {
  4946  	*asm = append(*asm,
  4947  		uint8(op>>8),
  4948  		(uint8(v1)<<4)|(uint8(v2)&0xf),
  4949  		uint8(v3)<<4,
  4950  		(uint8(m6)<<4)|(uint8(m5)&0xf),
  4951  		(uint8(m4)<<4)|rxb(v1, v2, v3, 0),
  4952  		uint8(op))
  4953  }
  4954  
  4955  func zVRRd(op, v1, v2, v3, m5, m6, v4 uint32, asm *[]byte) {
  4956  	*asm = append(*asm,
  4957  		uint8(op>>8),
  4958  		(uint8(v1)<<4)|(uint8(v2)&0xf),
  4959  		(uint8(v3)<<4)|(uint8(m5)&0xf),
  4960  		uint8(m6)<<4,
  4961  		(uint8(v4)<<4)|rxb(v1, v2, v3, v4),
  4962  		uint8(op))
  4963  }
  4964  
  4965  func zVRRe(op, v1, v2, v3, m6, m5, v4 uint32, asm *[]byte) {
  4966  	*asm = append(*asm,
  4967  		uint8(op>>8),
  4968  		(uint8(v1)<<4)|(uint8(v2)&0xf),
  4969  		(uint8(v3)<<4)|(uint8(m6)&0xf),
  4970  		uint8(m5),
  4971  		(uint8(v4)<<4)|rxb(v1, v2, v3, v4),
  4972  		uint8(op))
  4973  }
  4974  
  4975  func zVRRf(op, v1, r2, r3 uint32, asm *[]byte) {
  4976  	*asm = append(*asm,
  4977  		uint8(op>>8),
  4978  		(uint8(v1)<<4)|(uint8(r2)&0xf),
  4979  		uint8(r3)<<4,
  4980  		0,
  4981  		rxb(v1, 0, 0, 0),
  4982  		uint8(op))
  4983  }
  4984  
  4985  func zVRIa(op, v1, i2, m3 uint32, asm *[]byte) {
  4986  	*asm = append(*asm,
  4987  		uint8(op>>8),
  4988  		uint8(v1)<<4,
  4989  		uint8(i2>>8),
  4990  		uint8(i2),
  4991  		(uint8(m3)<<4)|rxb(v1, 0, 0, 0),
  4992  		uint8(op))
  4993  }
  4994  
  4995  func zVRIb(op, v1, i2, i3, m4 uint32, asm *[]byte) {
  4996  	*asm = append(*asm,
  4997  		uint8(op>>8),
  4998  		uint8(v1)<<4,
  4999  		uint8(i2),
  5000  		uint8(i3),
  5001  		(uint8(m4)<<4)|rxb(v1, 0, 0, 0),
  5002  		uint8(op))
  5003  }
  5004  
  5005  func zVRIc(op, v1, v3, i2, m4 uint32, asm *[]byte) {
  5006  	*asm = append(*asm,
  5007  		uint8(op>>8),
  5008  		(uint8(v1)<<4)|(uint8(v3)&0xf),
  5009  		uint8(i2>>8),
  5010  		uint8(i2),
  5011  		(uint8(m4)<<4)|rxb(v1, v3, 0, 0),
  5012  		uint8(op))
  5013  }
  5014  
  5015  func zVRId(op, v1, v2, v3, i4, m5 uint32, asm *[]byte) {
  5016  	*asm = append(*asm,
  5017  		uint8(op>>8),
  5018  		(uint8(v1)<<4)|(uint8(v2)&0xf),
  5019  		uint8(v3)<<4,
  5020  		uint8(i4),
  5021  		(uint8(m5)<<4)|rxb(v1, v2, v3, 0),
  5022  		uint8(op))
  5023  }
  5024  
  5025  func zVRIe(op, v1, v2, i3, m5, m4 uint32, asm *[]byte) {
  5026  	*asm = append(*asm,
  5027  		uint8(op>>8),
  5028  		(uint8(v1)<<4)|(uint8(v2)&0xf),
  5029  		uint8(i3>>4),
  5030  		(uint8(i3)<<4)|(uint8(m5)&0xf),
  5031  		(uint8(m4)<<4)|rxb(v1, v2, 0, 0),
  5032  		uint8(op))
  5033  }