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

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

?? out-sparc.c

?? 這是完整的gcc源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	addr = XEXP (addr, 0);      else if (GET_CODE (XEXP (addr, 1)) == REG)	addr = XEXP (addr, 1);      else if (CONSTANT_P (XEXP (addr, 0)))	addr = XEXP (addr, 1);      else if (CONSTANT_P (XEXP (addr, 1)))	addr = XEXP (addr, 0);      else	abort ();    }  if (GET_CODE (addr) == REG)    return addr;  abort ();}voidoutput_sized_memop (opname, mode)     char *opname;     enum machine_mode mode;{  extern struct _iobuf *asm_out_file;  static char *ld_size_suffix[] = { "ub", "uh", "", "?", "d" };  static char *st_size_suffix[] = { "b", "h", "", "?", "d" };  char *modename    = (opname[0] == 'l' ? ld_size_suffix : st_size_suffix)[GET_MODE_SIZE (mode) >> 1];  fprintf (asm_out_file, "\t%s%s", opname, modename);}/* Output a store-in-memory whose operands are OPERANDS[0,1].   OPERANDS[0] is a MEM, and OPERANDS[1] is a reg or zero.  */char *output_store (operands)     rtx *operands;{  enum machine_mode mode = GET_MODE (operands[0]);  rtx address = XEXP (operands[0], 0);  cc_status.flags |= CC_KNOW_HI_G1;  cc_status.mdep = address;  if (! ((cc_prev_status.flags & CC_KNOW_HI_G1)	 && address == cc_prev_status.mdep))    {      output_asm_insn ("sethi %%hi(%m0),%%g1", operands);      cc_prev_status.mdep = address;    }  /* Store zero in two parts when appropriate.  */  if (mode == DFmode && operands[1] == dconst0_rtx)    {      /* We can't cross a page boundary here because the	 SYMBOL_REF must be double word aligned, and for this	 to be the case, SYMBOL_REF+4 cannot cross.  */      output_sized_memop ("st", SImode);      output_asm_insn ("%r1,[%%g1+%%lo(%m0)]", operands);      output_sized_memop ("st", SImode);      return "%r1,[%%g1+%%lo(%m0)+4]";    }  /* Code below isn't smart enough to move a doubleword in two parts,     so use output_move_double to do that in the cases that require it.  */  if ((mode == DImode || mode == DFmode)      && (GET_CODE (operands[1]) == REG	  && (REGNO (operands[1]) & 1)))    return output_move_double (operands);  output_sized_memop ("st", mode);  return "%r1,[%%g1+%%lo(%m0)]";}/* Output a fixed-point load-from-memory whose operands are OPERANDS[0,1].   OPERANDS[0] is a reg, and OPERANDS[1] is a mem.  */char *output_load_fixed (operands)     rtx *operands;{  enum machine_mode mode = GET_MODE (operands[0]);  rtx address = XEXP (operands[1], 0);  /* We don't bother trying to see if we know %hi(address).     This is because we are doing a load, and if we know the     %hi value, we probably also know that value in memory.  */  cc_status.flags |= CC_KNOW_HI_G1;  cc_status.mdep = address;  if (! ((cc_prev_status.flags & CC_KNOW_HI_G1)	 && address == cc_prev_status.mdep	 && cc_prev_status.mdep == cc_status.mdep))    {      output_asm_insn ("sethi %%hi(%m1),%%g1", operands);      cc_prev_status.mdep = address;    }  /* Code below isn't smart enough to do a doubleword in two parts.     So handle that case the slow way.  */  if (mode == DImode      && GET_CODE (operands[0]) == REG   /* Moving to nonaligned reg pair */      && (REGNO (operands[0]) & 1))    return output_move_double (operands);  output_sized_memop ("ld", mode);  if (GET_CODE (operands[0]) == REG)    return "[%%g1+%%lo(%m1)],%0";  abort ();}/* Output a floating-point load-from-memory whose operands are OPERANDS[0,1].   OPERANDS[0] is a reg, and OPERANDS[1] is a mem.   We also handle the case where OPERANDS[0] is a mem.  */char *output_load_floating (operands)     rtx *operands;{  enum machine_mode mode = GET_MODE (operands[0]);  rtx address = XEXP (operands[1], 0);  /* We don't bother trying to see if we know %hi(address).     This is because we are doing a load, and if we know the     %hi value, we probably also know that value in memory.  */  cc_status.flags |= CC_KNOW_HI_G1;  cc_status.mdep = address;  if (! ((cc_prev_status.flags & CC_KNOW_HI_G1)	 && address == cc_prev_status.mdep	 && cc_prev_status.mdep == cc_status.mdep))    {      output_asm_insn ("sethi %%hi(%m1),%%g1", operands);      cc_prev_status.mdep = address;    }  if (mode == DFmode)    {      if (REG_P (operands[0]))	{	  if (REGNO (operands[0]) & 1)	    return output_move_double (operands);	  else	    return "ldd [%%g1+%%lo(%m1)],%0";	}      cc_status.flags &= ~(CC_F0_IS_0|CC_F1_IS_0);      output_asm_insn ("ldd [%%g1+%%lo(%m1)],%%f0", operands);      operands[1] = gen_rtx (REG, DFmode, 32);      return output_fp_move_double (operands);    }  if (GET_CODE (operands[0]) == MEM)    {      cc_status.flags &= ~CC_F1_IS_0;      output_asm_insn ("ld [%%g1+%%lo(%1)],%%f1", operands);      if (CONSTANT_ADDRESS_P (XEXP (operands[0], 0)))	{	  cc_status.mdep = XEXP (operands[0], 0);	  return "sethi %%hi(%m0),%%g1\n\tst %%f1,[%%g1+%%lo(%m0)]";	}      else	return "st %%f1,%0";    }  return "ld [%%g1+%%lo(%m1)],%0";}/* Load the address specified by OPERANDS[3] into the register   specified by OPERANDS[0].   OPERANDS[3] may be the result of a sum, hence it could either be:   (1) CONST   (2) REG   (2) REG + CONST_INT   (3) REG + REG + CONST_INT   (4) REG + REG  (special case of 3).   Note that (3) is not a legitimate address.   All cases are handled here.  */voidoutput_load_address (operands)     rtx *operands;{  rtx base, offset;  if (CONSTANT_P (operands[3]))    {      output_asm_insn ("set %3,%0", operands);      return;    }  if (REG_P (operands[3]))    {      if (REGNO (operands[0]) != REGNO (operands[3]))	output_asm_insn ("mov %3,%0", operands);      return;    }  if (GET_CODE (operands[3]) != PLUS)    abort ();  base = XEXP (operands[3], 0);  offset = XEXP (operands[3], 1);  if (GET_CODE (base) == CONST_INT)    {      rtx tmp = base;      base = offset;      offset = tmp;    }  if (GET_CODE (offset) != CONST_INT)    {      /* Operand is (PLUS (REG) (REG)).  */      base = operands[3];      offset = const0_rtx;    }  if (REG_P (base))    {      operands[6] = base;      operands[7] = offset;      if (SMALL_INT (offset))	output_asm_insn ("add %6,%7,%0", operands);      else	output_asm_insn ("set %7,%0\n\tadd %0,%6,%0", operands);    }  else if (GET_CODE (base) == PLUS)    {      operands[6] = XEXP (base, 0);      operands[7] = XEXP (base, 1);      operands[8] = offset;      if (SMALL_INT (offset))	output_asm_insn ("add %6,%7,%0\n\tadd %0,%8,%0", operands);      else	output_asm_insn ("set %8,%0\n\tadd %0,%6,%0\n\tadd %0,%7,%0", operands);    }  else    abort ();}/* Output code to place a size count SIZE in register REG.   ALIGN is the size of the unit of transfer.   Because block moves are pipelined, we don't include the   first element in the transfer of SIZE to REG.  */static voidoutput_size_for_block_move (size, reg, align)     rtx size, reg;     rtx align;{  rtx xoperands[3];  xoperands[0] = reg;  xoperands[1] = size;  xoperands[2] = align;  if (GET_CODE (size) == REG)    output_asm_insn ("sub %1,%2,%0", xoperands);  else    {      xoperands[1]	= gen_rtx (CONST_INT, VOIDmode, INTVAL (size) - INTVAL (align));      cc_status.flags &= ~ CC_KNOW_HI_G1;      output_asm_insn ("set %1,%0", xoperands);    }}/* Emit code to perform a block move.   OPERANDS[0] is the destination.   OPERANDS[1] is the source.   OPERANDS[2] is the size.   OPERANDS[3] is the alignment safe to use.   OPERANDS[4] is a register we can safely clobber as a temp.  */char *output_block_move (operands)     rtx *operands;{  /* A vector for our computed operands.  Note that load_output_address     makes use of (and can clobber) up to the 8th element of this vector.  */  rtx xoperands[10];  rtx zoperands[10];  static int movstrsi_label = 0;  int i, j;  rtx temp1 = operands[4];  rtx alignrtx = operands[3];  int align = INTVAL (alignrtx);  xoperands[0] = operands[0];  xoperands[1] = operands[1];  xoperands[2] = temp1;  /* We can't move more than four bytes at a time     because we have only one register to move them through.  */  if (align > 4)    {      align = 4;      alignrtx = gen_rtx (CONST_INT, VOIDmode, 4);    }  /* Since we clobber untold things, nix the condition codes.  */  CC_STATUS_INIT;  /* Recognize special cases of block moves.  These occur     when GNU C++ is forced to treat something as BLKmode     to keep it in memory, when its mode could be represented     with something smaller.     We cannot do this for global variables, since we don't know     what pages they don't cross.  Sigh.  */  if (GET_CODE (operands[2]) == CONST_INT      && INTVAL (operands[2]) <= 16      && ! CONSTANT_ADDRESS_P (operands[0])      && ! CONSTANT_ADDRESS_P (operands[1]))    {      int size = INTVAL (operands[2]);      cc_status.flags &= ~CC_KNOW_HI_G1;      if (align == 1)	{	  if (memory_address_p (QImode, plus_constant (xoperands[0], size))	      && memory_address_p (QImode, plus_constant (xoperands[1], size)))	    {	      /* We will store different integers into this particular RTX.  */	      xoperands[2] = gen_rtx (CONST_INT, VOIDmode, 13);	      for (i = size-1; i >= 0; i--)		{		  INTVAL (xoperands[2]) = i;		  output_asm_insn ("ldub [%a1+%2],%%g1\n\tstb %%g1,[%a0+%2]",				   xoperands);		}	      return "";	    }	}      else if (align == 2)	{	  if (memory_address_p (HImode, plus_constant (xoperands[0], size))	      && memory_address_p (HImode, plus_constant (xoperands[1], size)))	    {	      /* We will store different integers into this particular RTX.  */	      xoperands[2] = gen_rtx (CONST_INT, VOIDmode, 13);	      for (i = (size>>1)-1; i >= 0; i--)		{		  INTVAL (xoperands[2]) = i<<1;		  output_asm_insn ("lduh [%a1+%2],%%g1\n\tsth %%g1,[%a0+%2]",				   xoperands);		}	      return "";	    }	}      else	{	  if (memory_address_p (SImode, plus_constant (xoperands[0], size))	      && memory_address_p (SImode, plus_constant (xoperands[1], size)))	    {	      /* We will store different integers into this particular RTX.  */	      xoperands[2] = gen_rtx (CONST_INT, VOIDmode, 13);	      for (i = (size>>2)-1; i >= 0; i--)		{		  INTVAL (xoperands[2]) = i<<2;		  output_asm_insn ("ld [%a1+%2],%%g1\n\tst %%g1,[%a0+%2]",				   xoperands);		}	      return "";	    }	}    }  /* This is the size of the transfer.     Either use the register which already contains the size,     or use a free register (used by no operands).     Also emit code to decrement the size value by ALIGN.  */  output_size_for_block_move (operands[2], temp1, alignrtx);       zoperands[0] = operands[0];  zoperands[3] = plus_constant (operands[0], align);  output_load_address (zoperands);  xoperands[3] = gen_rtx (CONST_INT, VOIDmode, movstrsi_label++);  xoperands[4] = gen_rtx (CONST_INT, VOIDmode, align);#ifdef NO_UNDERSCORES  if (align == 1)    output_asm_insn ("\n.Lm%3:\n\tldub [%1+%2],%%g1\n\tsubcc %2,%4,%2\n\tbge .Lm%3\n\tstb %%g1,[%0+%2]", xoperands);  else if (align == 2)    output_asm_insn ("\n.Lm%3:\n\tlduh [%1+%2],%%g1\n\tsubcc %2,%4,%2\n\tbge .Lm%3\n\tsth %%g1,[%0+%2]", xoperands);  else    output_asm_insn ("\n.Lm%3:\n\tld [%1+%2],%%g1\n\tsubcc %2,%4,%2\n\tbge .Lm%3\n\tst %%g1,[%0+%2]", xoperands);#else  if (align == 1)    output_asm_insn ("\nLm%3:\n\tldub [%1+%2],%%g1\n\tsubcc %2,%4,%2\n\tbge Lm%3\n\tstb %%g1,[%0+%2]", xoperands);  else if (align == 2)    output_asm_insn ("\nLm%3:\n\tlduh [%1+%2],%%g1\n\tsubcc %2,%4,%2\n\tbge Lm%3\n\tsth %%g1,[%0+%2]", xoperands);  else    output_asm_insn ("\nLm%3:\n\tld [%1+%2],%%g1\n\tsubcc %2,%4,%2\n\tbge Lm%3\n\tst %%g1,[%0+%2]", xoperands);#endif  return "";}/* What the sparc lacks in hardware, make up for in software.   Compute a fairly good sequence of shift and add insns   to make a multiply happen.  */#define ABS(x) ((x) < 0 ? -(x) : x)char *output_mul_by_constant (insn, operands, unsignedp)     rtx insn;     rtx *operands;     int unsignedp;{  int c;			/* Size of constant */  int shifts[BITS_PER_WORD];	/* Table of shifts */  unsigned int p, log;		/* A power of two, and its log */  int d1, d2;			/* Differences of c and p */  int first = 1;		/* True if dst has unknown data in it */  int i;  CC_STATUS_INIT;  c = INTVAL (operands[2]);  if (c == 0)    {      /* Does happen, at least when not optimizing.  */      if (GET_CODE (operands[0]) == MEM)	return "st %%g0,%0";      return "mov %%g0,%0";    }  output_asm_insn ("! start open coded multiply");  /* Clear out the table of shifts. */  for (i = 0; i < BITS_PER_WORD; ++i)    shifts[i] = 0;  while (c)    {      /* Find the power of two nearest ABS(c) */      p = 1, log = 0;      do	{	  d1 = ABS(c) - p;	  p *= 2;	  ++log;	}      while (p < ABS(c));      d2 = p - ABS(c);      /* Make an appropriate entry in shifts for p. */      if (d2 < d1)	{	  shifts[log] = c < 0 ? -1 : 1;	  c = c < 0 ? d2 : -d2;	}      else	{	  shifts[log - 1] = c < 0 ? -1 : 1;	  c = c < 0 ? -d1 : d1;	}    }  /* Take care of the first insn in sequence.     We know we have at least one. */  /* A value of -1 in shifts says to subtract that power of two, and a value     of 1 says to add that power of two. */  for (i = 0; ; i++)    if (shifts[i])      {	if (i)	  {	    operands[2] = gen_rtx (CONST_INT, VOIDmode, i);	    output_asm_insn ("sll %1,%2,%%g1", operands);	  }	else output_asm_insn ("mov %1,%%g1", operands);	log = i;	if (shifts[i] < 0)	  output_asm_insn ("sub %%g0,%%g1,%0", operands);	else	  output_asm_insn ("mov %%g1,%0", operands);	break;      }  /* A value of -1 in shifts says to subtract that power of two, and a value     of 1 says to add that power of two--continued.  */  for (i += 1; i < BITS_PER_WORD; ++i)    if (shifts[i])      {	if (i - log > 0)	  {	    operands[2] = gen_rtx (CONST_INT, VOIDmode, i - log);	    output_asm_insn ("sll %%g1,%2,%%g1", operands);	  }	else	  {	    operands[2] = gen_rtx (CONST_INT, VOIDmode, log - i);	    output_asm_insn ("sra %%g1,%2,%%g1", operands);	  }	log = i;	if (shifts[i] < 0)	  output_asm_insn ("sub %0,%%g1,%0", operands);	else	  output_asm_insn ("add %0,%%g1,%0", operands);      }  output_asm_insn ("! end open coded multiply");  return "";}char *output_mul_insn (operands, unsignedp)     rtx *operands;     int unsignedp;{  int lucky1 = ((unsigned)REGNO (operands[1]) - 8) <= 1;  int lucky2 = ((unsigned)REGNO (operands[2]) - 8) <= 1;  CC_STATUS_INIT;  if (lucky1)    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜影院久久久| 91精品久久久久久久99蜜桃 | 久久综合网色—综合色88| 久久综合久久综合久久| 国产精品国产a级| 亚洲一区二区三区中文字幕 | 精品国产一区二区亚洲人成毛片 | 91免费观看国产| 欧美日本不卡视频| 久久中文娱乐网| 亚洲欧美日韩国产成人精品影院| 五月天激情综合| 国产91丝袜在线播放| 欧美午夜不卡视频| 久久久久久一二三区| 亚洲精品中文在线影院| 免费在线观看视频一区| 不卡欧美aaaaa| 日韩一区二区高清| 亚洲女人****多毛耸耸8| 日本欧美加勒比视频| 成人精品免费网站| 91精品久久久久久久91蜜桃| 国产精品成人网| 免费高清视频精品| 色激情天天射综合网| 久久久综合九色合综国产精品| 亚洲一区二区三区视频在线| 国产一区二区精品久久91| 欧美综合天天夜夜久久| 国产亚洲成aⅴ人片在线观看| 亚洲成人自拍偷拍| jizz一区二区| 久久综合成人精品亚洲另类欧美| 亚洲国产日韩一区二区| 国产精品99久久久久久似苏梦涵 | 视频一区二区不卡| 成人av免费在线观看| 日韩精品一区二区三区在线| 一区二区三区中文字幕| 成人性色生活片免费看爆迷你毛片| 欧美日韩欧美一区二区| 最新高清无码专区| 国产在线精品视频| 欧美一区二区三区免费大片 | 日本电影亚洲天堂一区| 久久精品人人爽人人爽| 奇米888四色在线精品| 日本精品免费观看高清观看| 亚洲国产精品99久久久久久久久| 久久精品999| 欧美精品少妇一区二区三区| 亚洲欧美另类久久久精品| 成人黄色小视频| 国产日韩v精品一区二区| 九色综合国产一区二区三区| 欧美一区二区三区免费| 午夜国产精品影院在线观看| 欧美天堂亚洲电影院在线播放| 亚洲日穴在线视频| www.亚洲精品| 国产精品传媒视频| av一区二区三区| 中文字幕不卡在线播放| 成人中文字幕在线| 国产喷白浆一区二区三区| 国产一区在线观看麻豆| 久久蜜桃一区二区| 国内成+人亚洲+欧美+综合在线| 日韩欧美在线影院| 美腿丝袜亚洲色图| 日韩免费高清av| 狠狠色丁香久久婷婷综合_中 | 成人午夜电影久久影院| 久久免费视频色| 国产露脸91国语对白| 26uuu久久综合| 国产精品一区二区在线观看不卡| 久久久久九九视频| 国产不卡视频在线观看| 国产精品视频你懂的| 成人高清视频免费观看| 国产精品灌醉下药二区| 色94色欧美sute亚洲线路一久| 亚洲免费大片在线观看| 欧美三级日韩三级国产三级| 天天色 色综合| 日韩欧美电影在线| 国产精品正在播放| 国产精品白丝在线| 91女人视频在线观看| 亚洲一区二区高清| 日韩三级在线免费观看| 国产精品538一区二区在线| 国产欧美日韩视频在线观看| 99在线热播精品免费| 樱桃视频在线观看一区| 在线观看91av| 国产在线精品一区二区三区不卡 | 91一区二区在线| 亚洲影院免费观看| 日韩欧美黄色影院| 国产成人亚洲精品青草天美| 日韩理论片网站| 欧美高清视频一二三区| 国产精品综合一区二区三区| 国产精品情趣视频| 欧美三级韩国三级日本三斤| 久久草av在线| 亚洲天堂精品在线观看| 欧美日韩精品久久久| 国模无码大尺度一区二区三区| 中文字幕中文在线不卡住| 欧美视频一区在线观看| 激情av综合网| 最新欧美精品一区二区三区| 欧美顶级少妇做爰| 风流少妇一区二区| 午夜精品福利久久久| 国产性天天综合网| 欧美日韩国产精选| 成人免费高清视频在线观看| 亚洲成人你懂的| 国产人伦精品一区二区| 日本大香伊一区二区三区| 老司机午夜精品| 亚洲日本va在线观看| 欧美成人女星排行榜| 91美女蜜桃在线| 韩国视频一区二区| 亚洲高清免费在线| 国产精品丝袜久久久久久app| 欧美另类z0zxhd电影| 不卡欧美aaaaa| 久久99九九99精品| 亚洲自拍与偷拍| 国产精品入口麻豆九色| 91精品国产乱| 99国产精品一区| 国内精品在线播放| 首页欧美精品中文字幕| 17c精品麻豆一区二区免费| 欧美大片顶级少妇| 欧美日韩一级黄| www.日韩av| 国产乱码精品1区2区3区| 日本中文字幕不卡| 一区二区三区欧美日| 国产日韩欧美电影| 欧美精品一区二区三区很污很色的| 在线亚洲一区观看| 99久久综合国产精品| 国产乱码字幕精品高清av| 蜜臀av性久久久久av蜜臀妖精| 尤物在线观看一区| 中文字幕在线观看不卡| 精品欧美一区二区在线观看| 欧美军同video69gay| 色哟哟一区二区| 99久久免费视频.com| 国产成人免费视频一区| 麻豆精品蜜桃视频网站| 天天av天天翘天天综合网色鬼国产| 最新中文字幕一区二区三区| 日本一区二区不卡视频| 久久一二三国产| 精品电影一区二区| 日韩精品一区二区三区视频播放| 色久综合一二码| 色婷婷精品大在线视频| 99视频超级精品| 99久久99久久精品免费观看| 国产成人综合在线观看| 国产高清视频一区| 韩国毛片一区二区三区| 久久国产欧美日韩精品| 久久精品999| 加勒比av一区二区| 国产一区二区三区免费| 国内精品国产成人| 国产一区二区剧情av在线| 国产一区二区三区美女| 狠狠狠色丁香婷婷综合激情| 国产综合色视频| 国产一区二区免费在线| 国产高清久久久| 国产不卡在线一区| av电影天堂一区二区在线 | 一区二区三区产品免费精品久久75| 亚洲人精品午夜| 亚洲一区二区美女| 天堂一区二区在线免费观看| 免费一级片91| 国产一区二区视频在线| 国产成人精品三级麻豆| av不卡一区二区三区| 色先锋aa成人| 欧美高清视频一二三区| 欧美xxxxx牲另类人与| 国产欧美日韩精品在线|