mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-07-01 18:39:16 +00:00
kernel: add aarch64 architecture support
Signed-off-by: EnderIce2 <enderice2@protonmail.com>
This commit is contained in:
@ -42,10 +42,12 @@ EXTERNC void *memset_sse2(void *dest, int c, size_t n)
|
||||
i = 0;
|
||||
while (((size_t)dest + i) & (16 - 1) && i < n)
|
||||
{
|
||||
#if defined(__amd64__) || defined(__i386__)
|
||||
asmv("stosb\n"
|
||||
:
|
||||
: "D"((size_t)dest + i),
|
||||
"a"(c));
|
||||
#endif
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@ -68,9 +70,11 @@ EXTERNC void *memset_sse2(void *dest, int c, size_t n)
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(__amd64__) || defined(__i386__)
|
||||
asmv("rep stosb\n" ::"a"((size_t)(c)),
|
||||
"D"(((size_t)dest) + i),
|
||||
"c"(n - i));
|
||||
#endif
|
||||
|
||||
i += n - i;
|
||||
return (void *)(((size_t)dest) + i);
|
||||
|
@ -31,6 +31,7 @@ long unsigned __strlen(const char s[])
|
||||
{
|
||||
size_t ret = (size_t)s;
|
||||
|
||||
#if defined(__amd64__) || defined(__i386__)
|
||||
asmv("._strlenLoop:"
|
||||
"cmpb $0, 0(%1)\n"
|
||||
"jz ._strlenExit\n"
|
||||
@ -76,6 +77,7 @@ long unsigned __strlen(const char s[])
|
||||
"._strlenExit:"
|
||||
"mov %1, %0\n"
|
||||
: "=r"(ret) : "0"(ret));
|
||||
#endif
|
||||
|
||||
return ret - (size_t)s;
|
||||
}
|
||||
@ -107,7 +109,8 @@ long unsigned strlen_sse4_1(const char s[])
|
||||
|
||||
long unsigned strlen_sse4_2(const char s[])
|
||||
{
|
||||
size_t ret;
|
||||
size_t ret = 0;
|
||||
#if defined(__amd64__) || defined(__i386__)
|
||||
asmv("mov $-16, %0\n"
|
||||
"pxor %%xmm0, %%xmm0\n"
|
||||
".strlen42Loop:"
|
||||
@ -117,6 +120,6 @@ long unsigned strlen_sse4_2(const char s[])
|
||||
"add %2, %0\n"
|
||||
: "=a"(ret)
|
||||
: "d"((size_t)s), "c"((size_t)s));
|
||||
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user