// 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 "malloc.h"

// Assume there's an arbitrary amount of memory starting at "end".
// Sizing PC memory is beyond the scope of this demo.

static byte *allocp;

void*
runtime·SysAlloc(uintptr ask)
{
	extern byte end[];
	byte *q;
	
	if(allocp == nil) {
		allocp = end;
		allocp += 7 & -(uintptr)allocp;
	}
	ask += 7 & -ask;

	q = allocp;
	allocp += ask;
	runtime·memclr(q, ask);
	return q;
}

void
runtime·SysFree(void *v, uintptr n)
{
	// Push pointer back if this is a free
	// of the most recent SysAlloc.
	n += 7 & -n;
	if(allocp == (byte*)v+n)
		allocp -= n;
}

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

void
runtime·SysMemInit(void)
{
}
