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

📄 mmx.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 4 页
字号:
  DONE;})(define_insn "mmx_pshufw_1"  [(set (match_operand:V4HI 0 "register_operand" "=y")        (vec_select:V4HI          (match_operand:V4HI 1 "nonimmediate_operand" "ym")          (parallel [(match_operand 2 "const_0_to_3_operand" "")                     (match_operand 3 "const_0_to_3_operand" "")                     (match_operand 4 "const_0_to_3_operand" "")                     (match_operand 5 "const_0_to_3_operand" "")])))]  "TARGET_SSE || TARGET_3DNOW_A"{  int mask = 0;  mask |= INTVAL (operands[2]) << 0;  mask |= INTVAL (operands[3]) << 2;  mask |= INTVAL (operands[4]) << 4;  mask |= INTVAL (operands[5]) << 6;  operands[2] = GEN_INT (mask);  return "pshufw\t{%2, %1, %0|%0, %1, %2}";}  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "mmx_pswapdv2si2"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(vec_select:V2SI	  (match_operand:V2SI 1 "nonimmediate_operand" "ym")	  (parallel [(const_int 1) (const_int 0)])))]  "TARGET_3DNOW_A"  "pswapd\\t{%1, %0|%0, %1}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "*vec_dupv4hi"  [(set (match_operand:V4HI 0 "register_operand" "=y")	(vec_duplicate:V4HI	  (truncate:HI	    (match_operand:SI 1 "register_operand" "0"))))]  "TARGET_SSE || TARGET_3DNOW_A"  "pshufw\t{$0, %0, %0|%0, %0, 0}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "*vec_dupv2si"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(vec_duplicate:V2SI	  (match_operand:SI 1 "register_operand" "0")))]  "TARGET_MMX"  "punpckldq\t%0, %0"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "*mmx_concatv2si"  [(set (match_operand:V2SI 0 "register_operand"     "=y,y")	(vec_concat:V2SI	  (match_operand:SI 1 "nonimmediate_operand" " 0,rm")	  (match_operand:SI 2 "vector_move_operand"  "ym,C")))]  "TARGET_MMX && !TARGET_SSE"  "@   punpckldq\t{%2, %0|%0, %2}   movd\t{%1, %0|%0, %1}"  [(set_attr "type" "mmxcvt,mmxmov")   (set_attr "mode" "DI")])(define_expand "vec_setv2si"  [(match_operand:V2SI 0 "register_operand" "")   (match_operand:SI 1 "register_operand" "")   (match_operand 2 "const_int_operand" "")]  "TARGET_MMX"{  ix86_expand_vector_set (false, operands[0], operands[1],			  INTVAL (operands[2]));  DONE;})(define_insn_and_split "*vec_extractv2si_0"  [(set (match_operand:SI 0 "nonimmediate_operand"     "=x,y,m,m,frxy")	(vec_select:SI	  (match_operand:V2SI 1 "nonimmediate_operand" " x,y,x,y,m")	  (parallel [(const_int 0)])))]  "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"  "#"  "&& reload_completed"  [(const_int 0)]{  rtx op1 = operands[1];  if (REG_P (op1))    op1 = gen_rtx_REG (SImode, REGNO (op1));  else    op1 = gen_lowpart (SImode, op1);  emit_move_insn (operands[0], op1);  DONE;})(define_insn "*vec_extractv2si_1"  [(set (match_operand:SI 0 "nonimmediate_operand"     "=y,Y,Y,x,frxy")	(vec_select:SI	  (match_operand:V2SI 1 "nonimmediate_operand" " 0,0,Y,0,o")	  (parallel [(const_int 1)])))]  "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"  "@   punpckhdq\t%0, %0   punpckhdq\t%0, %0   pshufd\t{$85, %1, %0|%0, %1, 85}   unpckhps\t%0, %0   #"  [(set_attr "type" "mmxcvt,sselog1,sselog1,sselog1,*")   (set_attr "mode" "DI,TI,TI,V4SF,SI")])(define_split  [(set (match_operand:SI 0 "register_operand" "")	(vec_select:SI	  (match_operand:V2SI 1 "memory_operand" "")	  (parallel [(const_int 1)])))]  "TARGET_MMX && reload_completed"  [(const_int 0)]{  operands[1] = adjust_address (operands[1], SImode, 4);  emit_move_insn (operands[0], operands[1]);  DONE;})(define_expand "vec_extractv2si"  [(match_operand:SI 0 "register_operand" "")   (match_operand:V2SI 1 "register_operand" "")   (match_operand 2 "const_int_operand" "")]  "TARGET_MMX"{  ix86_expand_vector_extract (false, operands[0], operands[1],			      INTVAL (operands[2]));  DONE;})(define_expand "vec_initv2si"  [(match_operand:V2SI 0 "register_operand" "")   (match_operand 1 "" "")]  "TARGET_SSE"{  ix86_expand_vector_init (false, operands[0], operands[1]);  DONE;})(define_expand "vec_setv4hi"  [(match_operand:V4HI 0 "register_operand" "")   (match_operand:HI 1 "register_operand" "")   (match_operand 2 "const_int_operand" "")]  "TARGET_MMX"{  ix86_expand_vector_set (false, operands[0], operands[1],			  INTVAL (operands[2]));  DONE;})(define_expand "vec_extractv4hi"  [(match_operand:HI 0 "register_operand" "")   (match_operand:V4HI 1 "register_operand" "")   (match_operand 2 "const_int_operand" "")]  "TARGET_MMX"{  ix86_expand_vector_extract (false, operands[0], operands[1],			      INTVAL (operands[2]));  DONE;})(define_expand "vec_initv4hi"  [(match_operand:V4HI 0 "register_operand" "")   (match_operand 1 "" "")]  "TARGET_SSE"{  ix86_expand_vector_init (false, operands[0], operands[1]);  DONE;})(define_expand "vec_setv8qi"  [(match_operand:V8QI 0 "register_operand" "")   (match_operand:QI 1 "register_operand" "")   (match_operand 2 "const_int_operand" "")]  "TARGET_MMX"{  ix86_expand_vector_set (false, operands[0], operands[1],			  INTVAL (operands[2]));  DONE;})(define_expand "vec_extractv8qi"  [(match_operand:QI 0 "register_operand" "")   (match_operand:V8QI 1 "register_operand" "")   (match_operand 2 "const_int_operand" "")]  "TARGET_MMX"{  ix86_expand_vector_extract (false, operands[0], operands[1],			      INTVAL (operands[2]));  DONE;})(define_expand "vec_initv8qi"  [(match_operand:V8QI 0 "register_operand" "")   (match_operand 1 "" "")]  "TARGET_SSE"{  ix86_expand_vector_init (false, operands[0], operands[1]);  DONE;});;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "mmx_uavgv8qi3"  [(set (match_operand:V8QI 0 "register_operand" "=y")	(truncate:V8QI	  (lshiftrt:V8HI	    (plus:V8HI	      (plus:V8HI		(zero_extend:V8HI		  (match_operand:V8QI 1 "nonimmediate_operand" "%0"))		(zero_extend:V8HI		  (match_operand:V8QI 2 "nonimmediate_operand" "ym")))	      (const_vector:V8HI [(const_int 1) (const_int 1)				  (const_int 1) (const_int 1)				  (const_int 1) (const_int 1)				  (const_int 1) (const_int 1)]))	    (const_int 1))))]  "(TARGET_SSE || TARGET_3DNOW)   && ix86_binary_operator_ok (PLUS, V8QImode, operands)"{  /* These two instructions have the same operation, but their encoding     is different.  Prefer the one that is de facto standard.  */  if (TARGET_SSE || TARGET_3DNOW_A)    return "pavgb\t{%2, %0|%0, %2}";  else    return "pavgusb\\t{%2, %0|%0, %2}";}  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_uavgv4hi3"  [(set (match_operand:V4HI 0 "register_operand" "=y")	(truncate:V4HI	  (lshiftrt:V4SI	    (plus:V4SI	      (plus:V4SI		(zero_extend:V4SI		  (match_operand:V4HI 1 "nonimmediate_operand" "%0"))		(zero_extend:V4SI		  (match_operand:V4HI 2 "nonimmediate_operand" "ym")))	      (const_vector:V4SI [(const_int 1) (const_int 1)				  (const_int 1) (const_int 1)]))	    (const_int 1))))]  "(TARGET_SSE || TARGET_3DNOW_A)   && ix86_binary_operator_ok (PLUS, V4HImode, operands)"  "pavgw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_psadbw"  [(set (match_operand:DI 0 "register_operand" "=y")        (unspec:DI [(match_operand:V8QI 1 "register_operand" "0")		    (match_operand:V8QI 2 "nonimmediate_operand" "ym")]		   UNSPEC_PSADBW))]  "TARGET_SSE || TARGET_3DNOW_A"  "psadbw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_pmovmskb"  [(set (match_operand:SI 0 "register_operand" "=r")	(unspec:SI [(match_operand:V8QI 1 "register_operand" "y")]		   UNSPEC_MOVMSK))]  "TARGET_SSE || TARGET_3DNOW_A"  "pmovmskb\t{%1, %0|%0, %1}"  [(set_attr "type" "ssecvt")   (set_attr "mode" "V4SF")])(define_expand "mmx_maskmovq"  [(set (match_operand:V8QI 0 "memory_operand" "")	(unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y")		      (match_operand:V8QI 2 "register_operand" "y")		      (match_dup 0)]		     UNSPEC_MASKMOV))]  "TARGET_SSE || TARGET_3DNOW_A"  "")(define_insn "*mmx_maskmovq"  [(set (mem:V8QI (match_operand:SI 0 "register_operand" "D"))	(unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y")		      (match_operand:V8QI 2 "register_operand" "y")		      (mem:V8QI (match_dup 0))]		     UNSPEC_MASKMOV))]  "(TARGET_SSE || TARGET_3DNOW_A) && !TARGET_64BIT"  ;; @@@ check ordering of operands in intel/nonintel syntax  "maskmovq\t{%2, %1|%1, %2}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "*mmx_maskmovq_rex"  [(set (mem:V8QI (match_operand:DI 0 "register_operand" "D"))	(unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y")		      (match_operand:V8QI 2 "register_operand" "y")		      (mem:V8QI (match_dup 0))]		     UNSPEC_MASKMOV))]  "(TARGET_SSE || TARGET_3DNOW_A) && TARGET_64BIT"  ;; @@@ check ordering of operands in intel/nonintel syntax  "maskmovq\t{%2, %1|%1, %2}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "mmx_emms"  [(unspec_volatile [(const_int 0)] UNSPECV_EMMS)   (clobber (reg:XF 8))   (clobber (reg:XF 9))   (clobber (reg:XF 10))   (clobber (reg:XF 11))   (clobber (reg:XF 12))   (clobber (reg:XF 13))   (clobber (reg:XF 14))   (clobber (reg:XF 15))   (clobber (reg:DI 29))   (clobber (reg:DI 30))   (clobber (reg:DI 31))   (clobber (reg:DI 32))   (clobber (reg:DI 33))   (clobber (reg:DI 34))   (clobber (reg:DI 35))   (clobber (reg:DI 36))]  "TARGET_MMX"  "emms"  [(set_attr "type" "mmx")   (set_attr "memory" "unknown")])(define_insn "mmx_femms"  [(unspec_volatile [(const_int 0)] UNSPECV_FEMMS)   (clobber (reg:XF 8))   (clobber (reg:XF 9))   (clobber (reg:XF 10))   (clobber (reg:XF 11))   (clobber (reg:XF 12))   (clobber (reg:XF 13))   (clobber (reg:XF 14))   (clobber (reg:XF 15))   (clobber (reg:DI 29))   (clobber (reg:DI 30))   (clobber (reg:DI 31))   (clobber (reg:DI 32))   (clobber (reg:DI 33))   (clobber (reg:DI 34))   (clobber (reg:DI 35))   (clobber (reg:DI 36))]  "TARGET_3DNOW"  "femms"  [(set_attr "type" "mmx")   (set_attr "memory" "none")]) 

⌨️ 快捷键说明

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