1 | /* Definitions for Intel 386 running system V, using gas. |
---|
2 | Copyright (C) 1992, 1995 Free Software Foundation, Inc. |
---|
3 | |
---|
4 | This file is part of GNU CC. |
---|
5 | |
---|
6 | GNU CC is free software; you can redistribute it and/or modify |
---|
7 | it under the terms of the GNU General Public License as published by |
---|
8 | the Free Software Foundation; either version 2, or (at your option) |
---|
9 | any later version. |
---|
10 | |
---|
11 | GNU CC is distributed in the hope that it will be useful, |
---|
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
14 | GNU General Public License for more details. |
---|
15 | |
---|
16 | You should have received a copy of the GNU General Public License |
---|
17 | along with GNU CC; see the file COPYING. If not, write to |
---|
18 | the Free Software Foundation, 59 Temple Place - Suite 330, |
---|
19 | Boston, MA 02111-1307, USA. */ |
---|
20 | |
---|
21 | #include <i386/gas.h> |
---|
22 | |
---|
23 | /* Add stuff that normally comes from i386v.h */ |
---|
24 | |
---|
25 | /* longjmp may fail to restore the registers if called from the same |
---|
26 | function that called setjmp. To compensate, the compiler avoids |
---|
27 | putting variables in registers in functions that use both setjmp |
---|
28 | and longjmp. */ |
---|
29 | |
---|
30 | #define NON_SAVING_SETJMP \ |
---|
31 | (current_function_calls_setjmp && current_function_calls_longjmp) |
---|
32 | |
---|
33 | /* longjmp may fail to restore the stack pointer if the saved frame |
---|
34 | pointer is the same as the caller's frame pointer. Requiring a frame |
---|
35 | pointer in any function that calls setjmp or longjmp avoids this |
---|
36 | problem, unless setjmp and longjmp are called from the same function. |
---|
37 | Since a frame pointer will be required in such a function, it is OK |
---|
38 | that the stack pointer is not restored. */ |
---|
39 | |
---|
40 | #undef FRAME_POINTER_REQUIRED |
---|
41 | #define FRAME_POINTER_REQUIRED \ |
---|
42 | (current_function_calls_setjmp || current_function_calls_longjmp) |
---|
43 | |
---|
44 | /* Modify ASM_OUTPUT_LOCAL slightly to test -msvr3-shlib, adapted to gas */ |
---|
45 | #undef ASM_OUTPUT_LOCAL |
---|
46 | #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ |
---|
47 | do { \ |
---|
48 | int align = exact_log2 (ROUNDED); \ |
---|
49 | if (align > 2) align = 2; \ |
---|
50 | if (TARGET_SVR3_SHLIB) \ |
---|
51 | { \ |
---|
52 | data_section (); \ |
---|
53 | ASM_OUTPUT_ALIGN ((FILE), align == -1 ? 2 : align); \ |
---|
54 | ASM_OUTPUT_LABEL ((FILE), (NAME)); \ |
---|
55 | fprintf ((FILE), "\t.set .,.+%u\n", (ROUNDED)); \ |
---|
56 | } \ |
---|
57 | else \ |
---|
58 | { \ |
---|
59 | fputs (".lcomm ", (FILE)); \ |
---|
60 | assemble_name ((FILE), (NAME)); \ |
---|
61 | fprintf ((FILE), ",%u\n", (ROUNDED)); \ |
---|
62 | } \ |
---|
63 | } while (0) |
---|
64 | |
---|
65 | /* Add stuff that normally comes from i386v.h via svr3.h */ |
---|
66 | |
---|
67 | /* Define the actual types of some ANSI-mandated types. These |
---|
68 | definitions should work for most SVR3 systems. */ |
---|
69 | |
---|
70 | #undef SIZE_TYPE |
---|
71 | #define SIZE_TYPE "unsigned int" |
---|
72 | |
---|
73 | #undef PTRDIFF_TYPE |
---|
74 | #define PTRDIFF_TYPE "int" |
---|
75 | |
---|
76 | #undef WCHAR_TYPE |
---|
77 | #define WCHAR_TYPE "long int" |
---|
78 | |
---|
79 | #undef WCHAR_TYPE_SIZE |
---|
80 | #define WCHAR_TYPE_SIZE BITS_PER_WORD |
---|