Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/i386/gas.h @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | 77e2b8dfacca |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* Definitions for Intel 386 using GAS. | |
2 Copyright (C) 1988, 1993, 1994, 1996, 2002, 2004, 2007, 2008 | |
3 Free Software Foundation, Inc. | |
4 | |
5 This file is part of GCC. | |
6 | |
7 GCC is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
9 the Free Software Foundation; either version 3, or (at your option) | |
10 any later version. | |
11 | |
12 GCC is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GCC; see the file COPYING3. If not see | |
19 <http://www.gnu.org/licenses/>. */ | |
20 | |
21 /* Note that i386/seq-gas.h is a GAS configuration that does not use this | |
22 file. */ | |
23 | |
24 /* Use the bsd assembler syntax. */ | |
25 /* we need to do this because gas is really a bsd style assembler, | |
26 * and so doesn't work well this these att-isms: | |
27 * | |
28 * ASM_OUTPUT_SKIP is .set .,.+N, which isn't implemented in gas | |
29 * ASM_OUTPUT_LOCAL is done with .set .,.+N, but that can't be | |
30 * used to define bss static space | |
31 * | |
32 * Next is the question of whether to uses underscores. RMS didn't | |
33 * like this idea at first, but since it is now obvious that we | |
34 * need this separate tm file for use with gas, at least to get | |
35 * dbx debugging info, I think we should also switch to underscores. | |
36 * We can keep i386v for real att style output, and the few | |
37 * people who want both form will have to compile twice. | |
38 */ | |
39 | |
40 /* these come from i386/bsd.h, but are specific to sequent */ | |
41 #undef DBX_NO_XREFS | |
42 #undef DBX_CONTIN_LENGTH | |
43 | |
44 /* Ask for COFF symbols. */ | |
45 | |
46 #define SDB_DEBUGGING_INFO 1 | |
47 | |
48 /* Output #ident as a .ident. */ | |
49 | |
50 #define ASM_OUTPUT_IDENT(FILE, NAME) fprintf (FILE, "\t.ident \"%s\"\n", NAME); | |
51 | |
52 /* In the past there was confusion as to what the argument to .align was | |
53 in GAS. For the last several years the rule has been this: for a.out | |
54 file formats that argument is LOG, and for all other file formats the | |
55 argument is 1<<LOG. | |
56 | |
57 However, GAS now has .p2align and .balign pseudo-ops so to remove any | |
58 doubt or guess work, and since this file is used for both a.out and other | |
59 file formats, we use one of them. */ | |
60 | |
61 #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN | |
62 #undef ASM_OUTPUT_ALIGN | |
63 #define ASM_OUTPUT_ALIGN(FILE,LOG) \ | |
64 if ((LOG)!=0) fprintf ((FILE), "\t.balign %d\n", 1<<(LOG)) | |
65 #endif | |
66 | |
67 /* A C statement to output to the stdio stream FILE an assembler | |
68 command to advance the location counter to a multiple of 1<<LOG | |
69 bytes if it is within MAX_SKIP bytes. | |
70 | |
71 This is used to align code labels according to Intel recommendations. */ | |
72 | |
73 #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN | |
74 # define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ | |
75 if ((LOG) != 0) {\ | |
76 if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ | |
77 else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ | |
78 } | |
79 #endif | |
80 | |
81 /* A C statement or statements which output an assembler instruction | |
82 opcode to the stdio stream STREAM. The macro-operand PTR is a | |
83 variable of type `char *' which points to the opcode name in its | |
84 "internal" form--the form that is written in the machine description. | |
85 | |
86 GAS version 1.38.1 doesn't understand the `repz' opcode mnemonic. | |
87 So use `repe' instead. */ | |
88 | |
89 #undef ASM_OUTPUT_OPCODE | |
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 else \ | |
108 ASM_OUTPUT_AVX_PREFIX ((STREAM), (PTR)); \ | |
109 } | |
110 | |
111 /* Define macro used to output shift-double opcodes when the shift | |
112 count is in %cl. Some assemblers require %cl as an argument; | |
113 some don't. | |
114 | |
115 GAS requires the %cl argument, so override i386/unix.h. */ | |
116 | |
117 #undef SHIFT_DOUBLE_OMITS_COUNT | |
118 #define SHIFT_DOUBLE_OMITS_COUNT 0 | |
119 | |
120 /* Print opcodes the way that GAS expects them. */ | |
121 #define GAS_MNEMONICS 1 | |
122 | |
123 /* The comment-starter string as GAS expects it. */ | |
124 #undef ASM_COMMENT_START | |
125 #define ASM_COMMENT_START "#" | |
126 | |
127 #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true |