Zephyr API Documentation  3.6.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
assembler.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: Apache-2.0 */
2/*
3 * Copyright (C) 2021 Synopsys, Inc. (www.synopsys.com)
4 *
5 * Author: Vineet Gupta <[email protected]>
6 *
7 * Top level include file providing ISA pseudo-mnemonics for use in assembler
8 * and inline assembly.
9 *
10 * - Helps code reuse across ARC64/ARC32/ARCv2
11 * e.g. "LDR" maps to 'LD' on 32-bit ISA, 'LDL' on 64-bit ARCv2/ARC64
12 *
13 * - Provides emulation with multiple instructions if the case be
14 * e.g. "DBNZ" implemented using 'SUB' and 'BRNE'
15 *
16 * - Looks more complex than it really is: mainly because Kconfig defines
17 * are not "honored" in inline assembly. So each variant is unconditional
18 * code in a standalone file with Kconfig based #ifdef'ry here. During the
19 * build process, the "C" preprocessor runs through this file, leaving
20 * just the final variant include in code fed to compiler/assembler.
21 */
22
23#ifndef __ASM_ARC_ASM_H
24#define __ASM_ARC_ASM_H 1
25
26#ifdef _ASMLANGUAGE
27
28#if defined(CONFIG_ISA_ARCV3) && defined(CONFIG_64BIT)
29#define ARC_PTR .xword
30#define ARC_REGSZ 8
31#define ARC_REGSHIFT 3
32
33#if defined(__CCAC__)
35#else
37#endif /* defined(__CCAC__) */
38
39#elif defined(CONFIG_ISA_ARCV3) && !defined(CONFIG_64BIT)
40#define ARC_PTR .word
41#define ARC_REGSZ 4
42#define ARC_REGSHIFT 2
43
44#if defined(__CCAC__)
46#else
48#endif /* defined(__CCAC__) */
49
50#else
51#define ARC_PTR .word
52#define ARC_REGSZ 4
53#define ARC_REGSHIFT 2
54
55#if defined(__CCAC__)
57#else
59#endif /* defined(__CCAC__) */
60
61#endif
62
63#else /* !_ASMLANGUAGE */
64
65#error "asm-compat macroses used not in assembler code!"
66
67#endif /* _ASMLANGUAGE */
68
69#endif