153109Speter/* Definitions for Intel 386 using GAS. 252153Sbp Copyright (C) 1988, 1993, 1994, 1996, 2002, 2004 352153Sbp Free Software Foundation, Inc. 452153Sbp 5195767SkensmithThis file is part of GCC. 652153Sbp 7152285SruGCC is free software; you can redistribute it and/or modify 8152285Sruit under the terms of the GNU General Public License as published by 9152285Sruthe Free Software Foundation; either version 2, or (at your option) 1052153Sbpany later version. 1152153Sbp 1252153SbpGCC is distributed in the hope that it will be useful, 1352153Sbpbut WITHOUT ANY WARRANTY; without even the implied warranty of 14201381SedMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15201381SedGNU General Public License for more details. 1652153Sbp 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING. If not, write to 19the Free Software Foundation, 51 Franklin Street, Fifth Floor, 20Boston, MA 02110-1301, USA. */ 21 22/* Note that i386/seq-gas.h is a GAS configuration that does not use this 23 file. */ 24 25/* Use the bsd assembler syntax. */ 26/* we need to do this because gas is really a bsd style assembler, 27 * and so doesn't work well this these att-isms: 28 * 29 * ASM_OUTPUT_SKIP is .set .,.+N, which isn't implemented in gas 30 * ASM_OUTPUT_LOCAL is done with .set .,.+N, but that can't be 31 * used to define bss static space 32 * 33 * Next is the question of whether to uses underscores. RMS didn't 34 * like this idea at first, but since it is now obvious that we 35 * need this separate tm file for use with gas, at least to get 36 * dbx debugging info, I think we should also switch to underscores. 37 * We can keep i386v for real att style output, and the few 38 * people who want both form will have to compile twice. 39 */ 40 41/* these come from i386/bsd.h, but are specific to sequent */ 42#undef DBX_NO_XREFS 43#undef DBX_CONTIN_LENGTH 44 45/* Ask for COFF symbols. */ 46 47#define SDB_DEBUGGING_INFO 1 48 49/* Output #ident as a .ident. */ 50 51#define ASM_OUTPUT_IDENT(FILE, NAME) fprintf (FILE, "\t.ident \"%s\"\n", NAME); 52 53/* In the past there was confusion as to what the argument to .align was 54 in GAS. For the last several years the rule has been this: for a.out 55 file formats that argument is LOG, and for all other file formats the 56 argument is 1<<LOG. 57 58 However, GAS now has .p2align and .balign pseudo-ops so to remove any 59 doubt or guess work, and since this file is used for both a.out and other 60 file formats, we use one of them. */ 61 62#ifdef HAVE_GAS_BALIGN_AND_P2ALIGN 63#undef ASM_OUTPUT_ALIGN 64#define ASM_OUTPUT_ALIGN(FILE,LOG) \ 65 if ((LOG)!=0) fprintf ((FILE), "\t.balign %d\n", 1<<(LOG)) 66#endif 67 68/* A C statement to output to the stdio stream FILE an assembler 69 command to advance the location counter to a multiple of 1<<LOG 70 bytes if it is within MAX_SKIP bytes. 71 72 This is used to align code labels according to Intel recommendations. */ 73 74#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 75# define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ 76 if ((LOG) != 0) {\ 77 if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 78 else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ 79 } 80#endif 81 82/* A C statement or statements which output an assembler instruction 83 opcode to the stdio stream STREAM. The macro-operand PTR is a 84 variable of type `char *' which points to the opcode name in its 85 "internal" form--the form that is written in the machine description. 86 87 GAS version 1.38.1 doesn't understand the `repz' opcode mnemonic. 88 So use `repe' instead. */ 89 90#define ASM_OUTPUT_OPCODE(STREAM, PTR) \ 91{ \ 92 if ((PTR)[0] == 'r' \ 93 && (PTR)[1] == 'e' \ 94 && (PTR)[2] == 'p') \ 95 { \ 96 if ((PTR)[3] == 'z') \ 97 { \ 98 fprintf (STREAM, "repe"); \ 99 (PTR) += 4; \ 100 } \ 101 else if ((PTR)[3] == 'n' && (PTR)[4] == 'z') \ 102 { \ 103 fprintf (STREAM, "repne"); \ 104 (PTR) += 5; \ 105 } \ 106 } \ 107} 108 109/* Define macro used to output shift-double opcodes when the shift 110 count is in %cl. Some assemblers require %cl as an argument; 111 some don't. 112 113 GAS requires the %cl argument, so override i386/unix.h. */ 114 115#undef SHIFT_DOUBLE_OMITS_COUNT 116#define SHIFT_DOUBLE_OMITS_COUNT 0 117 118/* Print opcodes the way that GAS expects them. */ 119#define GAS_MNEMONICS 1 120 121/* The comment-starter string as GAS expects it. */ 122#undef ASM_COMMENT_START 123#define ASM_COMMENT_START "#" 124 125#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true 126