#ifndef MEM_H #define MEM_H static inline void memcpy(void * dest, const void * src, size_t n) { uint32_t r0, r1, r2; __asm__ __volatile__ ( "cld\n\t" "rep movsb" : "=&c" (r0), "=&S" (r1), "=&D" (r2) : "2" (dest), "1" (src), "0" (n) : "memory"); } static inline void memcpy32(void * dest, const void * src, size_t count) { uint32_t r0, r1, r2; __asm__ __volatile__ ( "cld\n\t" "rep movsd" : "=&c" (r0), "=&S" (r1), "=&D" (r2) : "2" (dest), "1" (src), "0" (count) : "memory"); } static inline void * memmove(void * dest, const void * src, size_t count) { return __builtin_memmove(dest, src, count); } static inline void * memset(void * dest, int val, size_t count) { return __builtin_memset(dest, val, count); } static inline void memset32(void * dest, uint32_t val, size_t count) { uint32_t r0, r1; __asm__ __volatile__ ( "cld\n\t" "rep stosl" : "=&c" (r0), "=&D" (r1) : "a" (val), "1" (dest), "0" (count) : "memory"); } #endif