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