Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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. /* A C statement or statements which output an assembler instruction
  81.    opcode to the stdio stream STREAM.  The macro-operand PTR is a
  82.    variable of type `char *' which points to the opcode name in its
  83.    "internal" form--the form that is written in the machine description.
  84.  
  85.    GAS version 1.38.1 doesn't understand the `repz' opcode mnemonic.
  86.    So use `repe' instead.  */
  87.  
  88. #undef ASM_OUTPUT_OPCODE
  89. #define ASM_OUTPUT_OPCODE(STREAM, PTR)  \
  90. {                                                                       \
  91.   if ((PTR)[0] == 'r'                                                   \
  92.       && (PTR)[1] == 'e'                                                \
  93.       && (PTR)[2] == 'p')                                               \
  94.     {                                                                   \
  95.       if ((PTR)[3] == 'z')                                              \
  96.         {                                                               \
  97.           fputs ("repe", (STREAM));                                     \
  98.           (PTR) += 4;                                                   \
  99.         }                                                               \
  100.       else if ((PTR)[3] == 'n' && (PTR)[4] == 'z')                      \
  101.         {                                                               \
  102.           fputs ("repne", (STREAM));                                    \
  103.           (PTR) += 5;                                                   \
  104.         }                                                               \
  105.     }                                                                   \
  106.   else                                                                  \
  107.     ASM_OUTPUT_AVX_PREFIX ((STREAM), (PTR));                            \
  108. }
  109.  
  110. /* Define macro used to output shift-double opcodes when the shift
  111.    count is in %cl.  Some assemblers require %cl as an argument;
  112.    some don't.
  113.  
  114.    GAS requires the %cl argument, so override i386/unix.h.  */
  115.  
  116. #undef SHIFT_DOUBLE_OMITS_COUNT
  117. #define SHIFT_DOUBLE_OMITS_COUNT 0
  118.  
  119. /* The comment-starter string as GAS expects it. */
  120. #undef ASM_COMMENT_START
  121. #define ASM_COMMENT_START "#"
  122.  
  123. #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
  124.