kernel: Use compiler-builtin memset, memcpy, memmove, memcmp.
Since the kernel is built with -ffreestanding, and thus -fno-builtin, the compiler ignores the function names and doesn't perform optimizations (e.g. inlining for small values) that it otherwise could. So, here, we add a string.h that supplements the default, and uses #define to reinstate the builtins, and thus the optimizations. Linux and FreeBSD at least apparently do the same. A quick compile benchmark in a VM doesn't show much difference, maybe a slight decrease in sys time.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright 2026, Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef KERNEL_STRING_H
|
||||
#define KERNEL_STRING_H
|
||||
|
||||
|
||||
#include_next <string.h>
|
||||
|
||||
|
||||
#define memset(DEST, V, LEN) __builtin_memset((DEST), (V), (LEN))
|
||||
#define memcpy(DEST, SRC, LEN) __builtin_memcpy((DEST), (SRC), (LEN))
|
||||
#define memmove(DEST, SRC, LEN) __builtin_memmove((DEST), (SRC), (LEN))
|
||||
#define memcmp(B1, B2, LEN) __builtin_memcmp((B1), (B2), (LEN))
|
||||
|
||||
|
||||
#endif /* KERNEL_STRING_H */
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#undef memmove
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||
typedef __attribute__((__may_alias__)) size_t WT;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#undef memcpy
|
||||
|
||||
|
||||
#define MISALIGNMENT(PTR, TYPE) ((addr_t)(PTR) & (sizeof(TYPE) - 1))
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#undef memset
|
||||
|
||||
|
||||
#define MISALIGNMENT(PTR, TYPE) ((addr_t)(PTR) & (sizeof(TYPE) - 1))
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#undef memcmp
|
||||
|
||||
|
||||
#define MISALIGNMENT(PTR, TYPE) ((addr_t)(PTR) & (sizeof(TYPE) - 1))
|
||||
|
||||
Reference in New Issue
Block a user