1 /* Assembler macros for CRIS.
2 Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, write to the Free
17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20 #include <sysdeps/generic/sysdep.h>
23 # error ELF is assumed. Generalize the code and retry.
26 #ifndef NO_UNDERSCORES
27 # error User-label prefix (underscore) assumed absent. Generalize the code and retry.
32 /* Syntactic details of assembly-code. */
34 /* It is *not* generally true that "ELF uses byte-counts for .align, most
35 others use log2 of count of bytes", like some neighboring configs say.
36 See "align" in gas/read.c which is not overridden by
37 gas/config/obj-elf.c. It takes a log2 argument. *Some* targets
38 override it to take a byte argument. People should read source instead
39 of relying on hearsay. */
40 # define ALIGNARG(log2) log2
42 # define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg
43 # define ASM_SIZE_DIRECTIVE(name) .size name,.-name
45 /* The non-PIC jump is preferred, since it does not stall, and does not
46 invoke generation of a PLT. These macros assume that $r0 is set up as
49 # define PLTJUMP(_x) \
50 add.d C_SYMBOL_NAME (_x):PLT,$pc
52 # define PLTCALL(_x) \
53 move.d C_SYMBOL_NAME (_x):PLTG,$r9 @ \
62 # define TEARDOWN_PIC pop $r0
64 # define PLTJUMP(_x) jump C_SYMBOL_NAME (_x)
65 # define PLTCALL(_x) jsr C_SYMBOL_NAME (_x)
70 /* Define an entry point visible from C. */
71 # define ENTRY(name) \
73 ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME (name) @ \
74 ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME (name), function) @ \
75 .align ALIGNARG (2) @ \
81 ASM_SIZE_DIRECTIVE (C_SYMBOL_NAME (name))
83 /* If compiled for profiling, call `mcount' at the start of each function.
84 FIXME: Note that profiling is not actually implemented. This is just
85 example code which might not even compile, though it is believed to be
88 # define CALL_MCOUNT \
105 # define CALL_MCOUNT /* Do nothing. */
108 /* Since C identifiers are not normally prefixed with an underscore
109 on this system, the asm identifier `syscall_error' intrudes on the
110 C name space. Make sure we use an innocuous name. */
111 # define syscall_error __syscall_error
112 # define mcount _mcount
114 #endif /* __ASSEMBLER__ */