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

📄 sparc.md

📁 gcc编译工具没有什么特别
💻 MD
📖 第 1 页 / 共 5 页
字号:
      if (gen_v9_scc (NE, operands))	DONE;      /* fall through */    }  FAIL;}")(define_expand "sgt"  [(set (match_operand:SI 0 "intreg_operand" "")	(gt:SI (match_dup 1) (const_int 0)))]  "! TARGET_LIVE_G0"  "{  if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)    {      emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GT);      emit_insn (gen_sne (operands[0]));      DONE;    }  else if (TARGET_V9)    {      if (gen_v9_scc (GT, operands))	DONE;      /* fall through */    }  FAIL;}")(define_expand "slt"  [(set (match_operand:SI 0 "intreg_operand" "")	(lt:SI (match_dup 1) (const_int 0)))]  "! TARGET_LIVE_G0"  "{  if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)    {      emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LT);      emit_insn (gen_sne (operands[0]));      DONE;    }  else if (TARGET_V9)    {      if (gen_v9_scc (LT, operands))	DONE;      /* fall through */    }  FAIL;}")(define_expand "sge"  [(set (match_operand:SI 0 "intreg_operand" "")	(ge:SI (match_dup 1) (const_int 0)))]  "! TARGET_LIVE_G0"  "{  if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)    {      emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GE);      emit_insn (gen_sne (operands[0]));      DONE;    }  else if (TARGET_V9)    {      if (gen_v9_scc (GE, operands))	DONE;      /* fall through */    }  FAIL;}")(define_expand "sle"  [(set (match_operand:SI 0 "intreg_operand" "")	(le:SI (match_dup 1) (const_int 0)))]  "! TARGET_LIVE_G0"  "{  if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)    {      emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LE);      emit_insn (gen_sne (operands[0]));      DONE;    }  else if (TARGET_V9)    {      if (gen_v9_scc (LE, operands))	DONE;      /* fall through */    }  FAIL;}")(define_expand "sgtu"  [(set (match_operand:SI 0 "intreg_operand" "")	(gtu:SI (match_dup 1) (const_int 0)))]  "! TARGET_LIVE_G0"  "{  if (! TARGET_V9)    {      rtx tem, pat;      /* We can do ltu easily, so if both operands are registers, swap them and	 do a LTU.  */      if ((GET_CODE (sparc_compare_op0) == REG	   || GET_CODE (sparc_compare_op0) == SUBREG)	  && (GET_CODE (sparc_compare_op1) == REG	      || GET_CODE (sparc_compare_op1) == SUBREG))	{	  tem = sparc_compare_op0;	  sparc_compare_op0 = sparc_compare_op1;	  sparc_compare_op1 = tem;	  pat = gen_sltu (operands[0]);          if (pat == NULL_RTX)            FAIL;          emit_insn (pat);	  DONE;	}    }  else    {      if (gen_v9_scc (GTU, operands))	DONE;    }  FAIL;}")(define_expand "sltu"  [(set (match_operand:SI 0 "intreg_operand" "")	(ltu:SI (match_dup 1) (const_int 0)))]  "! TARGET_LIVE_G0"  "{  if (TARGET_V9)    {      if (gen_v9_scc (LTU, operands))	DONE;    }  operands[1] = gen_compare_reg (LTU, sparc_compare_op0, sparc_compare_op1);}")(define_expand "sgeu"  [(set (match_operand:SI 0 "intreg_operand" "")	(geu:SI (match_dup 1) (const_int 0)))]  "! TARGET_LIVE_G0"  "{  if (TARGET_V9)    {      if (gen_v9_scc (GEU, operands))	DONE;    }  operands[1] = gen_compare_reg (GEU, sparc_compare_op0, sparc_compare_op1);}")(define_expand "sleu"  [(set (match_operand:SI 0 "intreg_operand" "")	(leu:SI (match_dup 1) (const_int 0)))]  "! TARGET_LIVE_G0"  "{  if (! TARGET_V9)    {      rtx tem, pat;      /* We can do geu easily, so if both operands are registers, swap them and	 do a GEU.  */      if ((GET_CODE (sparc_compare_op0) == REG	   || GET_CODE (sparc_compare_op0) == SUBREG)	  && (GET_CODE (sparc_compare_op1) == REG	      || GET_CODE (sparc_compare_op1) == SUBREG))	{	  tem = sparc_compare_op0;	  sparc_compare_op0 = sparc_compare_op1;	  sparc_compare_op1 = tem;	  pat = gen_sgeu (operands[0]);          if (pat == NULL_RTX)            FAIL;          emit_insn (pat);	  DONE;	}    }  else    {      if (gen_v9_scc (LEU, operands))	DONE;    }  FAIL;}");; Now the DEFINE_INSNs for the scc cases.;; The SEQ and SNE patterns are special because they can be done;; without any branching and do not involve a COMPARE.  We want;; them to always use the splitz below so the results can be;; scheduled.(define_insn "*snesi_zero"  [(set (match_operand:SI 0 "register_operand" "=r")	(ne:SI (match_operand:SI 1 "register_operand" "r")	       (const_int 0)))   (clobber (reg:CC 100))]  "! TARGET_LIVE_G0"  "#"  [(set_attr "length" "2")])(define_split  [(set (match_operand:SI 0 "register_operand" "")	(ne:SI (match_operand:SI 1 "register_operand" "")	       (const_int 0)))   (clobber (reg:CC 100))]  ""  [(set (reg:CC_NOOV 100) (compare:CC_NOOV (neg:SI (match_dup 1))					   (const_int 0)))   (set (match_dup 0) (ltu:SI (reg:CC 100) (const_int 0)))]  "")(define_insn "*neg_snesi_zero"  [(set (match_operand:SI 0 "register_operand" "=r")	(neg:SI (ne:SI (match_operand:SI 1 "register_operand" "r")		       (const_int 0))))   (clobber (reg:CC 100))]  "! TARGET_LIVE_G0"  "#"  [(set_attr "length" "2")])(define_split  [(set (match_operand:SI 0 "register_operand" "")	(neg:SI (ne:SI (match_operand:SI 1 "register_operand" "")		       (const_int 0))))   (clobber (reg:CC 100))]  ""  [(set (reg:CC_NOOV 100) (compare:CC_NOOV (neg:SI (match_dup 1))					   (const_int 0)))   (set (match_dup 0) (neg:SI (ltu:SI (reg:CC 100) (const_int 0))))]  "")(define_insn "*snesi_zero_extend"  [(set (match_operand:DI 0 "register_operand" "=r")	(ne:DI (match_operand:SI 1 "register_operand" "r")	       (const_int 0)))   (clobber (reg:CC 100))]  "TARGET_ARCH64"  "#"  [(set_attr "type" "unary")   (set_attr "length" "2")])(define_split  [(set (match_operand:DI 0 "register_operand" "")        (ne:DI (match_operand:SI 1 "register_operand" "")               (const_int 0)))   (clobber (reg:CC 100))]  "TARGET_ARCH64"  [(set (reg:CC_NOOV 100) (compare:CC_NOOV (minus:SI (const_int 0) (match_dup 1))                                           (const_int 0)))   (set (match_dup 0) (zero_extend:DI (plus:SI (plus:SI (const_int 0)                                                        (const_int 0))                                               (ltu:SI (reg:CC_NOOV 100)                                                       (const_int 0)))))]  "")(define_insn "*snedi_zero"  [(set (match_operand:DI 0 "register_operand" "=&r")	(ne:DI (match_operand:DI 1 "register_operand" "r")	       (const_int 0)))]  "TARGET_ARCH64"  "#"  [(set_attr "type" "cmove")   (set_attr "length" "2")])(define_split  [(set (match_operand:DI 0 "register_operand" "")        (ne:DI (match_operand:DI 1 "register_operand" "")               (const_int 0)))]  "TARGET_ARCH64"  [(set (match_dup 0) (const_int 0))   (set (match_dup 0) (if_then_else:DI (ne:DI (match_dup 1)                                              (const_int 0))                                       (const_int 1)                                       (match_dup 0)))]  "")(define_insn "*neg_snedi_zero"  [(set (match_operand:DI 0 "register_operand" "=&r")	(neg:DI (ne:DI (match_operand:DI 1 "register_operand" "r")		       (const_int 0))))]  "TARGET_ARCH64"  "#"  [(set_attr "type" "cmove")   (set_attr "length" "2")])(define_split  [(set (match_operand:DI 0 "register_operand" "")        (neg:DI (ne:DI (match_operand:DI 1 "register_operand" "")                       (const_int 0))))]  "TARGET_ARCH64"  [(set (match_dup 0) (const_int 0))   (set (match_dup 0) (if_then_else:DI (ne:DI (match_dup 1)                                              (const_int 0))                                       (const_int -1)                                       (match_dup 0)))]  "")(define_insn "*snedi_zero_trunc"  [(set (match_operand:SI 0 "register_operand" "=&r")	(ne:SI (match_operand:DI 1 "register_operand" "r")	       (const_int 0)))]  "TARGET_ARCH64"  "#"  [(set_attr "type" "cmove")   (set_attr "length" "2")])(define_split  [(set (match_operand:SI 0 "register_operand" "")        (ne:SI (match_operand:DI 1 "register_operand" "")               (const_int 0)))]  "TARGET_ARCH64"  [(set (match_dup 0) (const_int 0))   (set (match_dup 0) (if_then_else:SI (ne:DI (match_dup 1)                                              (const_int 0))                                       (const_int 1)                                       (match_dup 0)))]  "")(define_insn "*seqsi_zero"  [(set (match_operand:SI 0 "register_operand" "=r")	(eq:SI (match_operand:SI 1 "register_operand" "r")	       (const_int 0)))   (clobber (reg:CC 100))]  "! TARGET_LIVE_G0"  "#"  [(set_attr "length" "2")])(define_split  [(set (match_operand:SI 0 "register_operand" "")	(eq:SI (match_operand:SI 1 "register_operand" "")	       (const_int 0)))   (clobber (reg:CC 100))]  ""  [(set (reg:CC_NOOV 100) (compare:CC_NOOV (neg:SI (match_dup 1))					   (const_int 0)))   (set (match_dup 0) (geu:SI (reg:CC 100) (const_int 0)))]  "")(define_insn "*neg_seqsi_zero"  [(set (match_operand:SI 0 "register_operand" "=r")	(neg:SI (eq:SI (match_operand:SI 1 "register_operand" "r")		       (const_int 0))))   (clobber (reg:CC 100))]  "! TARGET_LIVE_G0"  "#"  [(set_attr "length" "2")])(define_split  [(set (match_operand:SI 0 "register_operand" "")	(neg:SI (eq:SI (match_operand:SI 1 "register_operand" "")		       (const_int 0))))   (clobber (reg:CC 100))]  ""  [(set (reg:CC_NOOV 100) (compare:CC_NOOV (neg:SI (match_dup 1))					   (const_int 0)))   (set (match_dup 0) (neg:SI (geu:SI (reg:CC 100) (const_int 0))))]  "")(define_insn "*seqsi_zero_extend"  [(set (match_operand:DI 0 "register_operand" "=r")	(eq:DI (match_operand:SI 1 "register_operand" "r")	       (const_int 0)))   (clobber (reg:CC 100))]  "TARGET_ARCH64"  "#"  [(set_attr "type" "unary")   (set_attr "length" "2")])(define_split  [(set (match_operand:DI 0 "register_operand" "")        (eq:DI (match_operand:SI 1 "register_operand" "")               (const_int 0)))   (clobber (reg:CC 100))]  "TARGET_ARCH64"  [(set (reg:CC_NOOV 100) (compare:CC_NOOV (minus:SI (const_int 0) (match_dup 1))                                           (const_int 0)))   (set (match_dup 0) (zero_extend:DI (minus:SI (minus:SI (const_int 0)                                                          (const_int -1))                                                (ltu:SI (reg:CC_NOOV 100)                                                        (const_int 0)))))]  "")(define_insn "*seqdi_zero"  [(set (match_operand:DI 0 "register_operand" "=&r")	(eq:DI (match_operand:DI 1 "register_operand" "r")	       (const_int 0)))]  "TARGET_ARCH64"  "#"  [(set_attr "type" "cmove")   (set_attr "length" "2")])(define_split  [(set (match_operand:DI 0 "register_operand" "")        (eq:DI (match_operand:DI 1 "register_operand" "")               (const_int 0)))]  "TARGET_ARCH64"  [(set (match_dup 0) (const_int 0))   (set (match_dup 0) (if_then_else:DI (eq:DI (match_dup 1)                                              (const_int 0))                                       (const_int 1)                                       (match_dup 0)))]  "")(define_insn "*neg_seqdi_zero"  [(set (match_operand:DI 0 "register_operand" "=&r")	(neg:DI (eq:DI (match_operand:DI 1 "register_operand" "r")		       (const_int 0))))]  "TARGET_ARCH64"  "#"  [(set_attr "type" "cmove")   (set_attr "length" "2")]) (define_split  [(set (match_operand:DI 0 "register_operand" "")        (neg:DI (eq:DI (match_operand:DI 1 "register_operand" "")                       (const_int 0))))]  "TARGET_ARCH64"  [(set (match_dup 0) (const_int 0))   (set (match_dup 0) (if_then_else:DI (eq:DI (match_dup 1)                                              (const_int 0))                                       (const_int -1)                                       (match_dup 0)))]  "")(define_insn "*seqdi_zero_trunc"  [(set (match_operand:SI 0 "register_operand" "=&r")	(eq:SI (match_operand:DI 1 "register_operand" "r")	       (const_int 0)))]  "TARGET_ARCH64"  "#"  [(set_attr "type" "cmove")   (set_attr "length" "2")])(define_split  [(set (match_operand:SI 0 "register_operand" "")        (eq:SI (match_operand:DI 1 "register_operand" "")               (const_int 0)))]  "TARGET_ARCH64"  [(set (match_dup 0) (const_int 0))   (set (match_dup 0) (if_then_else:SI (eq:DI (match_dup 1)                                              (const_int 0))                                       (const_int 1)                                       (match_dup 0)))]  "")

⌨️ 快捷键说明

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