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