Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: fusl/src/string/memcpy.c

Issue 1714623002: [fusl] clang-format fusl (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: headers too Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: fusl/src/string/memcpy.c
diff --git a/fusl/src/string/memcpy.c b/fusl/src/string/memcpy.c
index 06e88742b1144a3b770184cc34dc14d96bdd2134..4889803997831642238df7f18888b79081314063 100644
--- a/fusl/src/string/memcpy.c
+++ b/fusl/src/string/memcpy.c
@@ -2,10 +2,9 @@
#include <stdint.h>
#include <endian.h>
-void *memcpy(void *restrict dest, const void *restrict src, size_t n)
-{
- unsigned char *d = dest;
- const unsigned char *s = src;
+void* memcpy(void* restrict dest, const void* restrict src, size_t n) {
+ unsigned char* d = dest;
+ const unsigned char* s = src;
#ifdef __GNUC__
@@ -17,108 +16,136 @@ void *memcpy(void *restrict dest, const void *restrict src, size_t n)
#define RS >>
#endif
- typedef uint32_t __attribute__((__may_alias__)) u32;
- uint32_t w, x;
+ typedef uint32_t __attribute__((__may_alias__)) u32;
+ uint32_t w, x;
- for (; (uintptr_t)s % 4 && n; n--) *d++ = *s++;
+ for (; (uintptr_t)s % 4 && n; n--)
+ *d++ = *s++;
- if ((uintptr_t)d % 4 == 0) {
- for (; n>=16; s+=16, d+=16, n-=16) {
- *(u32 *)(d+0) = *(u32 *)(s+0);
- *(u32 *)(d+4) = *(u32 *)(s+4);
- *(u32 *)(d+8) = *(u32 *)(s+8);
- *(u32 *)(d+12) = *(u32 *)(s+12);
- }
- if (n&8) {
- *(u32 *)(d+0) = *(u32 *)(s+0);
- *(u32 *)(d+4) = *(u32 *)(s+4);
- d += 8; s += 8;
- }
- if (n&4) {
- *(u32 *)(d+0) = *(u32 *)(s+0);
- d += 4; s += 4;
- }
- if (n&2) {
- *d++ = *s++; *d++ = *s++;
- }
- if (n&1) {
- *d = *s;
- }
- return dest;
- }
+ if ((uintptr_t)d % 4 == 0) {
+ for (; n >= 16; s += 16, d += 16, n -= 16) {
+ *(u32*)(d + 0) = *(u32*)(s + 0);
+ *(u32*)(d + 4) = *(u32*)(s + 4);
+ *(u32*)(d + 8) = *(u32*)(s + 8);
+ *(u32*)(d + 12) = *(u32*)(s + 12);
+ }
+ if (n & 8) {
+ *(u32*)(d + 0) = *(u32*)(s + 0);
+ *(u32*)(d + 4) = *(u32*)(s + 4);
+ d += 8;
+ s += 8;
+ }
+ if (n & 4) {
+ *(u32*)(d + 0) = *(u32*)(s + 0);
+ d += 4;
+ s += 4;
+ }
+ if (n & 2) {
+ *d++ = *s++;
+ *d++ = *s++;
+ }
+ if (n & 1) {
+ *d = *s;
+ }
+ return dest;
+ }
- if (n >= 32) switch ((uintptr_t)d % 4) {
- case 1:
- w = *(u32 *)s;
- *d++ = *s++;
- *d++ = *s++;
- *d++ = *s++;
- n -= 3;
- for (; n>=17; s+=16, d+=16, n-=16) {
- x = *(u32 *)(s+1);
- *(u32 *)(d+0) = (w LS 24) | (x RS 8);
- w = *(u32 *)(s+5);
- *(u32 *)(d+4) = (x LS 24) | (w RS 8);
- x = *(u32 *)(s+9);
- *(u32 *)(d+8) = (w LS 24) | (x RS 8);
- w = *(u32 *)(s+13);
- *(u32 *)(d+12) = (x LS 24) | (w RS 8);
- }
- break;
- case 2:
- w = *(u32 *)s;
- *d++ = *s++;
- *d++ = *s++;
- n -= 2;
- for (; n>=18; s+=16, d+=16, n-=16) {
- x = *(u32 *)(s+2);
- *(u32 *)(d+0) = (w LS 16) | (x RS 16);
- w = *(u32 *)(s+6);
- *(u32 *)(d+4) = (x LS 16) | (w RS 16);
- x = *(u32 *)(s+10);
- *(u32 *)(d+8) = (w LS 16) | (x RS 16);
- w = *(u32 *)(s+14);
- *(u32 *)(d+12) = (x LS 16) | (w RS 16);
- }
- break;
- case 3:
- w = *(u32 *)s;
- *d++ = *s++;
- n -= 1;
- for (; n>=19; s+=16, d+=16, n-=16) {
- x = *(u32 *)(s+3);
- *(u32 *)(d+0) = (w LS 8) | (x RS 24);
- w = *(u32 *)(s+7);
- *(u32 *)(d+4) = (x LS 8) | (w RS 24);
- x = *(u32 *)(s+11);
- *(u32 *)(d+8) = (w LS 8) | (x RS 24);
- w = *(u32 *)(s+15);
- *(u32 *)(d+12) = (x LS 8) | (w RS 24);
- }
- break;
- }
- if (n&16) {
- *d++ = *s++; *d++ = *s++; *d++ = *s++; *d++ = *s++;
- *d++ = *s++; *d++ = *s++; *d++ = *s++; *d++ = *s++;
- *d++ = *s++; *d++ = *s++; *d++ = *s++; *d++ = *s++;
- *d++ = *s++; *d++ = *s++; *d++ = *s++; *d++ = *s++;
- }
- if (n&8) {
- *d++ = *s++; *d++ = *s++; *d++ = *s++; *d++ = *s++;
- *d++ = *s++; *d++ = *s++; *d++ = *s++; *d++ = *s++;
- }
- if (n&4) {
- *d++ = *s++; *d++ = *s++; *d++ = *s++; *d++ = *s++;
- }
- if (n&2) {
- *d++ = *s++; *d++ = *s++;
- }
- if (n&1) {
- *d = *s;
- }
- return dest;
+ if (n >= 32)
+ switch ((uintptr_t)d % 4) {
+ case 1:
+ w = *(u32*)s;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ n -= 3;
+ for (; n >= 17; s += 16, d += 16, n -= 16) {
+ x = *(u32*)(s + 1);
+ *(u32*)(d + 0) = (w LS 24) | (x RS 8);
+ w = *(u32*)(s + 5);
+ *(u32*)(d + 4) = (x LS 24) | (w RS 8);
+ x = *(u32*)(s + 9);
+ *(u32*)(d + 8) = (w LS 24) | (x RS 8);
+ w = *(u32*)(s + 13);
+ *(u32*)(d + 12) = (x LS 24) | (w RS 8);
+ }
+ break;
+ case 2:
+ w = *(u32*)s;
+ *d++ = *s++;
+ *d++ = *s++;
+ n -= 2;
+ for (; n >= 18; s += 16, d += 16, n -= 16) {
+ x = *(u32*)(s + 2);
+ *(u32*)(d + 0) = (w LS 16) | (x RS 16);
+ w = *(u32*)(s + 6);
+ *(u32*)(d + 4) = (x LS 16) | (w RS 16);
+ x = *(u32*)(s + 10);
+ *(u32*)(d + 8) = (w LS 16) | (x RS 16);
+ w = *(u32*)(s + 14);
+ *(u32*)(d + 12) = (x LS 16) | (w RS 16);
+ }
+ break;
+ case 3:
+ w = *(u32*)s;
+ *d++ = *s++;
+ n -= 1;
+ for (; n >= 19; s += 16, d += 16, n -= 16) {
+ x = *(u32*)(s + 3);
+ *(u32*)(d + 0) = (w LS 8) | (x RS 24);
+ w = *(u32*)(s + 7);
+ *(u32*)(d + 4) = (x LS 8) | (w RS 24);
+ x = *(u32*)(s + 11);
+ *(u32*)(d + 8) = (w LS 8) | (x RS 24);
+ w = *(u32*)(s + 15);
+ *(u32*)(d + 12) = (x LS 8) | (w RS 24);
+ }
+ break;
+ }
+ if (n & 16) {
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ }
+ if (n & 8) {
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ }
+ if (n & 4) {
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ }
+ if (n & 2) {
+ *d++ = *s++;
+ *d++ = *s++;
+ }
+ if (n & 1) {
+ *d = *s;
+ }
+ return dest;
#endif
- for (; n; n--) *d++ = *s++;
- return dest;
+ for (; n; n--)
+ *d++ = *s++;
+ return dest;
}

Powered by Google App Engine
This is Rietveld 408576698