Trailing whitespace deleted.
[bpt/emacs.git] / src / puresize.h
CommitLineData
e772f7cd 1/* How much read-only Lisp storage a dumped Emacs needs.
5407e8a7 2 Copyright (C) 1993, 2002 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
b177738e 45#define BASE_PURESIZE (910000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA)
d427b66a 46#endif
e4f74c7e
RS
47
48/* Increase BASE_PURESIZE by a ratio depending on the machine's word size. */
49#ifndef PURESIZE_RATIO
50#if VALBITS + GCTYPEBITS + 1 > 32
5407e8a7 51#define PURESIZE_RATIO 9/5 /* Don't surround with `()'. */
e4f74c7e
RS
52#else
53#define PURESIZE_RATIO 1
54#endif
55#endif
56
57/* This is the actual size in bytes to allocate. */
58#ifndef PURESIZE
59#define PURESIZE (BASE_PURESIZE * PURESIZE_RATIO)
d427b66a 60#endif
e772f7cd 61
f75e1ee5
KH
62/* Signal an error if OBJ is pure. */
63#define CHECK_IMPURE(obj) \
64 { if (PURE_P (obj)) \
65 pure_write_error (); }
ec5d8db7
AS
66
67extern void pure_write_error P_ ((void));
f75e1ee5
KH
68\f
69/* Define PURE_P. */
e772f7cd 70
f75e1ee5 71#ifdef VIRT_ADDR_VARIES
e772f7cd
JB
72/* For machines like APOLLO where text and data can go anywhere
73 in virtual memory. */
f75e1ee5
KH
74
75extern EMACS_INT pure[];
76
77#define PURE_P(obj) \
78 ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) \
79 && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure)
e772f7cd
JB
80
81#else /* not VIRT_ADDR_VARIES */
82#ifdef PNTR_COMPARISON_TYPE
f75e1ee5 83/* When PNTR_COMPARISON_TYPE is not the default (unsigned int). */
e772f7cd 84
f75e1ee5
KH
85extern char my_edata[];
86
87#define PURE_P(obj) \
88 ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) my_edata)
e772f7cd
JB
89
90#else /* not VIRT_ADDRESS_VARIES, not PNTR_COMPARISON_TYPE */
91
f75e1ee5 92extern char my_edata[];
177c0ea7 93
f75e1ee5
KH
94#define PURE_P(obj) \
95 (XPNTR (obj) < (unsigned int) my_edata)
e772f7cd
JB
96
97#endif /* PNTR_COMPARISON_TYPE */
98#endif /* VIRT_ADDRESS_VARIES */