diff --git a/include/main.h b/include/main.h index e6cb95c..cb2b645 100644 --- a/include/main.h +++ b/include/main.h @@ -3,6 +3,8 @@ * Copyright (c) 2022, Ivaylo Ivanov */ +#include + #ifndef MAIN_H_ /* Include guard */ #define MAIN_H_ @@ -13,14 +15,35 @@ extern void board_init(void); extern void printk(char *text); -/* Define our own 128 bit memcpy */ -void memcpy(void *dest, void *src, int size) -{ - unsigned __int128 *src2 = src; - unsigned __int128 *dest2 = dest; +#ifndef __has_builtin + #define __has_builtin(x) 0 +#endif + +#if __has_builtin(__builtin_memcpy) + void memcpy(void *dest, void *src, size_t size) { + __builtin_memcpy(dest, src, size); + } +#else + #ifdef __aarch64__ + /* Define our own 128 bit memcpy */ + void memcpy(void *dest, void *src, size_t size) + { + unsigned __int128 *src2 = src; + unsigned __int128 *dest2 = dest; + + for (size_t i = 0; i < size / 16; i++) + dest2[i] = src2[i]; + } + #endif + + #ifdef __arm__ + void memcpy (char* src, char* dest, size_t len) { + for (size_t i = 0; i < len; i++) + dest[i] = src[i]; + } + #endif +#endif + - for (int i=0; i