github.com/reiver/go@v0.0.0-20150109200633-1d0c7792f172/src/cmd/9l/9.out.h (about) 1 // cmd/9c/9.out.h from Vita Nuova. 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 /* 31 * powerpc 64 32 */ 33 #define NSNAME 8 34 #define NSYM 50 35 #define NREG 32 /* number of general registers */ 36 #define NFREG 32 /* number of floating point registers */ 37 38 #include "../ld/textflag.h" 39 40 enum 41 { 42 REGZERO = 0, /* set to zero */ 43 REGSP = 1, 44 REGSB = 2, 45 REGRET = 3, 46 REGARG = -1, /* -1 disables passing the first argument in register */ 47 REGRT1 = 3, /* reserved for runtime, duffzero and duffcopy */ 48 REGRT2 = 4, /* reserved for runtime, duffcopy */ 49 REGMIN = 7, /* register variables allocated from here to REGMAX */ 50 REGENV = 11, /* environment for closures */ 51 REGTLS = 13, /* C ABI TLS base pointer */ 52 REGMAX = 27, 53 REGEXT = 30, /* external registers allocated from here down */ 54 REGG = 30, /* G */ 55 REGTMP = 31, /* used by the linker */ 56 57 FREGRET = 0, 58 FREGMIN = 17, /* first register variable */ 59 FREGMAX = 26, /* last register variable for 9g only */ 60 FREGEXT = 26, /* first external register */ 61 FREGCVI = 27, /* floating conversion constant */ 62 FREGZERO = 28, /* both float and double */ 63 FREGHALF = 29, /* double */ 64 FREGONE = 30, /* double */ 65 FREGTWO = 31 /* double */ 66 /* 67 * GENERAL: 68 * 69 * compiler allocates R3 up as temps 70 * compiler allocates register variables R7-R27 71 * compiler allocates external registers R30 down 72 * 73 * compiler allocates register variables F17-F26 74 * compiler allocates external registers F26 down 75 */ 76 }; 77 78 enum { 79 BIG = 32768-8, 80 }; 81 82 enum { 83 /* mark flags */ 84 LABEL = 1<<0, 85 LEAF = 1<<1, 86 FLOAT = 1<<2, 87 BRANCH = 1<<3, 88 LOAD = 1<<4, 89 FCMP = 1<<5, 90 SYNC = 1<<6, 91 LIST = 1<<7, 92 FOLL = 1<<8, 93 NOSCHED = 1<<9, 94 }; 95 96 enum 97 { 98 C_NONE, 99 C_REG, 100 C_FREG, 101 C_CREG, 102 C_SPR, /* special processor register */ 103 C_ZCON, 104 C_SCON, /* 16 bit signed */ 105 C_UCON, /* 32 bit signed, low 16 bits 0 */ 106 C_ADDCON, /* -0x8000 <= v < 0 */ 107 C_ANDCON, /* 0 < v <= 0xFFFF */ 108 C_LCON, /* other 32 */ 109 C_DCON, /* other 64 (could subdivide further) */ 110 C_SACON, /* $n(REG) where n <= int16 */ 111 C_SECON, 112 C_LACON, /* $n(REG) where int16 < n <= int32 */ 113 C_LECON, 114 C_DACON, /* $n(REG) where int32 < n */ 115 C_SBRA, 116 C_LBRA, 117 C_SAUTO, 118 C_LAUTO, 119 C_SEXT, 120 C_LEXT, 121 C_ZOREG, 122 C_SOREG, 123 C_LOREG, 124 C_FPSCR, 125 C_MSR, 126 C_XER, 127 C_LR, 128 C_CTR, 129 C_ANY, 130 C_GOK, 131 C_ADDR, 132 133 C_NCLASS, /* must be the last */ 134 }; 135 136 enum 137 { 138 AXXX, 139 AADD, 140 AADDCC, 141 AADDV, 142 AADDVCC, 143 AADDC, 144 AADDCCC, 145 AADDCV, 146 AADDCVCC, 147 AADDME, 148 AADDMECC, 149 AADDMEVCC, 150 AADDMEV, 151 AADDE, 152 AADDECC, 153 AADDEVCC, 154 AADDEV, 155 AADDZE, 156 AADDZECC, 157 AADDZEVCC, 158 AADDZEV, 159 AAND, 160 AANDCC, 161 AANDN, 162 AANDNCC, 163 ABC, 164 ABCL, 165 ABEQ, 166 ABGE, 167 ABGT, 168 ABL, 169 ABLE, 170 ABLT, 171 ABNE, 172 ABR, 173 ABVC, 174 ABVS, 175 ACMP, 176 ACMPU, 177 ACNTLZW, 178 ACNTLZWCC, 179 ACRAND, 180 ACRANDN, 181 ACREQV, 182 ACRNAND, 183 ACRNOR, 184 ACROR, 185 ACRORN, 186 ACRXOR, 187 ADIVW, 188 ADIVWCC, 189 ADIVWVCC, 190 ADIVWV, 191 ADIVWU, 192 ADIVWUCC, 193 ADIVWUVCC, 194 ADIVWUV, 195 AEQV, 196 AEQVCC, 197 AEXTSB, 198 AEXTSBCC, 199 AEXTSH, 200 AEXTSHCC, 201 AFABS, 202 AFABSCC, 203 AFADD, 204 AFADDCC, 205 AFADDS, 206 AFADDSCC, 207 AFCMPO, 208 AFCMPU, 209 AFCTIW, 210 AFCTIWCC, 211 AFCTIWZ, 212 AFCTIWZCC, 213 AFDIV, 214 AFDIVCC, 215 AFDIVS, 216 AFDIVSCC, 217 AFMADD, 218 AFMADDCC, 219 AFMADDS, 220 AFMADDSCC, 221 AFMOVD, 222 AFMOVDCC, 223 AFMOVDU, 224 AFMOVS, 225 AFMOVSU, 226 AFMSUB, 227 AFMSUBCC, 228 AFMSUBS, 229 AFMSUBSCC, 230 AFMUL, 231 AFMULCC, 232 AFMULS, 233 AFMULSCC, 234 AFNABS, 235 AFNABSCC, 236 AFNEG, 237 AFNEGCC, 238 AFNMADD, 239 AFNMADDCC, 240 AFNMADDS, 241 AFNMADDSCC, 242 AFNMSUB, 243 AFNMSUBCC, 244 AFNMSUBS, 245 AFNMSUBSCC, 246 AFRSP, 247 AFRSPCC, 248 AFSUB, 249 AFSUBCC, 250 AFSUBS, 251 AFSUBSCC, 252 AMOVMW, 253 ALSW, 254 ALWAR, 255 AMOVWBR, 256 AMOVB, 257 AMOVBU, 258 AMOVBZ, 259 AMOVBZU, 260 AMOVH, 261 AMOVHBR, 262 AMOVHU, 263 AMOVHZ, 264 AMOVHZU, 265 AMOVW, 266 AMOVWU, 267 AMOVFL, 268 AMOVCRFS, 269 AMTFSB0, 270 AMTFSB0CC, 271 AMTFSB1, 272 AMTFSB1CC, 273 AMULHW, 274 AMULHWCC, 275 AMULHWU, 276 AMULHWUCC, 277 AMULLW, 278 AMULLWCC, 279 AMULLWVCC, 280 AMULLWV, 281 ANAND, 282 ANANDCC, 283 ANEG, 284 ANEGCC, 285 ANEGVCC, 286 ANEGV, 287 ANOR, 288 ANORCC, 289 AOR, 290 AORCC, 291 AORN, 292 AORNCC, 293 AREM, 294 AREMCC, 295 AREMV, 296 AREMVCC, 297 AREMU, 298 AREMUCC, 299 AREMUV, 300 AREMUVCC, 301 ARFI, 302 ARLWMI, 303 ARLWMICC, 304 ARLWNM, 305 ARLWNMCC, 306 ASLW, 307 ASLWCC, 308 ASRW, 309 ASRAW, 310 ASRAWCC, 311 ASRWCC, 312 ASTSW, 313 ASTWCCC, 314 ASUB, 315 ASUBCC, 316 ASUBVCC, 317 ASUBC, 318 ASUBCCC, 319 ASUBCV, 320 ASUBCVCC, 321 ASUBME, 322 ASUBMECC, 323 ASUBMEVCC, 324 ASUBMEV, 325 ASUBV, 326 ASUBE, 327 ASUBECC, 328 ASUBEV, 329 ASUBEVCC, 330 ASUBZE, 331 ASUBZECC, 332 ASUBZEVCC, 333 ASUBZEV, 334 ASYNC, 335 AXOR, 336 AXORCC, 337 338 ADCBF, 339 ADCBI, 340 ADCBST, 341 ADCBT, 342 ADCBTST, 343 ADCBZ, 344 AECIWX, 345 AECOWX, 346 AEIEIO, 347 AICBI, 348 AISYNC, 349 APTESYNC, 350 ATLBIE, 351 ATLBIEL, 352 ATLBSYNC, 353 ATW, 354 355 ASYSCALL, 356 ADATA, 357 AGLOBL, 358 AGOK, 359 AHISTORY, 360 ANAME, 361 ANOP, 362 ARETURN, 363 ATEXT, 364 AWORD, 365 AEND, 366 ADYNT, 367 AINIT, 368 ASIGNAME, 369 370 ARFCI, 371 372 /* optional on 32-bit */ 373 AFRES, 374 AFRESCC, 375 AFRSQRTE, 376 AFRSQRTECC, 377 AFSEL, 378 AFSELCC, 379 AFSQRT, 380 AFSQRTCC, 381 AFSQRTS, 382 AFSQRTSCC, 383 384 /* 64-bit */ 385 386 ACNTLZD, 387 ACNTLZDCC, 388 ACMPW, /* CMP with L=0 */ 389 ACMPWU, 390 ADIVD, 391 ADIVDCC, 392 ADIVDVCC, 393 ADIVDV, 394 ADIVDU, 395 ADIVDUCC, 396 ADIVDUVCC, 397 ADIVDUV, 398 AEXTSW, 399 AEXTSWCC, 400 /* AFCFIW; AFCFIWCC */ 401 AFCFID, 402 AFCFIDCC, 403 AFCTID, 404 AFCTIDCC, 405 AFCTIDZ, 406 AFCTIDZCC, 407 ALDAR, 408 AMOVD, 409 AMOVDU, 410 AMOVWZ, 411 AMOVWZU, 412 AMULHD, 413 AMULHDCC, 414 AMULHDU, 415 AMULHDUCC, 416 AMULLD, 417 AMULLDCC, 418 AMULLDVCC, 419 AMULLDV, 420 ARFID, 421 ARLDMI, 422 ARLDMICC, 423 ARLDC, 424 ARLDCCC, 425 ARLDCR, 426 ARLDCRCC, 427 ARLDCL, 428 ARLDCLCC, 429 ASLBIA, 430 ASLBIE, 431 ASLBMFEE, 432 ASLBMFEV, 433 ASLBMTE, 434 ASLD, 435 ASLDCC, 436 ASRD, 437 ASRAD, 438 ASRADCC, 439 ASRDCC, 440 ASTDCCC, 441 ATD, 442 443 /* 64-bit pseudo operation */ 444 ADWORD, 445 AREMD, 446 AREMDCC, 447 AREMDV, 448 AREMDVCC, 449 AREMDU, 450 AREMDUCC, 451 AREMDUV, 452 AREMDUVCC, 453 454 /* more 64-bit operations */ 455 AHRFID, 456 457 AUNDEF, 458 AUSEFIELD, 459 ATYPE, 460 AFUNCDATA, 461 APCDATA, 462 ACHECKNIL, 463 AVARDEF, 464 AVARKILL, 465 ADUFFCOPY, 466 ADUFFZERO, 467 468 ALAST 469 }; 470 471 /* type/name */ 472 enum 473 { 474 D_GOK = 0, 475 D_NONE, 476 477 /* name */ 478 D_EXTERN, 479 D_STATIC, 480 D_AUTO, 481 D_PARAM, 482 483 /* type */ 484 D_BRANCH, 485 D_OREG, 486 D_CONST, 487 D_FCONST, 488 D_SCONST, 489 D_REG, 490 D_FPSCR, 491 D_MSR, 492 D_FREG, 493 D_CREG, 494 D_SPR, 495 D_OPT, /* branch/trap option */ 496 D_FILE, 497 D_FILE1, 498 D_DCR, /* device control register */ 499 D_DCONST, 500 D_ADDR, // not used, use D_CONST with non-empty sym. 501 502 D_LAST, 503 504 /* reg names for 9g OREGISTER */ 505 D_R0 = 0, // type is D_REG 506 D_F0 = D_R0+NREG, // type is D_FREG 507 508 /* reg names in offset field iff type is D_SPR */ 509 D_XER = 1, 510 D_LR = 8, 511 D_CTR = 9 512 /* and many supervisor level registers */ 513 }; 514 515 /* 516 * this is the ranlib header 517 */ 518 #define SYMDEF "__.GOSYMDEF"