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