/** * Memory-related functions. */ module hulk.memory; import ldc.llvmasm; void memset(void * dest, ubyte v, size_t n) { __asm("rep stosb", "{al},{rcx},{rdi},~{rcx},~{rdi},~{memory}", v, n, dest); } void memset16(void * dest, ushort v, size_t n) { __asm("rep stosw", "{ax},{rcx},{rdi},~{rcx},~{rdi},~{memory}", v, n, dest); } void memset32(void * dest, uint v, size_t n) { __asm("rep stosl", "{eax},{rcx},{rdi},~{rcx},~{rdi},~{memory}", v, n, dest); } void memset64(void * dest, ulong v, size_t n) { __asm("rep stosq", "{rax},{rcx},{rdi},~{rcx},~{rdi},~{memory}", v, n, dest); } void memcpy(void * dest, const(void) * src, size_t n) { __asm("rep movsb", "{rcx},{rsi},{rdi},~{rcx},~{rsi},~{rdi},~{memory}", n, src, dest); } void memcpy16(void * dest, const(void) * src, size_t n) { __asm("rep movsw", "{rcx},{rsi},{rdi},~{rcx},~{rsi},~{rdi},~{memory}", n, src, dest); } void memcpy32(void * dest, const(void) * src, size_t n) { __asm("rep movsl", "{rcx},{rsi},{rdi},~{rcx},~{rsi},~{rdi},~{memory}", n, src, dest); } void memcpy64(void * dest, const(void) * src, size_t n) { __asm("rep movsq", "{rcx},{rsi},{rdi},~{rcx},~{rsi},~{rdi},~{memory}", n, src, dest); }