]>
Commit | Line | Data |
---|---|---|
688903eb | 1 | /* Copyright (C) 2011-2018 Free Software Foundation, Inc. |
63d143a2 CM |
2 | This file is part of the GNU C Library. |
3 | Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011. | |
4 | ||
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. | |
9 | ||
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. | |
14 | ||
15 | You should have received a copy of the GNU Lesser General Public | |
ab84e3ff PE |
16 | License along with the GNU C Library. If not, see |
17 | <http://www.gnu.org/licenses/>. */ | |
63d143a2 CM |
18 | |
19 | #include <sysdeps/generic/sysdep.h> | |
20 | #include <bits/wordsize.h> | |
21 | #include <arch/abi.h> | |
22 | ||
63d143a2 CM |
23 | #if defined __ASSEMBLER__ || defined REQUEST_ASSEMBLER_MACROS |
24 | ||
975e4ecf | 25 | #include <feedback.h> |
63d143a2 | 26 | |
2fbd74d8 | 27 | /* Make use of .size directive. */ |
63d143a2 CM |
28 | #define ASM_SIZE_DIRECTIVE(name) .size name,.-name; |
29 | ||
30 | /* Define an entry point visible from C. */ | |
31 | #define ENTRY(name) \ | |
5f5bcf71 | 32 | .globl C_SYMBOL_NAME(name); \ |
5c533553 | 33 | .type C_SYMBOL_NAME(name),@function; \ |
63d143a2 CM |
34 | .align 8; \ |
35 | C_LABEL(name) \ | |
36 | cfi_startproc; \ | |
37 | CALL_MCOUNT | |
38 | ||
39 | #undef END | |
40 | #define END(name) \ | |
41 | cfi_endproc; \ | |
42 | ASM_SIZE_DIRECTIVE(name) | |
43 | ||
44 | /* Since C identifiers are not normally prefixed with an underscore | |
45 | on this system, the asm identifier `syscall_error' intrudes on the | |
46 | C name space. Make sure we use an innocuous name. */ | |
47 | #define syscall_error __syscall_error | |
48 | #define mcount __mcount | |
49 | ||
50 | /* If compiled for profiling, call `mcount' at the start of each function. | |
51 | The mcount code requires the caller PC in r10. The `mcount' function | |
52 | sets lr back to the value r10 had on entry when it returns. */ | |
53 | #ifdef PROF | |
54 | #define CALL_MCOUNT { move r10, lr; jal mcount } | |
55 | #else | |
56 | #define CALL_MCOUNT /* Do nothing. */ | |
57 | #endif | |
58 | ||
59 | /* Local label name for asm code. */ | |
60 | #define L(name) .L##name | |
61 | ||
62 | /* Specify the size in bytes of a machine register. */ | |
63d143a2 | 63 | #define REGSIZE 8 |
63d143a2 CM |
64 | |
65 | /* Provide "pointer-oriented" instruction variants. These differ not | |
27ed6484 | 66 | just for tilepro vs tilegx, but also for tilegx -m64 vs -m32. */ |
ed95f611 | 67 | #if __WORDSIZE == 32 |
63d143a2 CM |
68 | #define ADD_PTR addx |
69 | #define ADDI_PTR addxi | |
70 | #define ADDLI_PTR addxli | |
71 | #define LD_PTR ld4s | |
72 | #define ST_PTR st4 | |
73 | #define SHL_PTR_ADD shl2add | |
74 | #else | |
75 | #define ADD_PTR add | |
76 | #define ADDI_PTR addi | |
77 | #define ADDLI_PTR addli | |
78 | #define LD_PTR LD | |
79 | #define ST_PTR ST | |
63d143a2 | 80 | #define SHL_PTR_ADD shl3add |
63d143a2 CM |
81 | #endif |
82 | ||
83 | #endif /* __ASSEMBLER__ */ |