Switch to recommended form of GPLv3 permissions notice.
[emacs.git] / src / m / amdx86-64.h
blob2d7ce3bd01ff4e9bf4ad0fbb12e251d97ca0f506
1 /* machine description file for AMD x86-64.
2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
3 Free Software Foundation, Inc.
5 This file is part of GNU Emacs.
7 GNU Emacs is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 GNU Emacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20 #ifdef i386
21 /* Although we're running on an amd64 kernel, we're actually compiling for
22 the x86 architecture. The user should probably have provided an
23 explicit --build to `configure', but if everything else than the kernel
24 is running in i386 mode, then the bug is really ours: we should have
25 guessed better. */
26 #include "m/intel386.h"
27 #else
29 /* The following line tells the configuration script what sort of
30 operating system this machine is likely to run.
31 USUAL-OPSYS="linux" */
33 #define BITS_PER_LONG 64
34 #define BITS_PER_EMACS_INT 64
36 /* Define WORDS_BIG_ENDIAN if lowest-numbered byte in a word
37 is the most significant byte. */
39 #undef WORDS_BIG_ENDIAN
41 /* Define NO_ARG_ARRAY if you cannot take the address of the first of a
42 * group of arguments and treat it as an array of the arguments. */
44 #define NO_ARG_ARRAY
46 /* Define WORD_MACHINE if addresses and such have
47 * to be corrected before they can be used as byte counts. */
49 /* #define WORD_MACHINE */
51 /* Now define a symbol for the cpu type, if your compiler
52 does not define it automatically:
53 Ones defined so far include vax, m68000, ns16000, pyramid,
54 orion, tahoe, APOLLO and many others */
55 /* __x86_64 defined automatically. */
57 /* Use type int rather than a union, to represent Lisp_Object */
58 /* This is desirable for most machines. */
60 #define NO_UNION_TYPE
62 /* Define the type to use. */
63 #define EMACS_INT long
64 #define EMACS_UINT unsigned long
65 #define SPECIAL_EMACS_INT
67 /* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
68 the 24-bit bit field into an int. In other words, if bit fields
69 are always unsigned.
71 If you use NO_UNION_TYPE, this flag does not matter. */
73 #define EXPLICIT_SIGN_EXTEND
75 /* Data type of load average, as read out of kmem. */
77 #define LOAD_AVE_TYPE long
79 /* Convert that into an integer that is 100 for a load average of 1.0 */
81 #define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / FSCALE)
83 /* Define CANNOT_DUMP on machines where unexec does not work.
84 Then the function dump-emacs will not be defined
85 and temacs will do (load "loadup") automatically unless told otherwise. */
87 /* #define CANNOT_DUMP */
89 /* Define VIRT_ADDR_VARIES if the virtual addresses of
90 pure and impure space as loaded can vary, and even their
91 relative order cannot be relied on.
93 Otherwise Emacs assumes that text space precedes data space,
94 numerically. */
96 /* #define VIRT_ADDR_VARIES */
98 /* Define NO_REMAP if memory segmentation makes it not work well
99 to change the boundary between the text section and data section
100 when Emacs is dumped. If you define this, the preloaded Lisp
101 code will not be sharable; but that's better than failing completely. */
103 /* #define NO_REMAP */
105 #define PNTR_COMPARISON_TYPE unsigned long
107 /* Define XPNTR to avoid or'ing with DATA_SEG_BITS */
108 #undef DATA_SEG_BITS
110 #ifdef __FreeBSD__
112 /* The libraries for binaries native to the build host's architecture are
113 installed under /usr/lib in FreeBSD, and the ones that need special paths
114 are 32-bit compatibility libraries (installed under /usr/lib32). To build
115 a native binary of Emacs on FreeBSD/amd64 we can just point to /usr/lib. */
117 #undef START_FILES
118 #define START_FILES pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o
120 /* The duplicate -lgcc is intentional in the definition of LIB_STANDARD.
121 The reason is that some functions in libgcc.a call functions from libc.a,
122 and some libc.a functions need functions from libgcc.a. Since most
123 versions of ld are one-pass linkers, we need to mention -lgcc twice,
124 or else we risk getting unresolved externals. */
125 #undef LIB_STANDARD
126 #define LIB_STANDARD -lgcc -lc -lgcc /usr/lib/crtn.o
128 #elif defined(__OpenBSD__)
130 #undef START_FILES
131 #define START_FILES pre-crt0.o /usr/lib/crt0.o /usr/lib/crtbegin.o
132 #undef LIB_STANDARD
133 #define LIB_STANDARD -lgcc -lc -lgcc /usr/lib/crtend.o
135 #elif defined(__NetBSD__)
137 /* LIB_STANDARD and START_FILES set correctly in s/netbsd.h */
139 #elif defined(sun)
141 #undef START_FILES
142 #undef LIB_STANDARD
144 #else /* !__OpenBSD__ && !__FreeBSD__ && !__NetBSD__ && !sun */
146 #undef START_FILES
147 #ifdef HAVE_LIB64_DIR
148 #define START_FILES pre-crt0.o /usr/lib64/crt1.o /usr/lib64/crti.o
149 #else
150 #define START_FILES pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o
151 #endif
153 /* The duplicate -lgcc is intentional in the definition of LIB_STANDARD.
154 The reason is that some functions in libgcc.a call functions from libc.a,
155 and some libc.a functions need functions from libgcc.a. Since most
156 versions of ld are one-pass linkers, we need to mention -lgcc twice,
157 or else we risk getting unresolved externals. */
158 #undef LIB_STANDARD
159 #ifdef HAVE_LIB64_DIR
160 #define LIB_STANDARD -lgcc -lc -lgcc /usr/lib64/crtn.o
161 #else
162 #define LIB_STANDARD -lgcc -lc -lgcc /usr/lib/crtn.o
163 #endif
165 #endif /* __FreeBSD__ */
166 #endif /* !i386 */
168 /* arch-tag: 8a5e001d-e12e-4692-a3a6-0b15ba271c6e
169 (do not change this comment) */