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

📄 rs6000.md

📁 早期freebsd实现
💻 MD
📖 第 1 页 / 共 5 页
字号:
  ""  "rl%I2nm %0,%1,%h2,24,31")(define_insn ""  [(set (match_operand:CC 0 "cc_reg_operand" "=x")	(compare:CC (zero_extend:SI		     (subreg:QI		      (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")				 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))		    (const_int 0)))   (clobber (match_scratch:SI 3 "=r"))]  ""  "rl%I2nm. %3,%1,%h2,24,31"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:CC 3 "cc_reg_operand" "=x")	(compare:CC (zero_extend:SI		     (subreg:QI		      (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")				 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))		    (const_int 0)))   (set (match_operand:SI 0 "gpc_reg_operand" "=r")	(zero_extend:SI (subreg:QI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]  ""  "rl%I2nm. %0,%1,%h2,24,31"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")	(zero_extend:SI	 (subreg:HI	  (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")		     (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0)))]  ""  "rl%I2nm %0,%1,%h2,16,31")(define_insn ""  [(set (match_operand:CC 0 "cc_reg_operand" "=x")	(compare:CC (zero_extend:SI		     (subreg:HI		      (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")				 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))		    (const_int 0)))   (clobber (match_scratch:SI 3 "=r"))]  ""  "rl%I2nm. %3,%1,%h2,16,31"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:CC 3 "cc_reg_operand" "=x")	(compare:CC (zero_extend:SI		     (subreg:HI		      (rotate:SI (match_operand:SI 1 "gpc_reg_operand" "r")				 (match_operand:SI 2 "reg_or_cint_operand" "ri")) 0))		    (const_int 0)))   (set (match_operand:SI 0 "gpc_reg_operand" "=r")	(zero_extend:SI (subreg:HI (rotate:SI (match_dup 1) (match_dup 2)) 0)))]  ""  "rl%I2nm. %0,%1,%h2,16,31"  [(set_attr "type" "delayed_compare")]);; Note that we use "sle." instead of "sl." so that we can set;; SHIFT_COUNT_TRUNCATED.(define_insn "ashlsi3"  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")	(ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")		   (match_operand:SI 2 "reg_or_cint_operand" "r,i")))   (clobber (match_scratch:SI 3 "=q,X"))]  ""  "@   sle %0,%1,%2   sli %0,%1,%h2")(define_insn ""  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")	(compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")			       (match_operand:SI 2 "reg_or_cint_operand" "r,i"))		    (const_int 0)))   (clobber (match_scratch:SI 3 "=r,r"))   (clobber (match_scratch:SI 4 "=q,X"))]  ""  "@   sle. %3,%1,%2   sli. %3,%1,%h2"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")	(compare:CC (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")			       (match_operand:SI 2 "reg_or_cint_operand" "r,i"))		    (const_int 0)))   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")	(ashift:SI (match_dup 1) (match_dup 2)))   (clobber (match_scratch:SI 4 "=q,X"))]  ""  "@   sle. %0,%1,%2   sli. %0,%1,%h2"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")	(and:SI (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")			   (match_operand:SI 2 "const_int_operand" "i"))		(match_operand:SI 3 "mask_operand" "L")))]  "includes_lshift_p (operands[2], operands[3])"  "rlinm %0,%h1,%h2,%m3,%M3")(define_insn ""  [(set (match_operand:CC 0 "cc_reg_operand" "=x")	(compare:CC	 (and:SI (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")			    (match_operand:SI 2 "const_int_operand" "i"))		 (match_operand:SI 3 "mask_operand" "L"))	 (const_int 0)))   (clobber (match_scratch:SI 4 "=r"))]  "includes_lshift_p (operands[2], operands[3])"  "rlinm. %4,%h1,%h2,%m3,%M3"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:CC 4 "cc_reg_operand" "=x")	(compare:CC	 (and:SI (ashift:SI (match_operand:SI 1 "gpc_reg_operand" "r")			    (match_operand:SI 2 "const_int_operand" "i"))		 (match_operand:SI 3 "mask_operand" "L"))	 (const_int 0)))   (set (match_operand:SI 0 "gpc_reg_operand" "=r")	(and:SI (ashift:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]  "includes_lshift_p (operands[2], operands[3])"  "rlinm. %0,%h1,%h2,%m3,%M3"  [(set_attr "type" "delayed_compare")]);; The RS/6000 assembler mis-handles "sri x,x,0", so write that case as;; "sli x,x,0".(define_insn "lshrsi3"  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")	(lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")		     (match_operand:SI 2 "reg_or_cint_operand" "r,i")))   (clobber (match_scratch:SI 3 "=q,X"))]  ""  "@  sre %0,%1,%2  s%A2i %0,%1,%h2")(define_insn ""  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")	(compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")				 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))		    (const_int 0)))   (clobber (match_scratch:SI 3 "=r,r"))   (clobber (match_scratch:SI 4 "=q,X"))]  ""  "@  sre. %3,%1,%2  s%A2i. %3,%1,%h2"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")	(compare:CC (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")				 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))		    (const_int 0)))   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")	(lshiftrt:SI (match_dup 1) (match_dup 2)))   (clobber (match_scratch:SI 4 "=q,X"))]  ""  "@  sre. %0,%1,%2  s%A2i. %0,%1,%h2"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")	(and:SI (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")			     (match_operand:SI 2 "const_int_operand" "i"))		(match_operand:SI 3 "mask_operand" "L")))]  "includes_rshift_p (operands[2], operands[3])"  "rlinm %0,%1,%s2,%m3,%M3")(define_insn ""  [(set (match_operand:CC 0 "cc_reg_operand" "=x")	(compare:CC	 (and:SI (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")			      (match_operand:SI 2 "const_int_operand" "i"))		 (match_operand:SI 3 "mask_operand" "L"))	 (const_int 0)))   (clobber (match_scratch:SI 4 "=r"))]  "includes_rshift_p (operands[2], operands[3])"  "rlinm. %4,%1,%s2,%m3,%M3"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:CC 4 "cc_reg_operand" "=x")	(compare:CC	 (and:SI (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")			      (match_operand:SI 2 "const_int_operand" "i"))		 (match_operand:SI 3 "mask_operand" "L"))	 (const_int 0)))   (set (match_operand:SI 0 "gpc_reg_operand" "=r")	(and:SI (lshiftrt:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]  "includes_rshift_p (operands[2], operands[3])"  "rlinm. %0,%1,%s2,%m3,%M3"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")	(zero_extend:SI	 (subreg:QI	  (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")		       (match_operand:SI 2 "const_int_operand" "i")) 0)))]  "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))"  "rlinm %0,%1,%s2,24,31")(define_insn ""  [(set (match_operand:CC 0 "cc_reg_operand" "=x")	(compare:CC	 (zero_extend:SI	  (subreg:QI	   (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")			(match_operand:SI 2 "const_int_operand" "i")) 0))	 (const_int 0)))   (clobber (match_scratch:SI 3 "=r"))]  "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))"  "rlinm. %3,%1,%s2,24,31"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:CC 3 "cc_reg_operand" "=x")	(compare:CC	 (zero_extend:SI	  (subreg:QI	   (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")			(match_operand:SI 2 "const_int_operand" "i")) 0))	 (const_int 0)))   (set (match_operand:SI 0 "gpc_reg_operand" "=r")	(zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]  "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))"  "rlinm. %0,%1,%s2,24,31"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")	(zero_extend:SI	 (subreg:HI	  (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")		       (match_operand:SI 2 "const_int_operand" "i")) 0)))]  "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))"  "rlinm %0,%1,%s2,16,31")(define_insn ""  [(set (match_operand:CC 0 "cc_reg_operand" "=x")	(compare:CC	 (zero_extend:SI	  (subreg:HI	   (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")			(match_operand:SI 2 "const_int_operand" "i")) 0))	 (const_int 0)))   (clobber (match_scratch:SI 3 "=r"))]  "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))"  "rlinm. %3,%1,%s2,16,31"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:CC 3 "cc_reg_operand" "=x")	(compare:CC	 (zero_extend:SI	  (subreg:HI	   (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")			(match_operand:SI 2 "const_int_operand" "i")) 0))	 (const_int 0)))   (set (match_operand:SI 0 "gpc_reg_operand" "=r")	(zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))]  "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))"  "rlinm. %0,%1,%s2,16,31"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")			 (const_int 1)			 (match_operand:SI 1 "gpc_reg_operand" "r"))	(ashiftrt:SI (match_operand:SI 2 "gpc_reg_operand" "r")		     (const_int 31)))]  ""  "rrib %0,%1,%2")(define_insn ""  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")			 (const_int 1)			 (match_operand:SI 1 "gpc_reg_operand" "r"))	(lshiftrt:SI (match_operand:SI 2 "gpc_reg_operand" "r")		     (const_int 31)))]  ""  "rrib %0,%1,%2")(define_insn ""  [(set (zero_extract:SI (match_operand:SI 0 "gpc_reg_operand" "+r")			 (const_int 1)			 (match_operand:SI 1 "gpc_reg_operand" "r"))	(zero_extract:SI (match_operand:SI 2 "gpc_reg_operand" "r")			 (const_int 1)			 (const_int 0)))]  ""  "rrib %0,%1,%2")(define_insn "ashrsi3"  [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")	(ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")		     (match_operand:SI 2 "reg_or_cint_operand" "r,i")))   (clobber (match_scratch:SI 3 "=q,X"))]  ""  "@   srea %0,%1,%2   srai %0,%1,%h2")(define_insn ""  [(set (match_operand:CC 0 "cc_reg_operand" "=x,x")	(compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")				 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))		    (const_int 0)))   (clobber (match_scratch:SI 3 "=r,r"))   (clobber (match_scratch:SI 4 "=q,X"))]  ""  "@   srea. %3,%1,%2   srai. %3,%1,%h2"  [(set_attr "type" "delayed_compare")])(define_insn ""  [(set (match_operand:CC 3 "cc_reg_operand" "=x,x")	(compare:CC (ashiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r,r")				 (match_operand:SI 2 "reg_or_cint_operand" "r,i"))		    (const_int 0)))   (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")	(ashiftrt:SI (match_dup 1) (match_dup 2)))   (clobber (match_scratch:SI 4 "=q,X"))]  ""  "@   srea. %0,%1,%2   srai. %0,%1,%h2"  [(set_attr "type" "delayed_compare")])(define_expand "extendqisi2"  [(parallel [(set (match_dup 2)		   (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")			      (const_int 24)))	      (clobber (scratch:SI))])   (parallel [(set (match_operand:SI 0 "gpc_reg_operand" "")		   (ashiftrt:SI (match_dup 2)				(const_int 24)))	      (clobber (scratch:SI))])]  ""  "{ operands[1] = gen_lowpart (SImode, operands[1]);  operands[2] = gen_reg_rtx (SImode); }")(define_expand "extendqihi2"  [(parallel [(set (match_dup 2)		   (ashift:SI (match_operand:QI 1 "gpc_reg_operand" "")			      (const_int 24)))	      (clobber (scratch:SI))])   (parallel [(set (match_operand:HI 0 "gpc_reg_operand" "")		   (ashiftrt:SI (match_dup 2)				(const_int 24)))	      (clobber (scratch:SI))])]  ""  "{ operands[0] = gen_lowpart (SImode, operands[0]);  operands[1] = gen_lowpart (SImode, operands[1]);  operands[2] = gen_reg_rtx (SImode); }");; Floating-point insns, excluding normal data motion.;;;; We pretend that we have both SFmode and DFmode insns, while, in fact,;; all fp insns are actually done in double.  The only conversions we will;; do will be when storing to memory.  In that case, we will use the "frsp";; instruction before storing.;;;; Note that when we store into a single-precision memory location, we need to;; use the frsp insn first.  If the register being stored isn't dead, we;; need a scratch register for the frsp.  But this is difficult when the store;; is done by reload.  It is not incorrect to do the frsp on the register in;; this case, we just lose precision that we would have otherwise gotten but;; is not guaranteed.  Perhaps this should be tightened up at some point.(define_insn "extendsfdf2"  [(set (match_operand:DF 0 "gpc_reg_operand" "=f")	(float_extend:DF (match_operand:SF 1 "gpc_reg_operand" "f")))]  ""  "*{  if (REGNO (operands[0]) == REGNO (operands[1]))    return \"\";  else    return \"fmr %0,%1\";}"  [(set_attr "type" "fp")])(define_insn "truncdfsf2"  [(set (match_operand:SF 0 "gpc_reg_operand" "=f")	(float_truncate:SF (match_operand:DF 1 "gpc_reg_operand" "f")))]  ""  "*{  if (REGNO (operands[0]) == REGNO (operands[1]))    return \"\";  else    return \"fmr %0,%1\";

⌨️ 快捷键说明

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