162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef __ASM_LINKAGE_H 762306a36Sopenharmony_ci#define __ASM_LINKAGE_H 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <asm/dwarf.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define ASM_NL ` /* use '`' to mark new line in macro */ 1262306a36Sopenharmony_ci#define __ALIGN .align 4 1362306a36Sopenharmony_ci#define __ALIGN_STR __stringify(__ALIGN) 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#ifdef __ASSEMBLY__ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci.macro ST2 e, o, off 1862306a36Sopenharmony_ci#ifdef CONFIG_ARC_HAS_LL64 1962306a36Sopenharmony_ci std \e, [sp, \off] 2062306a36Sopenharmony_ci#else 2162306a36Sopenharmony_ci st \e, [sp, \off] 2262306a36Sopenharmony_ci st \o, [sp, \off+4] 2362306a36Sopenharmony_ci#endif 2462306a36Sopenharmony_ci.endm 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci.macro LD2 e, o, off 2762306a36Sopenharmony_ci#ifdef CONFIG_ARC_HAS_LL64 2862306a36Sopenharmony_ci ldd \e, [sp, \off] 2962306a36Sopenharmony_ci#else 3062306a36Sopenharmony_ci ld \e, [sp, \off] 3162306a36Sopenharmony_ci ld \o, [sp, \off+4] 3262306a36Sopenharmony_ci#endif 3362306a36Sopenharmony_ci.endm 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/* annotation for data we want in DCCM - if enabled in .config */ 3662306a36Sopenharmony_ci.macro ARCFP_DATA nm 3762306a36Sopenharmony_ci#ifdef CONFIG_ARC_HAS_DCCM 3862306a36Sopenharmony_ci .section .data.arcfp 3962306a36Sopenharmony_ci#else 4062306a36Sopenharmony_ci .section .data 4162306a36Sopenharmony_ci#endif 4262306a36Sopenharmony_ci .global \nm 4362306a36Sopenharmony_ci.endm 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci/* annotation for data we want in DCCM - if enabled in .config */ 4662306a36Sopenharmony_ci.macro ARCFP_CODE 4762306a36Sopenharmony_ci#ifdef CONFIG_ARC_HAS_ICCM 4862306a36Sopenharmony_ci .section .text.arcfp, "ax",@progbits 4962306a36Sopenharmony_ci#else 5062306a36Sopenharmony_ci .section .text, "ax",@progbits 5162306a36Sopenharmony_ci#endif 5262306a36Sopenharmony_ci.endm 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci#define ENTRY_CFI(name) \ 5562306a36Sopenharmony_ci .globl name ASM_NL \ 5662306a36Sopenharmony_ci ALIGN ASM_NL \ 5762306a36Sopenharmony_ci name: ASM_NL \ 5862306a36Sopenharmony_ci CFI_STARTPROC ASM_NL 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci#define END_CFI(name) \ 6162306a36Sopenharmony_ci CFI_ENDPROC ASM_NL \ 6262306a36Sopenharmony_ci .size name, .-name 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci#else /* !__ASSEMBLY__ */ 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci#ifdef CONFIG_ARC_HAS_ICCM 6762306a36Sopenharmony_ci#define __arcfp_code __section(".text.arcfp") 6862306a36Sopenharmony_ci#else 6962306a36Sopenharmony_ci#define __arcfp_code __section(".text") 7062306a36Sopenharmony_ci#endif 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci#ifdef CONFIG_ARC_HAS_DCCM 7362306a36Sopenharmony_ci#define __arcfp_data __section(".data.arcfp") 7462306a36Sopenharmony_ci#else 7562306a36Sopenharmony_ci#define __arcfp_data __section(".data") 7662306a36Sopenharmony_ci#endif 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci#endif /* __ASSEMBLY__ */ 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci#endif 81