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