|
|
1.1 root 1: /*
2: * Target definitions for GNU compiler for sparc running NEXSTEP
3: * Any uncommented definitions are re-defines. Lookup corresponding
4: * comments in sparc.h
5: */
6:
7: #include "sparc/sparc.h"
8: #include "nextstep.h"
9:
10: /* this macro is necessary to make objc method encodings work correctly
11: (aka compute the proper stack offset for regs) */
12:
13: #define OBJC_FORWARDING_REG_OFFSET(ISREG, OFF, REGNO) \
14: do { OFF = (4 * ((REGNO) - 24)); \
15: ISREG = 0; } while (0)
16:
17: #undef CPP_PREDEFINES
18: #define CPP_PREDEFINES "-Dsparc -DNATURAL_ALIGNMENT -DNeXT -Dunix -D__MACH__ -D__BIG_ENDIAN__ -D__ARCHITECTURE__=\"sparc\""
19:
20: #define TARGET_ARCHITECTURE \
21: { {"sparc", 0}}
22:
23: #define DEFAULT_TARGET_ARCH "sparc"
24:
25: /* putout data directives in 68k format */
26:
27: #undef ASM_LONG
28: #define ASM_LONG ".long"
29: #undef ASM_SHORT
30: #define ASM_SHORT ".short"
31: #undef ASM_BYTE_OP
32: #define ASM_BYTE_OP ".byte"
33:
34: /* We don't want .proc generated */
35:
36: #undef ASM_DECLARE_RESULT
37: #define ASM_DECLARE_RESULT(FILE, RESULT)
38:
39: /* customizations for .globl instead of .global */
40:
41: #undef ASM_GLOBALIZE_LABEL
42: #define ASM_GLOBALIZE_LABEL(FILE,NAME) \
43: do { fputs ("\t.globl ", FILE); assemble_name (FILE, NAME); \
44: fputs ("\n", FILE);} while (0)
45:
46: #undef ASM_OUTPUT_COMMON
47: #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
48: ( fputs ("\n\t.comm ", (FILE)), \
49: assemble_name ((FILE), (NAME)), \
50: fprintf ((FILE), ",%u\n", (ROUNDED)))
51:
52: /* don't use .reserve */
53: #undef ASM_OUTPUT_LOCAL
54: #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
55: ( fputs (".lcomm ", (FILE)), \
56: assemble_name ((FILE), (NAME)), \
57: fprintf ((FILE), ",%u\n", (ROUNDED)))
58:
59: /* don't use .skip */
60: #undef ASM_OUTPUT_SKIP
61: #define ASM_OUTPUT_SKIP(FILE,SIZE) \
62: fprintf (FILE, "\t.space %u\n", (SIZE))
63:
64: /* assembler preprocessor directives */
65: #undef ASM_APP_ON
66: #define ASM_APP_ON "#APP\n"
67:
68: #undef ASM_APP_OFF
69: #define ASM_APP_OFF "#NO_APP\n"
70:
71: #undef ASM_OUTPUT_DOUBLE
72: #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
73: { \
74: long t[2]; \
75: REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \
76: fprintf (FILE, "!\t.double %.12e\n\t%s\t0x%lx\n\t%s\t0x%lx\n", \
77: (VALUE), ASM_LONG, t[0], ASM_LONG, t[1]); \
78: }
79:
80: #undef ASM_OUTPUT_FLOAT
81: #define ASM_OUTPUT_FLOAT(FILE,VALUE) \
82: { \
83: long t; \
84: REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \
85: fprintf (FILE, "!\t.single %.12e\n\t%s\t0x%lx\n", (VALUE), ASM_LONG, t);\
86: }
87:
88: #undef ASM_OUTPUT_SOURCE_LINE
89: #define ASM_OUTPUT_SOURCE_LINE(file, line) \
90: { static int sym_lineno = 1; \
91: fprintf (file, "\t.stabn 68,0,%d,LM%d\nLM%d:\n", \
92: line, sym_lineno, sym_lineno); \
93: sym_lineno += 1; }
94:
95: #undef ASM_OUTPUT_INT
96: #define ASM_OUTPUT_INT(FILE,VALUE) \
97: ( fprintf (FILE, "\t%s ", ASM_LONG), \
98: output_addr_const (FILE, (VALUE)), \
99: fprintf (FILE, "\n"))
100:
101: #undef ASM_OUTPUT_SHORT
102: #define ASM_OUTPUT_SHORT(FILE,VALUE) \
103: ( fprintf (FILE, "\t%s ", ASM_SHORT), \
104: output_addr_const (FILE, (VALUE)), \
105: fprintf (FILE, "\n"))
106:
107: #undef ASM_OUTPUT_CHAR
108: #define ASM_OUTPUT_CHAR(FILE,VALUE) \
109: ( fprintf (FILE, "\t%s ", ASM_BYTE_OP), \
110: output_addr_const (FILE, (VALUE)), \
111: fprintf (FILE, "\n"))
112:
113: #undef ASM_OUTPUT_BYTE
114: #define ASM_OUTPUT_BYTE(FILE,VALUE) \
115: fprintf (FILE, "\t%s 0x%x\n", ASM_BYTE_OP, (VALUE))
116:
117: #undef ASM_OUTPUT_ADDR_VEC_ELT
118: #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
119: do { \
120: char label[30]; \
121: ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \
122: fprintf (FILE, "\t%s ", ASM_LONG); \
123: assemble_name (FILE, label); \
124: fprintf (FILE, "\n"); \
125: } while (0)
126:
127: #undef ASM_OUTPUT_ADDR_DIFF_ELT
128: #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
129: do { \
130: char label[30]; \
131: ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE); \
132: fprintf (FILE, "\t%s ", ASM_LONG); \
133: assemble_name (FILE, label); \
134: fprintf (FILE, "-1b\n"); \
135: } while (0)
136:
137:
138: /* Make SPARC V8 the default architecture */
139: #undef TARGET_DEFAULT
140: #define TARGET_DEFAULT 67 // turn on Sparc V8 flag, hard-fp and fpu
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.