aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2011-04-13 22:36:37 -0700
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2011-04-13 22:36:37 -0700
commit04c8f1c003bbee2f9b45f5e706103837a6d61a30 (patch)
treebf07e6e37c333f521da35fc2bb7411f54dc99b9a
parent69ddca76d2e132762ef529bc86a7d0cb6050dede (diff)
downloadpk-04c8f1c003bbee2f9b45f5e706103837a6d61a30.zip
pk-04c8f1c003bbee2f9b45f5e706103837a6d61a30.tar.gz
pk-04c8f1c003bbee2f9b45f5e706103837a6d61a30.tar.bz2
[pk] fixed rv32 (dumb memset bug)
-rw-r--r--pk/memset.c20
1 files 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;