Browse Source

Change to HeapAlloc et al on Windows

gingerBill 7 years ago
parent
commit
386f5f596d
3 changed files with 36 additions and 10 deletions
  1. 34 1
      src/common.cpp
  2. 1 2
      src/ir.cpp
  3. 1 7
      src/types.cpp

+ 34 - 1
src/common.cpp

@@ -12,6 +12,21 @@
 
 #include <math.h>
 
+gb_inline i64 align_formula(i64 size, i64 align) {
+	if (align > 0) {
+		i64 result = size + align-1;
+		return result - result%align;
+	}
+	return size;
+}
+gb_inline isize align_formula_isize(isize size, isize align) {
+	if (align > 0) {
+		isize result = size + align-1;
+		return result - result%align;
+	}
+	return size;
+}
+
 GB_ALLOCATOR_PROC(heap_allocator_proc);
 
 gbAllocator heap_allocator(void) {
@@ -26,13 +41,18 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) {
 	void *ptr = NULL;
 	gb_unused(allocator_data);
 	gb_unused(old_size);
+
+
+
 // TODO(bill): Throughly test!
 	switch (type) {
 #if defined(GB_COMPILER_MSVC)
+	#if 0
 	case gbAllocation_Alloc:
 		ptr = _aligned_malloc(size, alignment);
-		if (flags & gbAllocatorFlag_ClearToZero)
+		if (flags & gbAllocatorFlag_ClearToZero) {
 			gb_zero_size(ptr, size);
+		}
 		break;
 	case gbAllocation_Free:
 		_aligned_free(old_memory);
@@ -40,6 +60,19 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) {
 	case gbAllocation_Resize:
 		ptr = _aligned_realloc(old_memory, size, alignment);
 		break;
+	#else
+	case gbAllocation_Alloc:
+		// TODO(bill): Make sure this is aligned correctly
+		// ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, align_formula_isize(size, alignment));
+		ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, align_formula_isize(size, alignment));
+		break;
+	case gbAllocation_Free:
+		HeapFree(GetProcessHeap(), 0, old_memory);
+		break;
+	case gbAllocation_Resize:
+		ptr = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, old_memory, align_formula_isize(size, alignment));
+		break;
+	#endif
 
 #elif defined(GB_SYSTEM_LINUX)
 	// TODO(bill): *nix version that's decent

+ 1 - 2
src/ir.cpp

@@ -1285,7 +1285,6 @@ irDefer ir_add_defer_instr(irProcedure *proc, isize scope_index, irValue *instr)
 
 irValue *ir_add_module_constant(irModule *m, Type *type, ExactValue value) {
 	gbAllocator a = m->allocator;
-	// gbAllocator a = gb_heap_allocator();
 
 	if (is_type_slice(type)) {
 		ast_node(cl, CompoundLit, value.value_compound);
@@ -1321,7 +1320,7 @@ irValue *ir_add_global_string_array(irModule *m, String string) {
 	// TODO(bill): Should this use the arena allocator or the heap allocator?
 	// Strings could be huge!
 	// gbAllocator a = m->allocator;
-	gbAllocator a = gb_heap_allocator();
+	gbAllocator a = heap_allocator();
 
 	isize max_len = 6+8+1;
 	u8 *str = cast(u8 *)gb_alloc_array(a, u8, max_len);

+ 1 - 7
src/types.cpp

@@ -1782,13 +1782,7 @@ void type_path_pop(TypePath *tp) {
 i64 type_size_of_internal (gbAllocator allocator, Type *t, TypePath *path);
 i64 type_align_of_internal(gbAllocator allocator, Type *t, TypePath *path);
 
-i64 align_formula(i64 size, i64 align) {
-	if (align > 0) {
-		i64 result = size + align-1;
-		return result - result%align;
-	}
-	return size;
-}
+
 
 i64 type_size_of(gbAllocator allocator, Type *t) {
 	if (t == nullptr) {