Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 | /* * @OSF_COPYRIGHT@ */ #ifndef _PPC_ASM_H_ #define _PPC_ASM_H_ #ifdef __ELF__ #define __NO_UNDERSCORES__ 1 #define __ASMNL__ ; #else #define __ASMNL__ @ #endif #ifdef ASSEMBLER #ifdef __ELF__ #define r0 0 #define r1 1 #define r2 2 #define r3 3 #define r4 4 #define r5 5 #define r6 6 #define r7 7 #define r8 8 #define r9 9 #define r10 10 #define r11 11 #define r12 12 #define r13 13 #define r14 14 #define r15 15 #define r16 16 #define r17 17 #define r18 18 #define r19 19 #define r20 20 #define r21 21 #define r22 22 #define r23 23 #define r24 24 #define r25 25 #define r26 26 #define r27 27 #define r28 28 #define r29 29 #define r30 30 #define r31 31 #define f0 0 #define f1 1 #define f2 2 #define f3 3 #define f4 4 #define f5 5 #define f6 6 #define f7 7 #define f8 8 #define f9 9 #define f10 10 #define f11 11 #define f12 12 #define f13 13 #define f14 14 #define f15 15 #define f16 16 #define f17 17 #define f18 18 #define f19 19 #define f20 20 #define f21 21 #define f22 22 #define f23 23 #define f24 24 #define f25 25 #define f26 26 #define f27 27 #define f28 28 #define f29 29 #define f30 30 #define f31 31 #define sr0 0 #define sr1 1 #define sr2 2 #define sr3 3 #define sr4 4 #define sr5 5 #define sr6 6 #define sr7 7 #define sr8 8 #define sr9 9 #define sr10 10 #define sr11 11 #define sr12 12 #define sr13 13 #define sr14 14 #define sr15 15 #define sr16 16 #define sr17 17 #define sr18 18 #define sr19 19 #define sr20 20 #define sr21 21 #define sr22 22 #define sr23 23 #define sr24 24 #define sr25 25 #define sr26 26 #define sr27 27 #define sr28 28 #define sr29 29 #define sr30 30 #define sr31 31 #endif #define ARG0 r3 #define ARG1 r4 #define ARG2 r5 #define ARG3 r6 #define ARG4 r7 #define ARG5 r8 #define ARG6 r9 #define ARG7 r10 #define tmp0 r0 /* Temporary GPR remapping (603e specific) */ #define tmp1 r1 #define tmp2 r2 #define tmp3 r3 /* SPR registers */ #define dmiss 976 /* ea that missed */ #define dcmp 977 /* compare value for the va that missed */ #define hash1 978 /* pointer to first hash pteg */ #define hash2 979 /* pointer to second hash pteg */ #define imiss 980 /* ea that missed */ #define icmp 981 /* compare value for the va that missed */ #define rpa 982 /* required physical address register */ #define iabr 1010 /* instruction address breakpoint register */ #define pir 1023 /* Processor ID Register */ /* MQ register on the 601 */ #define mq 0 /* spr number for mq register on 601 */ #define IBAT0U 528 #define IBAT0L 529 #define IBAT1U 530 #define IBAT1L 531 #define IBAT2U 532 #define IBAT2L 533 #define IBAT3U 534 #define IBAT3L 535 #define ibat0u 528 #define ibat0l 529 #define ibat1u 530 #define ibat1l 531 #define ibat2u 532 #define ibat2l 533 #define ibat3u 534 #define ibat3l 535 #define DBAT0U 536 #define DBAT0L 537 #define DBAT1U 538 #define DBAT1L 539 #define DBAT2U 540 #define DBAT2L 541 #define DBAT3U 542 #define DBAT3L 543 #define dbat0u 536 #define dbat0l 537 #define dbat1u 538 #define dbat1l 539 #define dbat2u 540 #define dbat2l 541 #define dbat3u 542 #define dbat3l 543 #define HID0 1008 #define hid0 1008 #define HID1 1009 #define hid1 1009 #define SDR1 25 #define sprg0 272 #define sprg1 273 #define sprg2 274 #define sprg3 275 #define ppcDAR 19 #define ppcdar 19 #define srr0 26 #define srr1 27 #define CR0 0 #define CR1 1 #define CR2 2 #define CR3 3 #define CR4 4 #define CR5 5 #define CR6 6 #define CR7 7 #ifdef __ELF__ #define cr0 0 #define cr1 1 #define cr2 2 #define cr3 3 #define cr4 4 #define cr5 5 #define cr6 6 #define cr7 7 #endif #define cr0_lt 0 #define cr0_gt 1 #define cr0_eq 2 #define cr0_so 3 #define cr0_un 3 /* * Macros to access high and low word values of an address */ #ifndef __ELF__ #define HIGH_CADDR(x) ha16(x) #define HIGH_ADDR(x) hi16(x) #define LOW_ADDR(x) lo16(x) #else #define HIGH_CADDR(x) x@ha #define HIGH_ADDR(x) x@h #define LOW_ADDR(x) x@l #endif /* __ELF__ */ #endif /* ASSEMBLER */ /* Tags are placed before Immediately Following Code (IFC) for the debugger * to be able to deduce where to find various registers when backtracing * * We only define the values as we use them, see SVR4 ABI PowerPc Supplement * for more details (defined in ELF spec). */ #define TAG_NO_FRAME_USED 0x00000000 /* (should use genassym to get these offsets) */ #define FM_BACKPTR 0 /* TODO NMGS FM_SIZE 8 is ok according to EABI specs, but gcc uses 16 */ #ifdef __ELF__ #define FM_LR_SAVE 4 /* gcc 2.7.1 is now following eabi spec correctly */ #define FM_SIZE 16 /* minimum frame contents, backptr and LR save */ #define FM_ARG0 8 #else #define FM_CR_SAVE 4 #define FM_LR_SAVE 8 /* Rhapsody iS NOT following the ABI at the moment.. */ #define FM_SIZE 72 /* minimum frame contents, backptr and LR save */ #define FM_ARG0 56 #endif #define FM_ELF_ARG0 8 #define FM_MACHO_ARG0 56 #define MACHO_SYSCALL_BEGIN 0x2000 #define PK_SYSCALL_BEGIN 0x7000 /* redzone is the area under the stack pointer which must be preserved * when taking a trap, interrupt etc. This is no longer needed as gcc * (2.7.2 and above) now follows ELF spec correctly and never loads/stores * below the frame pointer */ #ifdef __ELF__ #define FM_REDZONE 0 /* was ((32-14+1)*4) */ #else #define FM_REDZONE 224 /* is ((32-14+1)*4) */ #endif #define COPYIN_ARG0_OFFSET FM_ARG0 #ifdef MACH_KERNEL_BUILD #include <mach_kdb.h> #else /* MACH_KERNEL */ #define MACH_KDB 0 #endif /* MACH_KERNEL */ #define BREAKPOINT_TRAP twge r2,r2 /* There is another definition of ALIGN for .c sources */ #ifndef __LANGUAGE_ASSEMBLY #define ALIGN 2 #endif /* __LANGUAGE_ASSEMBLY */ #ifndef FALIGN #define FALIGN 2 /* Align functions on words for now. Cachelines is better */ #endif #define LB(x,n) n #if __STDC__ #ifndef __NO_UNDERSCORES__ #define LCL(x) L ## x #define EXT(x) _ ## x #define LEXT(x) _ ## x ## : #else #define LCL(x) .L ## x #define EXT(x) x #define LEXT(x) x ## : #endif #define LBc(x,n) n ## : #define LBb(x,n) n ## b #define LBf(x,n) n ## f #else /* __STDC__ */ #ifndef __NO_UNDERSCORES__ #define LCL(x) L/**/x #define EXT(x) _/**/x #define LEXT(x) _/**/x/**/: #else /* __NO_UNDERSCORES__ */ #define LCL(x) .L/**/x #define EXT(x) x #define LEXT(x) x/**/: #endif /* __NO_UNDERSCORES__ */ #define LBc(x,n) n/**/: #define LBb(x,n) n/**/b #define LBf(x,n) n/**/f #endif /* __STDC__ */ #define String .asciz #define Value .word #define Times(a,b) (a*b) #define Divide(a,b) (a/b) #define data16 .byte 0x66 #define addr16 .byte 0x67 #if !GPROF #define MCOUNT #elif defined(__SHARED__) #define MCOUNT ; .data;\ .align ALIGN;\ LBc(x, 8) .long 0;\ .text;\ Gpush;\ Gload;\ leal Gotoff(LBb(x,8)),%edx;\ Egaddr(%eax,_mcount_ptr);\ Gpop;\ call *(%eax); #else /* !GPROF, !__SHARED__ */ #define MCOUNT ; .data;\ .align ALIGN;\ LBc(x, 8) .long 0;\ .text;\ movl $LBb(x,8),%edx;\ call *EXT(_mcount_ptr); #endif /* GPROF */ #ifdef __ELF__ #define ELF_FUNC(x) .type x,@function #define ELF_DATA(x) .type x,@object #define ELF_SIZE(x,s) .size x,s #else #define ELF_FUNC(x) #define ELF_DATA(x) #define ELF_SIZE(x,s) #endif #ifdef __ELF__ #define Entry(x,tag) .globl EXT(x); ELF_FUNC(EXT(x)); .long tag;.align FALIGN; LEXT(x) #define ENTRY(x,tag) Entry(x,tag) MCOUNT #define ENTRY2(x,y,tag) .globl EXT(x); .globl EXT(y); \ ELF_FUNC(EXT(x)); ELF_FUNC(EXT(y)); \ .align FALIGN; LEXT(x); LEXT(y) \ MCOUNT #if __STDC__ #define ASENTRY(x) .globl x; .align FALIGN; x ## : ELF_FUNC(x) MCOUNT #else #define ASENTRY(x) .globl x; .align FALIGN; x: ELF_FUNC(x) MCOUNT #endif /* __STDC__ */ #define DATA(x) .globl EXT(x); ELF_DATA(EXT(x)); .align ALIGN; LEXT(x) #else /* __ELF__ */ #define Entry(x,tag) .text@.align FALIGN@ .globl EXT(x)@ LEXT(x) #define ENTRY(x,tag) Entry(x,tag)@MCOUNT #define ENTRY2(x,y,tag) .text@ .align FALIGN@ .globl EXT(x)@ .globl EXT(y)@ \ LEXT(x)@ LEXT(y) @\ MCOUNT #if __STDC__ #define ASENTRY(x) .globl x @ .align FALIGN; x ## @ MCOUNT #else #define ASENTRY(x) .globl x @ .align FALIGN; x @ MCOUNT #endif /* __STDC__ */ #define DATA(x) .globl EXT(x) @ .align ALIGN @ LEXT(x) #endif #define End(x) ELF_SIZE(x,.-x) #define END(x) End(EXT(x)) #define ENDDATA(x) END(x) #define Enddata(x) End(x) /* These defines are here for .c files that wish to reference global symbols * within __asm__ statements. */ #ifndef __NO_UNDERSCORES__ #define CC_SYM_PREFIX "_" #else #define CC_SYM_PREFIX "" #endif /* __NO_UNDERSCORES__ */ #endif /* _PPC_ASM_H_ */ |