Update FSF's address in the preamble.
[bpt/emacs.git] / src / puresize.h
CommitLineData
e772f7cd 1/* How much read-only Lisp storage a dumped Emacs needs.
c6c5df7f 2 Copyright (C) 1993 Free Software Foundation, Inc.
e772f7cd
JB
3
4This file is part of GNU Emacs.
5
6GNU Emacs is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
7c938215 8the Free Software Foundation; either version 2, or (at your option)
e772f7cd
JB
9any later version.
10
11GNU Emacs is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Emacs; see the file COPYING. If not, write to
3b7ad313
EN
18the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19Boston, MA 02111-1307, USA. */
e772f7cd 20
e4f74c7e 21/* Define PURESIZE, the number of bytes of pure Lisp code to leave space for.
e772f7cd
JB
22
23 At one point, this was defined in config.h, meaning that changing
24 PURESIZE would make Make recompile all of Emacs. But only a few
d427b66a 25 files actually use PURESIZE, so we split it out to its own .h file.
e772f7cd 26
d427b66a
JB
27 Make sure to include this file after config.h, since that tells us
28 whether we are running X windows, which tells us how much pure
29 storage to allocate. */
30
e4f74c7e
RS
31/* First define a measure of the amount of data we have. */
32
87485d6f
MW
33/* A system configuration file may set this to request a certain extra
34 amount of storage. This is a lot more update-robust that defining
35 BASE_PURESIZE or even PURESIZE directly. */
36#ifndef SYSTEM_PURESIZE_EXTRA
37#define SYSTEM_PURESIZE_EXTRA 0
38#endif
39
64aba29c
RS
40#ifndef SITELOAD_PURESIZE_EXTRA
41#define SITELOAD_PURESIZE_EXTRA 0
42#endif
43
e4f74c7e 44#ifndef BASE_PURESIZE
4ce8eec2 45#ifdef MULTI_FRAME
64aba29c 46#define BASE_PURESIZE (325000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA)
d427b66a 47#else
64aba29c 48#define BASE_PURESIZE (240000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA)
e4f74c7e 49#endif
d427b66a 50#endif
e4f74c7e
RS
51
52/* Increase BASE_PURESIZE by a ratio depending on the machine's word size. */
53#ifndef PURESIZE_RATIO
54#if VALBITS + GCTYPEBITS + 1 > 32
55#define PURESIZE_RATIO 8/5 /* Don't surround with `()'. */
56#else
57#define PURESIZE_RATIO 1
58#endif
59#endif
60
61/* This is the actual size in bytes to allocate. */
62#ifndef PURESIZE
63#define PURESIZE (BASE_PURESIZE * PURESIZE_RATIO)
d427b66a 64#endif
e772f7cd 65
f75e1ee5
KH
66/* Signal an error if OBJ is pure. */
67#define CHECK_IMPURE(obj) \
68 { if (PURE_P (obj)) \
69 pure_write_error (); }
70\f
71/* Define PURE_P. */
e772f7cd 72
f75e1ee5 73#ifdef VIRT_ADDR_VARIES
e772f7cd
JB
74/* For machines like APOLLO where text and data can go anywhere
75 in virtual memory. */
f75e1ee5
KH
76
77extern EMACS_INT pure[];
78
79#define PURE_P(obj) \
80 ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) \
81 && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure)
e772f7cd
JB
82
83#else /* not VIRT_ADDR_VARIES */
84#ifdef PNTR_COMPARISON_TYPE
f75e1ee5 85/* When PNTR_COMPARISON_TYPE is not the default (unsigned int). */
e772f7cd 86
f75e1ee5
KH
87extern char my_edata[];
88
89#define PURE_P(obj) \
90 ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) my_edata)
e772f7cd
JB
91
92#else /* not VIRT_ADDRESS_VARIES, not PNTR_COMPARISON_TYPE */
93
f75e1ee5
KH
94extern char my_edata[];
95
96#define PURE_P(obj) \
97 (XPNTR (obj) < (unsigned int) my_edata)
e772f7cd
JB
98
99#endif /* PNTR_COMPARISON_TYPE */
100#endif /* VIRT_ADDRESS_VARIES */
101