|
|
1.1 root 1: /* Definitions for Sequent Intel 386. 1.1.1.3 ! root 2: Copyright (C) 1988, 1994 Free Software Foundation, Inc. 1.1 root 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: #include "i386/i386.h" 21: 22: /* Use the BSD assembler syntax. */ 23: 24: #include "i386/bsd.h" 25: 26: /* By default, don't use IEEE compatible arithmetic comparisons 27: because the assembler can't handle the fucom insn. 28: Return float values in the 387. 29: (TARGET_80387 | TARGET_FLOAT_RETURNS_IN_80387) */ 30: 31: #undef TARGET_DEFAULT 32: #define TARGET_DEFAULT 0201 33: 34: /* Specify predefined symbols in preprocessor. */ 35: 1.1.1.2 root 36: #define CPP_PREDEFINES "-Dunix -Di386 -Dsequent -Asystem(unix) -Acpu(i386) -Amachine(i386)" 1.1 root 37: 38: /* Pass -Z and -ZO options to the linker. */ 39: 40: #define LINK_SPEC "%{Z*}" 41: 42: #if 0 /* Dynix 3.1 is said to accept -L. */ 43: /* Dynix V3.0.12 doesn't accept -L at all. */ 44: 45: #define LINK_LIBGCC_SPECIAL 46: #endif 47: 48: /* Link with libg.a when debugging, for dbx's sake. */ 49: 50: #define LIB_SPEC "%{g:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} " 51: 52: /* We don't want to output SDB debugging information. */ 53: 54: #undef SDB_DEBUGGING_INFO 55: 56: /* We want to output DBX debugging information. */ 57: 58: #define DBX_DEBUGGING_INFO 59: 60: /* Sequent Symmetry has size_t defined as int in /usr/include/sys/types.h */ 61: #define SIZE_TYPE "int" 62: 63: /* gcc order is ax, dx, cx, bx, si, di, bp, sp, st, st. 64: * dbx order is ax, dx, cx, st(0), st(1), bx, si, di, st(2), st(3), 65: * st(4), st(5), st(6), st(7), sp, bp */ 66: 67: /* ??? The right thing would be to change the ordering of the 68: registers to correspond to the conventions of this system, 69: and get rid of DBX_REGISTER_NUMBER. */ 70: 71: #undef DBX_REGISTER_NUMBER 72: #define DBX_REGISTER_NUMBER(n) \ 73: ((n) < 3 ? (n) : (n) < 6 ? (n) + 2 \ 74: : (n) == 6 ? 15 : (n) == 7 ? 14 : 3) 75: 76: /* [email protected] says these two definitions 77: fix trouble in dbx. */ 78: #undef DBX_OUTPUT_LBRAC 79: #define DBX_OUTPUT_LBRAC(file,name) \ 80: fprintf (asmfile, "%s %d,0,%d,", ASM_STABN_OP, N_LBRAC, depth); \ 81: assemble_name (asmfile, buf); \ 82: fprintf (asmfile, "\n"); 83: 84: #undef DBX_OUTPUT_RBRAC 85: #define DBX_OUTPUT_RBRAC(file,name) \ 86: fprintf (asmfile, "%s %d,0,%d,", ASM_STABN_OP, N_RBRAC, depth); \ 87: assemble_name (asmfile, buf); \ 88: fprintf (asmfile, "\n"); 89: 90: /* Prevent anything from being allocated in the register pair cx/bx, 91: since that would confuse GDB. */ 92: 93: #undef HARD_REGNO_MODE_OK 94: #define HARD_REGNO_MODE_OK(REGNO, MODE) \ 95: (((REGNO) < 2 ? 1 \ 96: : (REGNO) < 4 ? 1 \ 97: : FP_REGNO_P (REGNO) ? (GET_MODE_CLASS (MODE) == MODE_FLOAT \ 98: || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) \ 99: : (MODE) != QImode) \ 100: && ! (REGNO == 2 && GET_MODE_UNIT_SIZE (MODE) > 4)) 101: 102: /* Output assembler code to FILE to increment profiler label # LABELNO 103: for profiling a function entry. */ 104: 105: #undef FUNCTION_PROFILER 106: #define FUNCTION_PROFILER(FILE, LABELNO) \ 107: fprintf (FILE, "\tmovl $.LP%d,%%eax\n\tcall mcount\n", (LABELNO)); 108: 109: /* Assembler pseudo-op for shared data segment. */ 110: #define SHARED_SECTION_ASM_OP ".shdata" 111: 112: /* A C statement or statements which output an assembler instruction 113: opcode to the stdio stream STREAM. The macro-operand PTR is a 114: variable of type `char *' which points to the opcode name in its 115: "internal" form--the form that is written in the machine description. 116: 117: The Sequent assembler (identified as "Balance 8000 Assembler 118: 07/17/85 3.90" by "as -v") does not understand the `movs[bwl]' string 119: move mnemonics - it uses `smov[bwl]' instead. Change "movs" into 120: "smov", carefully avoiding the sign-extend opcodes. */ 121: 122: #define ASM_OUTPUT_OPCODE(STREAM, PTR) \ 123: { \ 124: if ((PTR)[0] == 'm' \ 125: && (PTR)[1] == 'o' \ 126: && (PTR)[2] == 'v' \ 127: && (PTR)[3] == 's' \ 128: && ((PTR)[4] == 'b' || (PTR)[4] == 'w' || (PTR)[4] == 'l') \ 129: && ((PTR)[5] == ' ' || (PTR)[5] == '\t'|| (PTR)[5] == '\0')) \ 130: { \ 131: fprintf (STREAM, "smov"); \ 132: (PTR) += 4; \ 133: } \ 134: } 135: 136: /* 10-Aug-92 pes Local labels are prefixed with ".L" */ 137: #undef LPREFIX 138: #define LPREFIX ".L" 139: 140: #undef ASM_GENERATE_INTERNAL_LABEL 141: #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER)\ 142: sprintf ((BUF), "*.%s%d", (PREFIX), (NUMBER)) 143: 144: #undef ASM_OUTPUT_INTERNAL_LABEL 145: #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)\ 146: fprintf (FILE, ".%s%d:\n", PREFIX, NUM) 1.1.1.3 ! root 147: ! 148: /* The native compiler passes the address of the returned structure in eax. */ ! 149: #undef STRUCT_VALUE ! 150: #undef STRUCT_VALUE_INCOMING ! 151: #define STRUCT_VALUE_REGNUM 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.