github.com/euank/go@v0.0.0-20160829210321-495514729181/src/cmd/internal/obj/ppc64/a.out.go (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 package ppc64 31 32 import "cmd/internal/obj" 33 34 //go:generate go run ../stringer.go -i $GOFILE -o anames.go -p ppc64 35 36 /* 37 * powerpc 64 38 */ 39 const ( 40 NSNAME = 8 41 NSYM = 50 42 NREG = 32 /* number of general registers */ 43 NFREG = 32 /* number of floating point registers */ 44 ) 45 46 const ( 47 REG_R0 = obj.RBasePPC64 + iota 48 REG_R1 49 REG_R2 50 REG_R3 51 REG_R4 52 REG_R5 53 REG_R6 54 REG_R7 55 REG_R8 56 REG_R9 57 REG_R10 58 REG_R11 59 REG_R12 60 REG_R13 61 REG_R14 62 REG_R15 63 REG_R16 64 REG_R17 65 REG_R18 66 REG_R19 67 REG_R20 68 REG_R21 69 REG_R22 70 REG_R23 71 REG_R24 72 REG_R25 73 REG_R26 74 REG_R27 75 REG_R28 76 REG_R29 77 REG_R30 78 REG_R31 79 80 REG_F0 81 REG_F1 82 REG_F2 83 REG_F3 84 REG_F4 85 REG_F5 86 REG_F6 87 REG_F7 88 REG_F8 89 REG_F9 90 REG_F10 91 REG_F11 92 REG_F12 93 REG_F13 94 REG_F14 95 REG_F15 96 REG_F16 97 REG_F17 98 REG_F18 99 REG_F19 100 REG_F20 101 REG_F21 102 REG_F22 103 REG_F23 104 REG_F24 105 REG_F25 106 REG_F26 107 REG_F27 108 REG_F28 109 REG_F29 110 REG_F30 111 REG_F31 112 113 REG_CR0 114 REG_CR1 115 REG_CR2 116 REG_CR3 117 REG_CR4 118 REG_CR5 119 REG_CR6 120 REG_CR7 121 122 REG_MSR 123 REG_FPSCR 124 REG_CR 125 126 REG_SPECIAL = REG_CR0 127 128 REG_SPR0 = obj.RBasePPC64 + 1024 // first of 1024 registers 129 REG_DCR0 = obj.RBasePPC64 + 2048 // first of 1024 registers 130 131 REG_XER = REG_SPR0 + 1 132 REG_LR = REG_SPR0 + 8 133 REG_CTR = REG_SPR0 + 9 134 135 REGZERO = REG_R0 /* set to zero */ 136 REGSP = REG_R1 137 REGSB = REG_R2 138 REGRET = REG_R3 139 REGARG = -1 /* -1 disables passing the first argument in register */ 140 REGRT1 = REG_R3 /* reserved for runtime, duffzero and duffcopy */ 141 REGRT2 = REG_R4 /* reserved for runtime, duffcopy */ 142 REGMIN = REG_R7 /* register variables allocated from here to REGMAX */ 143 REGCTXT = REG_R11 /* context for closures */ 144 REGTLS = REG_R13 /* C ABI TLS base pointer */ 145 REGMAX = REG_R27 146 REGEXT = REG_R30 /* external registers allocated from here down */ 147 REGG = REG_R30 /* G */ 148 REGTMP = REG_R31 /* used by the linker */ 149 FREGRET = REG_F0 150 FREGMIN = REG_F17 /* first register variable */ 151 FREGMAX = REG_F26 /* last register variable for 9g only */ 152 FREGEXT = REG_F26 /* first external register */ 153 FREGCVI = REG_F27 /* floating conversion constant */ 154 FREGZERO = REG_F28 /* both float and double */ 155 FREGHALF = REG_F29 /* double */ 156 FREGONE = REG_F30 /* double */ 157 FREGTWO = REG_F31 /* double */ 158 ) 159 160 /* 161 * GENERAL: 162 * 163 * compiler allocates R3 up as temps 164 * compiler allocates register variables R7-R27 165 * compiler allocates external registers R30 down 166 * 167 * compiler allocates register variables F17-F26 168 * compiler allocates external registers F26 down 169 */ 170 const ( 171 BIG = 32768 - 8 172 ) 173 174 const ( 175 /* mark flags */ 176 LABEL = 1 << 0 177 LEAF = 1 << 1 178 FLOAT = 1 << 2 179 BRANCH = 1 << 3 180 LOAD = 1 << 4 181 FCMP = 1 << 5 182 SYNC = 1 << 6 183 LIST = 1 << 7 184 FOLL = 1 << 8 185 NOSCHED = 1 << 9 186 ) 187 188 // Bit settings from the CR 189 190 const ( 191 C_COND_LT = iota // 0 result is negative 192 C_COND_GT // 1 result is positive 193 C_COND_EQ // 2 result is zero 194 C_COND_SO // 3 summary overflow 195 ) 196 197 const ( 198 C_NONE = iota 199 C_REG 200 C_FREG 201 C_CREG 202 C_SPR /* special processor register */ 203 C_ZCON 204 C_SCON /* 16 bit signed */ 205 C_UCON /* 32 bit signed, low 16 bits 0 */ 206 C_ADDCON /* -0x8000 <= v < 0 */ 207 C_ANDCON /* 0 < v <= 0xFFFF */ 208 C_LCON /* other 32 */ 209 C_DCON /* other 64 (could subdivide further) */ 210 C_SACON /* $n(REG) where n <= int16 */ 211 C_SECON 212 C_LACON /* $n(REG) where int16 < n <= int32 */ 213 C_LECON 214 C_DACON /* $n(REG) where int32 < n */ 215 C_SBRA 216 C_LBRA 217 C_LBRAPIC 218 C_SAUTO 219 C_LAUTO 220 C_SEXT 221 C_LEXT 222 C_ZOREG // conjecture: either (1) register + zeroed offset, or (2) "R0" implies zero or C_REG 223 C_SOREG // register + signed offset 224 C_LOREG 225 C_FPSCR 226 C_MSR 227 C_XER 228 C_LR 229 C_CTR 230 C_ANY 231 C_GOK 232 C_ADDR 233 C_GOTADDR 234 C_TLS_LE 235 C_TLS_IE 236 C_TEXTSIZE 237 238 C_NCLASS /* must be the last */ 239 ) 240 241 const ( 242 AADD = obj.ABasePPC64 + obj.A_ARCHSPECIFIC + iota 243 AADDCC 244 AADDV 245 AADDVCC 246 AADDC 247 AADDCCC 248 AADDCV 249 AADDCVCC 250 AADDME 251 AADDMECC 252 AADDMEVCC 253 AADDMEV 254 AADDE 255 AADDECC 256 AADDEVCC 257 AADDEV 258 AADDZE 259 AADDZECC 260 AADDZEVCC 261 AADDZEV 262 AAND 263 AANDCC 264 AANDN 265 AANDNCC 266 ABC 267 ABCL 268 ABEQ 269 ABGE // not LT = G/E/U 270 ABGT 271 ABLE // not GT = L/E/U 272 ABLT 273 ABNE // not EQ = L/G/U 274 ABVC // apparently Unordered-clear 275 ABVS // apparently Unordered-set 276 ACMP 277 ACMPU 278 ACNTLZW 279 ACNTLZWCC 280 ACRAND 281 ACRANDN 282 ACREQV 283 ACRNAND 284 ACRNOR 285 ACROR 286 ACRORN 287 ACRXOR 288 ADIVW 289 ADIVWCC 290 ADIVWVCC 291 ADIVWV 292 ADIVWU 293 ADIVWUCC 294 ADIVWUVCC 295 ADIVWUV 296 AEQV 297 AEQVCC 298 AEXTSB 299 AEXTSBCC 300 AEXTSH 301 AEXTSHCC 302 AFABS 303 AFABSCC 304 AFADD 305 AFADDCC 306 AFADDS 307 AFADDSCC 308 AFCMPO 309 AFCMPU 310 AFCTIW 311 AFCTIWCC 312 AFCTIWZ 313 AFCTIWZCC 314 AFDIV 315 AFDIVCC 316 AFDIVS 317 AFDIVSCC 318 AFMADD 319 AFMADDCC 320 AFMADDS 321 AFMADDSCC 322 AFMOVD 323 AFMOVDCC 324 AFMOVDU 325 AFMOVS 326 AFMOVSU 327 AFMOVSX 328 AFMOVSZ 329 AFMSUB 330 AFMSUBCC 331 AFMSUBS 332 AFMSUBSCC 333 AFMUL 334 AFMULCC 335 AFMULS 336 AFMULSCC 337 AFNABS 338 AFNABSCC 339 AFNEG 340 AFNEGCC 341 AFNMADD 342 AFNMADDCC 343 AFNMADDS 344 AFNMADDSCC 345 AFNMSUB 346 AFNMSUBCC 347 AFNMSUBS 348 AFNMSUBSCC 349 AFRSP 350 AFRSPCC 351 AFSUB 352 AFSUBCC 353 AFSUBS 354 AFSUBSCC 355 AMOVMW 356 ALBAR 357 ALSW 358 ALWAR 359 ALWSYNC 360 AMOVWBR 361 AMOVB 362 AMOVBU 363 AMOVBZ 364 AMOVBZU 365 AMOVH 366 AMOVHBR 367 AMOVHU 368 AMOVHZ 369 AMOVHZU 370 AMOVW 371 AMOVWU 372 AMOVFL 373 AMOVCRFS 374 AMTFSB0 375 AMTFSB0CC 376 AMTFSB1 377 AMTFSB1CC 378 AMULHW 379 AMULHWCC 380 AMULHWU 381 AMULHWUCC 382 AMULLW 383 AMULLWCC 384 AMULLWVCC 385 AMULLWV 386 ANAND 387 ANANDCC 388 ANEG 389 ANEGCC 390 ANEGVCC 391 ANEGV 392 ANOR 393 ANORCC 394 AOR 395 AORCC 396 AORN 397 AORNCC 398 AREM 399 AREMCC 400 AREMV 401 AREMVCC 402 AREMU 403 AREMUCC 404 AREMUV 405 AREMUVCC 406 ARFI 407 ARLWMI 408 ARLWMICC 409 ARLWNM 410 ARLWNMCC 411 ASLW 412 ASLWCC 413 ASRW 414 ASRAW 415 ASRAWCC 416 ASRWCC 417 ASTBCCC 418 ASTSW 419 ASTWCCC 420 ASUB 421 ASUBCC 422 ASUBVCC 423 ASUBC 424 ASUBCCC 425 ASUBCV 426 ASUBCVCC 427 ASUBME 428 ASUBMECC 429 ASUBMEVCC 430 ASUBMEV 431 ASUBV 432 ASUBE 433 ASUBECC 434 ASUBEV 435 ASUBEVCC 436 ASUBZE 437 ASUBZECC 438 ASUBZEVCC 439 ASUBZEV 440 ASYNC 441 AXOR 442 AXORCC 443 444 ADCBF 445 ADCBI 446 ADCBST 447 ADCBT 448 ADCBTST 449 ADCBZ 450 AECIWX 451 AECOWX 452 AEIEIO 453 AICBI 454 AISYNC 455 APTESYNC 456 ATLBIE 457 ATLBIEL 458 ATLBSYNC 459 ATW 460 461 ASYSCALL 462 AWORD 463 464 ARFCI 465 466 /* optional on 32-bit */ 467 AFRES 468 AFRESCC 469 AFRSQRTE 470 AFRSQRTECC 471 AFSEL 472 AFSELCC 473 AFSQRT 474 AFSQRTCC 475 AFSQRTS 476 AFSQRTSCC 477 478 /* 64-bit */ 479 480 ACNTLZD 481 ACNTLZDCC 482 ACMPW /* CMP with L=0 */ 483 ACMPWU 484 ADIVD 485 ADIVDCC 486 ADIVDE 487 ADIVDECC 488 ADIVDEU 489 ADIVDEUCC 490 ADIVDVCC 491 ADIVDV 492 ADIVDU 493 ADIVDUCC 494 ADIVDUVCC 495 ADIVDUV 496 AEXTSW 497 AEXTSWCC 498 /* AFCFIW; AFCFIWCC */ 499 AFCFID 500 AFCFIDCC 501 AFCFIDU 502 AFCFIDUCC 503 AFCTID 504 AFCTIDCC 505 AFCTIDZ 506 AFCTIDZCC 507 ALDAR 508 AMOVD 509 AMOVDU 510 AMOVWZ 511 AMOVWZU 512 AMULHD 513 AMULHDCC 514 AMULHDU 515 AMULHDUCC 516 AMULLD 517 AMULLDCC 518 AMULLDVCC 519 AMULLDV 520 ARFID 521 ARLDMI 522 ARLDMICC 523 ARLDC 524 ARLDCCC 525 ARLDCR 526 ARLDCRCC 527 ARLDCL 528 ARLDCLCC 529 ASLBIA 530 ASLBIE 531 ASLBMFEE 532 ASLBMFEV 533 ASLBMTE 534 ASLD 535 ASLDCC 536 ASRD 537 ASRAD 538 ASRADCC 539 ASRDCC 540 ASTDCCC 541 ATD 542 543 /* 64-bit pseudo operation */ 544 ADWORD 545 AREMD 546 AREMDCC 547 AREMDV 548 AREMDVCC 549 AREMDU 550 AREMDUCC 551 AREMDUV 552 AREMDUVCC 553 554 /* more 64-bit operations */ 555 AHRFID 556 557 ALAST 558 559 // aliases 560 ABR = obj.AJMP 561 ABL = obj.ACALL 562 )