// Copyright 2010 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#include "runtime.h"
#include "os.h"
#include "defs.h"
#include "malloc.h"

enum {
	MEM_COMMIT = 0x1000,
	MEM_RESERVE = 0x2000,
	MEM_RELEASE = 0x8000,
	
	PAGE_EXECUTE_READWRITE = 0x40,
};

void*
SysAlloc(uintptr n)
{
	return stdcall(VirtualAlloc, 4, nil, n, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
}

void
SysUnused(void *v, uintptr n)
{
	USED(v);
	USED(n);
}

void
SysFree(void *v, uintptr n)
{
	stdcall(VirtualFree, 3, v, n, MEM_RELEASE);
}

void
SysMemInit(void)
{
}
