亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? m68k.c

?? gcc-2.95.3 Linux下最常用的C編譯器
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* Subroutines for insn-output.c for Motorola 68000 family.   Copyright (C) 1987, 93-98, 1999 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 2, 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, 59 Temple Place - Suite 330,Boston, MA 02111-1307, USA.  *//* Some output-actions in m68k.md need these.  */#include "config.h"#include "system.h"#include "tree.h"#include "rtl.h"#include "regs.h"#include "hard-reg-set.h"#include "real.h"#include "insn-config.h"#include "conditions.h"#include "insn-flags.h"#include "output.h"#include "insn-attr.h"#include "recog.h"#include "toplev.h"/* Needed for use_return_insn.  */#include "flags.h"#ifdef SUPPORT_SUN_FPA/* Index into this array by (register number >> 3) to find the   smallest class which contains that register.  */enum reg_class regno_reg_class[]  = { DATA_REGS, ADDR_REGS, FP_REGS,      LO_FPA_REGS, LO_FPA_REGS, FPA_REGS, FPA_REGS };#endif /* defined SUPPORT_SUN_FPA *//* This flag is used to communicate between movhi and ASM_OUTPUT_CASE_END,   if SGS_SWITCH_TABLE.  */int switch_table_difference_label_flag;static rtx find_addr_reg ();rtx legitimize_pic_address ();/* Alignment to use for loops and jumps *//* Specify power of two alignment used for loops. */const char *m68k_align_loops_string;/* Specify power of two alignment used for non-loop jumps. */const char *m68k_align_jumps_string;/* Specify power of two alignment used for functions. */const char *m68k_align_funcs_string;/* Specify power of two alignment used for loops. */int m68k_align_loops;/* Specify power of two alignment used for non-loop jumps. */int m68k_align_jumps;/* Specify power of two alignment used for functions. */int m68k_align_funcs;/* Nonzero if the last compare/test insn had FP operands.  The   sCC expanders peek at this to determine what to do for the   68060, which has no fsCC instructions.  */int m68k_last_compare_had_fp_operands;/* Sometimes certain combinations of command options do not make   sense on a particular target machine.  You can define a macro   `OVERRIDE_OPTIONS' to take account of this.  This macro, if   defined, is executed once just after all the command options have   been parsed.   Don't use this macro to turn on various extra optimizations for   `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.  */voidoverride_options (){  int def_align;  def_align = 1;  /* Validate -malign-loops= value, or provide default */  if (m68k_align_loops_string)    {      m68k_align_loops = atoi (m68k_align_loops_string);      if (m68k_align_loops < 1 || m68k_align_loops > MAX_CODE_ALIGN)	fatal ("-malign-loops=%d is not between 1 and %d",	       m68k_align_loops, MAX_CODE_ALIGN);    }  else    m68k_align_loops = def_align;  /* Validate -malign-jumps= value, or provide default */  if (m68k_align_jumps_string)    {      m68k_align_jumps = atoi (m68k_align_jumps_string);      if (m68k_align_jumps < 1 || m68k_align_jumps > MAX_CODE_ALIGN)	fatal ("-malign-jumps=%d is not between 1 and %d",	       m68k_align_jumps, MAX_CODE_ALIGN);    }  else    m68k_align_jumps = def_align;  /* Validate -malign-functions= value, or provide default */  if (m68k_align_funcs_string)    {      m68k_align_funcs = atoi (m68k_align_funcs_string);      if (m68k_align_funcs < 1 || m68k_align_funcs > MAX_CODE_ALIGN)	fatal ("-malign-functions=%d is not between 1 and %d",	       m68k_align_funcs, MAX_CODE_ALIGN);    }  else    m68k_align_funcs = def_align;}/* This function generates the assembly code for function entry.   STREAM is a stdio stream to output the code to.   SIZE is an int: how many units of temporary storage to allocate.   Refer to the array `regs_ever_live' to determine which registers   to save; `regs_ever_live[I]' is nonzero if register number I   is ever used in the function.  This function is responsible for   knowing which registers should not be saved even if used.  *//* Note that the order of the bit mask for fmovem is the opposite   of the order for movem!  */voidoutput_function_prologue (stream, size)     FILE *stream;     int size;{  register int regno;  register int mask = 0;  int num_saved_regs = 0;  extern char call_used_regs[];  int fsize = (size + 3) & -4;  int cfa_offset = INCOMING_FRAME_SP_OFFSET, cfa_store_offset = cfa_offset;    if (frame_pointer_needed)    {      if (fsize == 0 && TARGET_68040)	{	/* on the 68040, pea + move is faster than link.w 0 */#ifdef MOTOROLA	  asm_fprintf (stream, "\tpea (%s)\n\tmove.l %s,%s\n",	       reg_names[FRAME_POINTER_REGNUM], reg_names[STACK_POINTER_REGNUM],	       reg_names[FRAME_POINTER_REGNUM]);#else	  asm_fprintf (stream, "\tpea %s@\n\tmovel %s,%s\n",	       reg_names[FRAME_POINTER_REGNUM], reg_names[STACK_POINTER_REGNUM],	       reg_names[FRAME_POINTER_REGNUM]);#endif	}      else if (fsize < 0x8000)	{#ifdef MOTOROLA	  asm_fprintf (stream, "\tlink.w %s,%0I%d\n",		       reg_names[FRAME_POINTER_REGNUM], -fsize);#else	  asm_fprintf (stream, "\tlink %s,%0I%d\n",		       reg_names[FRAME_POINTER_REGNUM], -fsize);#endif	}      else if (TARGET_68020)	{#ifdef MOTOROLA	  asm_fprintf (stream, "\tlink.l %s,%0I%d\n",		       reg_names[FRAME_POINTER_REGNUM], -fsize);#else	  asm_fprintf (stream, "\tlink %s,%0I%d\n",		       reg_names[FRAME_POINTER_REGNUM], -fsize);#endif	}      else	{      /* Adding negative number is faster on the 68040.  */#ifdef MOTOROLA	  asm_fprintf (stream, "\tlink.w %s,%0I0\n\tadd.l %0I%d,%Rsp\n",		       reg_names[FRAME_POINTER_REGNUM], -fsize);#else	  asm_fprintf (stream, "\tlink %s,%0I0\n\taddl %0I%d,%Rsp\n",		       reg_names[FRAME_POINTER_REGNUM], -fsize);#endif	}      if (dwarf2out_do_frame ())	{	  char *l;          l = (char *) dwarf2out_cfi_label ();   	  cfa_store_offset += 4;	  cfa_offset = cfa_store_offset;	  dwarf2out_def_cfa (l, FRAME_POINTER_REGNUM, cfa_offset);	  dwarf2out_reg_save (l, FRAME_POINTER_REGNUM, -cfa_store_offset);	  cfa_store_offset += fsize;	}    }  else if (fsize)    {      if (fsize + 4 < 0x8000)	{#ifndef NO_ADDSUB_Q	  if (fsize + 4 <= 8)	    {	      if (!TARGET_5200)		{		  /* asm_fprintf() cannot handle %. */#ifdef MOTOROLA		  asm_fprintf (stream, "\tsubq.w %0I%d,%Rsp\n", fsize + 4);#else		  asm_fprintf (stream, "\tsubqw %0I%d,%Rsp\n", fsize + 4);#endif		}	      else		{		  /* asm_fprintf() cannot handle %. */#ifdef MOTOROLA		  asm_fprintf (stream, "\tsubq.l %0I%d,%Rsp\n", fsize + 4);#else		  asm_fprintf (stream, "\tsubql %0I%d,%Rsp\n", fsize + 4);#endif		}	    }	  else if (fsize + 4 <= 16 && TARGET_CPU32)	    {	      /* On the CPU32 it is faster to use two subqw instructions to		 subtract a small integer (8 < N <= 16) to a register. */	      /* asm_fprintf() cannot handle %. */#ifdef MOTOROLA	      asm_fprintf (stream, "\tsubq.w %0I8,%Rsp\n\tsubq.w %0I%d,%Rsp\n",			   fsize + 4 - 8);#else	      asm_fprintf (stream, "\tsubqw %0I8,%Rsp\n\tsubqw %0I%d,%Rsp\n",			   fsize + 4 - 8);#endif	    }	  else #endif /* not NO_ADDSUB_Q */	  if (TARGET_68040)	    {	      /* Adding negative number is faster on the 68040.  */	      /* asm_fprintf() cannot handle %. */#ifdef MOTOROLA	      asm_fprintf (stream, "\tadd.w %0I%d,%Rsp\n", - (fsize + 4));#else	      asm_fprintf (stream, "\taddw %0I%d,%Rsp\n", - (fsize + 4));#endif	    }	  else	    {#ifdef MOTOROLA	      asm_fprintf (stream, "\tlea (%d,%Rsp),%Rsp\n", - (fsize + 4));#else	      asm_fprintf (stream, "\tlea %Rsp@(%d),%Rsp\n", - (fsize + 4));#endif	    }	}      else	{	/* asm_fprintf() cannot handle %. */#ifdef MOTOROLA	  asm_fprintf (stream, "\tadd.l %0I%d,%Rsp\n", - (fsize + 4));#else	  asm_fprintf (stream, "\taddl %0I%d,%Rsp\n", - (fsize + 4));#endif	}      if (dwarf2out_do_frame ())	{	  cfa_store_offset += fsize;	  cfa_offset = cfa_store_offset;	  dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, cfa_offset);	}    }#ifdef SUPPORT_SUN_FPA  for (regno = 24; regno < 56; regno++)    if (regs_ever_live[regno] && ! call_used_regs[regno])      {#ifdef MOTOROLA	asm_fprintf (stream, "\tfpmovd %s,-(%Rsp)\n",		     reg_names[regno]);#else	asm_fprintf (stream, "\tfpmoved %s,%Rsp@-\n",		     reg_names[regno]);#endif	if (dwarf2out_do_frame ())	  {	    char *l = dwarf2out_cfi_label ();	    cfa_store_offset += 8;	    if (! frame_pointer_needed)	      {		cfa_offset = cfa_store_offset;		dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);	      }	    dwarf2out_reg_save (l, regno, -cfa_store_offset);	  }      }#endif  if (TARGET_68881)    {      for (regno = 16; regno < 24; regno++)	if (regs_ever_live[regno] && ! call_used_regs[regno])	  {	    mask |= 1 << (regno - 16);	    num_saved_regs++;	  }      if ((mask & 0xff) != 0)	{#ifdef MOTOROLA	  asm_fprintf (stream, "\tfmovm %0I0x%x,-(%Rsp)\n", mask & 0xff);#else	  asm_fprintf (stream, "\tfmovem %0I0x%x,%Rsp@-\n", mask & 0xff);#endif	  if (dwarf2out_do_frame ())	    {	      char *l = (char *) dwarf2out_cfi_label ();	      int n_regs;	      cfa_store_offset += num_saved_regs * 12;	      if (! frame_pointer_needed)		{		  cfa_offset = cfa_store_offset;		  dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);		}	      for (regno = 16, n_regs = 0; regno < 24; regno++)		if (mask & (1 << (regno - 16)))		  dwarf2out_reg_save (l, regno,				      -cfa_store_offset + n_regs++ * 12);	    }	}      mask = 0;      num_saved_regs = 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 (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])    {      mask |= 1 << (15 - PIC_OFFSET_TABLE_REGNUM);      num_saved_regs++;    }#if NEED_PROBE#ifdef MOTOROLA#ifdef CRDS  asm_fprintf (stream, "\ttstl %d(%Rsp)\n", NEED_PROBE - num_saved_regs * 4);#else  asm_fprintf (stream, "\ttst.l %d(%Rsp)\n", NEED_PROBE - num_saved_regs * 4);#endif#else  asm_fprintf (stream, "\ttstl %Rsp@(%d)\n", NEED_PROBE - num_saved_regs * 4);#endif#endif  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))	  {	    asm_fprintf (stream,#ifdef MOTOROLA			 "\t%Omove.l %s,-(%Rsp)\n",#else			 "\tmovel %s,%Rsp@-\n",#endif			 reg_names[15 - i]);	    if (dwarf2out_do_frame ())	      {		char *l = (char *) dwarf2out_cfi_label ();		cfa_store_offset += 4; 		if (! frame_pointer_needed) 		  { 		    cfa_offset = cfa_store_offset; 		    dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset); 		  } 		dwarf2out_reg_save (l, 15 - i, -cfa_store_offset);	      }	  }    }  else if (mask)    {      if (TARGET_5200)	{	  /* The coldfire does not support the predecrement form of the 	     movml instruction, so we must adjust the stack pointer and	     then use the plain address register indirect mode.  We also	     have to invert the register save mask to use the new mode.	     FIXME: if num_saved_regs was calculated earlier, we could	     combine the stack pointer adjustment with any adjustment	     done when the initial stack frame is created.  This would	     save an instruction */	     	  int newmask = 0;	  int i;	  for (i = 0; i < 16; i++)	    if (mask & (1 << i))		newmask |= (1 << (15-i));#ifdef MOTOROLA	  asm_fprintf (stream, "\tlea (%d,%Rsp),%Rsp\n", -num_saved_regs*4);	  asm_fprintf (stream, "\tmovm.l %0I0x%x,(%Rsp)\n", newmask);#else	  asm_fprintf (stream, "\tlea %Rsp@(%d),%Rsp\n", -num_saved_regs*4);	  asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@\n", newmask);#endif	}      else	{#ifdef MOTOROLA	  asm_fprintf (stream, "\tmovm.l %0I0x%x,-(%Rsp)\n", mask);#else	  asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask);#endif	}      if (dwarf2out_do_frame ())	{	  char *l = (char *) dwarf2out_cfi_label ();	  int n_regs;	  cfa_store_offset += num_saved_regs * 4;	  if (! frame_pointer_needed)	    {	      cfa_offset = cfa_store_offset;	      dwarf2out_def_cfa (l, STACK_POINTER_REGNUM, cfa_offset);	    }	  for (regno = 0, n_regs = 0; regno < 16; regno++)	    if (mask & (1 << (15 - regno)))	      dwarf2out_reg_save (l, regno,				  -cfa_store_offset + n_regs++ * 4);	}    }  if (flag_pic && current_function_uses_pic_offset_table)    {#ifdef MOTOROLA      asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n",		   reg_names[PIC_OFFSET_TABLE_REGNUM]);#else      asm_fprintf (stream, "\tmovel %0I__GLOBAL_OFFSET_TABLE_, %s\n",

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国偷自产一区二区使用方法| 在线观看日韩高清av| av电影在线观看一区| 欧美日韩国产综合草草| 国产精品美女久久久久aⅴ| 日韩av一二三| 色狠狠av一区二区三区| 中文字幕国产精品一区二区| 久久精品国产99久久6| 日本韩国视频一区二区| 国产精品久久看| 国产精品一级二级三级| 日韩视频一区二区在线观看| 一区二区三区日韩在线观看| jiyouzz国产精品久久| 精品粉嫩aⅴ一区二区三区四区| 天天影视涩香欲综合网| 欧洲视频一区二区| 亚洲精品日产精品乱码不卡| 国产99久久久国产精品潘金网站| 精品国产伦一区二区三区免费| 午夜成人在线视频| 欧美日韩成人综合天天影院| 亚洲一区二区在线免费看| 91久久人澡人人添人人爽欧美| 中文字幕一区二区三区四区不卡 | 欧美一区二区国产| 亚洲一区二区偷拍精品| 欧洲色大大久久| 午夜精品久久久久影视| 欧美日韩成人在线| 午夜不卡av免费| 日韩亚洲国产中文字幕欧美| 麻豆精品蜜桃视频网站| 精品国产精品一区二区夜夜嗨| 久久66热re国产| 欧美激情一区二区三区全黄| 懂色av中文字幕一区二区三区| 中文字幕第一区综合| www.欧美日韩| 一级日本不卡的影视| 欧美日韩国产另类不卡| 美女精品自拍一二三四| 久久青草欧美一区二区三区| 成人综合婷婷国产精品久久蜜臀| 综合亚洲深深色噜噜狠狠网站| 99re在线视频这里只有精品| 一区二区激情小说| 69久久99精品久久久久婷婷| 精品一区二区三区在线观看| 亚洲国产高清不卡| 色综合久久综合| 日本欧美大码aⅴ在线播放| 欧美不卡123| av不卡一区二区三区| 亚洲午夜私人影院| 久久久不卡网国产精品二区| 91亚洲国产成人精品一区二区三 | 国产白丝网站精品污在线入口| 中文欧美字幕免费| 欧美日韩国产一区| 国产在线播精品第三| 亚洲美女少妇撒尿| 日韩一区二区三区四区| 不卡欧美aaaaa| 日韩二区在线观看| 国产精品网友自拍| 7777精品伊人久久久大香线蕉经典版下载| 久久狠狠亚洲综合| 中文字幕亚洲区| 日韩精品一区二区三区中文精品| 成人一区二区三区在线观看| 亚洲午夜精品17c| 国产欧美一区二区精品久导航| 欧美无人高清视频在线观看| 国产99久久久久| 日韩avvvv在线播放| 日韩理论片一区二区| www国产亚洲精品久久麻豆| 色哟哟亚洲精品| 豆国产96在线|亚洲| 免费黄网站欧美| 午夜精品一区二区三区电影天堂 | 欧美成人国产一区二区| 色婷婷综合久久久久中文一区二区 | 欧美在线观看你懂的| 国产成人精品免费一区二区| 日韩vs国产vs欧美| 亚洲一区二区五区| 亚洲免费在线观看| 国产女人18水真多18精品一级做| 91麻豆精品国产| 欧美午夜精品久久久久久超碰| 成人午夜碰碰视频| 国产乱码精品一区二区三区五月婷 | 自拍视频在线观看一区二区| 欧美成人女星排名| 91精品国产91热久久久做人人| 一本到三区不卡视频| 99精品视频免费在线观看| 国产成人精品免费在线| 国产一区二区三区久久久| 久久精品国产**网站演员| 日产国产高清一区二区三区| 亚洲一区二区精品视频| 亚洲精品视频免费观看| 亚洲码国产岛国毛片在线| 中文字幕在线观看不卡视频| 欧美国产一区在线| 国产午夜精品福利| 久久久久久久久久久久久久久99| 日韩欧美国产高清| 精品日韩一区二区| 欧美不卡激情三级在线观看| 精品成人免费观看| 久久久亚洲国产美女国产盗摄 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲精品videosex极品| 亚洲人成精品久久久久久 | 久久er99热精品一区二区| 久久99精品久久久久婷婷| 免费观看日韩电影| 久久99国产乱子伦精品免费| 黑人巨大精品欧美黑白配亚洲| 狂野欧美性猛交blacked| 激情六月婷婷久久| 成人av午夜影院| 色综合久久久久久久| 欧美日韩国产精选| 日韩一区二区电影| 亚洲国产精品精华液2区45| 国产精品久久久久永久免费观看| 亚洲精品视频在线观看网站| 亚洲综合激情另类小说区| 日韩高清一级片| 国产精品一区二区久久不卡 | 26uuu色噜噜精品一区二区| 国产无人区一区二区三区| 亚洲免费av高清| 午夜不卡av免费| 国产成人一区在线| 在线观看日韩毛片| 精品国产91久久久久久久妲己| **性色生活片久久毛片| 日韩高清在线一区| 成人免费黄色在线| 91精品午夜视频| 欧美激情综合五月色丁香小说| 亚洲午夜羞羞片| 国产精品一区二区久久不卡| 欧美自拍丝袜亚洲| 久久综合久久99| 午夜欧美在线一二页| 国产suv精品一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃| 欧美一级免费观看| 日韩毛片一二三区| 国产精品综合二区| 欧美日韩高清一区二区三区| 久久久蜜桃精品| 天天综合网 天天综合色| 成人午夜视频福利| 精品久久久三级丝袜| 亚洲一区二区在线观看视频 | 51精品国自产在线| 综合久久国产九一剧情麻豆| 激情国产一区二区 | 性感美女极品91精品| 成人午夜在线免费| 26uuu亚洲| 久久电影网电视剧免费观看| 欧美性感一类影片在线播放| 中文字幕av不卡| 国内精品写真在线观看| 欧美日本不卡视频| 亚洲精品va在线观看| 成人免费不卡视频| 久久久影院官网| 久久99精品久久久久| 欧美一区日本一区韩国一区| 一区二区三区欧美视频| av不卡免费在线观看| 欧美激情一区在线| 国产剧情av麻豆香蕉精品| 精品粉嫩超白一线天av| 蜜桃视频一区二区| 91精品国产福利| 日韩二区在线观看| 日韩一区二区三区电影 | 成人性生交大片免费看视频在线| 欧美zozozo| 麻豆91精品91久久久的内涵| 欧美精品aⅴ在线视频| 亚洲h动漫在线| 欧美丰满少妇xxxxx高潮对白| 一区二区在线电影| 色综合久久88色综合天天6| 尤物av一区二区| 欧美三级在线播放| 舔着乳尖日韩一区|