(root)/
gcc-13.2.0/
gcc/
config/
i386/
gas.h
       1  /* Definitions for Intel 386 using GAS.
       2     Copyright (C) 1988-2023 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   * 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  /* Output #ident as a .ident.  */
      40  
      41  #undef TARGET_ASM_OUTPUT_IDENT
      42  #define TARGET_ASM_OUTPUT_IDENT default_asm_output_ident_directive
      43  
      44  /* In the past there was confusion as to what the argument to .align was
      45     in GAS.  For the last several years the rule has been this: for a.out
      46     file formats that argument is LOG, and for all other file formats the
      47     argument is 1<<LOG.
      48  
      49     However, GAS now has .p2align and .balign pseudo-ops so to remove any
      50     doubt or guess work, and since this file is used for both a.out and other
      51     file formats, we use one of them.  */
      52  
      53  #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN 
      54  #undef ASM_OUTPUT_ALIGN
      55  #define ASM_OUTPUT_ALIGN(FILE,LOG) \
      56    if ((LOG)!=0) fprintf ((FILE), "\t.balign %d\n", 1 << (LOG))
      57  #endif
      58  
      59  /* A C statement or statements which output an assembler instruction
      60     opcode to the stdio stream STREAM.  The macro-operand PTR is a
      61     variable of type `char *' which points to the opcode name in its
      62     "internal" form--the form that is written in the machine description.
      63  
      64     GAS version 1.38.1 doesn't understand the `repz' opcode mnemonic.
      65     So use `repe' instead.  */
      66  
      67  #undef ASM_OUTPUT_OPCODE
      68  #define ASM_OUTPUT_OPCODE(STREAM, PTR)	\
      69  {									\
      70    if ((PTR)[0] == 'r'							\
      71        && (PTR)[1] == 'e'						\
      72        && (PTR)[2] == 'p')						\
      73      {									\
      74        if ((PTR)[3] == 'z')						\
      75  	{								\
      76  	  fputs ("repe", (STREAM));					\
      77  	  (PTR) += 4;							\
      78  	}								\
      79        else if ((PTR)[3] == 'n' && (PTR)[4] == 'z')			\
      80  	{								\
      81  	  fputs ("repne", (STREAM));					\
      82  	  (PTR) += 5;							\
      83  	}								\
      84      }									\
      85    else									\
      86      ASM_OUTPUT_AVX_PREFIX ((STREAM), (PTR));				\
      87  }
      88  
      89  /* Define macro used to output shift-double opcodes when the shift
      90     count is in %cl.  Some assemblers require %cl as an argument;
      91     some don't.
      92  
      93     GAS requires the %cl argument, so override i386/unix.h.  */
      94  
      95  #undef SHIFT_DOUBLE_OMITS_COUNT
      96  #define SHIFT_DOUBLE_OMITS_COUNT 0
      97  
      98  /* The comment-starter string as GAS expects it. */
      99  #undef ASM_COMMENT_START
     100  #define ASM_COMMENT_START "#"
     101  
     102  #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true