📄 mmx.md
字号:
[(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 + -