📄 altivec.md
字号:
"TARGET_ALTIVEC" "vrefp %0, %1" [(set_attr "type" "vecfloat")])(define_insn "altivec_vsel_4si" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") (match_operand:V4SI 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 159))] "TARGET_ALTIVEC" "vsel %0,%1,%2,%3" [(set_attr "type" "vecperm")])(define_insn "altivec_vsel_4sf" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v") (match_operand:V4SF 2 "register_operand" "v") (match_operand:V4SI 3 "register_operand" "v")] 160))] "TARGET_ALTIVEC" "vsel %0,%1,%2,%3" [(set_attr "type" "vecperm")])(define_insn "altivec_vsel_8hi" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") (match_operand:V8HI 2 "register_operand" "v") (match_operand:V8HI 3 "register_operand" "v")] 161))] "TARGET_ALTIVEC" "vsel %0,%1,%2,%3" [(set_attr "type" "vecperm")])(define_insn "altivec_vsel_16qi" [(set (match_operand:V16QI 0 "register_operand" "=v") (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") (match_operand:V16QI 2 "register_operand" "v") (match_operand:V16QI 3 "register_operand" "v")] 162))] "TARGET_ALTIVEC" "vsel %0,%1,%2,%3" [(set_attr "type" "vecperm")])(define_insn "altivec_vsldoi_4si" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "v") (match_operand:V4SI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 163))] "TARGET_ALTIVEC" "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")])(define_insn "altivec_vsldoi_4sf" [(set (match_operand:V4SF 0 "register_operand" "=v") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "v") (match_operand:V4SF 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 164))] "TARGET_ALTIVEC" "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")])(define_insn "altivec_vsldoi_8hi" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V8HI 1 "register_operand" "v") (match_operand:V8HI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 165))] "TARGET_ALTIVEC" "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")])(define_insn "altivec_vsldoi_16qi" [(set (match_operand:V16QI 0 "register_operand" "=v") (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v") (match_operand:V16QI 2 "register_operand" "v") (match_operand:QI 3 "immediate_operand" "i")] 166))] "TARGET_ALTIVEC" "vsldoi %0, %1, %2, %3" [(set_attr "type" "vecperm")])(define_insn "altivec_vupkhsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 167))] "TARGET_ALTIVEC" "vupkhsb %0, %1" [(set_attr "type" "vecperm")])(define_insn "altivec_vupkhpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 168))] "TARGET_ALTIVEC" "vupkhpx %0, %1" [(set_attr "type" "vecperm")])(define_insn "altivec_vupkhsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 169))] "TARGET_ALTIVEC" "vupkhsh %0, %1" [(set_attr "type" "vecperm")])(define_insn "altivec_vupklsb" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec:V8HI [(match_operand:V16QI 1 "register_operand" "v")] 170))] "TARGET_ALTIVEC" "vupklsb %0, %1" [(set_attr "type" "vecperm")])(define_insn "altivec_vupklpx" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 171))] "TARGET_ALTIVEC" "vupklpx %0, %1" [(set_attr "type" "vecperm")])(define_insn "altivec_vupklsh" [(set (match_operand:V4SI 0 "register_operand" "=v") (unspec:V4SI [(match_operand:V8HI 1 "register_operand" "v")] 172))] "TARGET_ALTIVEC" "vupklsh %0, %1" [(set_attr "type" "vecperm")]);; AltiVec predicates.(define_expand "cr6_test_for_zero" [(set (match_operand:SI 0 "register_operand" "=r") (eq:SI (reg:CC 74) (const_int 0)))] "TARGET_ALTIVEC" "") (define_expand "cr6_test_for_zero_reverse" [(set (match_operand:SI 0 "register_operand" "=r") (eq:SI (reg:CC 74) (const_int 0))) (set (match_dup 0) (minus:SI (const_int 1) (match_dup 0)))] "TARGET_ALTIVEC" "")(define_expand "cr6_test_for_lt" [(set (match_operand:SI 0 "register_operand" "=r") (lt:SI (reg:CC 74) (const_int 0)))] "TARGET_ALTIVEC" "")(define_expand "cr6_test_for_lt_reverse" [(set (match_operand:SI 0 "register_operand" "=r") (lt:SI (reg:CC 74) (const_int 0))) (set (match_dup 0) (minus:SI (const_int 1) (match_dup 0)))] "TARGET_ALTIVEC" "");; We can get away with generating the opcode on the fly (%3 below);; because all the predicates have the same scheduling parameters.(define_insn "altivec_predicate_v4si" [(set (reg:CC 74) (unspec:CC [(match_operand:V4SI 1 "register_operand" "v") (match_operand:V4SI 2 "register_operand" "v") (match_operand 3 "any_operand" "")] 173)) (clobber (match_scratch:V4SI 0 "=v"))] "TARGET_ALTIVEC" "%3 %0,%1,%2"[(set_attr "type" "veccmp")])(define_insn "altivec_predicate_v4sf" [(set (reg:CC 74) (unspec:CC [(match_operand:V4SF 1 "register_operand" "v") (match_operand:V4SF 2 "register_operand" "v") (match_operand 3 "any_operand" "")] 174)) (clobber (match_scratch:V4SF 0 "=v"))] "TARGET_ALTIVEC" "%3 %0,%1,%2"[(set_attr "type" "veccmp")])(define_insn "altivec_predicate_v8hi" [(set (reg:CC 74) (unspec:CC [(match_operand:V8HI 1 "register_operand" "v") (match_operand:V8HI 2 "register_operand" "v") (match_operand 3 "any_operand" "")] 175)) (clobber (match_scratch:V8HI 0 "=v"))] "TARGET_ALTIVEC" "%3 %0,%1,%2"[(set_attr "type" "veccmp")])(define_insn "altivec_predicate_v16qi" [(set (reg:CC 74) (unspec:CC [(match_operand:V16QI 1 "register_operand" "v") (match_operand:V16QI 2 "register_operand" "v") (match_operand 3 "any_operand" "")] 175)) (clobber (match_scratch:V16QI 0 "=v"))] "TARGET_ALTIVEC" "%3 %0,%1,%2"[(set_attr "type" "veccmp")])(define_insn "altivec_mtvscr" [(set (reg:SI 110) (unspec_volatile:SI [(match_operand:V4SI 0 "register_operand" "v")] 186))] "TARGET_ALTIVEC" "mtvscr %0" [(set_attr "type" "vecsimple")])(define_insn "altivec_mfvscr" [(set (match_operand:V8HI 0 "register_operand" "=v") (unspec_volatile:V8HI [(reg:SI 110)] 187))] "TARGET_ALTIVEC" "mfvscr %0" [(set_attr "type" "vecsimple")])(define_insn "altivec_dssall" [(unspec [(const_int 0)] 188)] "TARGET_ALTIVEC" "dssall" [(set_attr "type" "vecsimple")])(define_insn "altivec_dss" [(unspec [(match_operand:QI 0 "immediate_operand" "i")] 189)] "TARGET_ALTIVEC" "dss %0" [(set_attr "type" "vecsimple")])(define_insn "altivec_dst" [(unspec [(match_operand:SI 0 "register_operand" "b") (match_operand:SI 1 "register_operand" "r") (match_operand:QI 2 "immediate_operand" "i")] 190)] "TARGET_ALTIVEC" "dst %0,%1,%2" [(set_attr "type" "vecsimple")])(define_insn "altivec_dstt" [(unspec [(match_operand:SI 0 "register_operand" "b") (match_operand:SI 1 "register_operand" "r") (match_operand:QI 2 "immediate_operand" "i")] 191)] "TARGET_ALTIVEC" "dstt %0,%1,%2" [(set_attr "type" "vecsimple")])(define_insn "altivec_dstst" [(unspec [(match_operand:SI 0 "register_operand" "b") (match_operand:SI 1 "register_operand" "r") (match_operand:QI 2 "immediate_operand" "i")] 192)] "TARGET_ALTIVEC" "dstst %0,%1,%2" [(set_attr "type" "vecsimple")])(define_insn "altivec_dststt" [(unspec [(match_operand:SI 0 "register_operand" "b") (match_operand:SI 1 "register_operand" "r") (match_operand:QI 2 "immediate_operand" "i")] 193)] "TARGET_ALTIVEC" "dststt %0,%1,%2" [(set_attr "type" "vecsimple")])(define_insn "altivec_lvsl" [(set (match_operand:V16QI 0 "register_operand" "=v") (unspec:V16QI [(match_operand:SI 1 "register_operand" "b") (match_operand:SI 2 "register_operand" "r")] 194))] "TARGET_ALTIVEC" "lvsl %0,%1,%2" [(set_attr "type" "vecload")])(define_insn "altivec_lvsr" [(set (match_operand:V16QI 0 "register_operand" "=v") (unspec:V16QI [(match_operand:SI 1 "register_operand" "b") (match_operand:SI 2 "register_operand" "r")] 195))] "TARGET_ALTIVEC" "lvsr %0,%1,%2" [(set_attr "type" "vecload")]);; Parallel some of the LVE* and STV*'s with unspecs because some have;; identical rtl but different instructions-- and gcc gets confused.(define_insn "altivec_lvebx" [(parallel [(set (match_operand:V16QI 0 "register_operand" "=v") (mem:V16QI (plus:SI (match_operand:SI 1 "register_operand" "b") (match_operand:SI 2 "register_operand" "r")))) (unspec [(const_int 0)] 196)])] "TARGET_ALTIVEC" "lvebx %0,%1,%2" [(set_attr "type" "vecload")])(define_insn "altivec_lvehx" [(parallel [(set (match_operand:V8HI 0 "register_operand" "=v") (mem:V8HI (and:SI (plus:SI (match_operand:SI 1 "register_operand" "b") (match_operand:SI 2 "register_operand" "r")) (const_int -2)))) (unspec [(const_int 0)] 197)])] "TARGET_ALTIVEC" "lvehx %0,%1,%2" [(set_attr "type" "vecload")])(define_insn "altivec_lvewx" [(parallel [(set (match_operand:V4SI 0 "register_operand" "=v") (mem:V4SI (and:SI (plus:SI (match_operand:SI 1 "register_operand" "b") (match_operand:SI 2 "register_operand" "r")) (const_int -4)))) (unspec [(const_int 0)] 198)])] "TARGET_ALTIVEC" "lvewx %0,%1,%2" [(set_attr "type" "vecload")])(define_insn "altivec_lvxl" [(parallel [(set (match_operand:V4SI 0 "register_operand" "=v") (mem:V4SI (plus:SI (match_operand:SI 1 "register_operand" "b") (match_operand:SI 2 "register_operand" "r")))) (unspec [(const_int 0)] 213)])] "TARGET_ALTIVEC" "lvxl %0,%1,%2" [(set_attr "type" "vecload")])(define_insn "altivec_lvx" [(set (match_operand:V4SI 0 "register_operand" "=v") (mem:V4SI (plus:SI (match_operand:SI 1 "register_operand" "b") (match_operand:SI 2 "register_operand" "r"))))] "TARGET_ALTIVEC" "lvx %0,%1,%2" [(set_attr "type" "vecload")])(define_insn "altivec_stvx" [(parallel [(set (mem:V4SI (and:SI (plus:SI (match_operand:SI 0 "register_operand" "b") (match_operand:SI 1 "register_operand" "r")) (const_int -16))) (match_operand:V4SI 2 "register_operand" "v")) (unspec [(const_int 0)] 201)])] "TARGET_ALTIVEC" "stvx %2,%0,%1" [(set_attr "type" "vecstore")])(define_insn "altivec_stvxl" [(parallel [(set (mem:V4SI (and:SI (plus:SI (match_operand:SI 0 "register_operand" "b") (match_operand:SI 1 "register_operand" "r")) (const_int -16))) (match_operand:V4SI 2 "register_operand" "v")) (unspec [(const_int 0)] 202)])] "TARGET_ALTIVEC" "stvxl %2,%0,%1" [(set_attr "type" "vecstore")])(define_insn "altivec_stvebx" [(parallel [(set (mem:V16QI (plus:SI (match_operand:SI 0 "register_operand" "b") (match_operand:SI 1 "register_operand" "r"))) (match_operand:V16QI 2 "register_operand" "v")) (unspec [(const_int 0)] 203)])] "TARGET_ALTIVEC" "stvebx %2,%0,%1" [(set_attr "type" "vecstore")])(define_insn "altivec_stvehx" [(parallel [(set (mem:V8HI (and:SI (plus:SI (match_operand:SI 0 "register_operand" "b") (match_operand:SI 1 "register_operand" "r")) (const_int -2))) (match_o
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -