1/* gmp2-2.0.2-ppc/mpn/powerpc-linux/syntax.h Tue Oct 6 19:27:01 1998 */ 2/* From glibc's sysdeps/unix/sysv/linux/powerpc/sysdep.h */ 3 4/* Copyright (C) 1992, 1997, 1998 Free Software Foundation, Inc. 5 This file is part of the GNU C Library. 6 7 The GNU C Library is free software; you can redistribute it and/or 8 modify it under the terms of the GNU Library General Public License as 9 published by the Free Software Foundation; either version 2 of the 10 License, or (at your option) any later version. 11 12 The GNU C Library is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 Library General Public License for more details. 16 17 You should have received a copy of the GNU Library General Public 18 License along with the GNU C Library; see the file COPYING.LIB. If not, 19 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 Boston, MA 02111-1307, USA. */ 21 22 23#define USE_PPC_PATCHES 1 24 25/* This seems to always be the case on PPC. */ 26#define ALIGNARG(log2) log2 27/* For ELF we need the `.type' directive to make shared libs work right. */ 28#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg; 29#define ASM_SIZE_DIRECTIVE(name) .size name,.-name 30#define ASM_GLOBAL_DIRECTIVE .globl 31 32#ifdef __STDC__ 33#define C_LABEL(name) C_SYMBOL_NAME(name)##: 34#else 35#define C_LABEL(name) C_SYMBOL_NAME(name)/**/: 36#endif 37 38#ifdef __STDC__ 39#define L(body) .L##body 40#else 41#define L(body) .L/**/body 42#endif 43 44/* No profiling of gmp's assembly for now... */ 45#define CALL_MCOUNT /* no profiling */ 46 47#define ENTRY(name) \ 48 ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ 49 ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ 50 .align ALIGNARG(2); \ 51 C_LABEL(name) \ 52 CALL_MCOUNT 53 54#define EALIGN_W_0 /* No words to insert. */ 55#define EALIGN_W_1 nop 56#define EALIGN_W_2 nop;nop 57#define EALIGN_W_3 nop;nop;nop 58#define EALIGN_W_4 EALIGN_W_3;nop 59#define EALIGN_W_5 EALIGN_W_4;nop 60#define EALIGN_W_6 EALIGN_W_5;nop 61#define EALIGN_W_7 EALIGN_W_6;nop 62 63/* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes 64 past a 2^align boundary. */ 65#define EALIGN(name, alignt, words) \ 66 ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ 67 ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ 68 .align ALIGNARG(alignt); \ 69 EALIGN_W_##words; \ 70 C_LABEL(name) 71 72#undef END 73#define END(name) \ 74 ASM_SIZE_DIRECTIVE(name) 75 76