Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /* Definitions for Intel 386 using GAS.
  2.    Copyright (C) 1988-2015 Free Software Foundation, Inc.
  3.  
  4. This file is part of GCC.
  5.  
  6. GCC is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 3, or (at your option)
  9. any later version.
  10.  
  11. GCC is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GCC; see the file COPYING3.  If not see
  18. <http://www.gnu.org/licenses/>.  */
  19.  
  20. /* Note that i386/seq-gas.h is a GAS configuration that does not use this
  21.    file.  */
  22.  
  23. /* Use the bsd assembler syntax.  */
  24. /* we need to do this because gas is really a bsd style assembler,
  25.  * and so doesn't work well this these att-isms:
  26.  *
  27.  *  ASM_OUTPUT_SKIP is .set .,.+N, which isn't implemented in gas
  28.  *  ASM_OUTPUT_LOCAL is done with .set .,.+N, but that can't be
  29.  *   used to define bss static space
  30.  *
  31.  * Next is the question of whether to uses underscores.  RMS didn't
  32.  * like this idea at first, but since it is now obvious that we
  33.  * need this separate tm file for use with gas, at least to get
  34.  * dbx debugging info, I think we should also switch to underscores.
  35.  * We can keep i386v for real att style output, and the few
  36.  * people who want both form will have to compile twice.
  37.  */
  38.  
  39. /* these come from i386/bsd.h, but are specific to sequent */
  40. #undef DBX_NO_XREFS
  41. #undef DBX_CONTIN_LENGTH
  42.  
  43. /* Ask for COFF symbols.  */
  44.  
  45. #define SDB_DEBUGGING_INFO 1
  46.  
  47. /* Output #ident as a .ident.  */
  48.  
  49. #undef TARGET_ASM_OUTPUT_IDENT
  50. #define TARGET_ASM_OUTPUT_IDENT default_asm_output_ident_directive
  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.