bsd.h revision 18334
118334Speter/* Definitions for BSD assembler syntax for Intel 386
218334Speter   (actually AT&T syntax for insns and operands,
318334Speter   adapted to BSD conventions for symbol names and debugging.)
418334Speter   Copyright (C) 1988 Free Software Foundation, Inc.
518334Speter
618334SpeterThis file is part of GNU CC.
718334Speter
818334SpeterGNU CC is free software; you can redistribute it and/or modify
918334Speterit under the terms of the GNU General Public License as published by
1018334Speterthe Free Software Foundation; either version 2, or (at your option)
1118334Speterany later version.
1218334Speter
1318334SpeterGNU CC is distributed in the hope that it will be useful,
1418334Speterbut WITHOUT ANY WARRANTY; without even the implied warranty of
1518334SpeterMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1618334SpeterGNU General Public License for more details.
1718334Speter
1818334SpeterYou should have received a copy of the GNU General Public License
1918334Speteralong with GNU CC; see the file COPYING.  If not, write to
2018334Speterthe Free Software Foundation, 59 Temple Place - Suite 330,
2118334SpeterBoston, MA 02111-1307, USA.  */
2218334Speter
2318334Speter/* Include common aspects of all 386 Unix assemblers.  */
2418334Speter#include "i386/unix.h"
2518334Speter
2618334Speter/* Use the Sequent Symmetry assembler syntax.  */
2718334Speter
2818334Speter#define TARGET_VERSION fprintf (stderr, " (80386, BSD syntax)");
2918334Speter
3018334Speter/* Define the syntax of pseudo-ops, labels and comments.  */
3118334Speter
3218334Speter/* Prefix for internally generated assembler labels.  If we aren't using
3318334Speter   underscores, we are using prefix `.'s to identify labels that should
3418334Speter   be ignored, as in `i386/gas.h' --karl@cs.umb.edu  */
3518334Speter#ifdef NO_UNDERSCORES
3618334Speter#define LPREFIX ".L"
3718334Speter#else
3818334Speter#define LPREFIX "L"
3918334Speter#endif /* not NO_UNDERSCORES */
4018334Speter
4118334Speter/* Assembler pseudos to introduce constants of various size.  */
4218334Speter
4318334Speter#define ASM_BYTE_OP "\t.byte"
4418334Speter#define ASM_SHORT "\t.word"
4518334Speter#define ASM_LONG "\t.long"
4618334Speter#define ASM_DOUBLE "\t.double"
4718334Speter
4818334Speter/* Output at beginning of assembler file.
4918334Speter   ??? I am skeptical of this -- RMS.  */
5018334Speter
5118334Speter#define ASM_FILE_START(FILE) \
5218334Speter  do {	fprintf (FILE, "\t.file\t");				\
5318334Speter	output_quoted_string (FILE, dump_base_name);		\
5418334Speter	fprintf (FILE, "\n");					\
5518334Speter  } while (0)
5618334Speter
5718334Speter/* This was suggested, but it shouldn't be right for DBX output. -- RMS
5818334Speter   #define ASM_OUTPUT_SOURCE_FILENAME(FILE, NAME) */
5918334Speter
6018334Speter
6118334Speter/* Define the syntax of labels and symbol definitions/declarations.  */
6218334Speter
6318334Speter/* This is how to output an assembler line
6418334Speter   that says to advance the location counter by SIZE bytes.  */
6518334Speter
6618334Speter#define ASM_OUTPUT_SKIP(FILE,SIZE)  \
6718334Speter  fprintf (FILE, "\t.space %u\n", (SIZE))
6818334Speter
6918334Speter/* Define the syntax of labels and symbol definitions/declarations.  */
7018334Speter
7118334Speter/* This says how to output an assembler line
7218334Speter   to define a global common symbol.  */
7318334Speter
7418334Speter#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)  \
7518334Speter( fputs (".comm ", (FILE)),			\
7618334Speter  assemble_name ((FILE), (NAME)),		\
7718334Speter  fprintf ((FILE), ",%u\n", (ROUNDED)))
7818334Speter
7918334Speter/* This says how to output an assembler line
8018334Speter   to define a local common symbol.  */
8118334Speter
8218334Speter#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)  \
8318334Speter( fputs (".lcomm ", (FILE)),			\
8418334Speter  assemble_name ((FILE), (NAME)),		\
8518334Speter  fprintf ((FILE), ",%u\n", (ROUNDED)))
8618334Speter
8718334Speter/* This is how to output an assembler line
8818334Speter   that says to advance the location counter
8918334Speter   to a multiple of 2**LOG bytes.  */
9018334Speter
9118334Speter#define ASM_OUTPUT_ALIGN(FILE,LOG)	\
9218334Speter  if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", (LOG))
9318334Speter
9418334Speter/* This is how to store into the string BUF
9518334Speter   the symbol_ref name of an internal numbered label where
9618334Speter   PREFIX is the class of label and NUM is the number within the class.
9718334Speter   This is suitable for output with `assemble_name'.  */
9818334Speter
9918334Speter#ifdef NO_UNDERSCORES
10018334Speter#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER)	\
10118334Speter    sprintf ((BUF), "*.%s%d", (PREFIX), (NUMBER))
10218334Speter#else
10318334Speter#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER)	\
10418334Speter    sprintf ((BUF), "*%s%d", (PREFIX), (NUMBER))
10518334Speter#endif
10618334Speter
10718334Speter/* This is how to output an internal numbered label where
10818334Speter   PREFIX is the class of label and NUM is the number within the class.  */
10918334Speter
11018334Speter#ifdef NO_UNDERSCORES
11118334Speter#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)	\
11218334Speter  fprintf (FILE, ".%s%d:\n", PREFIX, NUM)
11318334Speter#else
11418334Speter#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)	\
11518334Speter  fprintf (FILE, "%s%d:\n", PREFIX, NUM)
11618334Speter#endif
11718334Speter
11818334Speter/* This is how to output a reference to a user-level label named NAME.  */
11918334Speter
12018334Speter#ifdef NO_UNDERSCORES
12118334Speter#define ASM_OUTPUT_LABELREF(FILE,NAME) fprintf (FILE, "%s", NAME)
12218334Speter#else
12318334Speter#define ASM_OUTPUT_LABELREF(FILE,NAME) fprintf (FILE, "_%s", NAME)
12418334Speter#endif /* not NO_UNDERSCORES */
12518334Speter
12618334Speter/* Sequent has some changes in the format of DBX symbols.  */
12718334Speter#define DBX_NO_XREFS 1
12818334Speter
12918334Speter/* Don't split DBX symbols into continuations.  */
13018334Speter#define DBX_CONTIN_LENGTH 0
131