This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit e9018b29bf758c4721917a70c356b2c47176c199
Author: Abdelatif Guettouche <abdelatif.guettou...@espressif.com>
AuthorDate: Fri Mar 11 15:58:56 2022 +0100

    xtensa_context.S: Remove the CALL0 ABI version of xtensa_context_switch
    as it's the same as the Window ABI now.
    
    Signed-off-by: Abdelatif Guettouche <abdelatif.guettou...@espressif.com>
---
 arch/xtensa/src/common/xtensa_context.S | 118 +++-----------------------------
 1 file changed, 9 insertions(+), 109 deletions(-)

diff --git a/arch/xtensa/src/common/xtensa_context.S 
b/arch/xtensa/src/common/xtensa_context.S
index fa5850d..6e9b41b 100644
--- a/arch/xtensa/src/common/xtensa_context.S
+++ b/arch/xtensa/src/common/xtensa_context.S
@@ -82,21 +82,17 @@
  *
  *   NOTE: MUST BE CALLED ONLY BY 'CALL0' INSTRUCTION!
  *
- *   This function saves Xtensa processor state:  xtensa_context_save
- *   saves all registers except PC, PS, A0, A1 (SP), and A2
- *
- *   This function is called directly by interrupt handling logic and from
- *   xtensa_context_save() below with interrupts disabled.  In either calling
- *   context, caller saves PC, PS, A0, A1 (SP), and A2.  This
- *   logic also executes indirectly from xtensa_context_save() by falling
- *   through from above.
+ *   This function saves Xtensa processor state.
+ *   It is called directly by interrupt handling logic with interrupts
+ *   disabled.  Registers PC, PS, A0, A1 (SP), A2 and A3 are saved before
+ *   calling this function. 
  *
  *   The counterpart to this function is _xtensa_context_restore().
  *
  * Entry Conditions:
  *   - A0  = Return address to caller.
  *   - A2  = Pointer to the processor state save area
- *   - Other processor state except PC, PS, A0, A1 (SP), and A2 are as at
+ *   - Other processor state except PC, PS, A0, A1 (SP), A2 and A3 are as at
  *     the point of interruption.
  *
  * Exit conditions:
@@ -185,107 +181,12 @@ _xtensa_context_save:
  *
  * Description:
  *
- *   This functions implements the moral equivalent of setjmp().  It is
+ *   This function implements the moral equivalent of setjmp().  It is
  *   called from user code (with interrupts disabled) to save the current
  *   state of the running thread.  This function always returns zero.
- *   However, it sets the saved value of the return address (A2) to 1.
- *   If the thread is s via _xtensa_context_restore or
- *   xtensa_context_restore, it will appear as a second return from
- *   xtensa_context_save but with the returned value of 1 to distinguish
- *   the two cases.
  *
  *   The counterpart to this function is xtensa_context_restore().
  *
- * Entry Conditions:
- *   - A0  = Return address to caller.
- *   - A2  = Pointer to the processor state save area
- *
- * Exit conditions:
- *   - A0  = Return address in caller.
- *   - A2  = 0
- *
- * Assumptions:
- *   - Interrupts are disabled.
- *
- ****************************************************************************/
-
-#ifdef __XTENSA_CALL0_ABI__
-
-/****************************************************************************
- * Name: xtensa_context_save:
- *
- * Description:
- *   This implementation of xtensa_context_save for the case of the CALL0 ABI
- *
- * Input State:
- *   a0 = The return value to the caller.
- *   a2 = The address of the register state structure
- *
- * Return state:
- *   a0 = The return value to the caller.
- *   a2, a12-a15 preserved as at entry
- *
- ****************************************************************************/
-
-       .global xtensa_context_save
-       .type   xtensa_context_save, @function
-
-       .align  4
-       .literal_position
-       .align  4
-
-xtensa_context_save:
-       ENTRY(16)
-
-       /* Set up for (potential) call to _xtensa_context_save() */
-
-       s32i    a3,  a2, (4 * REG_A3)                   /* Get  scratch 
register */
-       rsr             a3, PS                                                  
/* Save callee's PS */
-       s32i    a3, a2, (4 * REG_PS)
-       s32i    a0, a2, (4 * REG_PC)                    /* Save Return address 
as PC */
-
-       s32i    a0, a2, (4 * REG_A0)                    /* Save callee's a0 */
-       s32i    sp, a2, (4 * REG_A1)                    /* Save callee's SP */
-       movi    a3, 1                                                   /* Set 
saved A2 to 1 */
-       s32i    a3, a2, (4 * REG_A2)
-
-       /* Save the rest of the processor state.  For the CALL0 ABI, we can use
-        * _xtensa_context_save(),  Otherwise we duplicate the context save here
-        * to avoid the window spill.
-        */
-
-       l32i    a3, a2, (4 * REG_A3)                    /* Recover original a3 
*/
-       call0   _xtensa_context_save                    /* Save full register 
state */
-
-       /* Recover the return address and return zero */
-
-       l32i    a0, a2, (4 * REG_A0)                    /* Recover return 
address */
-       movi    a2, 0                                                   /* 
Return zero */
-       RET(16)
-
-       .size   xtensa_context_save, . - xtensa_context_save
-#endif
-
-/****************************************************************************
- * This implementation of xtensa_context_save for the case of the window ABI.
- * This case is more complex.  For the Window ABI, there is a "hook" that
- * performs the low level state.  xtensa_context_save() is simply a
- * trampoline function that performs the window operations in that
- * configuration.
- ****************************************************************************/
-
-#ifndef __XTENSA_CALL0_ABI__
-
-/****************************************************************************
- * Name: xtensa_context_save:
- *
- * Description:
- *   This is the implementation of xtensa_context_save for the case of the
- *   window ABI.  In the window ABI configuration, xtensa_context_save is a
- *   thin  "trampoline" layer.  It performs the ENTRY window operations on
- *   entry and the exit.  A call0 is used to force the return from the context
- *   switch to the window return within this trampoline.
- *
  * Input State:
  *   a0 = The true return value to the caller.
  *   a2 = The address of the register state structure
@@ -315,7 +216,6 @@ xtensa_context_save:
        RET(16)
 
        .size   xtensa_context_save, . - xtensa_context_save
-#endif
 
 /****************************************************************************
  * Name: _xtensa_context_restore
@@ -324,9 +224,9 @@ xtensa_context_save:
  *
  *   NOTE: MUST BE CALLED ONLY BY 'CALL0' INSTRUCTION!
  *
- *   These functions restores Xtensa processor state and differ in which
- *   registers are saved: _xtensa_context_restore() restores all registers
- *   except PC, PS, A0, and A2
+ *   This function restores Xtensa processor state.
+ *   It is called directly by interrupt handling logic with interrupts
+ *   disabled.  It restores all registers except PC, PS, A0, and A2
  *
  *   The caller is responsible for restoring PC, PS, A0, and A2.
  *

Reply via email to