first commit
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
|
||||
#include "src/panic.h"
|
||||
#include <stdint.h>
|
||||
|
||||
void memory_init();
|
||||
|
||||
void *memory_allocate(uint64_t size);
|
||||
|
||||
void memory_free(void *pointer);
|
||||
|
||||
static inline void memory_set(uint8_t value, uint64_t bytes, void *to) {
|
||||
__asm__ volatile("rep stosb" : "=D"(to), "=c"(bytes) : "D"(to), "a"(value), "c"(bytes) : "memory");
|
||||
}
|
||||
|
||||
static inline void memory_move(void *from, uint64_t bytes, void *to) {
|
||||
if (to == from) {
|
||||
return;
|
||||
} else if (to < from) {
|
||||
__asm__ volatile("rep movsb" : "=D"(to), "=S"(from), "=c"(bytes) : "D"(to), "S"(from), "c"(bytes) : "memory");
|
||||
} else {
|
||||
ASSERT(0, "memory_move: forward overlapping move not implemented");
|
||||
}
|
||||
}
|
||||
|
||||
static inline void memory_copy(const void *from, uint64_t bytes, void *to) {
|
||||
ASSERT((uint64_t)to + bytes <= (uint64_t)from || (uint64_t)to >= (uint64_t)from + bytes, "memory_copy: overlapping backward copy");
|
||||
|
||||
__asm__ volatile("rep movsb" : "=D"(to), "=S"(from), "=c"(bytes) : "D"(to), "S"(from), "c"(bytes) : "memory");
|
||||
}
|
||||
Reference in New Issue
Block a user