* 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> 2012-10-16 Gregory Pietsch <gpietsch@comcast.net>
* libc/stdlib/getopt.c (getopt_internal): Align handling of colon to * libc/stdlib/getopt.c (getopt_internal): Align handling of colon to

View File

@ -1,6 +1,6 @@
/* sbrk for MMIXware. /* 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 Permission to use, copy, modify, and distribute this software is
freely granted, provided that the above copyright notice, this notice freely granted, provided that the above copyright notice, this notice
@ -34,10 +34,26 @@ __asm__ (" .global _Sbrk_high\n"
caddr_t caddr_t
_sbrk (size_t incr) _sbrk (size_t incr)
{ {
extern char end; /* Defined by the linker */
char *prev_heap_end; char *prev_heap_end;
prev_heap_end = _Sbrk_high; 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; _Sbrk_high += incr;
return (caddr_t) prev_heap_end; return (caddr_t) prev_heap_end;
} }