github.com/q45/go@v0.0.0-20151101211701-a4fb8c13db3f/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 const ( 189 C_NONE = iota 190 C_REG 191 C_FREG 192 C_CREG 193 C_SPR /* special processor register */ 194 C_ZCON 195 C_SCON /* 16 bit signed */ 196 C_UCON /* 32 bit signed, low 16 bits 0 */ 197 C_ADDCON /* -0x8000 <= v < 0 */ 198 C_ANDCON /* 0 < v <= 0xFFFF */ 199 C_LCON /* other 32 */ 200 C_DCON /* other 64 (could subdivide further) */ 201 C_SACON /* $n(REG) where n <= int16 */ 202 C_SECON 203 C_LACON /* $n(REG) where int16 < n <= int32 */ 204 C_LECON 205 C_DACON /* $n(REG) where int32 < n */ 206 C_SBRA 207 C_LBRA 208 C_SAUTO 209 C_LAUTO 210 C_SEXT 211 C_LEXT 212 C_ZOREG 213 C_SOREG 214 C_LOREG 215 C_FPSCR 216 C_MSR 217 C_XER 218 C_LR 219 C_CTR 220 C_ANY 221 C_GOK 222 C_ADDR 223 C_TLS_LE 224 C_TEXTSIZE 225 226 C_NCLASS /* must be the last */ 227 ) 228 229 const ( 230 AADD = obj.ABasePPC64 + obj.A_ARCHSPECIFIC + iota 231 AADDCC 232 AADDV 233 AADDVCC 234 AADDC 235 AADDCCC 236 AADDCV 237 AADDCVCC 238 AADDME 239 AADDMECC 240 AADDMEVCC 241 AADDMEV 242 AADDE 243 AADDECC 244 AADDEVCC 245 AADDEV 246 AADDZE 247 AADDZECC 248 AADDZEVCC 249 AADDZEV 250 AAND 251 AANDCC 252 AANDN 253 AANDNCC 254 ABC 255 ABCL 256 ABEQ 257 ABGE 258 ABGT 259 ABLE 260 ABLT 261 ABNE 262 ABVC 263 ABVS 264 ACMP 265 ACMPU 266 ACNTLZW 267 ACNTLZWCC 268 ACRAND 269 ACRANDN 270 ACREQV 271 ACRNAND 272 ACRNOR 273 ACROR 274 ACRORN 275 ACRXOR 276 ADIVW 277 ADIVWCC 278 ADIVWVCC 279 ADIVWV 280 ADIVWU 281 ADIVWUCC 282 ADIVWUVCC 283 ADIVWUV 284 AEQV 285 AEQVCC 286 AEXTSB 287 AEXTSBCC 288 AEXTSH 289 AEXTSHCC 290 AFABS 291 AFABSCC 292 AFADD 293 AFADDCC 294 AFADDS 295 AFADDSCC 296 AFCMPO 297 AFCMPU 298 AFCTIW 299 AFCTIWCC 300 AFCTIWZ 301 AFCTIWZCC 302 AFDIV 303 AFDIVCC 304 AFDIVS 305 AFDIVSCC 306 AFMADD 307 AFMADDCC 308 AFMADDS 309 AFMADDSCC 310 AFMOVD 311 AFMOVDCC 312 AFMOVDU 313 AFMOVS 314 AFMOVSU 315 AFMSUB 316 AFMSUBCC 317 AFMSUBS 318 AFMSUBSCC 319 AFMUL 320 AFMULCC 321 AFMULS 322 AFMULSCC 323 AFNABS 324 AFNABSCC 325 AFNEG 326 AFNEGCC 327 AFNMADD 328 AFNMADDCC 329 AFNMADDS 330 AFNMADDSCC 331 AFNMSUB 332 AFNMSUBCC 333 AFNMSUBS 334 AFNMSUBSCC 335 AFRSP 336 AFRSPCC 337 AFSUB 338 AFSUBCC 339 AFSUBS 340 AFSUBSCC 341 AMOVMW 342 ALSW 343 ALWAR 344 AMOVWBR 345 AMOVB 346 AMOVBU 347 AMOVBZ 348 AMOVBZU 349 AMOVH 350 AMOVHBR 351 AMOVHU 352 AMOVHZ 353 AMOVHZU 354 AMOVW 355 AMOVWU 356 AMOVFL 357 AMOVCRFS 358 AMTFSB0 359 AMTFSB0CC 360 AMTFSB1 361 AMTFSB1CC 362 AMULHW 363 AMULHWCC 364 AMULHWU 365 AMULHWUCC 366 AMULLW 367 AMULLWCC 368 AMULLWVCC 369 AMULLWV 370 ANAND 371 ANANDCC 372 ANEG 373 ANEGCC 374 ANEGVCC 375 ANEGV 376 ANOR 377 ANORCC 378 AOR 379 AORCC 380 AORN 381 AORNCC 382 AREM 383 AREMCC 384 AREMV 385 AREMVCC 386 AREMU 387 AREMUCC 388 AREMUV 389 AREMUVCC 390 ARFI 391 ARLWMI 392 ARLWMICC 393 ARLWNM 394 ARLWNMCC 395 ASLW 396 ASLWCC 397 ASRW 398 ASRAW 399 ASRAWCC 400 ASRWCC 401 ASTSW 402 ASTWCCC 403 ASUB 404 ASUBCC 405 ASUBVCC 406 ASUBC 407 ASUBCCC 408 ASUBCV 409 ASUBCVCC 410 ASUBME 411 ASUBMECC 412 ASUBMEVCC 413 ASUBMEV 414 ASUBV 415 ASUBE 416 ASUBECC 417 ASUBEV 418 ASUBEVCC 419 ASUBZE 420 ASUBZECC 421 ASUBZEVCC 422 ASUBZEV 423 ASYNC 424 AXOR 425 AXORCC 426 427 ADCBF 428 ADCBI 429 ADCBST 430 ADCBT 431 ADCBTST 432 ADCBZ 433 AECIWX 434 AECOWX 435 AEIEIO 436 AICBI 437 AISYNC 438 APTESYNC 439 ATLBIE 440 ATLBIEL 441 ATLBSYNC 442 ATW 443 444 ASYSCALL 445 AWORD 446 447 ARFCI 448 449 /* optional on 32-bit */ 450 AFRES 451 AFRESCC 452 AFRSQRTE 453 AFRSQRTECC 454 AFSEL 455 AFSELCC 456 AFSQRT 457 AFSQRTCC 458 AFSQRTS 459 AFSQRTSCC 460 461 /* 64-bit */ 462 463 ACNTLZD 464 ACNTLZDCC 465 ACMPW /* CMP with L=0 */ 466 ACMPWU 467 ADIVD 468 ADIVDCC 469 ADIVDVCC 470 ADIVDV 471 ADIVDU 472 ADIVDUCC 473 ADIVDUVCC 474 ADIVDUV 475 AEXTSW 476 AEXTSWCC 477 /* AFCFIW; AFCFIWCC */ 478 AFCFID 479 AFCFIDCC 480 AFCTID 481 AFCTIDCC 482 AFCTIDZ 483 AFCTIDZCC 484 ALDAR 485 AMOVD 486 AMOVDU 487 AMOVWZ 488 AMOVWZU 489 AMULHD 490 AMULHDCC 491 AMULHDU 492 AMULHDUCC 493 AMULLD 494 AMULLDCC 495 AMULLDVCC 496 AMULLDV 497 ARFID 498 ARLDMI 499 ARLDMICC 500 ARLDC 501 ARLDCCC 502 ARLDCR 503 ARLDCRCC 504 ARLDCL 505 ARLDCLCC 506 ASLBIA 507 ASLBIE 508 ASLBMFEE 509 ASLBMFEV 510 ASLBMTE 511 ASLD 512 ASLDCC 513 ASRD 514 ASRAD 515 ASRADCC 516 ASRDCC 517 ASTDCCC 518 ATD 519 520 /* 64-bit pseudo operation */ 521 ADWORD 522 AREMD 523 AREMDCC 524 AREMDV 525 AREMDVCC 526 AREMDU 527 AREMDUCC 528 AREMDUV 529 AREMDUVCC 530 531 /* more 64-bit operations */ 532 AHRFID 533 534 ALAST 535 536 // aliases 537 ABR = obj.AJMP 538 ABL = obj.ACALL 539 )