/* PowerPC asm definitions for GNU C. */ /* Under winnt, 1) gas supports the following as names and 2) in particular defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */ #define r0 0 #define sp 1 #define toc 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 cr0 0 #define cr1 1 #define cr2 2 #define cr3 3 #define cr4 4 #define cr5 5 #define cr6 6 #define cr7 7 #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 /* * Macros to glue together two tokens. */ #ifdef __STDC__ #define XGLUE(a,b) a##b #else #define XGLUE(a,b) a/**/b #endif #define GLUE(a,b) XGLUE(a,b) /* * Macros to begin and end a function written in assembler. If -mcall-aixdesc * or -mcall-nt, create a function descriptor with the given name, and create * the real function with one or two leading periods respectively. */ #if defined (__powerpc64__) #define FUNC_NAME(name) GLUE(.,name) #define JUMP_TARGET(name) FUNC_NAME(name) #define FUNC_START(name) \ .section ".opd","aw"; \ name: \ .quad GLUE(.,name); \ .quad .TOC.@tocbase; \ .quad 0; \ .previous; \ .type GLUE(.,name),@function; \ .globl name; \ .globl GLUE(.,name); \ GLUE(.,name): #define FUNC_END(name) \ GLUE(.L,name): \ .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name) #elif defined(_CALL_AIXDESC) #ifdef _RELOCATABLE #define DESC_SECTION ".got2" #else #define DESC_SECTION ".got1" #endif #define FUNC_NAME(name) GLUE(.,name) #define JUMP_TARGET(name) FUNC_NAME(name) #define FUNC_START(name) \ .section DESC_SECTION,"aw"; \ name: \ .long GLUE(.,name); \ .long _GLOBAL_OFFSET_TABLE_; \ .long 0; \ .previous; \ .type GLUE(.,name),@function; \ .globl name; \ .globl GLUE(.,name); \ GLUE(.,name): #define FUNC_END(name) \ GLUE(.L,name): \ .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name) #else #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name) #if defined __PIC__ || defined __pic__ #define JUMP_TARGET(name) FUNC_NAME(name@plt) #else #define JUMP_TARGET(name) FUNC_NAME(name) #endif #define FUNC_START(name) \ .type FUNC_NAME(name),@function; \ .globl FUNC_NAME(name); \ FUNC_NAME(name): #define FUNC_END(name) \ GLUE(.L,name): \ .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name) #endif #if defined __linux__ && !defined __powerpc64__ .section .note.GNU-stack .previous #endif