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