root/arch/arc/include/asm/linkage.h
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
 */

#ifndef __ASM_LINKAGE_H
#define __ASM_LINKAGE_H

#include <asm/dwarf.h>

#define ASM_NL           `      /* use '`' to mark new line in macro */
#define __ALIGN         .align 4
#define __ALIGN_STR     __stringify(__ALIGN)

#ifdef __ASSEMBLER__

.macro ST2 e, o, off
#ifdef CONFIG_ARC_HAS_LL64
        std     \e, [sp, \off]
#else
        st      \e, [sp, \off]
        st      \o, [sp, \off+4]
#endif
.endm

.macro LD2 e, o, off
#ifdef CONFIG_ARC_HAS_LL64
        ldd     \e, [sp, \off]
#else
        ld      \e, [sp, \off]
        ld      \o, [sp, \off+4]
#endif
.endm

/* annotation for data we want in DCCM - if enabled in .config */
.macro ARCFP_DATA nm
#ifdef CONFIG_ARC_HAS_DCCM
        .section .data.arcfp
#else
        .section .data
#endif
        .global \nm
.endm

/* annotation for data we want in DCCM - if enabled in .config */
.macro ARCFP_CODE
#ifdef CONFIG_ARC_HAS_ICCM
        .section .text.arcfp, "ax",@progbits
#else
        .section .text, "ax",@progbits
#endif
.endm

#define ENTRY_CFI(name)         \
        .globl name ASM_NL      \
        ALIGN ASM_NL            \
        name: ASM_NL            \
        CFI_STARTPROC ASM_NL

#define END_CFI(name)           \
        CFI_ENDPROC ASM_NL      \
        .size name, .-name

#else   /* !__ASSEMBLER__ */

#ifdef CONFIG_ARC_HAS_ICCM
#define __arcfp_code __section(".text.arcfp")
#else
#define __arcfp_code __section(".text")
#endif

#ifdef CONFIG_ARC_HAS_DCCM
#define __arcfp_data __section(".data.arcfp")
#else
#define __arcfp_data __section(".data")
#endif

#endif /* __ASSEMBLER__ */

#endif