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

📄 mmx.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 4 页
字号:
  [(set_attr "type" "mmxmul")   (set_attr "mode" "DI")])(define_insn "sse2_umulsidi3"  [(set (match_operand:DI 0 "register_operand" "=y")        (mult:DI	  (zero_extend:DI	    (vec_select:SI	      (match_operand:V2SI 1 "nonimmediate_operand" "%0")	      (parallel [(const_int 0)])))	  (zero_extend:DI	    (vec_select:SI	      (match_operand:V2SI 2 "nonimmediate_operand" "ym")	      (parallel [(const_int 0)])))))]  "TARGET_SSE2 && ix86_binary_operator_ok (MULT, V2SImode, operands)"  "pmuludq\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxmul")   (set_attr "mode" "DI")])(define_insn "mmx_umaxv8qi3"  [(set (match_operand:V8QI 0 "register_operand" "=y")        (umax:V8QI (match_operand:V8QI 1 "nonimmediate_operand" "%0")		   (match_operand:V8QI 2 "nonimmediate_operand" "ym")))]  "(TARGET_SSE || TARGET_3DNOW_A)   && ix86_binary_operator_ok (UMAX, V8QImode, operands)"  "pmaxub\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_smaxv4hi3"  [(set (match_operand:V4HI 0 "register_operand" "=y")        (smax:V4HI (match_operand:V4HI 1 "nonimmediate_operand" "%0")		   (match_operand:V4HI 2 "nonimmediate_operand" "ym")))]  "(TARGET_SSE || TARGET_3DNOW_A)   && ix86_binary_operator_ok (SMAX, V4HImode, operands)"  "pmaxsw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_uminv8qi3"  [(set (match_operand:V8QI 0 "register_operand" "=y")        (umin:V8QI (match_operand:V8QI 1 "nonimmediate_operand" "%0")		   (match_operand:V8QI 2 "nonimmediate_operand" "ym")))]  "(TARGET_SSE || TARGET_3DNOW_A)   && ix86_binary_operator_ok (UMIN, V8QImode, operands)"  "pminub\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_sminv4hi3"  [(set (match_operand:V4HI 0 "register_operand" "=y")        (smin:V4HI (match_operand:V4HI 1 "nonimmediate_operand" "%0")		   (match_operand:V4HI 2 "nonimmediate_operand" "ym")))]  "(TARGET_SSE || TARGET_3DNOW_A)   && ix86_binary_operator_ok (SMIN, V4HImode, operands)"  "pminsw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_ashr<mode>3"  [(set (match_operand:MMXMODE24 0 "register_operand" "=y")        (ashiftrt:MMXMODE24	  (match_operand:MMXMODE24 1 "register_operand" "0")	  (match_operand:DI 2 "nonmemory_operand" "yi")))]  "TARGET_MMX"  "psra<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_lshr<mode>3"  [(set (match_operand:MMXMODE24 0 "register_operand" "=y")        (lshiftrt:MMXMODE24	  (match_operand:MMXMODE24 1 "register_operand" "0")	  (match_operand:DI 2 "nonmemory_operand" "yi")))]  "TARGET_MMX"  "psrl<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_lshrdi3"  [(set (match_operand:DI 0 "register_operand" "=y")        (unspec:DI	  [(lshiftrt:DI (match_operand:DI 1 "register_operand" "0")		       (match_operand:DI 2 "nonmemory_operand" "yi"))]	  UNSPEC_NOP))]  "TARGET_MMX"  "psrlq\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_ashl<mode>3"  [(set (match_operand:MMXMODE24 0 "register_operand" "=y")        (ashift:MMXMODE24	  (match_operand:MMXMODE24 1 "register_operand" "0")	  (match_operand:DI 2 "nonmemory_operand" "yi")))]  "TARGET_MMX"  "psll<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_ashldi3"  [(set (match_operand:DI 0 "register_operand" "=y")        (unspec:DI	 [(ashift:DI (match_operand:DI 1 "register_operand" "0")		     (match_operand:DI 2 "nonmemory_operand" "yi"))]	 UNSPEC_NOP))]  "TARGET_MMX"  "psllq\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")]);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel integral comparisons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "mmx_eq<mode>3"  [(set (match_operand:MMXMODEI 0 "register_operand" "=y")        (eq:MMXMODEI	  (match_operand:MMXMODEI 1 "nonimmediate_operand" "%0")	  (match_operand:MMXMODEI 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX && ix86_binary_operator_ok (EQ, <MODE>mode, operands)"  "pcmpeq<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcmp")   (set_attr "mode" "DI")])(define_insn "mmx_gt<mode>3"  [(set (match_operand:MMXMODEI 0 "register_operand" "=y")        (gt:MMXMODEI	  (match_operand:MMXMODEI 1 "register_operand" "0")	  (match_operand:MMXMODEI 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX"  "pcmpgt<mmxvecsize>\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcmp")   (set_attr "mode" "DI")]);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel integral logical operations;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "mmx_and<mode>3"  [(set (match_operand:MMXMODEI 0 "register_operand" "=y")	(and:MMXMODEI	  (match_operand:MMXMODEI 1 "nonimmediate_operand" "%0")	  (match_operand:MMXMODEI 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX && ix86_binary_operator_ok (AND, <MODE>mode, operands)"  "pand\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_nand<mode>3"  [(set (match_operand:MMXMODEI 0 "register_operand" "=y")	(and:MMXMODEI	  (not:MMXMODEI (match_operand:MMXMODEI 1 "register_operand" "0"))	  (match_operand:MMXMODEI 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX"  "pandn\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_ior<mode>3"  [(set (match_operand:MMXMODEI 0 "register_operand" "=y")        (ior:MMXMODEI	  (match_operand:MMXMODEI 1 "nonimmediate_operand" "%0")	  (match_operand:MMXMODEI 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX && ix86_binary_operator_ok (IOR, <MODE>mode, operands)"  "por\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")])(define_insn "mmx_xor<mode>3"  [(set (match_operand:MMXMODEI 0 "register_operand" "=y")	(xor:MMXMODEI	  (match_operand:MMXMODEI 1 "nonimmediate_operand" "%0")	  (match_operand:MMXMODEI 2 "nonimmediate_operand" "ym")))]  "TARGET_MMX && ix86_binary_operator_ok (XOR, <MODE>mode, operands)"  "pxor\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxadd")   (set_attr "mode" "DI")   (set_attr "memory" "none")]);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Parallel integral element swizzling;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(define_insn "mmx_packsswb"  [(set (match_operand:V8QI 0 "register_operand" "=y")	(vec_concat:V8QI	  (ss_truncate:V4QI	    (match_operand:V4HI 1 "register_operand" "0"))	  (ss_truncate:V4QI	    (match_operand:V4HI 2 "nonimmediate_operand" "ym"))))]  "TARGET_MMX"  "packsswb\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_packssdw"  [(set (match_operand:V4HI 0 "register_operand" "=y")	(vec_concat:V4HI	  (ss_truncate:V2HI	    (match_operand:V2SI 1 "register_operand" "0"))	  (ss_truncate:V2HI	    (match_operand:V2SI 2 "nonimmediate_operand" "ym"))))]  "TARGET_MMX"  "packssdw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_packuswb"  [(set (match_operand:V8QI 0 "register_operand" "=y")	(vec_concat:V8QI	  (us_truncate:V4QI	    (match_operand:V4HI 1 "register_operand" "0"))	  (us_truncate:V4QI	    (match_operand:V4HI 2 "nonimmediate_operand" "ym"))))]  "TARGET_MMX"  "packuswb\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxshft")   (set_attr "mode" "DI")])(define_insn "mmx_punpckhbw"  [(set (match_operand:V8QI 0 "register_operand" "=y")	(vec_select:V8QI	  (vec_concat:V16QI	    (match_operand:V8QI 1 "register_operand" "0")	    (match_operand:V8QI 2 "nonimmediate_operand" "ym"))          (parallel [(const_int 4) (const_int 12)                     (const_int 5) (const_int 13)                     (const_int 6) (const_int 14)                     (const_int 7) (const_int 15)])))]  "TARGET_MMX"  "punpckhbw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "mmx_punpcklbw"  [(set (match_operand:V8QI 0 "register_operand" "=y")	(vec_select:V8QI	  (vec_concat:V16QI	    (match_operand:V8QI 1 "register_operand" "0")	    (match_operand:V8QI 2 "nonimmediate_operand" "ym"))          (parallel [(const_int 0) (const_int 8)                     (const_int 1) (const_int 9)                     (const_int 2) (const_int 10)                     (const_int 3) (const_int 11)])))]  "TARGET_MMX"  "punpcklbw\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "mmx_punpckhwd"  [(set (match_operand:V4HI 0 "register_operand" "=y")	(vec_select:V4HI	  (vec_concat:V8HI	    (match_operand:V4HI 1 "register_operand" "0")	    (match_operand:V4HI 2 "nonimmediate_operand" "ym"))          (parallel [(const_int 2) (const_int 6)                     (const_int 3) (const_int 7)])))]  "TARGET_MMX"  "punpckhwd\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "mmx_punpcklwd"  [(set (match_operand:V4HI 0 "register_operand" "=y")	(vec_select:V4HI	  (vec_concat:V8HI	    (match_operand:V4HI 1 "register_operand" "0")	    (match_operand:V4HI 2 "nonimmediate_operand" "ym"))          (parallel [(const_int 0) (const_int 4)                     (const_int 1) (const_int 5)])))]  "TARGET_MMX"  "punpcklwd\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "mmx_punpckhdq"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(vec_select:V2SI	  (vec_concat:V4SI	    (match_operand:V2SI 1 "register_operand" "0")	    (match_operand:V2SI 2 "nonimmediate_operand" "ym"))	  (parallel [(const_int 1)		     (const_int 3)])))]  "TARGET_MMX"  "punpckhdq\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "mmx_punpckldq"  [(set (match_operand:V2SI 0 "register_operand" "=y")	(vec_select:V2SI	  (vec_concat:V4SI	    (match_operand:V2SI 1 "register_operand" "0")	    (match_operand:V2SI 2 "nonimmediate_operand" "ym"))	  (parallel [(const_int 0)		     (const_int 2)])))]  "TARGET_MMX"  "punpckldq\t{%2, %0|%0, %2}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_expand "mmx_pinsrw"  [(set (match_operand:V4HI 0 "register_operand" "")        (vec_merge:V4HI          (vec_duplicate:V4HI            (match_operand:SI 2 "nonimmediate_operand" ""))	  (match_operand:V4HI 1 "register_operand" "")          (match_operand:SI 3 "const_0_to_3_operand" "")))]  "TARGET_SSE || TARGET_3DNOW_A"{  operands[2] = gen_lowpart (HImode, operands[2]);  operands[3] = GEN_INT (1 << INTVAL (operands[3]));})(define_insn "*mmx_pinsrw"  [(set (match_operand:V4HI 0 "register_operand" "=y")        (vec_merge:V4HI          (vec_duplicate:V4HI            (match_operand:HI 2 "nonimmediate_operand" "rm"))	  (match_operand:V4HI 1 "register_operand" "0")          (match_operand:SI 3 "const_pow2_1_to_8_operand" "n")))]  "TARGET_SSE || TARGET_3DNOW_A"{  operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));  return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";}  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_insn "mmx_pextrw"  [(set (match_operand:SI 0 "register_operand" "=r")        (zero_extend:SI	  (vec_select:HI	    (match_operand:V4HI 1 "register_operand" "y")	    (parallel [(match_operand:SI 2 "const_0_to_3_operand" "n")]))))]  "TARGET_SSE || TARGET_3DNOW_A"  "pextrw\t{%2, %1, %0|%0, %1, %2}"  [(set_attr "type" "mmxcvt")   (set_attr "mode" "DI")])(define_expand "mmx_pshufw"  [(match_operand:V4HI 0 "register_operand" "")   (match_operand:V4HI 1 "nonimmediate_operand" "")   (match_operand:SI 2 "const_int_operand" "")]  "TARGET_SSE || TARGET_3DNOW_A"{  int mask = INTVAL (operands[2]);  emit_insn (gen_mmx_pshufw_1 (operands[0], operands[1],                               GEN_INT ((mask >> 0) & 3),                               GEN_INT ((mask >> 2) & 3),                               GEN_INT ((mask >> 4) & 3),                               GEN_INT ((mask >> 6) & 3)));

⌨️ 快捷键说明

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