You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by GitBox <gi...@apache.org> on 2022/05/19 17:01:31 UTC

[GitHub] [incubator-nuttx] pussuw commented on a diff in pull request #6299: risc-v/vfork: Fix saved register set and add FPU registers

pussuw commented on code in PR #6299:
URL: https://github.com/apache/incubator-nuttx/pull/6299#discussion_r877306407


##########
arch/risc-v/src/common/riscv_vfork.h:
##########
@@ -32,56 +32,59 @@
  * Pre-processor Definitions
  ****************************************************************************/
 
-/* Register r30 may be a frame pointer in some ABIs.  Or may just be saved
- * register s8.  It makes a difference for vfork handling.
+/* Register x8 may be a frame pointer in some ABIs.  Or may just be saved
+ * register s0.  It makes a difference for vfork handling.
  */
 
 #undef VFORK_HAVE_FP
 
-/* r0      zero   Always has the value 0.
- * r1      at     Temporary generally used by assembler.
- * r2-r3   v0-v1  Used for expression evaluations and to hold the integer and
- *                pointer type function return values.
- * r4-r7   a0-a3  Used for passing arguments to functions; values are not
- *                preserved across function calls.
- * r8-r15  t0-t7  Temporary registers used for expression evaluation; values
- *                are not preserved across function calls.
- * r16-r23 s0-s7  Saved registers; values are preserved across function
- *                calls.
- * r24-r25 t8-t9  Temporary registers used for expression evaluations; values
- *                are not preserved across function calls. When calling
- *                position independent functions r25 must contain the address
- *                of the called function.
- * r26-r27 k0-k1  Used only by the operating system.
- * r28     gp     Global pointer and context pointer.
- * r29     sp     Stack pointer.
- * r30     s8     Saved register (like s0-s7).  If a frame pointer is used,
- *                then this is the frame pointer.
- * r31     ra     Return address.
+/* Register ABI Name Description                        Saver
+ *
+ * x0       zero     Hard-wired zero                    —
+ * x1       ra       Return address                     Caller
+ * x2       sp       Stack pointer                      Callee
+ * x3       gp       Global pointer                     —
+ * x4       tp       Thread pointer                     —
+ * x5–7     t0–2     Temporaries                        Caller
+ * x8       s0/fp    Saved register/frame pointer       Callee
+ * x9       s1       Saved register                     Callee
+ * x10–11   a0–1     Function arguments/return values   Caller
+ * x12–17   a2–7     Function arguments                 Caller
+ * x18–27   s2–11    Saved registers                    Callee
+ * x28–31   t3–6     Temporaries                        Caller
+ * f0–7     ft0–7    FP temporaries                     Caller
+ * f8–9     fs0–1    FP saved registers                 Callee
+ * f10–11   fa0–1    FP arguments/return values         Caller
+ * f12–17   fa2–7    FP arguments                       Caller
+ * f18–27   fs2–11   FP saved registers                 Callee
+ * f28–31   ft8–11   FP temporaries                     Caller
  */
 
-#define VFORK_S0_OFFSET   (0*INT_REG_SIZE)   /* Saved register s0 */
 #define VFORK_S1_OFFSET   (1*INT_REG_SIZE)   /* Saved register s1 */
 #define VFORK_S2_OFFSET   (2*INT_REG_SIZE)   /* Saved register s2 */
 #define VFORK_S3_OFFSET   (3*INT_REG_SIZE)   /* Saved register s3 */
 #define VFORK_S4_OFFSET   (4*INT_REG_SIZE)   /* Saved register s4 */
 #define VFORK_S5_OFFSET   (5*INT_REG_SIZE)   /* Saved register s5 */
 #define VFORK_S6_OFFSET   (6*INT_REG_SIZE)   /* Saved register s6 */
 #define VFORK_S7_OFFSET   (7*INT_REG_SIZE)   /* Saved register s7 */
+#define VFORK_S8_OFFSET   (8*INT_REG_SIZE)   /* Saved register s8 */
+#define VFORK_S9_OFFSET   (9*INT_REG_SIZE)   /* Saved register s9 */
+#define VFORK_S10_OFFSET  (10*INT_REG_SIZE)  /* Saved register s10 */
+#define VFORK_S11_OFFSET  (11*INT_REG_SIZE)  /* Saved register s11 */
 
 #ifdef CONFIG_RISCV_FRAMEPOINTER
-#  define VFORK_FP_OFFSET (8*INT_REG_SIZE)   /* Frame pointer */
+#  define VFORK_FP_OFFSET (0*INT_REG_SIZE)   /* Frame pointer */
 #else
-#  define VFORK_S8_OFFSET (8*INT_REG_SIZE)   /* Saved register s8 */
+#  define VFORK_S0_OFFSET (0*INT_REG_SIZE)   /* Saved register s0 */
 #endif
 
-#define VFORK_SP_OFFSET   (9*INT_REG_SIZE)   /* Stack pointer*/
-#define VFORK_RA_OFFSET   (10*INT_REG_SIZE)  /* Return address*/
+#define VFORK_SP_OFFSET   (12*INT_REG_SIZE)  /* Stack pointer*/
+#define VFORK_RA_OFFSET   (13*INT_REG_SIZE)  /* Return address*/
 #ifdef RISCV_SAVE_GP
-#  define VFORK_GP_OFFSET (11*INT_REG_SIZE)  /* Global pointer */
-#  define VFORK_SIZEOF    (12*INT_REG_SIZE)
+#  define VFORK_GP_OFFSET (14*INT_REG_SIZE)  /* Global pointer */
+#  define VFORK_SIZEOF    (15*INT_REG_SIZE)
 #else
-#  define VFORK_SIZEOF    (11*INT_REG_SIZE)
+#  define VFORK_SIZEOF    (13*INT_REG_SIZE)

Review Comment:
   Fixed here: https://github.com/apache/incubator-nuttx/pull/6300



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org