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

📄 mmx.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 4 页
字号:
  "TARGET_3DNOW_A"  "pfpnacc\\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "V2SF")]);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel single-precision floating point comparisons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "mmx_gtv2sf3"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(gt:V2SI (match_operand:V2SF 1 "register_operand" "0")		 (match_operand:V2SF 2 "nonimmediate_operand" "ym")))]  "TARGET_3DNOW"  "pfcmpgt\\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcmp")   (set_attr "mode" "V2SF")])(define_insn "mmx_gev2sf3"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(ge:V2SI (match_operand:V2SF 1 "register_operand" "0")		 (match_operand:V2SF 2 "nonimmediate_operand" "ym")))]  "TARGET_3DNOW"  "pfcmpge\\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcmp")   (set_attr "mode" "V2SF")])(define_insn "mmx_eqv2sf3"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(eq:V2SI (match_operand:V2SF 1 "nonimmediate_operand" "%0")		 (match_operand:V2SF 2 "nonimmediate_operand" "ym")))]  "TARGET_3DNOW && ix86_binary_operator_ok (EQ, V2SFmode, operands)"  "pfcmpeq\\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcmp")   (set_attr "mode" "V2SF")]);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel single-precision floating point conversion operations;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "mmx_pf2id"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(fix:V2SI (match_operand:V2SF 1 "nonimmediate_operand" "ym")))]  "TARGET_3DNOW"  "pf2id\\t{%1, %0|%0, %1}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "V2SF")])(define_insn "mmx_pf2iw"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(sign_extend:V2SI	  (ss_truncate:V2HI	    (fix:V2SI	      (match_operand:V2SF 1 "nonimmediate_operand" "ym")))))]  "TARGET_3DNOW_A"  "pf2iw\\t{%1, %0|%0, %1}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "V2SF")])(define_insn "mmx_pi2fw"  [(set (match_operand:V2SF 0 "register_operand" "=y")	(float:V2SF	  (sign_extend:V2SI	    (truncate:V2HI	      (match_operand:V2SI 1 "nonimmediate_operand" "ym")))))]  "TARGET_3DNOW_A"  "pi2fw\\t{%1, %0|%0, %1}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "V2SF")])(define_insn "mmx_floatv2si2"  [(set (match_operand:V2SF 0 "register_operand" "=y")	(float:V2SF (match_operand:V2SI 1 "nonimmediate_operand" "ym")))]  "TARGET_3DNOW"  "pi2fd\\t{%1, %0|%0, %1}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "V2SF")]);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel single-precision floating point element swizzling;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "mmx_pswapdv2sf2"  [(set (match_operand:V2SF 0 "register_operand" "=y")	(vec_select:V2SF (match_operand:V2SF 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" "V2SF")])(define_insn "*vec_dupv2sf"  [(set (match_operand:V2SF 0 "register_operand" "=y")	(vec_duplicate:V2SF	  (match_operand:SF 1 "register_operand" "0")))]  "TARGET_MMX"  "punpckldq\t%0, %0"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "*mmx_concatv2sf"  [(set (match_operand:V2SF 0 "register_operand"     "=y,y")	(vec_concat:V2SF	  (match_operand:SF 1 "nonimmediate_operand" " 0,rm")	  (match_operand:SF 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_setv2sf"  [(match_operand:V2SF 0 "register_operand" "")   (match_operand:SF 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_extractv2sf_0"  [(set (match_operand:SF 0 "nonimmediate_operand"     "=x,y,m,m,frxy")	(vec_select:SF	  (match_operand:V2SF 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 (SFmode, REGNO (op1));  else    op1 = gen_lowpart (SFmode, op1);  emit_move_insn (operands[0], op1);  DONE;})(define_insn "*vec_extractv2sf_1"  [(set (match_operand:SF 0 "nonimmediate_operand"     "=y,x,frxy")	(vec_select:SF	  (match_operand:V2SF 1 "nonimmediate_operand" " 0,0,o")	  (parallel [(const_int 1)])))]  "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"  "@   punpckhdq\t%0, %0   unpckhps\t%0, %0   #"  [(set_attr "type" "mmxcvt,sselog1,*")   (set_attr "mode" "DI,V4SF,SI")])(define_split  [(set (match_operand:SF 0 "register_operand" "")	(vec_select:SF	  (match_operand:V2SF 1 "memory_operand" "")	  (parallel [(const_int 1)])))]  "TARGET_MMX && reload_completed"  [(const_int 0)]{  operands[1] = adjust_address (operands[1], SFmode, 4);  emit_move_insn (operands[0], operands[1]);  DONE;})(define_expand "vec_extractv2sf"  [(match_operand:SF 0 "register_operand" "")   (match_operand:V2SF 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_initv2sf"  [(match_operand:V2SF 0 "register_operand" "")   (match_operand 1 "" "")]  "TARGET_SSE"{  ix86_expand_vector_init (false, operands[0], operands[1]);  DONE;});;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel integral arithmetic;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "mmx_add<mode>3"  [(set (match_operand:MMXMODEI 0 "register_operand" "=y")        (plus:MMXMODEI	  (match_operand:MMXMODEI 1 "nonimmediate_operand" "%0")	  (match_operand:MMXMODEI 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX && ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"  "padd<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_adddi3"  [(set (match_operand:DI 0 "register_operand" "=y")        (unspec:DI	 [(plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0")		   (match_operand:DI 2 "nonimmediate_operand" "ym"))]	 UNSPEC_NOP))]  "TARGET_MMX && ix86_binary_operator_ok (PLUS, DImode, operands)"  "paddq\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_ssadd<mode>3"  [(set (match_operand:MMXMODE12 0 "register_operand" "=y")        (ss_plus:MMXMODE12	  (match_operand:MMXMODE12 1 "nonimmediate_operand" "%0")	  (match_operand:MMXMODE12 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX"  "padds<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_usadd<mode>3"  [(set (match_operand:MMXMODE12 0 "register_operand" "=y")        (us_plus:MMXMODE12	  (match_operand:MMXMODE12 1 "nonimmediate_operand" "%0")	  (match_operand:MMXMODE12 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX"  "paddus<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_sub<mode>3"  [(set (match_operand:MMXMODEI 0 "register_operand" "=y")        (minus:MMXMODEI	  (match_operand:MMXMODEI 1 "register_operand" "0")	  (match_operand:MMXMODEI 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX"  "psub<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_subdi3"  [(set (match_operand:DI 0 "register_operand" "=y")        (unspec:DI	 [(minus:DI (match_operand:DI 1 "register_operand" "0")		    (match_operand:DI 2 "nonimmediate_operand" "ym"))]	 UNSPEC_NOP))]  "TARGET_MMX"  "psubq\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_sssub<mode>3"  [(set (match_operand:MMXMODE12 0 "register_operand" "=y")        (ss_minus:MMXMODE12	  (match_operand:MMXMODE12 1 "register_operand" "0")	  (match_operand:MMXMODE12 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX"  "psubs<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_ussub<mode>3"  [(set (match_operand:MMXMODE12 0 "register_operand" "=y")        (us_minus:MMXMODE12	  (match_operand:MMXMODE12 1 "register_operand" "0")	  (match_operand:MMXMODE12 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX"  "psubus<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_mulv4hi3"  [(set (match_operand:V4HI 0 "register_operand" "=y")        (mult:V4HI (match_operand:V4HI 1 "nonimmediate_operand" "%0")		   (match_operand:V4HI 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX && ix86_binary_operator_ok (MULT, V4HImode, operands)"  "pmullw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxmul")   (set_attr "mode" "DI")])(define_insn "mmx_smulv4hi3_highpart"  [(set (match_operand:V4HI 0 "register_operand" "=y")	(truncate:V4HI	 (lshiftrt:V4SI	  (mult:V4SI (sign_extend:V4SI		      (match_operand:V4HI 1 "nonimmediate_operand" "%0"))		     (sign_extend:V4SI		      (match_operand:V4HI 2 "nonimmediate_operand" "ym")))	  (const_int 16))))]  "TARGET_MMX && ix86_binary_operator_ok (MULT, V4HImode, operands)"  "pmulhw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxmul")   (set_attr "mode" "DI")])(define_insn "mmx_umulv4hi3_highpart"  [(set (match_operand:V4HI 0 "register_operand" "=y")	(truncate:V4HI	 (lshiftrt:V4SI	  (mult:V4SI (zero_extend:V4SI		      (match_operand:V4HI 1 "nonimmediate_operand" "%0"))		     (zero_extend:V4SI		      (match_operand:V4HI 2 "nonimmediate_operand" "ym")))	  (const_int 16))))]  "(TARGET_SSE || TARGET_3DNOW_A)   && ix86_binary_operator_ok (MULT, V4HImode, operands)"  "pmulhuw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxmul")   (set_attr "mode" "DI")])(define_insn "mmx_pmaddwd"  [(set (match_operand:V2SI 0 "register_operand" "=y")        (plus:V2SI	  (mult:V2SI	    (sign_extend:V2SI	      (vec_select:V2HI		(match_operand:V4HI 1 "nonimmediate_operand" "%0")		(parallel [(const_int 0) (const_int 2)])))	    (sign_extend:V2SI	      (vec_select:V2HI		(match_operand:V4HI 2 "nonimmediate_operand" "ym")		(parallel [(const_int 0) (const_int 2)]))))	  (mult:V2SI	    (sign_extend:V2SI	      (vec_select:V2HI (match_dup 1)		(parallel [(const_int 1) (const_int 3)])))	    (sign_extend:V2SI	      (vec_select:V2HI (match_dup 2)		(parallel [(const_int 1) (const_int 3)]))))))]  "TARGET_MMX && ix86_binary_operator_ok (MULT, V4HImode, operands)"  "pmaddwd\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxmul")   (set_attr "mode" "DI")])(define_insn "mmx_pmulhrwv4hi3"  [(set (match_operand:V4HI 0 "register_operand" "=y")	(truncate:V4HI	  (lshiftrt:V4SI	    (plus:V4SI	      (mult:V4SI	        (sign_extend:V4SI		  (match_operand:V4HI 1 "nonimmediate_operand" "%0"))	        (sign_extend:V4SI		  (match_operand:V4HI 2 "nonimmediate_operand" "ym")))	      (const_vector:V4SI [(const_int 32768) (const_int 32768)				  (const_int 32768) (const_int 32768)]))	    (const_int 16))))]  "TARGET_3DNOW && ix86_binary_operator_ok (MULT, V4HImode, operands)"  "pmulhrw\\t{%2, %0|%0, %2}"

⌨️ 快捷键说明

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