| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /* Helper function for the test case in test_context_save_clobber.c */
- #if defined(__XTENSA__)
- #include "xtensa/config/core-isa.h"
- #if defined(XCHAL_HAVE_WINDOWED)
- .data
- recursion_count:
- .word 0
- .text
- .global test_context_save_clober_func
- .type test_context_save_clober_func,@function
- .align 4
- /* This function recursively calls itself via call4, making sure each frame
- * uses only 4 registers. For this reason, recursion count can not be
- * a function argument (it would have to be in a6) and is placed into .data
- * section above.
- */
- test_context_save_clober_func:
- entry a1, 16
- /* load recursion count from memory */
- movi a3, recursion_count
- l32i a2, a3, 0
- /* if it is zero, initialize it to 16 (=64 physical registers / 4 registers per call) */
- bnez a2, 1f
- movi a2, 16
- 1:
- /* decrement the counter and write it back */
- addi a2, a2, -1
- s32i a2, a3, 0
- /* counter not zero? do a recursive call */
- beqz a2, wait
- call4 test_context_save_clober_func
- j end
- wait:
- /* Counter has reached zero, and we have 16 frames on the stack.
- * Delay for a few seconds, expecting in interrupt to happen.
- */
- movi a3, 100000000
- 1:
- addi a3, a3, -1
- bnez a3, 1b
- end:
- retw
- #endif // XCHAL_HAVE_WINDOWED
- #endif // __XTENSA__
|