(root)/
gcc-13.2.0/
gcc/
config/
loongarch/
loongarch-opts.h
       1  /* Definitions for loongarch-specific option handling.
       2     Copyright (C) 2021-2023 Free Software Foundation, Inc.
       3     Contributed by Loongson Ltd.
       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  #ifndef LOONGARCH_OPTS_H
      22  #define LOONGARCH_OPTS_H
      23  
      24  
      25  /* Target configuration */
      26  extern struct loongarch_target la_target;
      27  
      28  /* Switch masks */
      29  extern const int loongarch_switch_mask[];
      30  
      31  #include "loongarch-def.h"
      32  
      33  #if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
      34  /* Handler for "-m" option combinations,
      35     shared by the driver and the compiler proper.  */
      36  void
      37  loongarch_config_target (struct loongarch_target *target,
      38  			 HOST_WIDE_INT opt_switches,
      39  			 int opt_arch, int opt_tune, int opt_fpu,
      40  			 int opt_abi_base, int opt_abi_ext,
      41  			 int opt_cmodel, int follow_multilib_list);
      42  #endif
      43  
      44  
      45  /* Macros for common conditional expressions used in loongarch.{c,h,md} */
      46  #define TARGET_CMODEL_NORMAL	    (la_target.cmodel == CMODEL_NORMAL)
      47  #define TARGET_CMODEL_TINY	    (la_target.cmodel == CMODEL_TINY)
      48  #define TARGET_CMODEL_TINY_STATIC   (la_target.cmodel == CMODEL_TINY_STATIC)
      49  #define TARGET_CMODEL_MEDIUM	    (la_target.cmodel == CMODEL_MEDIUM)
      50  #define TARGET_CMODEL_LARGE	    (la_target.cmodel == CMODEL_LARGE)
      51  #define TARGET_CMODEL_EXTREME	    (la_target.cmodel == CMODEL_EXTREME)
      52  
      53  #define TARGET_HARD_FLOAT	    (la_target.isa.fpu != ISA_EXT_NOFPU)
      54  #define TARGET_HARD_FLOAT_ABI	    (la_target.abi.base == ABI_BASE_LP64D \
      55  				     || la_target.abi.base == ABI_BASE_LP64F)
      56  
      57  #define TARGET_SOFT_FLOAT	  (la_target.isa.fpu == ISA_EXT_NOFPU)
      58  #define TARGET_SOFT_FLOAT_ABI	  (la_target.abi.base == ABI_BASE_LP64S)
      59  #define TARGET_SINGLE_FLOAT	  (la_target.isa.fpu == ISA_EXT_FPU32)
      60  #define TARGET_SINGLE_FLOAT_ABI	  (la_target.abi.base == ABI_BASE_LP64F)
      61  #define TARGET_DOUBLE_FLOAT	  (la_target.isa.fpu == ISA_EXT_FPU64)
      62  #define TARGET_DOUBLE_FLOAT_ABI	  (la_target.abi.base == ABI_BASE_LP64D)
      63  
      64  #define TARGET_64BIT		  (la_target.isa.base == ISA_BASE_LA64V100)
      65  #define TARGET_ABI_LP64		  (la_target.abi.base == ABI_BASE_LP64D	\
      66  				   || la_target.abi.base == ABI_BASE_LP64F \
      67  				   || la_target.abi.base == ABI_BASE_LP64S)
      68  
      69  #define TARGET_ARCH_NATIVE	  (la_target.cpu_arch == CPU_NATIVE)
      70  #define LARCH_ACTUAL_ARCH	  (TARGET_ARCH_NATIVE \
      71  				   ? (la_target.cpu_native < N_ARCH_TYPES \
      72  				      ? (la_target.cpu_native) : (CPU_NATIVE)) \
      73  				      : (la_target.cpu_arch))
      74  
      75  #define TARGET_TUNE_NATIVE	(la_target.cpu_tune == CPU_NATIVE)
      76  #define LARCH_ACTUAL_TUNE		(TARGET_TUNE_NATIVE \
      77  				 ? (la_target.cpu_native < N_TUNE_TYPES \
      78  				    ? (la_target.cpu_native) : (CPU_NATIVE)) \
      79  				    : (la_target.cpu_tune))
      80  
      81  #define TARGET_ARCH_LOONGARCH64	  (LARCH_ACTUAL_ARCH == CPU_LOONGARCH64)
      82  #define TARGET_ARCH_LA464	  (LARCH_ACTUAL_ARCH == CPU_LA464)
      83  
      84  #define TARGET_TUNE_LOONGARCH64	  (LARCH_ACTUAL_TUNE == CPU_LOONGARCH64)
      85  #define TARGET_TUNE_LA464	  (LARCH_ACTUAL_TUNE == CPU_LA464)
      86  
      87  /* Note: optimize_size may vary across functions,
      88     while -m[no]-memcpy imposes a global constraint.  */
      89  #define TARGET_DO_OPTIMIZE_BLOCK_MOVE_P  loongarch_do_optimize_block_move_p()
      90  
      91  #ifndef HAVE_AS_EXPLICIT_RELOCS
      92  #define HAVE_AS_EXPLICIT_RELOCS 0
      93  #endif
      94  
      95  #endif /* LOONGARCH_OPTS_H */