From 04c8f1c003bbee2f9b45f5e706103837a6d61a30 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Wed, 13 Apr 2011 22:36:37 -0700 Subject: [pk] fixed rv32 (dumb memset bug) --- pk/memset.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/pk/memset.c b/pk/memset.c index 3abb35a..63815d7 100644 --- a/pk/memset.c +++ b/pk/memset.c @@ -7,9 +7,9 @@ void* memset(void* m, int ch, size_t s) { - size_t i = 0; + size_t i; char* mem = (char*)m; - long* lmem = (long*)mem; + long* lmem; long l = ch & 0xFF; l = l | (l << 8); @@ -18,18 +18,9 @@ void* memset(void* m, int ch, size_t s) l = l | (l << 32); #endif - if(s < 8*sizeof(long)) - goto small; - - if((long)m & (sizeof(long)-1)) - { - size_t n = sizeof(long) - ((long)m & (sizeof(long)-1)); - for(i = 0; i < n; i++) - mem[i] = ch; - - mem += n; - s -= n; - } + while((long)mem & (sizeof(long)-1)) + *mem++ = ch, s--; + lmem = (long*)mem; for(i = 0; i < s/sizeof(long) - 7; i += 8) { @@ -43,7 +34,6 @@ void* memset(void* m, int ch, size_t s) lmem[i+7] = l; } -small: for( ; i < s/sizeof(long); i++) lmem[i] = l; -- cgit v1.1