|
|
1.1 ! root 1: /* Definitions of target machine for GNU compiler. ENCORE NS32000 version. ! 2: Copyright (C) 1988 Free Software Foundation, Inc. ! 3: Adapted by Robert Brown ([email protected]) from the Sequent ! 4: version by Michael Tiemann ([email protected]). ! 5: ! 6: This file is part of GNU CC. ! 7: ! 8: GNU CC is free software; you can redistribute it and/or modify ! 9: it under the terms of the GNU General Public License as published by ! 10: the Free Software Foundation; either version 2, or (at your option) ! 11: any later version. ! 12: ! 13: GNU CC is distributed in the hope that it will be useful, ! 14: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 16: GNU General Public License for more details. ! 17: ! 18: You should have received a copy of the GNU General Public License ! 19: along with GNU CC; see the file COPYING. If not, write to ! 20: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 21: ! 22: ! 23: #define EXTERNAL_PREFIX '?' ! 24: #define IMMEDIATE_PREFIX '$' ! 25: ! 26: #include "ns32k/ns32k.h" ! 27: ! 28: #define SDB_DEBUGGING_INFO ! 29: #undef DBX_REGISTER_NUMBER ! 30: #define DBX_REGISTER_NUMBER(REGNO) (REGNO) ! 31: ! 32: /* Cause long-jump assembler to be used, ! 33: since otherwise some files fail to be assembled right. */ ! 34: #define ASM_SPEC "-j" ! 35: ! 36: #undef ASM_FILE_START ! 37: #undef ASM_GENERATE_INTERNAL_LABEL ! 38: #undef ASM_OUTPUT_ADDR_DIFF_ELT ! 39: #undef ASM_OUTPUT_ALIGN ! 40: #undef ASM_OUTPUT_ASCII ! 41: #undef ASM_OUTPUT_DOUBLE ! 42: #undef ASM_OUTPUT_INT ! 43: #undef ASM_OUTPUT_INTERNAL_LABEL ! 44: #undef ASM_OUTPUT_LOCAL ! 45: #undef CPP_PREDEFINES ! 46: #undef FUNCTION_BOUNDARY ! 47: #undef PRINT_OPERAND ! 48: #undef PRINT_OPERAND_ADDRESS ! 49: #undef TARGET_VERSION ! 50: #undef FUNCTION_PROFILER ! 51: #undef ASM_OUTPUT_LABELREF_AS_INT ! 52: ! 53: #define TARGET_DEFAULT 9 /* 32332 with 32081. */ ! 54: #define TARGET_VERSION fprintf (stderr, " (32000, Encore syntax)"); ! 55: /* Note Encore does not standardly do -Dencore. */ ! 56: /* budd: should have a -ns32332 (or -apc) switch! but no harm for now */ ! 57: #define CPP_PREDEFINES "-Dns32000 -Dn16 -Dns16000 -Dns32332 -Dunix -Asystem(unix) -Acpu(ns32k) -Amachine(ns32k)" ! 58: ! 59: /* Ignore certain cpp directives used in header files on sysV. */ ! 60: #define SCCS_DIRECTIVE ! 61: ! 62: /* Output #ident as a .ident. */ ! 63: #define ASM_OUTPUT_IDENT(FILE, NAME) fprintf (FILE, "\t.ident \"%s\"\n", NAME); ! 64: ! 65: /* The .file command should always begin the output. */ ! 66: #define ASM_FILE_START(FILE) \ ! 67: output_file_directive ((FILE), main_input_filename) ! 68: ! 69: #define FUNCTION_BOUNDARY 128 /* speed optimization */ ! 70: ! 71: /* ! 72: * The Encore assembler uses ".align 2" to align on 2-byte boundaries. ! 73: */ ! 74: ! 75: #define ASM_OUTPUT_ALIGN(FILE,LOG) \ ! 76: fprintf (FILE, "\t.align %d\n", 1 << (LOG)) ! 77: ! 78: /* The Encore assembler doesn't seem to accept the usual second argument ! 79: and warns that .align may not work in the text section if optimization ! 80: is on. */ ! 81: #undef ASM_OUTPUT_ALIGN_CODE ! 82: #define ASM_OUTPUT_ALIGN_CODE(FILE) ! 83: ! 84: /* ! 85: * Internal labels are prefixed with a period. ! 86: */ ! 87: ! 88: #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ ! 89: sprintf (LABEL, "*.%s%d", PREFIX, NUM) ! 90: #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ ! 91: fprintf (FILE, ".%s%d:\n", PREFIX, NUM) ! 92: #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \ ! 93: fprintf (FILE, "\t.double .L%d-.LI%d\n", VALUE, REL) ! 94: ! 95: /* ! 96: * Different syntax for integer constants, double constants, and ! 97: * uninitialized locals. ! 98: */ ! 99: ! 100: #define ASM_OUTPUT_INT(FILE,VALUE) \ ! 101: ( fprintf (FILE, "\t.double "), \ ! 102: output_addr_const (FILE, (VALUE)), \ ! 103: fprintf (FILE, "\n")) ! 104: ! 105: #define ASM_OUTPUT_LABELREF_AS_INT(STREAM, NAME) \ ! 106: do { \ ! 107: fprintf (STREAM, "\t.double\t"); \ ! 108: ASM_OUTPUT_LABELREF (STREAM, NAME); \ ! 109: fprintf (STREAM, "\n"); \ ! 110: } while (0) ! 111: ! 112: ! 113: #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ ! 114: fprintf (FILE, "\t.long 0f%.20e\n", (VALUE)) ! 115: ! 116: #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ ! 117: ( fputs ("\t.bss ", (FILE)), \ ! 118: assemble_name ((FILE), (NAME)), \ ! 119: fprintf ((FILE), ",%u,%u\n", (SIZE), (ROUNDED))) ! 120: ! 121: /* ! 122: * Encore assembler can't handle huge string constants like the one in ! 123: * gcc.c. If the default routine in varasm.c were more conservative, this ! 124: * code could be eliminated. It starts a new .ascii directive every 40 ! 125: * characters. ! 126: */ ! 127: ! 128: #define ASM_OUTPUT_ASCII(file, p, size) \ ! 129: { \ ! 130: int i; \ ! 131: for (i = 0; i < (size); i++) \ ! 132: { \ ! 133: register int c = (p)[i]; \ ! 134: if ((i / 40) * 40 == i) \ ! 135: if (i == 0) \ ! 136: fprintf ((file), "\t.ascii \""); \ ! 137: else \ ! 138: fprintf ((file), "\"\n\t.ascii \""); \ ! 139: if (c == '\"' || c == '\\') \ ! 140: putc ('\\', (file)); \ ! 141: if (c >= ' ' && c < 0177) \ ! 142: putc (c, (file)); \ ! 143: else \ ! 144: { \ ! 145: fprintf ((file), "\\%o", c); \ ! 146: if (i < (size) - 1 \ ! 147: && (p)[i + 1] >= '0' && (p)[i + 1] <= '9')\ ! 148: fprintf ((file), "\"\n\t.ascii \""); \ ! 149: } \ ! 150: } \ ! 151: fprintf ((file), "\"\n"); \ ! 152: } ! 153: ! 154: /* Modify syntax of jsr instructions. */ ! 155: #define CALL_MEMREF_IMPLICIT ! 156: ! 157: #define NO_ABSOLUTE_PREFIX_IF_SYMBOLIC ! 158: ! 159: #define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE, X, CODE) ! 160: ! 161: #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address(FILE, ADDR) ! 162: ! 163: /* Change the way in which data is allocated and initialized on the ! 164: encore so that both private and shared data are supported. Shared data ! 165: that is initialized must be contained in the ".shrdata" section ! 166: of the program. This is accomplished by defining the SHARED_SECTION_ASM_OP ! 167: macro. Share data that is simply allocated, and not initialized must ! 168: be prefixed with the ".shrcomm" or ".shrbss" pseudo op, for common or ! 169: local data respectively. This is accomplished by redefining the ! 170: ASM_OUTPUT_COMMON and ASM_OUTPUT_LOCAL macros. */ ! 171: ! 172: /* Assembler pseudo-op for shared data segment. */ ! 173: ! 174: #define SHARED_SECTION_ASM_OP ".shrdata" ! 175: ! 176: /* This says how to output an assembler line ! 177: to define a shared common symbol. */ ! 178: ! 179: #define ASM_OUTPUT_SHARED_COMMON(FILE, NAME, SIZE, ROUNDED) \ ! 180: ( fputs (".shrcomm ", (FILE)), \ ! 181: assemble_name ((FILE), (NAME)), \ ! 182: fprintf ((FILE), ",%d\n", (ROUNDED))) ! 183: ! 184: /* This says how to output an assembler line ! 185: to define a shared local symbol. */ ! 186: ! 187: #define ASM_OUTPUT_SHARED_LOCAL(FILE, NAME, SIZE, ROUNDED) \ ! 188: ( fputs ("\t.shrbss ", (FILE)), \ ! 189: assemble_name ((FILE), (NAME)), \ ! 190: fprintf ((FILE), ",%d,%d\n", (SIZE), (ROUNDED))) ! 191: ! 192: #define FUNCTION_PROFILER(FILE, LABELNO) \ ! 193: fprintf (FILE, "\taddr .LP%d,r0\n\tjsr mcount\n", (LABELNO)) ! 194: ! 195: #define ENCORE_ASM
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.