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

📄 500-avr32.patch

📁 Linux Home Server 是专门为家庭和SOHO/SMB 设计的高性价比的ISCSI 存储服务器, 具有如下的特色: 强大的iscsi 存储服务器软件; 混合iscsi 和NAS 服务;
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
+  tree int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);+  tree longlong_endlink =+    tree_cons (NULL_TREE, long_long_integer_type_node, endlink);+  tree short_endlink =+    tree_cons (NULL_TREE, short_integer_type_node, endlink);+  tree void_endlink = tree_cons (NULL_TREE, void_type_node, endlink);++  /* int func (int) */+  int_ftype_int = build_function_type (integer_type_node, int_endlink);++  /* short func (short) */+  short_ftype_short+    = build_function_type (short_integer_type_node, short_endlink);++  /* short func (short, short) */+  short_ftype_short_short+    = build_function_type (short_integer_type_node,+			   tree_cons (NULL_TREE, short_integer_type_node,+				      short_endlink));++  /* long long func (long long, short, short) */+  longlong_ftype_longlong_short_short+    = build_function_type (long_long_integer_type_node,+			   tree_cons (NULL_TREE, long_long_integer_type_node,+				      tree_cons (NULL_TREE,+						 short_integer_type_node,+						 short_endlink)));++  /* long long func (short, short) */+  longlong_ftype_short_short+    = build_function_type (long_long_integer_type_node,+			   tree_cons (NULL_TREE, short_integer_type_node,+				      short_endlink));++  /* int func (int, int) */+  int_ftype_int_int+    = build_function_type (integer_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      int_endlink));++  /* long long func (int, int) */+  longlong_ftype_int_int+    = build_function_type (long_long_integer_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      int_endlink));++  /* long long int func (long long, int, short) */+  longlong_ftype_longlong_int_short+    = build_function_type (long_long_integer_type_node,+			   tree_cons (NULL_TREE, long_long_integer_type_node,+				      tree_cons (NULL_TREE, integer_type_node,+						 short_endlink)));++  /* long long int func (int, short) */+  longlong_ftype_int_short+    = build_function_type (long_long_integer_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      short_endlink));++  /* int func (int, short, short) */+  int_ftype_int_short_short+    = build_function_type (integer_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      tree_cons (NULL_TREE,+						 short_integer_type_node,+						 short_endlink)));++  /* int func (short, short) */+  int_ftype_short_short+    = build_function_type (integer_type_node,+			   tree_cons (NULL_TREE, short_integer_type_node,+				      short_endlink));++  /* int func (int, short) */+  int_ftype_int_short+    = build_function_type (integer_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      short_endlink));++  /* void func (int, int) */+  void_ftype_int_int+    = build_function_type (void_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      int_endlink));++  /* void func (int, int, int) */+  void_ftype_int_int_int+    = build_function_type (void_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      tree_cons (NULL_TREE, integer_type_node,+						 int_endlink)));++  /* void func (int, int, long long) */+  void_ftype_int_int_longlong+    = build_function_type (void_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      tree_cons (NULL_TREE, integer_type_node,+						 longlong_endlink)));++  /* void func (int, int, int, int, int) */+  void_ftype_int_int_int_int_int+    = build_function_type (void_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      tree_cons (NULL_TREE, integer_type_node,+						 tree_cons (NULL_TREE,+							    integer_type_node,+							    tree_cons+							    (NULL_TREE,+							     integer_type_node,+							     int_endlink)))));++  /* void func (void *, int) */+  void_ftype_ptr_int+    = build_function_type (void_type_node,+			   tree_cons (NULL_TREE, ptr_type_node, int_endlink));++  /* void func (int) */+  void_ftype_int = build_function_type (void_type_node, int_endlink);++  /* void func (void) */+  void_ftype_void = build_function_type (void_type_node, void_endlink);++  /* int func (void) */+  int_ftype_void = build_function_type (integer_type_node, void_endlink);++  /* int func (void *, int) */+  int_ftype_ptr_int+    = build_function_type (integer_type_node,+			   tree_cons (NULL_TREE, ptr_type_node, int_endlink));++  /* int func (int, int, int) */+  int_ftype_int_int_int+    = build_function_type (integer_type_node,+			   tree_cons (NULL_TREE, integer_type_node,+				      tree_cons (NULL_TREE, integer_type_node,+						 int_endlink)));++  /* Initialize avr32 builtins.  */+  def_builtin ("__builtin_mfsr", int_ftype_int, AVR32_BUILTIN_MFSR);+  def_builtin ("__builtin_mtsr", void_ftype_int_int, AVR32_BUILTIN_MTSR);+  def_builtin ("__builtin_mfdr", int_ftype_int, AVR32_BUILTIN_MFDR);+  def_builtin ("__builtin_mtdr", void_ftype_int_int, AVR32_BUILTIN_MTDR);+  def_builtin ("__builtin_cache", void_ftype_ptr_int, AVR32_BUILTIN_CACHE);+  def_builtin ("__builtin_sync", void_ftype_int, AVR32_BUILTIN_SYNC);+  def_builtin ("__builtin_tlbr", void_ftype_void, AVR32_BUILTIN_TLBR);+  def_builtin ("__builtin_tlbs", void_ftype_void, AVR32_BUILTIN_TLBS);+  def_builtin ("__builtin_tlbw", void_ftype_void, AVR32_BUILTIN_TLBW);+  def_builtin ("__builtin_breakpoint", void_ftype_void,+	       AVR32_BUILTIN_BREAKPOINT);+  def_builtin ("__builtin_xchg", int_ftype_ptr_int, AVR32_BUILTIN_XCHG);+  def_builtin ("__builtin_ldxi", int_ftype_ptr_int, AVR32_BUILTIN_LDXI);+  def_builtin ("__builtin_bswap_16", short_ftype_short,+	       AVR32_BUILTIN_BSWAP16);+  def_builtin ("__builtin_bswap_32", int_ftype_int, AVR32_BUILTIN_BSWAP32);+  def_builtin ("__builtin_cop", void_ftype_int_int_int_int_int,+	       AVR32_BUILTIN_COP);+  def_builtin ("__builtin_mvcr_w", int_ftype_int_int, AVR32_BUILTIN_MVCR_W);+  def_builtin ("__builtin_mvrc_w", void_ftype_int_int_int,+	       AVR32_BUILTIN_MVRC_W);+  def_builtin ("__builtin_mvcr_d", longlong_ftype_int_int,+	       AVR32_BUILTIN_MVCR_D);+  def_builtin ("__builtin_mvrc_d", void_ftype_int_int_longlong,+	       AVR32_BUILTIN_MVRC_D);+  def_builtin ("__builtin_sats", int_ftype_int_int_int, AVR32_BUILTIN_SATS);+  def_builtin ("__builtin_satu", int_ftype_int_int_int, AVR32_BUILTIN_SATU);+  def_builtin ("__builtin_satrnds", int_ftype_int_int_int,+	       AVR32_BUILTIN_SATRNDS);+  def_builtin ("__builtin_satrndu", int_ftype_int_int_int,+	       AVR32_BUILTIN_SATRNDU);+  def_builtin ("__builtin_musfr", void_ftype_int, AVR32_BUILTIN_MUSFR);+  def_builtin ("__builtin_mustr", int_ftype_void, AVR32_BUILTIN_MUSTR);+  def_builtin ("__builtin_macsathh_w", int_ftype_int_short_short,+	       AVR32_BUILTIN_MACSATHH_W);+  def_builtin ("__builtin_macwh_d", longlong_ftype_longlong_int_short,+	       AVR32_BUILTIN_MACWH_D);+  def_builtin ("__builtin_machh_d", longlong_ftype_longlong_short_short,+	       AVR32_BUILTIN_MACHH_D);++  /* Add all builtins that are more or less simple operations on two+     operands.  */+  for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)+    {+      /* Use one of the operands; the target can have a different mode for+         mask-generating compares.  */++      if (d->name == 0)+	continue;++      def_mbuiltin (d->mask, d->name, *(d->ftype), d->code);+    }+}+++/* Subroutine of avr32_expand_builtin to take care of binop insns.  */++static rtx+avr32_expand_binop_builtin (enum insn_code icode, tree arglist, rtx target)+{+  rtx pat;+  tree arg0 = TREE_VALUE (arglist);+  tree arg1 = TREE_VALUE (TREE_CHAIN (arglist));+  rtx op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);+  rtx op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);+  enum machine_mode tmode = insn_data[icode].operand[0].mode;+  enum machine_mode mode0 = insn_data[icode].operand[1].mode;+  enum machine_mode mode1 = insn_data[icode].operand[2].mode;++  if (!target+      || GET_MODE (target) != tmode+      || !(*insn_data[icode].operand[0].predicate) (target, tmode))+    target = gen_reg_rtx (tmode);++  /* In case the insn wants input operands in modes different from the+     result, abort.  */+  if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))+    {+      /* If op0 is already a reg we must cast it to the correct mode. */+      if (REG_P (op0))+	op0 = convert_to_mode (mode0, op0, 1);+      else+	op0 = copy_to_mode_reg (mode0, op0);+    }+  if (!(*insn_data[icode].operand[2].predicate) (op1, mode1))+    {+      /* If op1 is already a reg we must cast it to the correct mode. */+      if (REG_P (op1))+	op1 = convert_to_mode (mode1, op1, 1);+      else+	op1 = copy_to_mode_reg (mode1, op1);+    }+  pat = GEN_FCN (icode) (target, op0, op1);+  if (!pat)+    return 0;+  emit_insn (pat);+  return target;+}++/* Expand an expression EXP that calls a built-in function,+   with result going to TARGET if that's convenient+   (and in mode MODE if that's convenient).+   SUBTARGET may be used as the target for computing one of EXP's operands.+   IGNORE is nonzero if the value is to be ignored.  */++rtx+avr32_expand_builtin (tree exp,+		      rtx target,+		      rtx subtarget ATTRIBUTE_UNUSED,+		      enum machine_mode mode ATTRIBUTE_UNUSED,+		      int ignore ATTRIBUTE_UNUSED)+{+  const struct builtin_description *d;+  unsigned int i;+  enum insn_code icode;+  tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);+  tree arglist = TREE_OPERAND (exp, 1);+  tree arg0, arg1, arg2;+  rtx op0, op1, op2, pat;+  enum machine_mode tmode, mode0, mode1;+  enum machine_mode arg0_mode;+  int fcode = DECL_FUNCTION_CODE (fndecl);++  switch (fcode)+    {+    default:+      break;++    case AVR32_BUILTIN_SATS:+    case AVR32_BUILTIN_SATU:+    case AVR32_BUILTIN_SATRNDS:+    case AVR32_BUILTIN_SATRNDU:+      {+	const char *fname;+	switch (fcode)+	  {+	  default:+	  case AVR32_BUILTIN_SATS:+	    icode = CODE_FOR_sats;+	    fname = "sats";+	    break;+	  case AVR32_BUILTIN_SATU:+	    icode = CODE_FOR_satu;+	    fname = "satu";+	    break;+	  case AVR32_BUILTIN_SATRNDS:+	    icode = CODE_FOR_satrnds;+	    fname = "satrnds";+	    break;+	  case AVR32_BUILTIN_SATRNDU:+	    icode = CODE_FOR_satrndu;+	    fname = "satrndu";+	    break;+	  }++	arg0 = TREE_VALUE (arglist);+	arg1 = TREE_VALUE (TREE_CHAIN (arglist));+	arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));+	op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);+	op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);+	op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0);++	tmode = insn_data[icode].operand[0].mode;+++	if (target == 0+	    || GET_MODE (target) != tmode+	    || !(*insn_data[icode].operand[0].predicate) (target, tmode))+	  target = gen_reg_rtx (tmode);+++	if (!(*insn_data[icode].operand[0].predicate) (op0, GET_MODE (op0)))+	  {+	    op0 = copy_to_mode_reg (insn_data[icode].operand[0].mode, op0);+	  }++	if (!(*insn_data[icode].operand[1].predicate) (op1, SImode))+	  {+	    error ("Parameter 2 to __builtin_%s should be a constant number.",+		   fname);+	    return NULL_RTX;+	  }++	if (!(*insn_data[icode].operand[1].predicate) (op2, SImode))+	  {+	    error ("Parameter 3 to __builtin_%s should be a constant number.",+		   fname);+	    return NULL_RTX;+	  }++	emit_move_insn (target, op0);+	pat = GEN_FCN (icode) (target, op1, op2);+	if (!pat)+	  return 0;+	emit_insn (pat);++	return target;+      }+    case AVR32_BUILTIN_MUSTR:+      icode = CODE_FOR_mustr;+      tmode = insn_data[icode].operand[0].mode;++      if (target == 0+	  || GET_MODE (target) != tmode+	  || !(*insn_data[icode].operand[0].predicate) (target, tmode))+	target = gen_reg_rtx (tmode);+      pat = GEN_FCN (icode) (target);+      if (!pat)+	return 0;+      emit_insn (pat);+      return target;++    case AVR32_BUILTIN_MFSR:+      icode = CODE_FOR_mfsr;+      arg0 = TREE_VALUE (arglist);+      op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);+      tmode = insn_data[icode].operand[0].mode;+      mode0 = insn_data[icode].operand[1].mode;++      if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))+	{+	  error ("Parameter 1 to __builtin_mfsr must be a constant number");+	}++      if (target == 0+	  || GET_MODE (target) != tmode+	  || !(*insn_data[icode].operand[0].predicate) (target, tmode))+	target = gen_reg_rtx (tmode);+      pat = GEN_FCN (icode) (target, op0);+      if (!pat)+	return 0;+      emit_insn (pat);+      return target;+    case AVR32_BUILTIN_MTSR:+      icode = CODE_FOR_mtsr;+      arg0 = TREE_VALUE (arglist);+      arg1 = TREE_VALUE (TREE_CHAIN (arglist));+      op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);+      op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);+      mode0 = insn_data[icode].operand[0].mode;+      mode1 = insn_data[icode].operand[1].mode;++      if (!(*insn_data[icode].operand[0].predicate) (op0, mode0))+	{+	  error ("Parameter 1 to __builtin_mtsr must be a constant number");+	  return gen_reg_rtx (mode0);+	}+      if (!(*insn_data[icode].operand[1].predicate) (op1, mode1))+	op1 = copy_to_mode_reg (mode1, op1);+      pat = GEN_FCN (icode) (op0, op1);+      if (!pat)+	return 0;+      emit_insn (pat);+      return NULL_RTX;+    case AVR32_BUILTIN_MFDR:+      icode = CODE_FOR_mfdr;+      arg0 = TREE_VALUE (arglist);+      op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);+      tmode = insn_data[icode].operand[0].mode;+      mode0 = insn_data[icode].operand[1].mode;++      if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))+	{+	  error ("Parameter 1 to __builtin_mfdr must be a constant number");+	}++      if (target == 0+	  || GET_MODE (target) != tmode+	  || !(*insn_data[icode].operand[0].predicate) (target, tmode))+	target = gen_reg_rtx (tmode);+      pat = GEN_FCN (icode) (target, op0);+      if (!pat)+	return 0;+      emit_insn (pat);+      return target;+    case AVR32_BUILTIN_MTDR:+      icode = CODE_FOR_mtdr;

⌨️ 快捷键说明

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