mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-04 18:28:30 +00:00
Make progress towards aarch64 build
This commit is contained in:
parent
08ff26c817
commit
ca2860947f
15428 changed files with 25694 additions and 23138 deletions
|
@ -93,6 +93,8 @@ void *memmove(void *dst, const void *src, size_t n) {
|
|||
xmm_t v, w, x, y, V, W, X, Y, wut;
|
||||
d = dst;
|
||||
s = src;
|
||||
|
||||
#ifdef __x86__
|
||||
if (IsTiny()) {
|
||||
uint16_t w1, w2;
|
||||
uint32_t l1, l2;
|
||||
|
@ -133,6 +135,8 @@ void *memmove(void *dst, const void *src, size_t n) {
|
|||
}
|
||||
return dst;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (n) {
|
||||
case 0:
|
||||
return d;
|
||||
|
@ -208,6 +212,8 @@ void *memmove(void *dst, const void *src, size_t n) {
|
|||
return d;
|
||||
default:
|
||||
if (d == s) return d;
|
||||
|
||||
#ifdef __x86__
|
||||
if (n < kHalfCache3 || !kHalfCache3) {
|
||||
if (d > s) {
|
||||
if (IsAsan() || n < 900 || !X86_HAVE(ERMS)) {
|
||||
|
@ -280,6 +286,31 @@ void *memmove(void *dst, const void *src, size_t n) {
|
|||
}
|
||||
asm("sfence");
|
||||
}
|
||||
#else
|
||||
|
||||
if (d > s) {
|
||||
do {
|
||||
n -= 32;
|
||||
v = *(const xmm_t *)(s + n);
|
||||
w = *(const xmm_t *)(s + n + 16);
|
||||
*(xmm_t *)(d + n) = v;
|
||||
*(xmm_t *)(d + n + 16) = w;
|
||||
} while (n >= 32);
|
||||
} else {
|
||||
i = 0;
|
||||
do {
|
||||
v = *(const xmm_t *)(s + i);
|
||||
w = *(const xmm_t *)(s + i + 16);
|
||||
*(xmm_t *)(d + i) = v;
|
||||
*(xmm_t *)(d + i + 16) = w;
|
||||
} while ((i += 32) + 32 <= n);
|
||||
d += i;
|
||||
s += i;
|
||||
n -= i;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (n) {
|
||||
if (n >= 16) {
|
||||
v = *(const xmm_t *)s;
|
||||
|
@ -305,6 +336,7 @@ void *memmove(void *dst, const void *src, size_t n) {
|
|||
*d = *s;
|
||||
}
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue