From 6b97950cf5d51afcfd8d059a0d8baa15601e55ab Mon Sep 17 00:00:00 2001 From: Samuel Holland Date: Thu, 20 Feb 2025 10:42:28 -0800 Subject: lib: sbi_scratch: Optimize hartid and scratch lookup The compiler generates much better code for sbi_hartindex_to_hartid() and sbi_hartindex_to_scratch() when using a constant for the bounds check. This works out nicely because the underlying arrays are already a constant size, so the only change needed is to fill the remainder of each array with the appropriate default/out-of-bounds value. The ellipsis in the designated initializer is a GCC extension (also supported by Clang), but avoids runtime initialization of the array. Signed-off-by: Samuel Holland Reviewed-by: Anup Patel --- include/sbi/sbi_scratch.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/sbi/sbi_scratch.h b/include/sbi/sbi_scratch.h index 0d188d12..1ec1710e 100644 --- a/include/sbi/sbi_scratch.h +++ b/include/sbi/sbi_scratch.h @@ -226,7 +226,7 @@ extern u32 hartindex_to_hartid_table[]; /** Get sbi_scratch from HART index */ #define sbi_hartindex_to_hartid(__hartindex) \ ({ \ - ((__hartindex) <= sbi_scratch_last_hartindex()) ?\ + ((__hartindex) < SBI_HARTMASK_MAX_BITS) ? \ hartindex_to_hartid_table[__hartindex] : -1U; \ }) @@ -236,8 +236,8 @@ extern struct sbi_scratch *hartindex_to_scratch_table[]; /** Get sbi_scratch from HART index */ #define sbi_hartindex_to_scratch(__hartindex) \ ({ \ - ((__hartindex) <= sbi_scratch_last_hartindex()) ?\ - hartindex_to_scratch_table[__hartindex] : NULL;\ + ((__hartindex) < SBI_HARTMASK_MAX_BITS) ? \ + hartindex_to_scratch_table[__hartindex] : NULL; \ }) /** -- cgit v1.3.1