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