firmware: Minor optimization in _scratch_init()
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
@@ -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
Anup Patel
AppliedPATCH 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.Signed-off-by Bin Meng <[email protected]>Reviewed-by Xiang W <[email protected]>Reviewed-by Atish Patra <[email protected]>
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 blockfirmware/fw_base.S | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)firmware/fw_base.S +9
-5@@ -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