mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-10-06 00:30:10 -06:00
Core: New highly optimised svo_memcpy, svo_memset, memcpyd functions
git-svn-id: svn://ultimatepp.org/upp/trunk@14488 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
2035963ca4
commit
48d2166c08
7 changed files with 320 additions and 138 deletions
|
|
@ -150,7 +150,7 @@ void EndianSwap(int64 *v, size_t count) ENDIAN_SWAP
|
|||
void EndianSwap(uint64 *v, size_t count) ENDIAN_SWAP
|
||||
|
||||
#ifdef CPU_X86
|
||||
void huge_memsetd(void *p, dword c, int len)
|
||||
void huge_memsetd(void *p, dword c, size_t len)
|
||||
{ // bypasses the cache, good for >4MB
|
||||
dword *t = (dword *)p;
|
||||
if(((uintptr_t)t & 3) == 0 && len > 64) {
|
||||
|
|
@ -161,10 +161,7 @@ void huge_memsetd(void *p, dword c, int len)
|
|||
len--;
|
||||
}
|
||||
while(len >= 16) {
|
||||
Set4S(0);
|
||||
Set4S(4);
|
||||
Set4S(8);
|
||||
Set4S(12);
|
||||
Set4S(0); Set4S(4); Set4S(8); Set4S(12);
|
||||
t += 16;
|
||||
len -= 16;
|
||||
}
|
||||
|
|
@ -175,4 +172,26 @@ void huge_memsetd(void *p, dword c, int len)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CPU_UNALIGNED
|
||||
never_inline
|
||||
void svo_memset_l(byte *t, dword val4, size_t len)
|
||||
{
|
||||
const byte *e = t + len;
|
||||
t = (byte *)(((uintptr_t)t | 3) + 1);
|
||||
len = e - t;
|
||||
memsetd(t, val4, len >> 2);
|
||||
}
|
||||
|
||||
never_inline
|
||||
void svo_memcpy_l(byte *t, byte *s, size_t len)
|
||||
{
|
||||
const byte *e = t + len;
|
||||
byte *t2 = (byte *)(((uintptr_t)t | 3) + 1);
|
||||
s += t2 - t;
|
||||
t = t2;
|
||||
len = e - t;
|
||||
memcpyd((dword *)t, (dword *)s, len >> 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue