aboutsummaryrefslogtreecommitdiffstats
path: root/arch/xtensa/include/asm/asmmacro.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/xtensa/include/asm/asmmacro.h')
-rw-r--r--arch/xtensa/include/asm/asmmacro.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/arch/xtensa/include/asm/asmmacro.h b/arch/xtensa/include/asm/asmmacro.h
index 8308a9c3abb2..71a7e846bc1f 100644
--- a/arch/xtensa/include/asm/asmmacro.h
+++ b/arch/xtensa/include/asm/asmmacro.h
@@ -191,4 +191,50 @@
191#endif 191#endif
192 .endm 192 .endm
193 193
194#define XTENSA_STACK_ALIGNMENT 16
195
196#if defined(__XTENSA_WINDOWED_ABI__)
197#define XTENSA_FRAME_SIZE_RESERVE 16
198#define XTENSA_SPILL_STACK_RESERVE 32
199
200#define abi_entry(frame_size) \
201 entry sp, (XTENSA_FRAME_SIZE_RESERVE + \
202 (((frame_size) + XTENSA_STACK_ALIGNMENT - 1) & \
203 -XTENSA_STACK_ALIGNMENT))
204#define abi_entry_default abi_entry(0)
205
206#define abi_ret(frame_size) retw
207#define abi_ret_default retw
208
209#elif defined(__XTENSA_CALL0_ABI__)
210
211#define XTENSA_SPILL_STACK_RESERVE 0
212
213#define abi_entry(frame_size) __abi_entry (frame_size)
214
215 .macro __abi_entry frame_size
216 .ifgt \frame_size
217 addi sp, sp, -(((\frame_size) + XTENSA_STACK_ALIGNMENT - 1) & \
218 -XTENSA_STACK_ALIGNMENT)
219 .endif
220 .endm
221
222#define abi_entry_default
223
224#define abi_ret(frame_size) __abi_ret (frame_size)
225
226 .macro __abi_ret frame_size
227 .ifgt \frame_size
228 addi sp, sp, (((\frame_size) + XTENSA_STACK_ALIGNMENT - 1) & \
229 -XTENSA_STACK_ALIGNMENT)
230 .endif
231 ret
232 .endm
233
234#define abi_ret_default ret
235
236#else
237#error Unsupported Xtensa ABI
238#endif
239
194#endif /* _XTENSA_ASMMACRO_H */ 240#endif /* _XTENSA_ASMMACRO_H */