diff options
author | Kazunori Asayama <asayama@sm.sony.co.jp> | 2009-03-13 18:18:35 -0700 |
---|---|---|
committer | Yuji Mano <yuji.mano@am.sony.com> | 2009-03-17 11:09:06 -0700 |
commit | d8fb128a98995bca2cffaaefc50296e554cce87a (patch) | |
tree | 0c6c2b74599206dea4b434cf36a3a53781adb900 | |
parent | b689d4815ebb77680b64af1dad17cb5fba9f100d (diff) | |
download | mars-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.c | 20 |
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) |