diff options
Diffstat (limited to 'arch/xtensa/include/asm/asmmacro.h')
-rw-r--r-- | arch/xtensa/include/asm/asmmacro.h | 46 |
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 */ |