Skip to contentSkip to conversation

firmware: Minor optimization in _scratch_init()

PATCH New Bin Meng 2 participants 2 messages Jul 10, 2021 – Jul 11, 2021

lore
Share & tools
lore

Bin Meng

author
#0 lore raw

PATCH v2 1/1 firmware: Minor optimization in _scratch_init()

Before entering _scratch_init(), register t3 already holds a copy of the firmware end address, hence there is no need to calculate it again. This reduces 3 instructions in each _scratch_init() loop.

---

Changes in v2:
- add a comment block before _scratch_init() documenting all registers used in the loop block

 firmware/fw_base.S | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
firmware/fw_base.S +9 -4
index a5ce946..8e40562 100644
@@ -278,6 +278,14 @@ _bss_zero:
 	/* hartid 0 is mandated by ISA */
 	li	t1, 0
 _scratch_init:
+	/*
+	 * The following registers hold values that are computed before
+	 * entering this block, and should remain unchanged.
+	 *
+	 * t3 -> the firmware end address
+	 * s7 -> HART count
+	 * s8 -> HART stack size
+	 */
 	add	tp, t3, zero
 	mul	a5, s8, t1
 	sub	tp, tp, a5
@@ -287,10 +295,7 @@ _scratch_init:
 	/* Initialize scratch space */
 	/* Store fw_start and fw_size in scratch space */
 	lla	a4, _fw_start
-	lla	a5, _fw_end
-	mul	t0, s7, s8
-	add	a5, a5, t0
-	sub	a5, a5, a4
+	sub	a5, t3, a4
 	REG_S	a4, SBI_SCRATCH_FW_START_OFFSET(tp)
 	REG_S	a5, SBI_SCRATCH_FW_SIZE_OFFSET(tp)
 	/* Store next arg1 in scratch space */
Signature · 1 line
2.25.1
Applied
#1 lore raw

PATCH v2 1/1 firmware: Minor optimization in _scratch_init()

Quoted 8 lines · Bin Meng

Before entering _scratch_init(), register t3 already holds a copy of the firmware end address, hence there is no need to calculate it again. This reduces 3 instructions in each _scratch_init() loop.

Applied this patch to the riscv/opensbi repo

Thanks,
Anup

Quoted 49 lines

---

Changes in v2:
- add a comment block before _scratch_init() documenting all registers used in the loop block

 firmware/fw_base.S | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
firmware/fw_base.S +9 -5
index a5ce946..8e40562 100644
@@ -278,6 +278,14 @@ _bss_zero:
        /* hartid 0 is mandated by ISA */
        li      t1, 0
 _scratch_init:
+       /*
+        * The following registers hold values that are computed before
+        * entering this block, and should remain unchanged.
+        *
+        * t3 -> the firmware end address
+        * s7 -> HART count
+        * s8 -> HART stack size
+        */
        add     tp, t3, zero
        mul     a5, s8, t1
        sub     tp, tp, a5
@@ -287,10 +295,7 @@ _scratch_init:
        /* Initialize scratch space */
        /* Store fw_start and fw_size in scratch space */
        lla     a4, _fw_start
-       lla     a5, _fw_end
-       mul     t0, s7, s8
-       add     a5, a5, t0
-       sub     a5, a5, a4
+       sub     a5, t3, a4
        REG_S   a4, SBI_SCRATCH_FW_START_OFFSET(tp)
        REG_S   a5, SBI_SCRATCH_FW_SIZE_OFFSET(tp)
        /* Store next arg1 in scratch space */
--

2.25.1

--
opensbi mailing list
opensbi at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi