1*404b540aSrobert /* PowerPC asm definitions for GNU C. */ 2*404b540aSrobert /* Under winnt, 1) gas supports the following as names and 2) in particular 3*404b540aSrobert defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */ 4*404b540aSrobert 5*404b540aSrobert #define r0 0 6*404b540aSrobert #define sp 1 7*404b540aSrobert #define toc 2 8*404b540aSrobert #define r3 3 9*404b540aSrobert #define r4 4 10*404b540aSrobert #define r5 5 11*404b540aSrobert #define r6 6 12*404b540aSrobert #define r7 7 13*404b540aSrobert #define r8 8 14*404b540aSrobert #define r9 9 15*404b540aSrobert #define r10 10 16*404b540aSrobert #define r11 11 17*404b540aSrobert #define r12 12 18*404b540aSrobert #define r13 13 19*404b540aSrobert #define r14 14 20*404b540aSrobert #define r15 15 21*404b540aSrobert #define r16 16 22*404b540aSrobert #define r17 17 23*404b540aSrobert #define r18 18 24*404b540aSrobert #define r19 19 25*404b540aSrobert #define r20 20 26*404b540aSrobert #define r21 21 27*404b540aSrobert #define r22 22 28*404b540aSrobert #define r23 23 29*404b540aSrobert #define r24 24 30*404b540aSrobert #define r25 25 31*404b540aSrobert #define r26 26 32*404b540aSrobert #define r27 27 33*404b540aSrobert #define r28 28 34*404b540aSrobert #define r29 29 35*404b540aSrobert #define r30 30 36*404b540aSrobert #define r31 31 37*404b540aSrobert 38*404b540aSrobert #define cr0 0 39*404b540aSrobert #define cr1 1 40*404b540aSrobert #define cr2 2 41*404b540aSrobert #define cr3 3 42*404b540aSrobert #define cr4 4 43*404b540aSrobert #define cr5 5 44*404b540aSrobert #define cr6 6 45*404b540aSrobert #define cr7 7 46*404b540aSrobert 47*404b540aSrobert #define f0 0 48*404b540aSrobert #define f1 1 49*404b540aSrobert #define f2 2 50*404b540aSrobert #define f3 3 51*404b540aSrobert #define f4 4 52*404b540aSrobert #define f5 5 53*404b540aSrobert #define f6 6 54*404b540aSrobert #define f7 7 55*404b540aSrobert #define f8 8 56*404b540aSrobert #define f9 9 57*404b540aSrobert #define f10 10 58*404b540aSrobert #define f11 11 59*404b540aSrobert #define f12 12 60*404b540aSrobert #define f13 13 61*404b540aSrobert #define f14 14 62*404b540aSrobert #define f15 15 63*404b540aSrobert #define f16 16 64*404b540aSrobert #define f17 17 65*404b540aSrobert #define f18 18 66*404b540aSrobert #define f19 19 67*404b540aSrobert #define f20 20 68*404b540aSrobert #define f21 21 69*404b540aSrobert #define f22 22 70*404b540aSrobert #define f23 23 71*404b540aSrobert #define f24 24 72*404b540aSrobert #define f25 25 73*404b540aSrobert #define f26 26 74*404b540aSrobert #define f27 27 75*404b540aSrobert #define f28 28 76*404b540aSrobert #define f29 29 77*404b540aSrobert #define f30 30 78*404b540aSrobert #define f31 31 79*404b540aSrobert 80*404b540aSrobert /* 81*404b540aSrobert * Macros to glue together two tokens. 82*404b540aSrobert */ 83*404b540aSrobert 84*404b540aSrobert #ifdef __STDC__ 85*404b540aSrobert #define XGLUE(a,b) a##b 86*404b540aSrobert #else 87*404b540aSrobert #define XGLUE(a,b) a/**/b 88*404b540aSrobert #endif 89*404b540aSrobert 90*404b540aSrobert #define GLUE(a,b) XGLUE(a,b) 91*404b540aSrobert 92*404b540aSrobert /* 93*404b540aSrobert * Macros to begin and end a function written in assembler. If -mcall-aixdesc 94*404b540aSrobert * or -mcall-nt, create a function descriptor with the given name, and create 95*404b540aSrobert * the real function with one or two leading periods respectively. 96*404b540aSrobert */ 97*404b540aSrobert 98*404b540aSrobert #if defined (__powerpc64__) 99*404b540aSrobert #define FUNC_NAME(name) GLUE(.,name) 100*404b540aSrobert #define JUMP_TARGET(name) FUNC_NAME(name) 101*404b540aSrobert #define FUNC_START(name) \ 102*404b540aSrobert .section ".opd","aw"; \ 103*404b540aSrobert name: \ 104*404b540aSrobert .quad GLUE(.,name); \ 105*404b540aSrobert .quad .TOC.@tocbase; \ 106*404b540aSrobert .quad 0; \ 107*404b540aSrobert .previous; \ 108*404b540aSrobert .type GLUE(.,name),@function; \ 109*404b540aSrobert .globl name; \ 110*404b540aSrobert .globl GLUE(.,name); \ 111*404b540aSrobert GLUE(.,name): 112*404b540aSrobert 113*404b540aSrobert #define FUNC_END(name) \ 114*404b540aSrobert GLUE(.L,name): \ 115*404b540aSrobert .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name) 116*404b540aSrobert 117*404b540aSrobert #elif defined(_CALL_AIXDESC) 118*404b540aSrobert 119*404b540aSrobert #ifdef _RELOCATABLE 120*404b540aSrobert #define DESC_SECTION ".got2" 121*404b540aSrobert #else 122*404b540aSrobert #define DESC_SECTION ".got1" 123*404b540aSrobert #endif 124*404b540aSrobert 125*404b540aSrobert #define FUNC_NAME(name) GLUE(.,name) 126*404b540aSrobert #define JUMP_TARGET(name) FUNC_NAME(name) 127*404b540aSrobert #define FUNC_START(name) \ 128*404b540aSrobert .section DESC_SECTION,"aw"; \ 129*404b540aSrobert name: \ 130*404b540aSrobert .long GLUE(.,name); \ 131*404b540aSrobert .long _GLOBAL_OFFSET_TABLE_; \ 132*404b540aSrobert .long 0; \ 133*404b540aSrobert .previous; \ 134*404b540aSrobert .type GLUE(.,name),@function; \ 135*404b540aSrobert .globl name; \ 136*404b540aSrobert .globl GLUE(.,name); \ 137*404b540aSrobert GLUE(.,name): 138*404b540aSrobert 139*404b540aSrobert #define FUNC_END(name) \ 140*404b540aSrobert GLUE(.L,name): \ 141*404b540aSrobert .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name) 142*404b540aSrobert 143*404b540aSrobert #else 144*404b540aSrobert 145*404b540aSrobert #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name) 146*404b540aSrobert #if defined __PIC__ || defined __pic__ 147*404b540aSrobert #define JUMP_TARGET(name) FUNC_NAME(name@plt) 148*404b540aSrobert #else 149*404b540aSrobert #define JUMP_TARGET(name) FUNC_NAME(name) 150*404b540aSrobert #endif 151*404b540aSrobert #define FUNC_START(name) \ 152*404b540aSrobert .type FUNC_NAME(name),@function; \ 153*404b540aSrobert .globl FUNC_NAME(name); \ 154*404b540aSrobert FUNC_NAME(name): 155*404b540aSrobert 156*404b540aSrobert #define FUNC_END(name) \ 157*404b540aSrobert GLUE(.L,name): \ 158*404b540aSrobert .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name) 159*404b540aSrobert #endif 160*404b540aSrobert 161*404b540aSrobert #if defined __linux__ && !defined __powerpc64__ 162*404b540aSrobert .section .note.GNU-stack 163*404b540aSrobert .previous 164*404b540aSrobert #endif 165