|
|
1.1 root 1: /* Definitions of target machine for GNU compiler. Iris version.
2: Copyright (C) 1991 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
19:
20: #define SGI_TARGET 1 /* inform other mips files this is SGI */
21:
22: /* Names to predefine in the preprocessor for this target machine. */
23:
24: #define CPP_PREDEFINES "-Dunix -Dmips -Dsgi -DSVR3 -Dhost_mips -DMIPSEB -DSYSTYPE_SYSV"
25:
26: #define STARTFILE_SPEC "%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}"
27:
28: #define CPP_SPEC "\
29: %{!ansi:-D__EXTENSIONS__} -D_MIPSEB -D_SYSTYPE_SYSV \
30: %{.S: -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
31: %{.cc: -D_LANGUAGE_C_PLUS_PLUS} \
32: %{.cxx: -D_LANGUAGE_C_PLUS_PLUS} \
33: %{.C: -D_LANGUAGE_C_PLUS_PLUS} \
34: %{.m: -D_LANGUAGE_OBJECTIVE_C} \
35: %{!.S: %{!.cc: %{!.cxx: %{!.C: %{!.m: -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}}}}}"
36:
37: #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} crtn.o%s"
38:
39: #define MACHINE_TYPE "Silicon Graphics Mips"
40:
41: /* SGI Iris doesn't support -EB/-EL like other MIPS processors. */
42:
43: #define ASM_SPEC "\
44: %{!mgas: \
45: %{!mrnames: %{!.s:-nocpp} %{.s: %{cpp} %{nocpp}}} \
46: %{pipe: %e-pipe is not supported.} \
47: %{mips1} %{mips2} %{mips3} \
48: %{noasmopt:-O0} \
49: %{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}} \
50: %{g} %{g0} %{g1} %{g2} %{g3} %{v} %{K} \
51: %{ggdb:-g} %{ggdb0:-g0} %{ggdb1:-g1} %{ggdb2:-g2} %{ggdb3:-g3} \
52: %{gstabs:-g} %{gstabs0:-g0} %{gstabs1:-g1} %{gstabs2:-g2} %{gstabs3:-g3} \
53: %{gstabs+:-g} %{gstabs+0:-g0} %{gstabs+1:-g1} %{gstabs+2:-g2} %{gstabs+3:-g3} \
54: %{gcoff:-g} %{gstabs0:-g0} %{gcoff1:-g1} %{gcoff2:-g2} %{gcoff3:-g3}} \
55: %{G*}"
56:
57: #define LINK_SPEC "\
58: %{G*} \
59: %{!mgas: %{mips1} %{mips2} %{mips3} \
60: %{bestGnum} %{shared} %{non_shared}}"
61:
62: /* Always use 1 for .file number. I [[email protected]] wonder why
63: IRIS needs this. */
64:
65: #define SET_FILE_NUMBER() num_source_filenames = 1
66:
67: /* Put out a label after a .loc. I [[email protected]] wonder why
68: IRIS needs this. */
69:
70: #define LABEL_AFTER_LOC(STREAM) fprintf (STREAM, "LM%d:\n", ++sym_lineno)
71:
72: #define STACK_ARGS_ADJUST(SIZE) \
73: { \
74: SIZE.constant += 4; \
75: if (SIZE.constant < 32) \
76: SIZE.constant = 32; \
77: }
78:
79: /* Define this macro to control use of the character `$' in
80: identifier names. The value should be 0, 1, or 2. 0 means `$'
81: is not allowed by default; 1 means it is allowed by default if
82: `-traditional' is used; 2 means it is allowed by default provided
83: `-ansi' is not used. 1 is the default; there is no need to
84: define this macro in that case. */
85:
86: #define DOLLARS_IN_IDENTIFIERS 0
87:
88: /* Tell G++ not to create constructors or destructors with $'s in them. */
89:
90: #define NO_DOLLAR_IN_LABEL 1
91:
92: /* Specify size_t, ptrdiff_t, and wchar_t types. */
93: #define SIZE_TYPE "unsigned int"
94: #define PTRDIFF_TYPE "int"
95: #define WCHAR_TYPE "unsigned char"
96: #define WCHAR_TYPE_SIZE BITS_PER_UNIT
97:
98: /* Generate calls to memcpy, etc., not bcopy, etc. */
99: #define TARGET_MEM_FUNCTIONS
100:
101: /* Plain char is unsigned in the SGI compiler. */
102: #define DEFAULT_SIGNED_CHAR 0
103:
104:
105: /* A C statement to initialize the variable parts of a trampoline.
106: ADDR is an RTX for the address of the trampoline; FNADDR is an
107: RTX for the address of the nested function; STATIC_CHAIN is an
108: RTX for the static chain value that should be passed to the
109: function when it is called.
110:
111: Silicon Graphics machines are supposed to not have a mprotect
112: function to enable execute protection, but the stack already
113: has execute protection turned on. Because the MIPS chips have
114: no method to flush the icache without a system call, this can lose
115: if the same address is used for multiple trampolines. */
116:
117: #define INITIALIZE_TRAMPOLINE(ADDR, FUNC, CHAIN) \
118: { \
119: rtx addr = ADDR; \
120: emit_move_insn (gen_rtx (MEM, SImode, plus_constant (addr, 28)), FUNC); \
121: emit_move_insn (gen_rtx (MEM, SImode, plus_constant (addr, 32)), CHAIN); \
122: }
123:
124:
125: /* Attempt to turn on access permissions for the stack. */
126:
127: #define TRANSFER_FROM_TRAMPOLINE \
128: \
129: void \
130: __enable_execute_stack (addr) \
131: char *addr; \
132: { \
133: }
134:
135: #include "mips/mips.h"
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.