aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorPaul Eggert2011-11-10 00:14:27 -0800
committerPaul Eggert2011-11-10 00:14:27 -0800
commit6a0bf43d7c5961297aa5024aec534e5bab73c8af (patch)
treeb823825dae7da76be667a0ddb157bff2bd029ac7 /src/alloc.c
parent9a4de110224cc0ea32a9c680db3f4355484236a6 (diff)
downloademacs-6a0bf43d7c5961297aa5024aec534e5bab73c8af.tar.gz
emacs-6a0bf43d7c5961297aa5024aec534e5bab73c8af.zip
Standardize on VIRT_ADDR_VARIES behavior; otherwise, valgrind
does not work on some platforms. Problem reported by Andreas Schwab in <http://lists.gnu.org/archive/html/emacs-devel/2011-11/msg00081.html>. * puresize.h (pure, PURE_P): Always behave as if VIRT_ADDR_VARIES is set, removing the need for VIRT_ADDRESS_VARIES. (PURE_P): Use a more-efficient implementation that needs just one comparison, not two: on x86-64 with GCC 4.6.2, this cut down the number of instructions from 6 (xorl, cmpq, jge, xorl, cmpq, setge) to 4 (xorl, subq, cmpq, setbe). * alloc.c (pure): Always extern now, since that's the VIRT_ADDR_VARIES behavior. (PURE_POINTER_P): Use a single comparison, not two, for consistency with the new puresize.h. * lisp.h (PNTR_COMPARISON_TYPE): Remove; no longer needed. * m/ibms390.h, m/intel386.h, m/template.h, s/cygwin.h, s/hpux10-20.h: Remove VIRT_ADDR_VARIES no longer needed.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 985e4b71426..639a35c3f36 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -203,9 +203,6 @@ static int malloc_hysteresis;
203 remapping on more recent systems because this is less important 203 remapping on more recent systems because this is less important
204 nowadays than in the days of small memories and timesharing. */ 204 nowadays than in the days of small memories and timesharing. */
205 205
206#ifndef VIRT_ADDR_VARIES
207static
208#endif
209EMACS_INT pure[(PURESIZE + sizeof (EMACS_INT) - 1) / sizeof (EMACS_INT)] = {1,}; 206EMACS_INT pure[(PURESIZE + sizeof (EMACS_INT) - 1) / sizeof (EMACS_INT)] = {1,};
210#define PUREBEG (char *) pure 207#define PUREBEG (char *) pure
211 208
@@ -222,10 +219,7 @@ static ptrdiff_t pure_bytes_used_before_overflow;
222/* Value is non-zero if P points into pure space. */ 219/* Value is non-zero if P points into pure space. */
223 220
224#define PURE_POINTER_P(P) \ 221#define PURE_POINTER_P(P) \
225 (((PNTR_COMPARISON_TYPE) (P) \ 222 ((uintptr_t) (P) - (uintptr_t) purebeg <= pure_size)
226 < (PNTR_COMPARISON_TYPE) ((char *) purebeg + pure_size)) \
227 && ((PNTR_COMPARISON_TYPE) (P) \
228 >= (PNTR_COMPARISON_TYPE) purebeg))
229 223
230/* Index in pure at which next pure Lisp object will be allocated.. */ 224/* Index in pure at which next pure Lisp object will be allocated.. */
231 225