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