19#if defined(__GNUC__) && !defined(__clang__)
20#pragma GCC optimize("no-tree-loop-distribute-patterns")
28#if !defined(RA8_OFF_TARGET) || defined(RA8_TEST_FREESTANDING)
45void*
memset(
void* dst,
int value,
size_t n)
47 uint8_t* d = (uint8_t*)dst;
48 const uint8_t v = (uint8_t)value;
49 for (
size_t i = 0U; i < n; ++i) {
70void*
memcpy(
void* dst,
const void* src,
size_t n)
72 uint8_t* d = (uint8_t*)dst;
73 const uint8_t* s = (
const uint8_t*)src;
74 for (
size_t i = 0U; i < n; ++i) {
95void*
memmove(
void* dst,
const void* src,
size_t n)
103 uint8_t* d = (uint8_t*)dst;
104 const uint8_t* s = (
const uint8_t*)src;
106 for (
size_t i = 0U; i < n; ++i) {
136int memcmp(
const void* a,
const void* b,
size_t n)
138 const uint8_t* p1 = (
const uint8_t*)a;
139 const uint8_t* p2 = (
const uint8_t*)b;
140 for (
size_t i = 0U; i < n; ++i) {
141 if (p1[i] != p2[i]) {
142 return (p1[i] < p2[i]) ? -1 : 1;
164void*
memchr(
const void* s,
int c,
size_t n)
166 const uint8_t* p = (
const uint8_t*)s;
167 const uint8_t target = (uint8_t)c;
168 for (
size_t i = 0U; i < n; ++i) {
169 if (p[i] == target) {
170 const uint8_t* result_source = &p[i];
171 void* result =
nullptr;
172 (void)__builtin_memcpy((
void*)&result, (
const void*)&result_source,
sizeof(result));
Project-owned freestanding C runtime ABI primitives.
void * memchr(const void *s, int c, size_t n)
Locate a byte in a memory area.
void * memset(void *dst, int value, size_t n)
Fill memory with a constant byte value.
int memcmp(const void *a, const void *b, size_t n)
Compare bytes in two memory areas.
void * memmove(void *dst, const void *src, size_t n)
Copy memory area between potentially overlapping regions.
void * memcpy(void *dst, const void *src, size_t n)
Copy memory area between non-overlapping regions.