Bläddra i källkod

[libcpu]riscv使用call指令解决长跳转问题

heyuanjie87 6 månader sedan
förälder
incheckning
2b21b095f9
2 ändrade filer med 8 tillägg och 6 borttagningar
  1. 4 4
      libcpu/risc-v/common64/context_gcc.S
  2. 4 2
      libcpu/risc-v/common64/interrupt_gcc.S

+ 4 - 4
libcpu/risc-v/common64/context_gcc.S

@@ -77,11 +77,11 @@
 rt_hw_context_switch_to:
     LOAD sp, (a0)
 
-    jal rt_thread_self
+    call rt_thread_self
     mv s1, a0
 
     #ifdef RT_USING_SMART
-        jal lwp_aspace_switch
+        call lwp_aspace_switch
     #endif
 
     RESTORE_CONTEXT
@@ -104,11 +104,11 @@ rt_hw_context_switch:
     LOAD sp, (a1)
 
     // restore Address Space
-    jal rt_thread_self
+    call rt_thread_self
     mv s1, a0
 
     #ifdef RT_USING_SMART
-        jal lwp_aspace_switch
+        call lwp_aspace_switch
     #endif
 
     RESTORE_CONTEXT

+ 4 - 2
libcpu/risc-v/common64/interrupt_gcc.S

@@ -46,7 +46,8 @@ _distinguish_syscall:
 #ifdef RT_USING_SMART
     // TODO swap 8 with config macro name
     li      t1, 8
-    beq     t0, t1, syscall_entry
+    bne     t0, t1, _handle_interrupt_and_exception
+    call syscall_entry
     // syscall never return here
 #endif
 
@@ -78,7 +79,8 @@ _resume_execution:
 #ifdef RT_USING_SMART
     LOAD    t0, FRAME_OFF_SSTATUS(sp)
     andi    t0, t0, SSTATUS_SPP
-    beqz    t0, arch_ret_to_user
+    bnez    t0, _resume_kernel
+    call arch_ret_to_user
 #endif
 
 _resume_kernel: