base: Simple mem func
Reduce code size of MPU kernel_mem* functions
This patch reduces code size of kernel_mem* functions in the MARS
kernel implementation by using vector operations. It assumes 16-bytes
boundary alignment and size.
Signed-off-by: Kazunori Asayama <asayama@sm.sony.co.jp>
Signed-off-by: Yuji Mano <yuji.mano@am.sony.com>
diff --git a/base/src/mpu/kernel/kernel.c b/base/src/mpu/kernel/kernel.c
index 3abec65..8ed045d 100644
--- a/base/src/mpu/kernel/kernel.c
+++ b/base/src/mpu/kernel/kernel.c
@@ -77,12 +77,12 @@
static int kernel_memcmp(const void *s1, const void *s2, int size)
{
- const unsigned char *ptr_1 = (const unsigned char *)s1;
- const unsigned char *ptr_2 = (const unsigned char *)s2;
- const unsigned char *ptr_e = ptr_1 + size;
+ __vector const int *vptr_1 = (__vector const int *)s1;
+ __vector const int *vptr_2 = (__vector const int *)s2;
+ __vector const int *vptr_e = (__vector const int *)(s1 + size);
- while (ptr_1 < ptr_e)
- if (*ptr_1++ != *ptr_2++)
+ while (vptr_1 < vptr_e)
+ if (!(*vptr_1++ == *vptr_2++))
return 1;
return 0;
@@ -90,12 +90,12 @@
static void kernel_memcpy(void *dst, const void *src, int size)
{
- unsigned char *ptr_1 = (unsigned char *)dst;
- const unsigned char *ptr_2 = (const unsigned char *)src;
- const unsigned char *ptr_e = ptr_1 + size;
+ __vector const int *vptr_src = (__vector const int *)src;
+ __vector int *vptr_dst = (__vector int *)dst;
+ __vector int *vptr_end = (__vector int *)(dst + size);
- while (ptr_1 < ptr_e)
- *ptr_1++ = *ptr_2++;
+ while (vptr_dst < vptr_end)
+ *vptr_dst++ = *vptr_src++;
}
static uint32_t get_ticks(void)