⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sh.h

📁 linux下编程用 编译软件
💻 H
📖 第 1 页 / 共 5 页
字号:
/* Definitions of target machine for GNU compiler for Renesas / SuperH SH.   Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,   2003, 2004, 2005, 2006 Free Software Foundation, Inc.   Contributed by Steve Chamberlain (sac@cygnus.com).   Improved by Jim Wilson (wilson@cygnus.com).This file is part of GCC.GCC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GCC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GCC; see the file COPYING.  If not, write tothe Free Software Foundation, 51 Franklin Street, Fifth Floor,Boston, MA 02110-1301, USA.  */#ifndef GCC_SH_H#define GCC_SH_H#define TARGET_VERSION \  fputs (" (Hitachi SH)", stderr);/* Unfortunately, insn-attrtab.c doesn't include insn-codes.h.  We can't   include it here, because bconfig.h is also included by gencodes.c .  *//* ??? No longer true.  */extern int code_for_indirect_jump_scratch;#define TARGET_CPU_CPP_BUILTINS() \do { \  builtin_define ("__sh__"); \  builtin_assert ("cpu=sh"); \  builtin_assert ("machine=sh"); \  switch ((int) sh_cpu) \    { \    case PROCESSOR_SH1: \      builtin_define ("__sh1__"); \      break; \    case PROCESSOR_SH2: \      builtin_define ("__sh2__"); \      break; \    case PROCESSOR_SH2E: \      builtin_define ("__SH2E__"); \      break; \    case PROCESSOR_SH2A: \      builtin_define ("__SH2A__"); \      builtin_define (TARGET_SH2A_DOUBLE \		      ? (TARGET_FPU_SINGLE ? "__SH2A_SINGLE__" : "__SH2A_DOUBLE__") \		      : TARGET_FPU_ANY ? "__SH2A_SINGLE_ONLY__" \		      : "__SH2A_NOFPU__"); \      break; \    case PROCESSOR_SH3: \      builtin_define ("__sh3__"); \      builtin_define ("__SH3__"); \      if (TARGET_HARD_SH4) \	builtin_define ("__SH4_NOFPU__"); \      break; \    case PROCESSOR_SH3E: \      builtin_define (TARGET_HARD_SH4 ? "__SH4_SINGLE_ONLY__" : "__SH3E__"); \      break; \    case PROCESSOR_SH4: \      builtin_define (TARGET_FPU_SINGLE ? "__SH4_SINGLE__" : "__SH4__"); \      break; \    case PROCESSOR_SH4A: \      builtin_define ("__SH4A__"); \      builtin_define (TARGET_SH4 \		      ? (TARGET_FPU_SINGLE ? "__SH4_SINGLE__" : "__SH4__") \		      : TARGET_FPU_ANY ? "__SH4_SINGLE_ONLY__" \		      : "__SH4_NOFPU__"); \      break; \    case PROCESSOR_SH5: \      { \	builtin_define_with_value ("__SH5__", \				   TARGET_SHMEDIA64 ? "64" : "32", 0); \	builtin_define_with_value ("__SHMEDIA__", \				   TARGET_SHMEDIA ? "1" : "0", 0); \	if (! TARGET_FPU_DOUBLE) \	  builtin_define ("__SH4_NOFPU__"); \      } \    } \  if (TARGET_FPU_ANY) \    builtin_define ("__SH_FPU_ANY__"); \  if (TARGET_FPU_DOUBLE) \    builtin_define ("__SH_FPU_DOUBLE__"); \  if (TARGET_HITACHI) \    builtin_define ("__HITACHI__"); \  builtin_define (TARGET_LITTLE_ENDIAN \		  ? "__LITTLE_ENDIAN__" : "__BIG_ENDIAN__"); \  if (flag_pic) \    { \      builtin_define ("__pic__"); \      builtin_define ("__PIC__"); \    } \} while (0)/* We can not debug without a frame pointer.  *//* #define CAN_DEBUG_WITHOUT_FP */#define CONDITIONAL_REGISTER_USAGE do					\{									\  int regno;								\  for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno ++)		\    if (! VALID_REGISTER_P (regno))					\      fixed_regs[regno] = call_used_regs[regno] = 1;			\  /* R8 and R9 are call-clobbered on SH5, but not on earlier SH ABIs.  */ \  if (TARGET_SH5)							\    {									\      call_used_regs[FIRST_GENERAL_REG + 8]				\	= call_used_regs[FIRST_GENERAL_REG + 9] = 1;			\      call_really_used_regs[FIRST_GENERAL_REG + 8]			\	= call_really_used_regs[FIRST_GENERAL_REG + 9] = 1;		\    }									\  if (TARGET_SHMEDIA)							\    {									\      regno_reg_class[FIRST_GENERAL_REG] = GENERAL_REGS;		\      CLEAR_HARD_REG_SET (reg_class_contents[FP0_REGS]);		\      regno_reg_class[FIRST_FP_REG] = FP_REGS;				\    }									\  if (flag_pic)								\    {									\      fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;				\      call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;			\    }									\  /* Renesas saves and restores mac registers on call.  */		\  if (TARGET_HITACHI && ! TARGET_NOMACSAVE)				\    {									\      call_really_used_regs[MACH_REG] = 0;				\      call_really_used_regs[MACL_REG] = 0;				\    }									\  for (regno = FIRST_FP_REG + (TARGET_LITTLE_ENDIAN != 0);		\       regno <= LAST_FP_REG; regno += 2)				\    SET_HARD_REG_BIT (reg_class_contents[DF_HI_REGS], regno);		\  if (TARGET_SHMEDIA)							\    {									\      for (regno = FIRST_TARGET_REG; regno <= LAST_TARGET_REG; regno ++)\	if (! fixed_regs[regno] && call_really_used_regs[regno])	\	  SET_HARD_REG_BIT (reg_class_contents[SIBCALL_REGS], regno);	\    }									\  else									\    for (regno = FIRST_GENERAL_REG; regno <= LAST_GENERAL_REG; regno++)	\      if (! fixed_regs[regno] && call_really_used_regs[regno])		\	SET_HARD_REG_BIT (reg_class_contents[SIBCALL_REGS], regno);	\} while (0)/* Nonzero if this is an ELF target - compile time only */#define TARGET_ELF 0/* Nonzero if we should generate code using type 2E insns.  */#define TARGET_SH2E (TARGET_SH2 && TARGET_SH_E)/* Nonzero if we should generate code using type 2A insns.  */#define TARGET_SH2A TARGET_HARD_SH2A/* Nonzero if we should generate code using type 2A SF insns.  */#define TARGET_SH2A_SINGLE (TARGET_SH2A && TARGET_SH2E)/* Nonzero if we should generate code using type 2A DF insns.  */#define TARGET_SH2A_DOUBLE (TARGET_HARD_SH2A_DOUBLE && TARGET_SH2A)/* Nonzero if we should generate code using type 3E insns.  */#define TARGET_SH3E (TARGET_SH3 && TARGET_SH_E)/* Nonzero if the cache line size is 32.  */#define TARGET_CACHE32 (TARGET_HARD_SH4 || TARGET_SH5)/* Nonzero if we schedule for a superscalar implementation.  */#define TARGET_SUPERSCALAR TARGET_HARD_SH4/* Nonzero if the target has separate instruction and data caches.  */#define TARGET_HARVARD (TARGET_HARD_SH4 || TARGET_SH5)/* Nonzero if a double-precision FPU is available.  */#define TARGET_FPU_DOUBLE \  ((target_flags & MASK_SH4) != 0 || TARGET_SH2A_DOUBLE)/* Nonzero if an FPU is available.  */#define TARGET_FPU_ANY (TARGET_SH2E || TARGET_FPU_DOUBLE)/* Nonzero if we should generate code using type 4 insns.  */#undef TARGET_SH4#define TARGET_SH4 ((target_flags & MASK_SH4) != 0 && TARGET_SH1)/* Nonzero if we're generating code for the common subset of   instructions present on both SH4a and SH4al-dsp.  */#define TARGET_SH4A_ARCH TARGET_SH4A/* Nonzero if we're generating code for SH4a, unless the use of the   FPU is disabled (which makes it compatible with SH4al-dsp).  */#define TARGET_SH4A_FP (TARGET_SH4A_ARCH && TARGET_FPU_ANY)/* Nonzero if we should generate code using the SHcompact instruction   set and 32-bit ABI.  */#define TARGET_SHCOMPACT (TARGET_SH5 && TARGET_SH1)/* Nonzero if we should generate code using the SHmedia instruction   set and ABI.  */#define TARGET_SHMEDIA (TARGET_SH5 && ! TARGET_SH1)/* Nonzero if we should generate code using the SHmedia ISA and 32-bit   ABI.  */#define TARGET_SHMEDIA32 (TARGET_SH5 && ! TARGET_SH1 && TARGET_SH_E)/* Nonzero if we should generate code using the SHmedia ISA and 64-bit   ABI.  */#define TARGET_SHMEDIA64 (TARGET_SH5 && ! TARGET_SH1 && ! TARGET_SH_E)/* Nonzero if we should generate code using SHmedia FPU instructions.  */#define TARGET_SHMEDIA_FPU (TARGET_SHMEDIA && TARGET_FPU_DOUBLE)/* This is not used by the SH2E calling convention  */#define TARGET_VARARGS_PRETEND_ARGS(FUN_DECL) \  (TARGET_SH1 && ! TARGET_SH2E && ! TARGET_SH5 \   && ! (TARGET_HITACHI || sh_attr_renesas_p (FUN_DECL)))#ifndef TARGET_CPU_DEFAULT#define TARGET_CPU_DEFAULT SELECT_SH1#define SUPPORT_SH1 1#define SUPPORT_SH2E 1#define SUPPORT_SH4 1#define SUPPORT_SH4_SINGLE 1#define SUPPORT_SH2A 1#define SUPPORT_SH2A_SINGLE 1#endif#define TARGET_DIVIDE_INV \  (sh_div_strategy == SH_DIV_INV || sh_div_strategy == SH_DIV_INV_MINLAT \   || sh_div_strategy == SH_DIV_INV20U || sh_div_strategy == SH_DIV_INV20L \   || sh_div_strategy == SH_DIV_INV_CALL \   || sh_div_strategy == SH_DIV_INV_CALL2 || sh_div_strategy == SH_DIV_INV_FP)#define TARGET_DIVIDE_FP (sh_div_strategy == SH_DIV_FP)#define TARGET_DIVIDE_INV_FP (sh_div_strategy == SH_DIV_INV_FP)#define TARGET_DIVIDE_CALL2 (sh_div_strategy == SH_DIV_CALL2)#define TARGET_DIVIDE_INV_MINLAT (sh_div_strategy == SH_DIV_INV_MINLAT)#define TARGET_DIVIDE_INV20U (sh_div_strategy == SH_DIV_INV20U)#define TARGET_DIVIDE_INV20L (sh_div_strategy == SH_DIV_INV20L)#define TARGET_DIVIDE_INV_CALL (sh_div_strategy == SH_DIV_INV_CALL)#define TARGET_DIVIDE_INV_CALL2 (sh_div_strategy == SH_DIV_INV_CALL2)#define SELECT_SH1               (MASK_SH1)#define SELECT_SH2               (MASK_SH2 | SELECT_SH1)#define SELECT_SH2E              (MASK_SH_E | MASK_SH2 | MASK_SH1 \				  | MASK_FPU_SINGLE)#define SELECT_SH2A              (MASK_SH_E | MASK_HARD_SH2A \				  | MASK_HARD_SH2A_DOUBLE \				  | MASK_SH2 | MASK_SH1)#define SELECT_SH2A_NOFPU        (MASK_HARD_SH2A | MASK_SH2 | MASK_SH1)#define SELECT_SH2A_SINGLE_ONLY  (MASK_SH_E | MASK_HARD_SH2A | MASK_SH2 \				  | MASK_SH1 | MASK_FPU_SINGLE)#define SELECT_SH2A_SINGLE       (MASK_SH_E | MASK_HARD_SH2A \				  | MASK_FPU_SINGLE | MASK_HARD_SH2A_DOUBLE \				  | MASK_SH2 | MASK_SH1)#define SELECT_SH3               (MASK_SH3 | SELECT_SH2)#define SELECT_SH3E              (MASK_SH_E | MASK_FPU_SINGLE | SELECT_SH3)#define SELECT_SH4_NOFPU         (MASK_HARD_SH4 | SELECT_SH3)#define SELECT_SH4_SINGLE_ONLY   (MASK_HARD_SH4 | SELECT_SH3E)#define SELECT_SH4               (MASK_SH4 | MASK_SH_E | MASK_HARD_SH4 \				  | SELECT_SH3)#define SELECT_SH4_SINGLE        (MASK_FPU_SINGLE | SELECT_SH4)#define SELECT_SH4A_NOFPU        (MASK_SH4A | SELECT_SH4_NOFPU)#define SELECT_SH4A_SINGLE_ONLY  (MASK_SH4A | SELECT_SH4_SINGLE_ONLY)#define SELECT_SH4A              (MASK_SH4A | SELECT_SH4)#define SELECT_SH4A_SINGLE       (MASK_SH4A | SELECT_SH4_SINGLE)#define SELECT_SH5_64MEDIA       (MASK_SH5 | MASK_SH4)#define SELECT_SH5_64MEDIA_NOFPU (MASK_SH5)#define SELECT_SH5_32MEDIA       (MASK_SH5 | MASK_SH4 | MASK_SH_E)#define SELECT_SH5_32MEDIA_NOFPU (MASK_SH5 | MASK_SH_E)#define SELECT_SH5_COMPACT       (MASK_SH5 | MASK_SH4 | SELECT_SH3E)#define SELECT_SH5_COMPACT_NOFPU (MASK_SH5 | SELECT_SH3)#if SUPPORT_SH1#define SUPPORT_SH2 1#endif#if SUPPORT_SH2#define SUPPORT_SH3 1#endif#if SUPPORT_SH3#define SUPPORT_SH4_NOFPU 1#endif#if SUPPORT_SH4_NOFPU#define SUPPORT_SH4A_NOFPU 1#define SUPPORT_SH4AL 1#define SUPPORT_SH2A_NOFPU 1#endif#if SUPPORT_SH2E#define SUPPORT_SH3E 1#endif#if SUPPORT_SH3E#define SUPPORT_SH4_SINGLE_ONLY 1#define SUPPORT_SH4A_SINGLE_ONLY 1#define SUPPORT_SH2A_SINGLE_ONLY 1#endif#if SUPPORT_SH4#define SUPPORT_SH4A 1#endif#if SUPPORT_SH4_SINGLE#define SUPPORT_SH4A_SINGLE 1#endif#if SUPPORT_SH5_COMPAT#define SUPPORT_SH5_32MEDIA 1#endif#if SUPPORT_SH5_COMPACT_NOFPU#define SUPPORT_SH5_32MEDIA_NOFPU 1#endif#define SUPPORT_ANY_SH5_32MEDIA \  (SUPPORT_SH5_32MEDIA || SUPPORT_SH5_32MEDIA_NOFPU)#define SUPPORT_ANY_SH5_64MEDIA \  (SUPPORT_SH5_64MEDIA || SUPPORT_SH5_64MEDIA_NOFPU)#define SUPPORT_ANY_SH5 \  (SUPPORT_ANY_SH5_32MEDIA || SUPPORT_ANY_SH5_64MEDIA)/* Reset all target-selection flags.  */#define MASK_ARCH (MASK_SH1 | MASK_SH2 | MASK_SH3 | MASK_SH_E | MASK_SH4 \		   | MASK_HARD_SH2A | MASK_HARD_SH2A_DOUBLE | MASK_SH4A \		   | MASK_HARD_SH4 | MASK_FPU_SINGLE | MASK_SH5)/* This defaults us to big-endian.  */#ifndef TARGET_ENDIAN_DEFAULT#define TARGET_ENDIAN_DEFAULT 0#endif#ifndef TARGET_OPT_DEFAULT#define TARGET_OPT_DEFAULT  MASK_ADJUST_UNROLL#endif#define TARGET_DEFAULT \  (TARGET_CPU_DEFAULT | TARGET_ENDIAN_DEFAULT | TARGET_OPT_DEFAULT)#ifndef SH_MULTILIB_CPU_DEFAULT#define SH_MULTILIB_CPU_DEFAULT "m1"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -