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

📄 s390.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
  else    {      to = force_reg (Pmode, XEXP (operands[0], 0));      off = 0;    }  for (i = 0; i < count; i++)    XVECEXP (operands[3], 0, i)      = gen_rtx_SET (VOIDmode,		     change_address (operands[0], mode,		       plus_constant (to, off + i * GET_MODE_SIZE (mode))),		     gen_rtx_REG (mode, regno + i));})(define_insn "*store_multiple_di"  [(match_parallel 0 "store_multiple_operation"		   [(set (match_operand:DI 1 "s_operand" "=QS")			 (match_operand:DI 2 "register_operand" "r"))])]  "reload_completed && word_mode == DImode"{  int words = XVECLEN (operands[0], 0);  operands[0] = gen_rtx_REG (DImode, REGNO (operands[2]) + words - 1);  return "stmg\t%2,%0,%S1";}   [(set_attr "op_type" "RSY")    (set_attr "type"    "stm")])(define_insn "*store_multiple_si"  [(match_parallel 0 "store_multiple_operation"		   [(set (match_operand:SI 1 "s_operand" "=Q,S")			 (match_operand:SI 2 "register_operand" "r,r"))])]  "reload_completed"{  int words = XVECLEN (operands[0], 0);  operands[0] = gen_rtx_REG (SImode, REGNO (operands[2]) + words - 1);  return which_alternative == 0 ? "stm\t%2,%0,%S1" : "stmy\t%2,%0,%S1";}   [(set_attr "op_type" "RS,RSY")    (set_attr "type"    "stm")]);;;; String instructions.;;(define_insn "*execute"  [(match_parallel 0 ""    [(unspec [(match_operand 1 "register_operand" "a")              (match_operand:BLK 2 "memory_operand" "R")              (match_operand 3 "" "")] UNSPEC_EXECUTE)])]  "GET_MODE_CLASS (GET_MODE (operands[1])) == MODE_INT   && GET_MODE_SIZE (GET_MODE (operands[1])) <= UNITS_PER_WORD"  "ex\t%1,%2"  [(set_attr "op_type" "RX")   (set_attr "type" "cs")]);; strlenM instruction pattern(s).;(define_expand "strlendi"  [(set (reg:QI 0) (match_operand:QI 2 "immediate_operand" ""))   (parallel    [(set (match_dup 4)	  (unspec:DI [(const_int 0)		      (match_operand:BLK 1 "memory_operand" "")		      (reg:QI 0)		      (match_operand 3 "immediate_operand" "")] UNSPEC_SRST))     (clobber (scratch:DI))     (clobber (reg:CC 33))])   (parallel    [(set (match_operand:DI 0 "register_operand" "")          (minus:DI (match_dup 4) (match_dup 5)))     (clobber (reg:CC 33))])]  "TARGET_64BIT"{  operands[4] = gen_reg_rtx (DImode);  operands[5] = gen_reg_rtx (DImode);  emit_move_insn (operands[5], force_operand (XEXP (operands[1], 0), NULL_RTX));  operands[1] = replace_equiv_address (operands[1], operands[5]);})(define_insn "*strlendi"  [(set (match_operand:DI 0 "register_operand" "=a")	(unspec:DI [(match_operand:DI 2 "general_operand" "0")		    (mem:BLK (match_operand:DI 3 "register_operand" "1"))		    (reg:QI 0)		    (match_operand 4 "immediate_operand" "")] UNSPEC_SRST))   (clobber (match_scratch:DI 1 "=a"))   (clobber (reg:CC 33))]  "TARGET_64BIT"  "srst\t%0,%1\;jo\t.-4"  [(set_attr "length" "8")   (set_attr "type" "vs")])(define_expand "strlensi"  [(set (reg:QI 0) (match_operand:QI 2 "immediate_operand" ""))   (parallel    [(set (match_dup 4)	  (unspec:SI [(const_int 0)		      (match_operand:BLK 1 "memory_operand" "")		      (reg:QI 0)		      (match_operand 3 "immediate_operand" "")] UNSPEC_SRST))     (clobber (scratch:SI))     (clobber (reg:CC 33))])   (parallel    [(set (match_operand:SI 0 "register_operand" "")          (minus:SI (match_dup 4) (match_dup 5)))     (clobber (reg:CC 33))])]  "!TARGET_64BIT"{  operands[4] = gen_reg_rtx (SImode);  operands[5] = gen_reg_rtx (SImode);  emit_move_insn (operands[5], force_operand (XEXP (operands[1], 0), NULL_RTX));  operands[1] = replace_equiv_address (operands[1], operands[5]);})(define_insn "*strlensi"  [(set (match_operand:SI 0 "register_operand" "=a")	(unspec:SI [(match_operand:SI 2 "general_operand" "0")		    (mem:BLK (match_operand:SI 3 "register_operand" "1"))		    (reg:QI 0)		    (match_operand 4 "immediate_operand" "")] UNSPEC_SRST))   (clobber (match_scratch:SI 1 "=a"))   (clobber (reg:CC 33))]  "!TARGET_64BIT"  "srst\t%0,%1\;jo\t.-4"  [(set_attr "length" "8")   (set_attr "type" "vs")]);; movmemM instruction pattern(s).;(define_expand "movmemdi"  [(set (match_operand:BLK 0 "memory_operand" "")        (match_operand:BLK 1 "memory_operand" ""))   (use (match_operand:DI 2 "general_operand" ""))   (match_operand 3 "" "")]  "TARGET_64BIT"  "s390_expand_movmem (operands[0], operands[1], operands[2]); DONE;")(define_expand "movmemsi"  [(set (match_operand:BLK 0 "memory_operand" "")        (match_operand:BLK 1 "memory_operand" ""))   (use (match_operand:SI 2 "general_operand" ""))   (match_operand 3 "" "")]  ""  "s390_expand_movmem (operands[0], operands[1], operands[2]); DONE;"); Move a block that is up to 256 bytes in length.; The block length is taken as (operands[2] % 256) + 1.(define_expand "movmem_short"  [(parallel    [(set (match_operand:BLK 0 "memory_operand" "")          (match_operand:BLK 1 "memory_operand" ""))     (use (match_operand 2 "nonmemory_operand" ""))     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))     (clobber (match_dup 3))])]  ""  "operands[3] = gen_rtx_SCRATCH (Pmode);")(define_insn "*movmem_short"  [(set (match_operand:BLK 0 "memory_operand" "=Q,Q,Q")        (match_operand:BLK 1 "memory_operand" "Q,Q,Q"))   (use (match_operand 2 "nonmemory_operand" "n,a,a"))   (use (match_operand 3 "immediate_operand" "X,R,X"))   (clobber (match_scratch 4 "=X,X,&a"))]  "(GET_MODE (operands[2]) == Pmode || GET_MODE (operands[2]) == VOIDmode)   && GET_MODE (operands[4]) == Pmode"  "#"  [(set_attr "type" "cs")])(define_split  [(set (match_operand:BLK 0 "memory_operand" "")        (match_operand:BLK 1 "memory_operand" ""))   (use (match_operand 2 "const_int_operand" ""))   (use (match_operand 3 "immediate_operand" ""))   (clobber (scratch))]  "reload_completed"  [(parallel    [(set (match_dup 0) (match_dup 1))     (use (match_dup 2))])]  "operands[2] = GEN_INT ((INTVAL (operands[2]) & 0xff) + 1);")(define_split  [(set (match_operand:BLK 0 "memory_operand" "")        (match_operand:BLK 1 "memory_operand" ""))   (use (match_operand 2 "register_operand" ""))   (use (match_operand 3 "memory_operand" ""))   (clobber (scratch))]  "reload_completed"  [(parallel    [(unspec [(match_dup 2) (match_dup 3)              (const_int 0)] UNSPEC_EXECUTE)     (set (match_dup 0) (match_dup 1))     (use (const_int 1))])]  "")(define_split  [(set (match_operand:BLK 0 "memory_operand" "")        (match_operand:BLK 1 "memory_operand" ""))   (use (match_operand 2 "register_operand" ""))   (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))   (clobber (match_operand 3 "register_operand" ""))]  "reload_completed && TARGET_CPU_ZARCH"  [(set (match_dup 3) (label_ref (match_dup 4)))   (parallel    [(unspec [(match_dup 2) (mem:BLK (match_dup 3))               (label_ref (match_dup 4))] UNSPEC_EXECUTE)     (set (match_dup 0) (match_dup 1))     (use (const_int 1))])]  "operands[4] = gen_label_rtx ();"); Move a block of arbitrary length.(define_expand "movmem_long"  [(parallel    [(clobber (match_dup 2))     (clobber (match_dup 3))     (set (match_operand:BLK 0 "memory_operand" "")          (match_operand:BLK 1 "memory_operand" ""))     (use (match_operand 2 "general_operand" ""))     (use (match_dup 3))     (clobber (reg:CC 33))])]  ""{  enum machine_mode dword_mode = word_mode == DImode ? TImode : DImode;  rtx reg0 = gen_reg_rtx (dword_mode);  rtx reg1 = gen_reg_rtx (dword_mode);  rtx addr0 = gen_lowpart (Pmode, gen_highpart (word_mode, reg0));  rtx addr1 = gen_lowpart (Pmode, gen_highpart (word_mode, reg1));  rtx len0 = gen_lowpart (Pmode, reg0);  rtx len1 = gen_lowpart (Pmode, reg1);  emit_insn (gen_rtx_CLOBBER (VOIDmode, reg0));  emit_move_insn (addr0, force_operand (XEXP (operands[0], 0), NULL_RTX));  emit_move_insn (len0, operands[2]);  emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1));  emit_move_insn (addr1, force_operand (XEXP (operands[1], 0), NULL_RTX));  emit_move_insn (len1, operands[2]);  operands[0] = replace_equiv_address_nv (operands[0], addr0);  operands[1] = replace_equiv_address_nv (operands[1], addr1);  operands[2] = reg0;  operands[3] = reg1;})(define_insn "*movmem_long_64"  [(clobber (match_operand:TI 0 "register_operand" "=d"))   (clobber (match_operand:TI 1 "register_operand" "=d"))   (set (mem:BLK (subreg:DI (match_operand:TI 2 "register_operand" "0") 0))        (mem:BLK (subreg:DI (match_operand:TI 3 "register_operand" "1") 0)))   (use (match_dup 2))   (use (match_dup 3))   (clobber (reg:CC 33))]  "TARGET_64BIT"  "mvcle\t%0,%1,0\;jo\t.-4"  [(set_attr "length" "8")   (set_attr "type" "vs")])(define_insn "*movmem_long_31"  [(clobber (match_operand:DI 0 "register_operand" "=d"))   (clobber (match_operand:DI 1 "register_operand" "=d"))   (set (mem:BLK (subreg:SI (match_operand:DI 2 "register_operand" "0") 0))        (mem:BLK (subreg:SI (match_operand:DI 3 "register_operand" "1") 0)))   (use (match_dup 2))   (use (match_dup 3))   (clobber (reg:CC 33))]  "!TARGET_64BIT"  "mvcle\t%0,%1,0\;jo\t.-4"  [(set_attr "length" "8")   (set_attr "type" "vs")]);; clrmemM instruction pattern(s).;(define_expand "clrmemdi"  [(set (match_operand:BLK 0 "memory_operand" "")        (const_int 0))   (use (match_operand:DI 1 "general_operand" ""))   (match_operand 2 "" "")]  "TARGET_64BIT"  "s390_expand_clrmem (operands[0], operands[1]); DONE;")(define_expand "clrmemsi"  [(set (match_operand:BLK 0 "memory_operand" "")        (const_int 0))   (use (match_operand:SI 1 "general_operand" ""))   (match_operand 2 "" "")]  ""  "s390_expand_clrmem (operands[0], operands[1]); DONE;"); Clear a block that is up to 256 bytes in length.; The block length is taken as (operands[1] % 256) + 1.(define_expand "clrmem_short"  [(parallel    [(set (match_operand:BLK 0 "memory_operand" "")          (const_int 0))     (use (match_operand 1 "nonmemory_operand" ""))     (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))     (clobber (match_dup 2))     (clobber (reg:CC 33))])]  ""  "operands[2] = gen_rtx_SCRATCH (Pmode);")(define_insn "*clrmem_short"  [(set (match_operand:BLK 0 "memory_operand" "=Q,Q,Q")        (const_int 0))   (use (match_operand 1 "nonmemory_operand" "n,a,a"))   (use (match_operand 2 "immediate_operand" "X,R,X"))   (clobber (match_scratch 3 "=X,X,&a"))   (clobber (reg:CC 33))]  "(GET_MODE (operands[1]) == Pmode || GET_MODE (operands[1]) == VOIDmode)   && GET_MODE (operands[3]) == Pmode"  "#"  [(set_attr "type" "cs")])(define_split  [(set (match_operand:BLK 0 "memory_operand" "")        (const_int 0))   (use (match_operand 1 "const_int_operand" ""))   (use (match_operand 2 "immediate_operand" ""))   (clobber (scratch))   (clobber (reg:CC 33))]  "reload_completed"  [(parallel    [(set (match_dup 0) (const_int 0))     (use (match_dup 1))     (clobber (reg:CC 33))])]  "operands[1] = GEN_INT ((INTVAL (operands[1]) & 0xff) + 1);")(define_split  [(set (match_operand:BLK 0 "memory_operand" "")        (const_int 0))   (use (match_operand 1 "register_operand" ""))   (use (match_operand 2 "memory_operand" ""))   (clobber (scratch))   (clobber (reg:CC 33))]  "reload_completed"  [(parallel    [(unspec [(match_dup 1) (match_dup 2)              (const_int 0)] UNSPEC_EXECUTE)     (set (match_dup 0) (const_int 0))     (use (const_int 1))     (clobber (reg:CC 33))])]  "")(define_split  [(set (match_operand:BLK 0 "memory_operand" "")        (const_int 0))   (use (match_operand 1 "register_operand" ""))   (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN)))   (clobber (match_operand 2 "register_operand" ""))   (clobber (reg:CC 33))]  "reload_completed && TARGET_CPU_ZARCH"  [(set (match_dup 2) (label_ref (match_dup 3)))   (parallel    [(unspec [(match_dup 1) (mem:BLK (match_dup 2))               (label_ref (match_dup 3))] UNSPEC_EXECUTE)     (set (match_dup 0) (const_int 0))     (use (const_int 1))     (clobber (reg:CC 33))])]  "operands[3] = gen_label_rtx ();"); Clear a block of arbitrary length.(define_expand "clrmem_long"  [(parallel    [(clobber (match_dup 1))     (set (match_operand:BLK 0 "memory_operand" "")          (const_int 0))     (use (match_operand 1 "general_operand" ""))     (use (match_dup 2))     (clobber (reg:CC 33))])]  ""{  enum machine_mode dword_mode = word_mode == DImode ? TImode : DImode;  rtx reg0 = gen_reg_rtx (dword_mode);  rtx reg1 = gen_reg_rtx (dword_mode);  rtx addr0 = gen_lowpart (Pmode, gen_highpart (word_mode, reg0));  rtx len0 = gen_lowpart (Pmode, reg0);  emit_insn (gen_rtx_CLOBBER (VOIDmode, reg0));  emit_move_insn (addr0, force_operand (XEXP (operands[0], 0), NULL_RTX));  emit_move_insn (len0, operands[1]);  emit_move_insn (reg1, const0_rtx);  operands[0] = replace_equiv_address_nv (operands[0], addr0);  operands[1] = reg0;  operands[2] = reg1;})(define_insn "*clrmem_long_64"  [(clobber (match_operand:TI 0 "register_operand" "=d"))   (set (mem:BLK (subreg:DI (match_operand:TI 2 "register_operand" "0") 0))        (const_int 0))   (use (match_dup 2))   (use (match_operand:TI 1 "register_operand" "d"))   (clobber (reg:CC 33))]  "TARGET_64BIT"  "mvcle\t%0,%1,0\;jo\t.-4"  [(set_attr "length" "8")   (set_attr "type" "vs")])(define_insn "*clrmem_long_31"  [(clobber (match_operand:DI 0 "register_operand" "=d"))   (set (mem:BLK (subreg:SI (match_operand:DI 2 "register_operand" "0") 0))        (const_int 0))   (use (match_dup 2))   (use (match_operand:DI 1 "register_operand" "d"))   (clobber (reg:CC 33))]  "!TARGET_64BIT"  "mvcle

⌨️ 快捷键说明

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