mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-20 19:44:23 +00:00

When conditions are right, eg a small memcpy of a known size and alignment, the compiler may know of a sequence that is optimal for the given constraints and inline it. If the compiler doesn't find one, it will emit a call to the generic function (in the libc) which will implement this in the most generic and unconstrained manner. That generic function is rarely the most optimal when constraints are known. So give the compiler a chance to do this. Replace calls to libc functions that have builtins to the builtin and keep the generic implementation if it decides to emit a call anyway. And example of this in action is usage of FEAT_MOPS. When the compiler is aware of the feature (-march=armv8.8-a) then it will emit the 3 MOPS instructions instead of calls to our memcpy() and memset() implementations. Change-Id: I9860cfada1d941b613ebd4da068e9992c387952e Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
23 lines
651 B
C
23 lines
651 B
C
/*
|
|
* Copyright (c) 2025, Arm Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef STRING_PRIVATE_H
|
|
#define STRING_PRIVATE_H
|
|
|
|
/* Do not include outside of the libc. Use string.h instead. */
|
|
|
|
#include <stddef.h>
|
|
|
|
int memcmp(const void *s1, const void *s2, size_t len);
|
|
int strcmp(const char *s1, const char *s2);
|
|
int strncmp(const char *s1, const char *s2, size_t n);
|
|
void *memchr(const void *src, int c, size_t len);
|
|
char *strchr(const char *s, int c);
|
|
void *memset(void *dst, int val, size_t count);
|
|
size_t strlen(const char *s);
|
|
char *strrchr(const char *p, int ch);
|
|
|
|
#endif /* STRING_PRIVATE_H */
|