* libc/sys/mmixware/sbrk.c (_sbrk): Drop unused extern declaration

of "end".  Mark allocated memory by applying PRELD.
This commit is contained in:
Hans-Peter Nilsson 2012-10-21 03:41:42 +00:00
parent 821d651917
commit 1ad660ece1
2 changed files with 23 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2012-10-21 Hans-Peter Nilsson <hp@bitrange.com>
* libc/sys/mmixware/sbrk.c (_sbrk): Drop unused extern declaration
of "end". Mark allocated memory by applying PRELD.
2012-10-16 Gregory Pietsch <gpietsch@comcast.net>
* libc/stdlib/getopt.c (getopt_internal): Align handling of colon to

View File

@ -1,6 +1,6 @@
/* sbrk for MMIXware.
Copyright (C) 2001 Hans-Peter Nilsson
Copyright (C) 2001, 2012 Hans-Peter Nilsson
Permission to use, copy, modify, and distribute this software is
freely granted, provided that the above copyright notice, this notice
@ -34,10 +34,26 @@ __asm__ (" .global _Sbrk_high\n"
caddr_t
_sbrk (size_t incr)
{
extern char end; /* Defined by the linker */
char *prev_heap_end;
prev_heap_end = _Sbrk_high;
/* A simulator that requires explicit memory allocation is expected
to hook that to the PRELD data prefetch insn, which is otherwise
typically a nop. */
if ((long) incr > 0)
{
size_t n = incr;
char *p = prev_heap_end;
#define A(N) __asm__ ("preld " #N ",%0,0" : : "r" (p))
#define PRELDOWNTO(N) while (n >= N + 1) { A(N); n -= N + 1; p += N + 1; }
PRELDOWNTO (255);
PRELDOWNTO (31);
PRELDOWNTO (3);
PRELDOWNTO (0);
}
_Sbrk_high += incr;
return (caddr_t) prev_heap_end;
}