#include <stddef.h>

void *memcpy(void *destination, const void *source, size_t count) {
    unsigned char *out = destination;
    const unsigned char *in = source;
    for (size_t i = 0u; i < count; ++i) out[i] = in[i];
    return destination;
}

void *memset(void *destination, int value, size_t count) {
    unsigned char *out = destination;
    for (size_t i = 0u; i < count; ++i) out[i] = (unsigned char)value;
    return destination;
}

int memcmp(const void *left, const void *right, size_t count) {
    const unsigned char *a = left;
    const unsigned char *b = right;
    for (size_t i = 0u; i < count; ++i) {
        if (a[i] != b[i]) return (a[i] < b[i]) ? -1 : 1;
    }
    return 0;
}

/* The firmware has no C++ objects or constructor arrays. */
void __libc_init_array(void) {}
