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


The following commit(s) were added to refs/heads/master by this push:
     new c15195b  arch/risc-v: Refine riscv_testset.S
c15195b is described below

commit c15195b1267fa390f53107bc2de196e1ce32c94a
Author: Huang Qi <huang...@xiaomi.com>
AuthorDate: Wed Dec 29 18:39:41 2021 +0800

    arch/risc-v: Refine riscv_testset.S
    
    Signed-off-by: Huang Qi <huang...@xiaomi.com>
---
 arch/risc-v/Kconfig                                |  6 +---
 arch/risc-v/src/bl602/Make.defs                    |  2 ++
 arch/risc-v/src/c906/Make.defs                     |  2 ++
 arch/risc-v/src/{rv64gc => common}/riscv_testset.S | 32 ++++++++++++++--------
 arch/risc-v/src/fe310/Make.defs                    |  2 ++
 arch/risc-v/src/litex/Make.defs                    |  2 ++
 arch/risc-v/src/mpfs/Make.defs                     |  2 ++
 arch/risc-v/src/qemu-rv32/Make.defs                |  8 ++++--
 8 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/arch/risc-v/Kconfig b/arch/risc-v/Kconfig
index 3e4195f..960f13d 100644
--- a/arch/risc-v/Kconfig
+++ b/arch/risc-v/Kconfig
@@ -146,6 +146,7 @@ config ARCH_RV_ISA_M
 config ARCH_RV_ISA_A
        bool
        default n
+       select ARCH_HAVE_TESTSET
 
 config ARCH_RV_ISA_C
        bool
@@ -162,11 +163,6 @@ config ARCH_RV_ISA_D
        depends on ARCH_RV_ISA_F
        select ARCH_HAVE_DPFPU
 
-config ARCH_RV32I
-       bool
-       default n
-       select ARCH_HAVE_SETJMP
-
 config ARCH_FAMILY
        string
        default "rv32"          if ARCH_RV32
diff --git a/arch/risc-v/src/bl602/Make.defs b/arch/risc-v/src/bl602/Make.defs
index 4cb1219..c6600b2 100644
--- a/arch/risc-v/src/bl602/Make.defs
+++ b/arch/risc-v/src/bl602/Make.defs
@@ -25,6 +25,8 @@ HEAD_ASRC = bl602_vectors.S
 # Specify our general Assembly files
 CHIP_ASRCS = bl602_head.S riscv_syscall.S bl602_entry.S
 
+CMN_ASRCS += riscv_testset.S
+
 # Specify C code within the common directory to be included
 CMN_CSRCS  += riscv_initialize.c riscv_swint.c
 CMN_CSRCS  += riscv_createstack.c riscv_exit.c
diff --git a/arch/risc-v/src/c906/Make.defs b/arch/risc-v/src/c906/Make.defs
index 8088b46..7b86eee 100644
--- a/arch/risc-v/src/c906/Make.defs
+++ b/arch/risc-v/src/c906/Make.defs
@@ -25,6 +25,8 @@ HEAD_ASRC = c906_vectors.S
 # Specify our general Assembly files
 CHIP_ASRCS = c906_head.S
 
+CMN_ASRCS += riscv_testset.S
+
 # Specify C code within the common directory to be included
 CMN_CSRCS  += riscv_initialize.c riscv_swint.c
 CMN_CSRCS  += riscv_createstack.c riscv_exit.c riscv_fault.c
diff --git a/arch/risc-v/src/rv64gc/riscv_testset.S 
b/arch/risc-v/src/common/riscv_testset.S
similarity index 83%
rename from arch/risc-v/src/rv64gc/riscv_testset.S
rename to arch/risc-v/src/common/riscv_testset.S
index 7a4ccdd..bcbad08 100644
--- a/arch/risc-v/src/rv64gc/riscv_testset.S
+++ b/arch/risc-v/src/common/riscv_testset.S
@@ -1,5 +1,5 @@
 /****************************************************************************
- * arch/risc-v/src/rv64gc/riscv_testset.S
+ * arch/risc-v/src/common/riscv_testset.S
  *
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -25,12 +25,20 @@
 #include <nuttx/config.h>
 #include <arch/spinlock.h>
 
-  .file "arm_testset.S"
+  .file "riscv_testset.S"
 
 /****************************************************************************
  * Pre-processor Definitions
  ****************************************************************************/
 
+#ifdef CONFIG_ARCH_RV32
+#define LR_INST lr.w
+#define SC_INST sc.w
+#else
+#define LR_INST lr.d
+#define SC_INST sc.d
+#endif
+
 /****************************************************************************
  * Public Symbols
  ****************************************************************************/
@@ -78,29 +86,29 @@
 
 up_testset:
 
-  li     a1, SP_LOCKED
+  li       a1, SP_LOCKED
 
   /* Test if the spinlock is locked or not */
 
 retry:
