/* 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" */ #if !defined(__WINNT__) #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 #endif /* * 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. */ #ifdef _RELOCATABLE #define DESC_SECTION ".got2" #else #define DESC_SECTION ".got1" #endif #if defined(_CALL_AIXDESC) #define FUNC_NAME(name) GLUE(.,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) #elif defined(__WINNT__) #define FUNC_NAME(name) GLUE(..,name) #define FUNC_START(name) \ .pdata; \ .align 2; \ .ualong GLUE(..,name),GLUE(name,.e),0,0,GLUE(..,name); \ .reldata; \ name: \ .ualong GLUE(..,name),.toc; \ .section .text; \ .globl name; \ .globl GLUE(..,name); \ GLUE(..,name): #define FUNC_END(name) \ GLUE(name,.e): ; \ GLUE(FE_MOT_RESVD..,name): #elif defined(_CALL_NT) #define FUNC_NAME(name) GLUE(..,name) #define FUNC_START(name) \ .section DESC_SECTION,"aw"; \ name: \ .long GLUE(..,name); \ .long _GLOBAL_OFFSET_TABLE_; \ .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) #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