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

📄 tm-delta68k.h

📁 这是完整的gcc源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* Definitions of target machine for GNU compiler.   Motorola Delta version of 680x0 for x>1   copied and modified from 3b1 version by   Daniel R. Bidwell (bidwell@andrews.edu).   AT&T UNIX PC version (pc7300, 3b1)   Written by Alex Crain   bug reports to alex@umbc3.umd.edu   Copyright (C) 1987 Free Software Foundation, Inc.This file is part of GNU CC.GNU CC 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 1, or (at your option)any later version.GNU CC 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 GNU CC; see the file COPYING.  If not, write tothe Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */#define SGS_3B1#include "tm-hp9k320.h"/* See tm-m68k.h.  0 means 680[01]0 with no 68881.  */#undef TARGET_DEFAULT#define	TARGET_DEFAULT 7/* -m68020 requires special flags to the assembler.  */#undef ASM_SPEC#define ASM_SPEC "%{m68020:-68020}"/* we use /lib/libp/lib*  when profiling */#undef LIB_SPEC#define LIB_SPEC "%{!shlib:%{p:-L/lib/libp} %{pg:-L/lib/libp} -lc}"/* shared libraries need to use crt0s.o  */#undef STARTFILE_SPEC#define STARTFILE_SPEC \  "%{!shlib:%{pg:mcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}\   %{shlib:crt0s.o%s shlib.ifile%s} "/* cpp has to support a #sccs directive for the /usr/include files */#define SCCS_DIRECTIVE/* Make output for SDB.  */#define SDB_DEBUGGING_INFO/* The .file command should always begin the output.  */#undef ASM_FILE_START#define ASM_FILE_START(FILE) sdbout_filename ((FILE), main_input_filename)/* Don't try to define `gcc_compiled.' since the assembler might not   accept symbols with periods and GDB doesn't run on this machine anyway.  */#define ASM_IDENTIFY_GCC(FILE)/* Define __HAVE_68881__ in preprocessor if -m68881 is specified.   This will control the use of inline 68881 insns in certain macros.  */#undef CPP_SPEC#define CPP_SPEC "%{m68881:-D__HAVE_68881__}"/* Names to predefine in the preprocessor for this target machine.  *//* ihnp4!lmayk!lgm@eddie.mit.edu says mc68000 and m68k should not be here.  */#undef CPP_PREDEFINES#define CPP_PREDEFINES "-Dm68k -Dmc68k -Dunix -Dunixpc"/* Specify how to pad function arguments.   Value should be `upward', `downward' or `none'.   Same as the default, except no padding for large or variable-size args.  */#define FUNCTION_ARG_PADDING(mode, size)				\  (((mode) == BLKmode							\    ? (GET_CODE (size) == CONST_INT					\       && INTVAL (size) < PARM_BOUNDARY / BITS_PER_UNIT)		\    : GET_MODE_BITSIZE (mode) < PARM_BOUNDARY)				\   ? downward : none)/* Override part of the obstack macros.  */#define __PTR_TO_INT(P) ((int)(P))#define __INT_TO_PTR(P) ((char *)(P))/* Override parts of tm-m68k.h to fit the SGS-3b1 assembler.  */#undef TARGET_VERSION#undef ASM_FORMAT_PRIVATE_NAME#undef ASM_OUTPUT_DOUBLE#undef ASM_OUTPUT_FLOAT#undef ASM_OUTPUT_FLOAT_OPERAND#undef ASM_OUTPUT_ALIGN#undef ASM_OUTPUT_SOURCE_FILENAME#undef ASM_OUTPUT_SOURCE_LINE#undef PRINT_OPERAND_ADDRESS#undef ASM_GENERATE_INTERNAL_LABEL#undef FUNCTION_PROFILER#undef ASM_OUTPUT_ADDR_VEC_ELT#undef ASM_OUTPUT_ADDR_DIFF_ELT#undef ASM_OUTPUT_INTERNAL_LABEL#undef ASM_OUTPUT_OPCODE#undef ASM_OUTPUT_LOCAL#undef ASM_OUTPUT_LABELREF#undef ASM_OUTPUT_ASCII#undef LEGITIMATE_CONSTANT_P#undef ASM_RETURN_CASE_JUMP#define TARGET_VERSION fprintf (stderr, " (68k, SGS/AT&T unixpc syntax)");/* Store in OUTPUT a string (made with alloca) containing   an assembler-name for a local static variable named NAME.   LABELNO is an integer which is different for each call.  */#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO)	\( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12),	\  sprintf ((OUTPUT), "%s_%%%d", (NAME), (LABELNO)))/* The unixpc doesn't know about double's and float's */#define ASM_OUTPUT_DOUBLE(FILE,VALUE)  \do { union { double d; long l[2]; } tem;		\     tem.d = (VALUE);					\     fprintf(FILE, "\tlong 0x%x,0x%x\n", tem.l[0], tem.l[1]); \   } while (0)#define ASM_OUTPUT_FLOAT(FILE,VALUE)  \do { union { float f; long l;} tem;			\     tem.f = (VALUE);					\     fprintf (FILE, "\tlong 0x%x\n", tem.l);	\   } while (0)/* Output a float value (represented as a C double) as an immediate operand.   This macro is a 68k-specific macro.  */#define ASM_OUTPUT_FLOAT_OPERAND(FILE,VALUE)                \	fprintf (FILE, "#0x%.8x", (VALUE))#define ASM_OUTPUT_ALIGN(FILE,LOG)	\  if ((LOG) == 1)			\    fprintf (FILE, "\teven\n");	\  else if ((LOG) != 0)			\    abort ();/* The `space' pseudo in the text segment outputs nop insns rather than 0s,   so we must output 0s explicitly in the text segment.  */#undef ASM_OUTPUT_SKIP#define ASM_OUTPUT_SKIP(FILE,SIZE)  \  if (in_text_section ())                                           	    \    {									    \      int i;								    \      for (i = 0; i < (SIZE) - 20; i += 20)				    \	fprintf (FILE, "\tbyte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n"); \      if (i < (SIZE))							    \        {								    \	  fprintf (FILE, "\tbyte 0");					    \	  i++;								    \	  for (; i < (SIZE); i++)					    \	    fprintf (FILE, ",0");					    \	  fprintf (FILE, "\n");						    \	}								    \    }									    \  else									    \    fprintf (FILE, "\tspace %d\n", (SIZE))/* The beginnings of sdb support... */#define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \  fprintf (FILE, "\tfile\t\"%s\"\n", FILENAME)#define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO)	\  fprintf (FILE, "\tln\t%d\n",			\	   (sdb_begin_function_line		\	    ? last_linenum - sdb_begin_function_line : 1))/* Yet another null terminated string format. */#define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \  { register int sp = 0, lp = 0; \    fprintf (FILE, "\tbyte\t"); \  loop: \    if (PTR[sp] > ' ' && ! (PTR[sp] & 0x80) && PTR[sp] != '\\') \      { lp += 3; \	fprintf (FILE, "'%c", PTR[sp]); } \    else \      { lp += 5; \	fprintf (FILE, "0x%x", PTR[sp]); } \    if (++sp < LEN) \      {	if (lp > 60) \	  { lp = 0; \	    fprintf (FILE, "\n%s ", ASCII_DATA_ASM_OP); }	\	else \	  putc (',', FILE); \	goto loop; } \    putc ('\n', FILE); }/* Note that in the case of the movhi which fetches an element of   an ADDR_DIFF_VEC the offset output is too large by 2.   This is because the 3b1 assembler refuses to subtract 2.   ASM_OUTPUT_CASE_LABEL, below, compensates for this.  */#define PRINT_OPERAND_ADDRESS(FILE, ADDR)  \{ register rtx reg1, reg2, breg, ireg;					\  register rtx addr = ADDR;						\  rtx offset;								\  switch (GET_CODE (addr))						\    {									\    case REG:								\      fprintf (FILE, "(%s)", reg_names[REGNO (addr)]);			\      break;								\    case PRE_DEC:							\      fprintf (FILE, "-(%s)", reg_names[REGNO (XEXP (addr, 0))]);	\      break;								\    case POST_INC:							\      fprintf (FILE, "(%s)+", reg_names[REGNO (XEXP (addr, 0))]);	\      break;								\    case PLUS:								\      reg1 = 0;	reg2 = 0;						\      ireg = 0;	breg = 0;						\      offset = 0;							\      if (CONSTANT_ADDRESS_P (XEXP (addr, 0)))				\	{								\	  offset = XEXP (addr, 0);					\	  addr = XEXP (addr, 1);					\	}								\      else if (CONSTANT_ADDRESS_P (XEXP (addr, 1)))			\	{								\	  offset = XEXP (addr, 1);					\	  addr = XEXP (addr, 0);					\	}								\      if (GET_CODE (addr) != PLUS) ;					\      else if (GET_CODE (XEXP (addr, 0)) == SIGN_EXTEND)		\

⌨️ 快捷键说明

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