34#ifndef MCUX_CSSL_ASSEMBLY_H_
35#define MCUX_CSSL_ASSEMBLY_H_
40#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
41#define MCUX_CSSL_ASM_LABEL(name) \
44#define MCUX_CSSL_ASM_FILE_START() \
47#define MCUX_CSSL_ASM_FILE_END()
49#define MCUX_CSSL_ASM_FUNC_ALIGNMENT() \
52#define MCUX_CSSL_ASM_FUNC_SECTION(name) \
53 .section MCUX_CSSL_CPP_CAT(.text.,name)
55#define MCUX_CSSL_ASM_FUNC_SYMBOL_GLOBAL(name) \
58#define MCUX_CSSL_ASM_FUNC_SYMBOL(name) \
61#define MCUX_CSSL_ASM_FUNC_START(name) \
62 MCUX_CSSL_ASM_LABEL(name)
64#define MCUX_CSSL_ASM_FUNC_END(name)
68#elif defined ( __clang__ )
69#define MCUX_CSSL_ASM_LABEL(name) \
72#define MCUX_CSSL_ASM_FILE_START() \
75#define MCUX_CSSL_ASM_FILE_END()
77#define MCUX_CSSL_ASM_FUNC_ALIGNMENT() \
80#define MCUX_CSSL_ASM_FUNC_SECTION(name) \
81 .section MCUX_CSSL_CPP_CAT(.text.,name)
83#define MCUX_CSSL_ASM_FUNC_SYMBOL_GLOBAL(name) \
86#define MCUX_CSSL_ASM_FUNC_SYMBOL(name) \
89#define MCUX_CSSL_ASM_FUNC_START(name) \
90 MCUX_CSSL_ASM_LABEL(name)
92#define MCUX_CSSL_ASM_FUNC_END(name)
95#elif defined ( __GNUC__ )
96#define MCUX_CSSL_ASM_LABEL(name) \
99#define MCUX_CSSL_ASM_FILE_START() \
102#define MCUX_CSSL_ASM_FILE_END()
104#define MCUX_CSSL_ASM_FUNC_ALIGNMENT() \
107#define MCUX_CSSL_ASM_FUNC_SECTION(name) \
108 .section MCUX_CSSL_CPP_CAT(.text.,name)
110#define MCUX_CSSL_ASM_FUNC_SYMBOL_GLOBAL(name) \
113#define MCUX_CSSL_ASM_FUNC_SYMBOL(name) \
114 .type name,"function"
116#define MCUX_CSSL_ASM_FUNC_START(name) \
117 MCUX_CSSL_ASM_LABEL(name)
119#define MCUX_CSSL_ASM_FUNC_END(name)
122#elif defined ( __CC_ARM )
123#define MCUX_CSSL_ASM_FILE_START()
125#define MCUX_CSSL_ASM_FILE_END() \
126 MCUX_CSSL_CPP_EMPTY() END
128#define MCUX_CSSL_ASM_LABEL(name) \
131#define MCUX_CSSL_ASM_FUNC_SECTION(name) \
132 MCUX_CSSL_CPP_EMPTY() AREA MCUX_CSSL_CPP_CAT3(|i.,name,|), CODE, ALIGN=4
134#define MCUX_CSSL_ASM_FUNC_ALIGNMENT() \
135 MCUX_CSSL_CPP_EMPTY() ALIGN
137#define MCUX_CSSL_ASM_FUNC_SYMBOL(name) \
138 MCUX_CSSL_CPP_EMPTY() EXPORT name
140#define MCUX_CSSL_ASM_FUNC_START(name) \
141 MCUX_CSSL_ASM_LABEL(name) FUNCTION
143#define MCUX_CSSL_ASM_FUNC_END(name) \
144 MCUX_CSSL_CPP_EMPTY() ENDFUNC
147#elif defined ( __ghs__ )
148#define MCUX_CSSL_ASM_LABEL(name) \
151#define MCUX_CSSL_ASM_FILE_START()
153#define MCUX_CSSL_ASM_FILE_END()
155#define MCUX_CSSL_ASM_FUNC_ALIGNMENT() \
158#define MCUX_CSSL_ASM_FUNC_SECTION(name) \
159 .section MCUX_CSSL_CPP_CAT(.text.,name), "ax"
161#define MCUX_CSSL_ASM_FUNC_SYMBOL_GLOBAL(name) \
164#define MCUX_CSSL_ASM_FUNC_SYMBOL(name) \
165 .type name, $function
167#define MCUX_CSSL_ASM_FUNC_START(name) \
170#define MCUX_CSSL_ASM_FUNC_END(name)
173#elif defined ( __ICCARM__ ) || defined ( __IASMARM__ )
174#define MCUX_CSSL_ASM_LABEL(name) \
177#define MCUX_CSSL_ASM_FILE_START() \
180#define MCUX_CSSL_ASM_FILE_END() \
181 MCUX_CSSL_CPP_EMPTY() END
183#define MCUX_CSSL_ASM_FUNC_ALIGNMENT() \
184 MCUX_CSSL_CPP_EMPTY() THUMB
186#define MCUX_CSSL_ASM_FUNC_SECTION(name) \
187 MCUX_CSSL_CPP_EMPTY() SECTION .text:CODE(2)
189#define MCUX_CSSL_ASM_FUNC_SYMBOL(name) \
190 MCUX_CSSL_CPP_EMPTY() PUBLIC name
192#define MCUX_CSSL_ASM_FUNC_START(name) \
193 MCUX_CSSL_ASM_LABEL(name)
195#define MCUX_CSSL_ASM_FUNC_END(name)
197#define MCUX_CSSL_ASM_FUNC_SYMBOL_GLOBAL(name)
200#error Unsupported assembler
The default implementation is based on standard C preprocessor functionality.