Memcpy: copy words
This commit is contained in:
parent
953074315e
commit
81b2ddf5d1
@ -27,14 +27,28 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "std.h"
|
#include "std.h"
|
||||||
|
|
||||||
void *memcpy(void *dest, const void *src, size_t n) {
|
#define likely(x) __builtin_expect((x), 1)
|
||||||
// TODO align and copy 32 bits at a time
|
|
||||||
uint8_t *d = dest;
|
void *memcpy(void *dst, const void *src, size_t n) {
|
||||||
const uint8_t *s = src;
|
if (likely(!(n&3) && !((long)dst&3) && !((long)src&3))) {
|
||||||
for (; n > 0; n--) {
|
//aligned access, copy words
|
||||||
*d++ = *s++;
|
long *d = dst;
|
||||||
|
const long *s = src;
|
||||||
|
|
||||||
|
for (n=(n>>2); n; n--) {
|
||||||
|
*d++ = *s++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//unaligned access, copy bytes
|
||||||
|
char *d = dst;
|
||||||
|
const char *s = src;
|
||||||
|
|
||||||
|
for (; n; n--) {
|
||||||
|
*d++ = *s++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return dest;
|
|
||||||
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *memmove(void *dest, const void *src, size_t n) {
|
void *memmove(void *dest, const void *src, size_t n) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user