| /* Assembler macros for Nios II. |
| Copyright (C) 2015-2018 Free Software Foundation, Inc. |
| This file is part of the GNU C Library. |
| |
| The GNU C Library is free software; you can redistribute it and/or |
| modify it under the terms of the GNU Lesser General Public License as |
| published by the Free Software Foundation; either version 2.1 of the |
| License, or (at your option) any later version. |
| |
| The GNU C Library is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| Lesser General Public License for more details. |
| |
| You should have received a copy of the GNU Lesser General Public |
| License along with the GNU C Library; if not, see |
| <http://www.gnu.org/licenses/>. */ |
| |
| #include <sysdeps/generic/sysdep.h> |
| |
| #ifdef __ASSEMBLER__ |
| |
| /* Syntactic details of assembler. */ |
| |
| #define ASM_SIZE_DIRECTIVE(name) .size name,.-name |
| |
| #define ENTRY(name) \ |
| .globl C_SYMBOL_NAME(name); \ |
| .type C_SYMBOL_NAME(name),%function; \ |
| C_LABEL(name) \ |
| cfi_startproc; \ |
| CALL_MCOUNT; |
| |
| #undef END |
| #define END(name) \ |
| cfi_endproc; \ |
| ASM_SIZE_DIRECTIVE(name) |
| |
| #ifdef PROF |
| |
| # ifdef __PIC__ |
| # define CALL_MCOUNT \ |
| mov r8, ra; \ |
| nextpc r2; \ |
| 1: \ |
| movhi r3, %hiadj(_gp_got - 1b); \ |
| addi r3, r3, %lo(_gp_got - 1b); \ |
| add r2, r2, r3; \ |
| ldw r2, %call(_mcount)(r2); \ |
| callr r2; \ |
| mov ra, r8; \ |
| ret; |
| # else |
| # define CALL_MCOUNT \ |
| mov r8, ra; \ |
| call _mount; \ |
| mov ra, r8; \ |
| ret; |
| # endif |
| |
| #else |
| # define CALL_MCOUNT /* Do nothing. */ |
| #endif |
| |
| #endif /* __ASSEMBLER__ */ |