-  lr.d   a2, (a0)       /* Test if spinlock is locked or not */
-  beq    a2, a1, locked /* Already locked? Go to locked: */
+  LR_INST  a2, (a0)       /* Test if spinlock is locked or not */
+  beq      a2, a1, locked /* Already locked? Go to locked: */
 
   /* Not locked ... attempt to lock it */
 
-  sc.d   a2, a1, (a0)   /* Attempt to set the locked state (a1) to (a0) */
-  bnez   a2, retry      /* a2 will not be zero, if sc.b failed, try again */
+  SC_INST  a2, a1, (a0)   /* Attempt to set the locked state (a1) to (a0) */
+  bnez     a2, retry      /* a2 will not be zero, if sc.b failed, try again */
 
   /* Lock acquired -- return SP_UNLOCKED */
 
-  fence                 /* Required before accessing protected resource */
-  li     a0, SP_UNLOCKED
-  jr     ra
+  fence                   /* Required before accessing protected resource */
+  li        a0, SP_UNLOCKED
+  jr        ra
 
   /* Lock not acquired -- return SP_LOCKED */
 
 locked:
-  li     a0, SP_LOCKED
-  jr     ra
+  li        a0, SP_LOCKED
+  jr        ra
   .size        up_testset, . - up_testset
   .end
diff --git a/arch/risc-v/src/fe310/Make.defs b/arch/risc-v/src/fe310/Make.defs
index 88874a9..afe6a9f 100644
--- a/arch/risc-v/src/fe310/Make.defs
+++ b/arch/risc-v/src/fe310/Make.defs
@@ -25,6 +25,8 @@ HEAD_ASRC = fe310_vectors.S
 # Specify our general Assembly files
 CHIP_ASRCS = fe310_head.S riscv_syscall.S
 
+CMN_ASRCS += riscv_testset.S
+
 # Specify C code within the common directory to be included
 CMN_CSRCS  += riscv_initialize.c riscv_swint.c
 CMN_CSRCS  += riscv_allocateheap.c riscv_createstack.c riscv_exit.c
diff --git a/arch/risc-v/src/litex/Make.defs b/arch/risc-v/src/litex/Make.defs
index 5b39519..c1b5510 100644
--- a/arch/risc-v/src/litex/Make.defs
+++ b/arch/risc-v/src/litex/Make.defs
@@ -25,6 +25,8 @@ HEAD_ASRC = litex_vectors.S
 # Specify our general Assembly files
 CHIP_ASRCS = litex_head.S riscv_syscall.S
 
+CMN_ASRCS += riscv_testset.S
+
 # Specify C code within the common directory to be included
 CMN_CSRCS  += riscv_initialize.c riscv_swint.c
 CMN_CSRCS  += riscv_allocateheap.c riscv_createstack.c riscv_exit.c
diff --git a/arch/risc-v/src/mpfs/Make.defs b/arch/risc-v/src/mpfs/Make.defs
index 07f29aa..416ab83 100755
--- a/arch/risc-v/src/mpfs/Make.defs
+++ b/arch/risc-v/src/mpfs/Make.defs
@@ -25,6 +25,8 @@ HEAD_ASRC = mpfs_vectors.S
 # Specify our general Assembly files
 CHIP_ASRCS = mpfs_head.S
 
+CMN_ASRCS += riscv_testset.S
+
 # Specify C code within the common directory to be included
 CMN_CSRCS  += riscv_initialize.c riscv_swint.c
 CMN_CSRCS  += riscv_createstack.c riscv_exit.c riscv_fault.c
diff --git a/arch/risc-v/src/qemu-rv32/Make.defs 
b/arch/risc-v/src/qemu-rv32/Make.defs
index c11e928..6f2b38e 100644
--- a/arch/risc-v/src/qemu-rv32/Make.defs
+++ b/arch/risc-v/src/qemu-rv32/Make.defs
@@ -25,6 +25,8 @@ HEAD_ASRC = qemu_rv32_head.S
 # Specify our general Assembly files
 CHIP_ASRCS = qemu_rv32_vectors.S riscv_syscall.S
 
+CMN_ASRCS += riscv_testset.S
+
 # Specify C code within the common directory to be included
 CMN_CSRCS  += riscv_initialize.c riscv_swint.c
 CMN_CSRCS  += riscv_allocateheap.c riscv_createstack.c riscv_exit.c
@@ -39,15 +41,15 @@ CMN_CSRCS += riscv_checkstack.c
 endif
 
 ifeq ($(CONFIG_ARCH_HAVE_VFORK),y)
-CMN_CSRCS  += riscv_vfork.c
+CMN_CSRCS += riscv_vfork.c
 endif
 
 ifeq ($(CONFIG_SCHED_THREAD_LOCAL),y)
-CMN_CSRCS  += riscv_tls.c
+CMN_CSRCS += riscv_tls.c
 endif
 
 ifeq ($(CONFIG_ARCH_FPU),y)
-CMN_ASRCS  += riscv_fpu.S
+CMN_ASRCS += riscv_fpu.S
 endif
 
 # Specify our C code within this directory to be included

Reply via email to