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