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