|
@@ -25,30 +25,39 @@ static inline void spill_registers(void)
|
|
{
|
|
{
|
|
#if XCHAL_NUM_AREGS > 16
|
|
#if XCHAL_NUM_AREGS > 16
|
|
__asm__ __volatile__ (
|
|
__asm__ __volatile__ (
|
|
- " call12 1f\n"
|
|
|
|
|
|
+ " call8 1f\n"
|
|
" _j 2f\n"
|
|
" _j 2f\n"
|
|
" retw\n"
|
|
" retw\n"
|
|
" .align 4\n"
|
|
" .align 4\n"
|
|
"1:\n"
|
|
"1:\n"
|
|
|
|
+#if XCHAL_NUM_AREGS == 32
|
|
|
|
+ " _entry a1, 32\n"
|
|
|
|
+ " addi a8, a0, 3\n"
|
|
|
|
+ " _entry a1, 16\n"
|
|
|
|
+ " mov a12, a12\n"
|
|
|
|
+ " retw\n"
|
|
|
|
+#else
|
|
" _entry a1, 48\n"
|
|
" _entry a1, 48\n"
|
|
- " addi a12, a0, 3\n"
|
|
|
|
-#if XCHAL_NUM_AREGS > 32
|
|
|
|
- " .rept (" __stringify(XCHAL_NUM_AREGS) " - 32) / 12\n"
|
|
|
|
|
|
+ " call12 1f\n"
|
|
|
|
+ " retw\n"
|
|
|
|
+ " .align 4\n"
|
|
|
|
+ "1:\n"
|
|
|
|
+ " .rept (" __stringify(XCHAL_NUM_AREGS) " - 16) / 12\n"
|
|
" _entry a1, 48\n"
|
|
" _entry a1, 48\n"
|
|
" mov a12, a0\n"
|
|
" mov a12, a0\n"
|
|
" .endr\n"
|
|
" .endr\n"
|
|
-#endif
|
|
|
|
- " _entry a1, 48\n"
|
|
|
|
|
|
+ " _entry a1, 16\n"
|
|
#if XCHAL_NUM_AREGS % 12 == 0
|
|
#if XCHAL_NUM_AREGS % 12 == 0
|
|
- " mov a8, a8\n"
|
|
|
|
-#elif XCHAL_NUM_AREGS % 12 == 4
|
|
|
|
" mov a12, a12\n"
|
|
" mov a12, a12\n"
|
|
-#elif XCHAL_NUM_AREGS % 12 == 8
|
|
|
|
|
|
+#elif XCHAL_NUM_AREGS % 12 == 4
|
|
" mov a4, a4\n"
|
|
" mov a4, a4\n"
|
|
|
|
+#elif XCHAL_NUM_AREGS % 12 == 8
|
|
|
|
+ " mov a8, a8\n"
|
|
#endif
|
|
#endif
|
|
" retw\n"
|
|
" retw\n"
|
|
|
|
+#endif
|
|
"2:\n"
|
|
"2:\n"
|
|
- : : : "a12", "a13", "memory");
|
|
|
|
|
|
+ : : : "a8", "a9", "memory");
|
|
#else
|
|
#else
|
|
__asm__ __volatile__ (
|
|
__asm__ __volatile__ (
|
|
" mov a12, a12\n"
|
|
" mov a12, a12\n"
|