63 lines
1.3 KiB
D
63 lines
1.3 KiB
D
/**
|
|
* 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);
|
|
}
|