|
6 | 6 | * Change Logs:
|
7 | 7 | * Date Author Notes
|
8 | 8 | * 2024-03-28 Shell Move vector handling codes from context_gcc.S
|
| 9 | + * 2024-04-08 Shell Optimizing exception switch between u-space/kernel, |
9 | 10 | */
|
10 | 11 |
|
11 | 12 | #ifndef __ARM64_INC_VECTOR_H__
|
|
45 | 46 | mrs x2, elr_el1
|
46 | 47 |
|
47 | 48 | stp x2, x3, [sp, #-0x10]!
|
48 |
| - |
49 |
| - mov x0, sp /* Move SP into X0 for saving. */ |
50 | 49 | .endm
|
51 | 50 |
|
52 | 51 | #ifdef RT_USING_SMP
|
|
55 | 54 | #include "../up/context_gcc.h"
|
56 | 55 | #endif
|
57 | 56 |
|
58 |
| -.macro RESTORE_IRQ_CONTEXT_WITHOUT_MMU_SWITCH |
59 |
| - /* the SP is already ok */ |
60 |
| - ldp x2, x3, [sp], #0x10 /* SPSR and ELR. */ |
61 |
| - |
62 |
| - tst x3, #0x1f |
63 |
| - msr spsr_el1, x3 |
64 |
| - msr elr_el1, x2 |
65 |
| - |
66 |
| - ldp x29, x30, [sp], #0x10 |
67 |
| - msr sp_el0, x29 |
68 |
| - ldp x28, x29, [sp], #0x10 |
69 |
| - msr fpcr, x28 |
70 |
| - msr fpsr, x29 |
71 |
| - ldp x28, x29, [sp], #0x10 |
72 |
| - ldp x26, x27, [sp], #0x10 |
73 |
| - ldp x24, x25, [sp], #0x10 |
74 |
| - ldp x22, x23, [sp], #0x10 |
75 |
| - ldp x20, x21, [sp], #0x10 |
76 |
| - ldp x18, x19, [sp], #0x10 |
77 |
| - ldp x16, x17, [sp], #0x10 |
78 |
| - ldp x14, x15, [sp], #0x10 |
79 |
| - ldp x12, x13, [sp], #0x10 |
80 |
| - ldp x10, x11, [sp], #0x10 |
81 |
| - ldp x8, x9, [sp], #0x10 |
82 |
| - ldp x6, x7, [sp], #0x10 |
83 |
| - ldp x4, x5, [sp], #0x10 |
84 |
| - ldp x2, x3, [sp], #0x10 |
85 |
| - ldp x0, x1, [sp], #0x10 |
86 |
| - RESTORE_FPU sp |
| 57 | +.macro SAVE_USER_CTX, eframex, tmpx |
87 | 58 | #ifdef RT_USING_SMART
|
88 |
| - beq arch_ret_to_user |
89 |
| -#endif |
90 |
| - eret |
91 |
| -.endm |
92 |
| - |
93 |
| -.macro SAVE_USER_CTX |
94 |
| - mrs x1, spsr_el1 |
95 |
| - and x1, x1, 0xf |
96 |
| - cmp x1, xzr |
97 |
| - |
98 |
| - bne 1f |
99 |
| - bl lwp_uthread_ctx_save |
100 |
| - ldp x0, x1, [sp] |
| 59 | + mrs \tmpx, spsr_el1 |
| 60 | + and \tmpx, \tmpx, 0xf |
| 61 | + cbz \tmpx, 1f |
| 62 | + b 2f |
101 | 63 | 1:
|
| 64 | + mov x0, \eframex |
| 65 | + bl lwp_uthread_ctx_save |
| 66 | +2: |
| 67 | +#endif /* RT_USING_SMART */ |
102 | 68 | .endm
|
103 | 69 |
|
104 |
| -.macro RESTORE_USER_CTX, ctx |
105 |
| - ldr x1, [\ctx, #CONTEXT_OFFSET_SPSR_EL1] |
106 |
| - and x1, x1, 0x1f |
107 |
| - cmp x1, xzr |
108 |
| - |
109 |
| - bne 1f |
110 |
| - bl lwp_uthread_ctx_restore |
| 70 | +.macro RESTORE_USER_CTX, eframex, tmpx |
| 71 | +#ifdef RT_USING_SMART |
| 72 | + ldr \tmpx, [\eframex, #CONTEXT_OFFSET_SPSR_EL1] |
| 73 | + and \tmpx, \tmpx, 0x1f |
| 74 | + cbz \tmpx, 1f |
| 75 | + b 2f |
111 | 76 | 1:
|
| 77 | + bl lwp_uthread_ctx_restore |
| 78 | +2: |
| 79 | +#endif /* RT_USING_SMART */ |
112 | 80 | .endm
|
113 | 81 |
|
114 | 82 | #endif /* __ARM64_INC_VECTOR_H__ */
|
0 commit comments