1 /* Assembler macros for C-SKY. 2 Copyright (C) 2018-2021 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 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 16 License along with the GNU C Library. If not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #include <sysdeps/generic/sysdep.h> 20 #include <features.h> 21 22 #ifdef __ASSEMBLER__ 23 24 # define ASM_SIZE_DIRECTIVE(name) .size name,.-name 25 26 /* Define an entry point visible from C. */ 27 # define ENTRY(name) \ 28 .globl name; \ 29 .type name,@function; \ 30 .align 4; \ 31 name##:; \ 32 cfi_startproc; \ 33 CALL_MCOUNT 34 35 # undef END 36 # define END(name) \ 37 cfi_endproc; \ 38 ASM_SIZE_DIRECTIVE(name) 39 40 /* If compiled for profiling, call `mcount' at the start of each function. */ 41 # ifdef PROF 42 # ifdef __PIC__ 43 # define CALL_MCOUNT \ 44 subi sp, 4; \ 45 stw lr, (sp, 0); \ 46 grs t0, .Lgetpc; \ 47 .Lgetpc: \ 48 lrw gb, .Lgetpc@GOTPC; \ 49 addu gb, t0; \ 50 lrw t1, _mcount@PLT; \ 51 ldr.w t0, (gb, t1 << 0); \ 52 jmp t0; 53 # else 54 # define CALL_MCOUNT \ 55 subi sp, 4; \ 56 stw lr, (sp, 0); \ 57 jbsr _mcount; 58 # endif 59 # else 60 # define CALL_MCOUNT /* Do nothing. */ 61 # endif 62 63 # if defined (__CK860__) 64 /* Instruction fetch will be faster when the label is 16 bytes aligned. 65 Filling with nop instruction to avoid extra jump. */ 66 # define LABLE_ALIGN \ 67 .balignw 16, 0x6c03 68 69 # define PRE_BNEZAD(R) 70 71 # define BNEZAD(R, L) \ 72 bnezad R, L 73 # else 74 # define LABLE_ALIGN \ 75 .balignw 8, 0x6c03 76 77 # define PRE_BNEZAD(R) \ 78 subi R, 1 79 80 # define BNEZAD(R, L) \ 81 bnez R, L 82 # endif 83 84 #endif 85