gcc-2.4.3.1 subdirectories
[unix-history] / gnu / usr.bin / cc / common / i386 / unix.h
CommitLineData
9bf86ebb
PR
1/* Definitions for Unix assembler syntax for the Intel 80386.
2 Copyright (C) 1988 Free Software Foundation, Inc.
3
4This file is part of GNU CC.
5
6GNU CC is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2, or (at your option)
9any later version.
10
11GNU CC is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU CC; see the file COPYING. If not, write to
18the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20/* This file defines the aspects of assembler syntax
21 that are the same for all the i386 Unix systems
22 (though they may differ in non-Unix systems). */
23
24/* Define some concatenation macros to concatenate an opcode
25 and one, two or three operands. In other assembler syntaxes
26 they may alter the order of ther operands. */
27
28/* Note that the other files fail to use these
29 in some of the places where they should. */
30
31#ifdef __STDC__
32#define AS2(a,b,c) #a " " #b "," #c
33#define AS3(a,b,c,d) #a " " #b "," #c "," #d
34#define AS1(a,b) #a " " #b
35#else
36#define AS1(a,b) "a b"
37#define AS2(a,b,c) "a b,c"
38#define AS3(a,b,c,d) "a b,c,d"
39#endif
40
41/* Define macro used to output shift-double opcodes when the shift
42 count is in %cl. Some assemblers require %cl as an argument;
43 some don't. This macro controls what to do: by default, don't
44 print %cl. */
45#define AS3_SHIFT_DOUBLE(a,b,c,d) AS2 (a,c,d)
46
47/* Output the size-letter for an opcode.
48 CODE is the letter used in an operand spec (L, B, W, S or Q).
49 CH is the corresponding lower case letter
50 (except if CODE is `Q' then CH is `l', unless GAS_MNEMONICS). */
51#define PUT_OP_SIZE(CODE,CH,FILE) putc (CH,(FILE))
52
53/* Opcode suffix for fullword insn. */
54#define L_SIZE "l"
55
56/* Prefix for register names in this syntax. */
57#define RP "%"
58
59/* Prefix for immediate operands in this syntax. */
60#define IP "$"
61
62/* Indirect call instructions should use `*'. */
63#define USE_STAR 1
64
65/* Prefix for a memory-operand X. */
66#define PRINT_PTR(X, FILE)
67
68/* Delimiters that surround base reg and index reg. */
69#define ADDR_BEG(FILE) putc('(', (FILE))
70#define ADDR_END(FILE) putc(')', (FILE))
71
72/* Print an index register (whose rtx is IREG). */
73#define PRINT_IREG(FILE,IREG) \
74 do \
75 { fputs (",", (FILE)); PRINT_REG ((IREG), 0, (FILE)); } \
76 while (0)
77
78/* Print an index scale factor SCALE. */
79#define PRINT_SCALE(FILE,SCALE) \
80 if ((SCALE) != 1) fprintf ((FILE), ",%d", (SCALE))
81
82/* Print a base/index combination.
83 BREG is the base reg rtx, IREG is the index reg rtx,
84 and SCALE is the index scale factor (an integer). */
85
86#define PRINT_B_I_S(BREG,IREG,SCALE,FILE) \
87 { ADDR_BEG (FILE); \
88 if (BREG) PRINT_REG ((BREG), 0, (FILE)); \
89 if ((IREG) != 0) \
90 { PRINT_IREG ((FILE), (IREG)); \
91 PRINT_SCALE ((FILE), (SCALE)); } \
92 ADDR_END (FILE); }
93\f
94/* Define the syntax of pseudo-ops, labels and comments. */
95
96/* String containing the assembler's comment-starter. */
97
98#define ASM_COMMENT_START "/"
99#define COMMENT_BEGIN "/"
100
101/* Output to assembler file text saying following lines
102 may contain character constants, extra white space, comments, etc. */
103
104#define ASM_APP_ON "/APP\n"
105
106/* Output to assembler file text saying following lines
107 no longer contain unusual constructs. */
108
109#define ASM_APP_OFF "/NO_APP\n"
110
111/* Output before read-only data. */
112
113#define TEXT_SECTION_ASM_OP ".text"
114
115/* Output before writable (initialized) data. */
116
117#define DATA_SECTION_ASM_OP ".data"
118
119/* Output before writable (uninitialized) data. */
120
121#define BSS_SECTION_ASM_OP ".bss"
122
123/* This is how to output a command to make the user-level label named NAME
124 defined for reference from other files. */
125
126#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
127 (fputs (".globl ", FILE), assemble_name (FILE, NAME), fputs ("\n", FILE))
128
129/* By default, target has a 80387, uses IEEE compatible arithmetic,
130 and returns float values in the 387, ie,
131 (TARGET_80387 | TARGET_IEEE_FP | TARGET_FLOAT_RETURNS_IN_80387) */
132
133#define TARGET_DEFAULT 0301
134
135/* Floating-point return values come in the FP register. */
136
137#define VALUE_REGNO(MODE) \
138 (GET_MODE_CLASS (MODE) == MODE_FLOAT \
139 && TARGET_FLOAT_RETURNS_IN_80387 ? FIRST_FLOAT_REG : 0)
140
141/* 1 if N is a possible register number for a function value. */
142
143#define FUNCTION_VALUE_REGNO_P(N) \
144 ((N) == 0 || ((N)== FIRST_FLOAT_REG && TARGET_FLOAT_RETURNS_IN_80387))
145