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

📄 dpx2.h

📁 gcc编译工具没有什么特别
💻 H
📖 第 1 页 / 共 3 页
字号:
	{							      \	  fprintf (FILE, "\tadd.w #%d,sp\n", - (fsize + 4));	      \	}							      \      else							      \	{							      \	  fprintf (FILE, "\tadd.l #%d,sp\n", - (fsize + 4));          \	}							      \    }								      \  for (regno = 23; regno >= 16; regno--)                              \    if (regs_ever_live[regno] && ! call_used_regs[regno])             \      if (first) {						      \        fprintf (FILE, "\tfmovem.x %s", reg_names[regno]);            \	first = 0;						      \       }							      \      else fprintf (FILE, "/%s", reg_names[regno]);            	      \  if (!first) fprintf (FILE, ",-(sp)\n");			      \								      \  mask = 0;							      \  for (regno = 0; regno < 16; regno++)				      \    if (regs_ever_live[regno] && ! call_used_regs[regno])	      \      {								      \        mask |= 1 << (15 - regno);				      \        num_saved_regs++;                   			      \      }                                                               \  if (frame_pointer_needed)                                           \    {                                                                 \      mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM));                   \      num_saved_regs--;                                               \    }                                                                 \                                                                      \                                                                      \  if (num_saved_regs <= 2)                                            \    {                                                                 \      /* Store each separately in the same order moveml uses.         \         Using two movel instructions instead of a single moveml      \         is about 15% faster for the 68020 and 68030 at no expense    \         in code size */                                              \                                                                      \      int i;                                                          \                                                                      \      /* Undo the work from above. */                                 \      for (i = 0; i< 16; i++)                                         \        if (mask & (1 << i))                                          \          fprintf (FILE, "\tmove.l %s,-(sp)\n", reg_names[15 - i]);   \    }                                                                 \  else if (mask)                                                      \    {                                                                 \      first = 1;                                                      \      for (regno = 0; regno < 16; regno++)                            \        if (mask & (1 << regno))                                      \          if (first) {                                                \            fprintf (FILE, "\tmovem.l %s", reg_names[15 - regno]);    \            first = 0;                                                \           }                                                          \          else fprintf (FILE, "/%s", reg_names[15 - regno]);	      \      fprintf (FILE, ",-(sp)\n");	           		      \    }                                                                 \  if (flag_pic && current_function_uses_pic_offset_table)             \    {                                                                 \      fprintf (FILE, "\tmove.l #__GLOBAL_OFFSET_TABLE_, %s\n",        \		   reg_names[PIC_OFFSET_TABLE_REGNUM]);               \      fprintf (FILE, "\tlea.l (pc,%s.l),%s\n",                        \		   reg_names[PIC_OFFSET_TABLE_REGNUM],                \		   reg_names[PIC_OFFSET_TABLE_REGNUM]);               \    }                                                                 \}#undef FUNCTION_EPILOGUE#define FUNCTION_EPILOGUE(FILE, SIZE)                                 \{                                                                     \  register int regno;                                                 \  register int mask, fmask;                                           \  register int nregs;                                                 \  int offset, foffset, fpoffset, first = 1;		              \  extern char call_used_regs[];                                       \  int fsize = ((SIZE) + 3) & -4;                                      \  int big = 0;                                                        \  rtx insn = get_last_insn ();                                        \                                                                      \  /* If the last insn was a BARRIER, we don't have to write any code.  */ \  if (GET_CODE (insn) == NOTE)                                        \    insn = prev_nonnote_insn (insn);                                  \  if (insn && GET_CODE (insn) == BARRIER)                             \    {                                                                 \      /* Output just a no-op so that debuggers don't get confused     \	 about which function the pc is in at this address.  */       \      fprintf (FILE, "\tnop\n");                                      \      return;                                                         \    }                                                                 \                                                                      \  nregs = 0;  fmask = 0; fpoffset = 0;                                \  for (regno = 16; regno < 24; regno++)                               \    if (regs_ever_live[regno] && ! call_used_regs[regno])             \      {                                                               \        nregs++;                                                      \	fmask |= 1 << (23 - regno);                                   \      }                                                               \  foffset = fpoffset + nregs * 12;                                    \  nregs = 0;  mask = 0;                                               \  if (frame_pointer_needed)                                           \    regs_ever_live[FRAME_POINTER_REGNUM] = 0;                         \  for (regno = 0; regno < 16; regno++)                                \    if (regs_ever_live[regno] && ! call_used_regs[regno])             \      {                                                               \        nregs++;                                                      \	mask |= 1 << regno;                                           \      }                                                               \  offset = foffset + nregs * 4;                                       \  if (offset + fsize >= 0x8000                                        \      && frame_pointer_needed                                         \      && (mask || fmask || fpoffset))                                 \    {                                                                 \      fprintf (FILE, "\tmove.l #%d,a0\n", -fsize);                    \      fsize = 0, big = 1;                                             \    }                                                                 \  if (nregs <= 2)                                                     \    {                                                                 \      /* Restore each separately in the same order moveml does.       \         Using two movel instructions instead of a single moveml      \         is about 15% faster for the 68020 and 68030 at no expense    \         in code size. */                                             \                                                                      \      int i;                                                          \                                                                      \      /* Undo the work from above. */                                 \      for (i = 0; i< 16; i++)                                         \        if (mask & (1 << i))                                          \          {                                                           \            if (big)                                                  \	      {                                                       \		fprintf (FILE, "\tmove.l -%d(%s,a0.l),%s\n",          \			     offset + fsize,                          \			     reg_names[FRAME_POINTER_REGNUM],         \			     reg_names[i]);                           \	      }                                                       \            else if (! frame_pointer_needed)                          \	      {                                                       \		fprintf (FILE, "\tmove.l (sp)+,%s\n",                 \			     reg_names[i]);                           \	      }                                                       \            else                                                      \	      {                                                       \		fprintf (FILE, "\tmove.l -%d(%s),%s\n",               \			     offset + fsize,                          \			     reg_names[FRAME_POINTER_REGNUM],         \			     reg_names[i]);                           \	      }                                                       \            offset = offset - 4;                                      \          }                                                           \    }                                                                 \  else if (mask)                                                      \    {                                                                 \      first = 1;						      \      for (regno = 0; regno < 16; regno++)                            \        if (mask & (1 << regno))                                      \          if (first && big) {                                         \            fprintf (FILE, "\tmovem.l -%d(%s,a0.l),%s",               \		     offset + fsize,                                  \		     reg_names[FRAME_POINTER_REGNUM],                 \		     reg_names[regno]);                               \            first = 0;                                                \           }                                                          \          else if (first && ! frame_pointer_needed) {                 \            fprintf (FILE, "\tmovem.l (sp)+,%s",                      \		     offset + fsize,                                  \		     reg_names[FRAME_POINTER_REGNUM],                 \		     reg_names[regno]);                               \            first = 0;                                                \           }                                                          \          else if (first) {   				              \            fprintf (FILE, "\tmovem.l -%d(%s),%s",                    \		     offset + fsize,                                  \		     reg_names[FRAME_POINTER_REGNUM],                 \		     reg_names[regno]);                               \            first = 0;                                                \           }                                                          \          else  						      \	    fprintf (FILE, "/%s", reg_names[regno]);	              \      fprintf (FILE, "\n");	                 		      \    }                                                                 \  if (fmask)                                                          \    {                                                                 \      first = 1;						      \      for (regno = 16; regno < 24; regno++)                           \        if (fmask & (1 << (23 - regno)))                               \          if (first && big) {	                                      \            fprintf (FILE, "\tfmovem.x -%d(%s,a0.l),%s",              \		     foffset + fsize,                                 \		     reg_names[FRAME_POINTER_REGNUM],                 \		     reg_names[regno]);                               \	    first = 0;						      \           }                                                          \          else if (first && ! frame_pointer_needed) {                 \            fprintf (FILE, "\tfmovem.x (sp)+,%s",                     \		     foffset + fsize,                                 \		     reg_names[FRAME_POINTER_REGNUM],                 \		     reg_names[regno]);                               \	    first = 0;						      \           }                                                          \          else if (first) {    				              \            fprintf (FILE, "\tfmovem.x -%d(%s),%s",                   \		     foffset + fsize,                                 \		     reg_names[FRAME_POINTER_REGNUM],                 \		     reg_names[regno]);                               \	    first = 0;						      \           }                                                          \	  else fprintf (FILE, "/%s", reg_names[regno]); 	      \      fprintf (FILE, "\n");					      \    }                                                                 \  if (frame_pointer_needed)                                           \    fprintf (FILE, "\tunlk %s\n",                                     \	     reg_names[FRAME_POINTER_REGNUM]);                        \  else if (fsize)                                                     \    {                                                                 \      if (fsize + 4 < 0x8000)                                         \	{                                                             \	  fprintf (FILE, "\tadd.w #%d,sp\n", fsize + 4);              \	}                                                             \      else                                                            \	{                                                             \	  fprintf (FILE, "\tadd.l #%d,sp\n", fsize + 4);              \	}                                                             \    }                                                                 \  if (current_function_pops_args)                                     \    fprintf (FILE, "\trtd #%d\n", current_function_pops_args);        \  else                                                                \    fprintf (FILE, "\trts\n");                                        \}/* Translate Motorola opcodes such as `jbeq'   into VERSAdos opcodes such as `beq'.   Change `fbeq' to `fbseq', `fbne' to `fbsneq'.*/#undef ASM_OUTPUT_OPCODE#define ASM_OUTPUT_OPCODE(FILE, PTR)			\{ if ((PTR)[0] == 'j' && (PTR)[1] == 'b')		\    { ++(PTR);						\      while (*(PTR) != ' ')				\	{ putc (*(PTR), (FILE)); ++(PTR); }		\    }			                          	\  else if ((PTR)[0] == 'f')                             \    {                                                   \      if (!strncmp ((PTR), "fbeq", 4))                  \        { fprintf ((FILE), "fbseq"); (PTR) += 4; }      \      else if (!strncmp ((PTR), "fbne", 4))             \        { fprintf ((FILE), "fbsneq"); (PTR) += 4; }     \    }                                                   \  else if ((PTR)[0] == 'b' && (PTR)[1] == 'f')          \    {                                                   \      char *s;                                          \      if ((s = (char*)strchr ((PTR), '{')))             \	while (*s != '}') {                             \	  if (*s == 'b')                                \	    /* hack, I replace it with R ie nothing */  \	    *s = '0';                                   \	  s++; }					\    }                                                   \}/* This is how to output a `long double' extended real constant. */#undef ASM_OUTPUT_LONG_DOUBLE #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE)  				\do { long l[3];								\     REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l);			\     if (sizeof (int) == sizeof (long))					\       fprintf (FILE, "\tdc.l $%x,$%x,$%x\n", l[0], l[1], l[2]);	\     else								\       fprintf (FILE, "\tdc.l $%lx,$%lx,$%lx\n", l[0], l[1], l[2]);	\   } while (0)#undef ASM_OUTPUT_DOUBLE#if 0#define ASM_OUTPUT_DOUBLE(FILE,VALUE)  \

⌨️ 快捷键说明

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