From 1bc8722098b5155cf160f4bf7cd1fca9efe975de Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Fri, 18 Mar 2022 00:07:10 -0400 Subject: [PATCH] Add hos.memory module in src/common --- Rsconscript | 6 ++--- src/common/hos/memory.d | 57 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 src/common/hos/memory.d diff --git a/Rsconscript b/Rsconscript index 99bdf26..b3725bf 100644 --- a/Rsconscript +++ b/Rsconscript @@ -73,10 +73,10 @@ end hello_env = env "hello", use: %w[ldc2 x86_64-w64-mingw32-gcc] do |env| env.add_builder(Image) - env["sources"] = glob("src/hello/**/*.d", "src/hulk/hulk/bootinfo.d") + env["sources"] = glob("src/hello/**/*.d") env["sources"] += glob("uefi-d/source/**/*.d") - env["DFLAGS"] += %w[-mtriple=x86_64-unknown-windows-coff --betterC -release -O3 --wi] - env["D_IMPORT_PATH"] += %w[src/hello src/hulk uefi-d/source] + env["DFLAGS"] += %w[-mtriple=x86_64-unknown-windows-coff --betterC -release -O3 --wi --enable-cross-module-inlining] + env["D_IMPORT_PATH"] += %w[src/hello src/hulk uefi-d/source src/common] env["LD"] = "x86_64-w64-mingw32-gcc" env["LDFLAGS"] += %w[-nostdlib -Wl,-dll -shared -Wl,--subsystem,10 -e efi_main -Wl,-Map,${_TARGET}.map] env["LDCMD"] = %w[${LD} -o ${_TARGET} ${LDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}] diff --git a/src/common/hos/memory.d b/src/common/hos/memory.d new file mode 100644 index 0000000..f66f631 --- /dev/null +++ b/src/common/hos/memory.d @@ -0,0 +1,57 @@ +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, void * src, size_t n) +{ + __asm("rep movsb", + "{rcx},{rsi},{rdi},~{rcx},~{rsi},~{rdi},~{memory}", + n, src, dest); +} + +void memcpy16(void * dest, void * src, size_t n) +{ + __asm("rep movsw", + "{rcx},{rsi},{rdi},~{rcx},~{rsi},~{rdi},~{memory}", + n, src, dest); +} + +void memcpy32(void * dest, void * src, size_t n) +{ + __asm("rep movsl", + "{rcx},{rsi},{rdi},~{rcx},~{rsi},~{rdi},~{memory}", + n, src, dest); +} + +void memcpy64(void * dest, void * src, size_t n) +{ + __asm("rep movsq", + "{rcx},{rsi},{rdi},~{rcx},~{rsi},~{rdi},~{memory}", + n, src, dest); +}