aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazunori Asayama <asayama@sm.sony.co.jp>2009-03-13 18:18:35 -0700
committerYuji Mano <yuji.mano@am.sony.com>2009-03-17 11:09:06 -0700
commitd8fb128a98995bca2cffaaefc50296e554cce87a (patch)
tree0c6c2b74599206dea4b434cf36a3a53781adb900
parentb689d4815ebb77680b64af1dad17cb5fba9f100d (diff)
downloadmars-src-d8fb128a98995bca2cffaaefc50296e554cce87a.tar.gz
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>
-rw-r--r--base/src/mpu/kernel/kernel.c20
1 files changed, 10 insertions, 10 deletions
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 @@ typedef void (*module_entry)(
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 int kernel_memcmp(const void *s1, const void *s2, int size)
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)