Remove P_ and __P macros.
[bpt/emacs.git] / src / puresize.h
CommitLineData
e772f7cd 1/* How much read-only Lisp storage a dumped Emacs needs.
429ab54e 2 Copyright (C) 1993, 2001, 2002, 2003, 2004, 2005,
114f9c96 3 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
e772f7cd
JB
4
5This file is part of GNU Emacs.
6
b9b1cc14 7GNU Emacs is free software: you can redistribute it and/or modify
e772f7cd 8it under the terms of the GNU General Public License as published by
b9b1cc14
GM
9the Free Software Foundation, either version 3 of the License, or
10(at your option) any later version.
e772f7cd
JB
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
b9b1cc14 18along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
e772f7cd 19
e4f74c7e 20/* Define PURESIZE, the number of bytes of pure Lisp code to leave space for.
e772f7cd
JB
21
22 At one point, this was defined in config.h, meaning that changing
23 PURESIZE would make Make recompile all of Emacs. But only a few
d427b66a 24 files actually use PURESIZE, so we split it out to its own .h file.
e772f7cd 25
d427b66a
JB
26 Make sure to include this file after config.h, since that tells us
27 whether we are running X windows, which tells us how much pure
28 storage to allocate. */
29
e4f74c7e
RS
30/* First define a measure of the amount of data we have. */
31
87485d6f
MW
32/* A system configuration file may set this to request a certain extra
33 amount of storage. This is a lot more update-robust that defining
34 BASE_PURESIZE or even PURESIZE directly. */
35#ifndef SYSTEM_PURESIZE_EXTRA
36#define SYSTEM_PURESIZE_EXTRA 0
37#endif
38
64aba29c
RS
39#ifndef SITELOAD_PURESIZE_EXTRA
40#define SITELOAD_PURESIZE_EXTRA 0
41#endif
42
e4f74c7e 43#ifndef BASE_PURESIZE
5d28d4b1 44#define BASE_PURESIZE (1620000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA)
d427b66a 45#endif
e4f74c7e
RS
46
47/* Increase BASE_PURESIZE by a ratio depending on the machine's word size. */
48#ifndef PURESIZE_RATIO
1b0338f7 49#if BITS_PER_EMACS_INT > 32
242bc74c 50#define PURESIZE_RATIO 10/6 /* Don't surround with `()'. */
e4f74c7e
RS
51#else
52#define PURESIZE_RATIO 1
53#endif
54#endif
55
dbc812e0
SM
56#ifdef ENABLE_CHECKING
57/* ENABLE_CHECKING somehow increases the purespace used, probably because
58 it tends to cause some macro arguments to be evaluated twice. This is
59 a bug, but it's difficult to track it down. */
60#define PURESIZE_CHECKING_RATIO 12/10 /* Don't surround with `()'. */
61#else
62#define PURESIZE_CHECKING_RATIO 1
63#endif
64
e4f74c7e
RS
65/* This is the actual size in bytes to allocate. */
66#ifndef PURESIZE
dbc812e0 67#define PURESIZE (BASE_PURESIZE * PURESIZE_RATIO * PURESIZE_CHECKING_RATIO)
d427b66a 68#endif
e772f7cd 69
f75e1ee5
KH
70/* Signal an error if OBJ is pure. */
71#define CHECK_IMPURE(obj) \
72 { if (PURE_P (obj)) \
73 pure_write_error (); }
ec5d8db7 74
383e0970 75extern void pure_write_error (void) NO_RETURN;
f75e1ee5
KH
76\f
77/* Define PURE_P. */
e772f7cd 78
fec76d43 79#ifdef VIRT_ADDR_VARIES
e39a993c 80/* For machines where text and data can go anywhere
e772f7cd 81 in virtual memory. */
f75e1ee5
KH
82
83extern EMACS_INT pure[];
84
85#define PURE_P(obj) \
86 ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) \
87 && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure)
e772f7cd
JB
88
89#else /* not VIRT_ADDR_VARIES */
90#ifdef PNTR_COMPARISON_TYPE
f75e1ee5 91/* When PNTR_COMPARISON_TYPE is not the default (unsigned int). */
e772f7cd 92
f75e1ee5
KH
93extern char my_edata[];
94
95#define PURE_P(obj) \
96 ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) my_edata)
e772f7cd
JB
97
98#else /* not VIRT_ADDRESS_VARIES, not PNTR_COMPARISON_TYPE */
99
f75e1ee5 100extern char my_edata[];
177c0ea7 101
f75e1ee5
KH
102#define PURE_P(obj) \
103 (XPNTR (obj) < (unsigned int) my_edata)
e772f7cd
JB
104
105#endif /* PNTR_COMPARISON_TYPE */
106#endif /* VIRT_ADDRESS_VARIES */
ab5796a9
MB
107
108/* arch-tag: fd9b0a91-a70e-4729-a75a-6bb4ca1ce14f
109 (do not change this comment) */