📄 ia64.md
字号:
(and:BI (not:BI (match_operator:BI 3 "signed_inequality_operator" [(match_operand:DI 2 "gr_register_operand" "r") (const_int 0)])) (match_operand:BI 1 "register_operand" "0")))] "" "cmp.%C3.or.andcm %I0, %0 = r0, %2" [(set_attr "itanium_class" "icmp")])(define_insn "*tbit_and_0" [(set (match_operand:BI 0 "register_operand" "=c") (and:BI (ne:BI (and:DI (match_operand:DI 1 "gr_register_operand" "r") (const_int 1)) (const_int 0)) (match_operand:BI 2 "register_operand" "0")))] "" "tbit.nz.and.orcm %0, %I0 = %1, 0" [(set_attr "itanium_class" "tbit")])(define_insn "*tbit_and_1" [(set (match_operand:BI 0 "register_operand" "=c") (and:BI (eq:BI (and:DI (match_operand:DI 1 "gr_register_operand" "r") (const_int 1)) (const_int 0)) (match_operand:BI 2 "register_operand" "0")))] "" "tbit.z.and.orcm %0, %I0 = %1, 0" [(set_attr "itanium_class" "tbit")])(define_insn "*tbit_and_2" [(set (match_operand:BI 0 "register_operand" "=c") (and:BI (ne:BI (zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r") (const_int 1) (match_operand:DI 2 "const_int_operand" "n")) (const_int 0)) (match_operand:BI 3 "register_operand" "0")))] "" "tbit.nz.and.orcm %0, %I0 = %1, %2" [(set_attr "itanium_class" "tbit")])(define_insn "*tbit_and_3" [(set (match_operand:BI 0 "register_operand" "=c") (and:BI (eq:BI (zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r") (const_int 1) (match_operand:DI 2 "const_int_operand" "n")) (const_int 0)) (match_operand:BI 3 "register_operand" "0")))] "" "tbit.z.and.orcm %0, %I0 = %1, %2" [(set_attr "itanium_class" "tbit")])(define_insn "*cmpsi_or_0" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (match_operator:BI 4 "predicate_operator" [(match_operand:SI 2 "gr_reg_or_0_operand" "rO") (match_operand:SI 3 "gr_reg_or_8bit_operand" "rK")]) (match_operand:BI 1 "register_operand" "0")))] "" "cmp4.%C4.or.andcm %0, %I0 = %3, %r2" [(set_attr "itanium_class" "icmp")])(define_insn "*cmpsi_or_1" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (match_operator:BI 3 "signed_inequality_operator" [(match_operand:SI 2 "gr_register_operand" "r") (const_int 0)]) (match_operand:BI 1 "register_operand" "0")))] "" "cmp4.%C3.or.andcm %0, %I0 = r0, %2" [(set_attr "itanium_class" "icmp")])(define_insn "*cmpsi_orcm_0" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (not:BI (match_operator:BI 4 "predicate_operator" [(match_operand:SI 2 "gr_reg_or_0_operand" "rO") (match_operand:SI 3 "gr_reg_or_8bit_operand" "rK")])) (match_operand:BI 1 "register_operand" "0")))] "" "cmp4.%C4.and.orcm %I0, %0 = %3, %r2" [(set_attr "itanium_class" "icmp")])(define_insn "*cmpsi_orcm_1" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (not:BI (match_operator:BI 3 "signed_inequality_operator" [(match_operand:SI 2 "gr_register_operand" "r") (const_int 0)])) (match_operand:BI 1 "register_operand" "0")))] "" "cmp4.%C3.and.orcm %I0, %0 = r0, %2" [(set_attr "itanium_class" "icmp")])(define_insn "*cmpdi_or_0" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (match_operator:BI 4 "predicate_operator" [(match_operand:DI 2 "gr_register_operand" "r") (match_operand:DI 3 "gr_reg_or_8bit_operand" "rK")]) (match_operand:BI 1 "register_operand" "0")))] "" "cmp.%C4.or.andcm %0, %I0 = %3, %2" [(set_attr "itanium_class" "icmp")])(define_insn "*cmpdi_or_1" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (match_operator:BI 3 "signed_inequality_operator" [(match_operand:DI 2 "gr_register_operand" "r") (const_int 0)]) (match_operand:BI 1 "register_operand" "0")))] "" "cmp.%C3.or.andcm %0, %I0 = r0, %2" [(set_attr "itanium_class" "icmp")])(define_insn "*cmpdi_orcm_0" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (not:BI (match_operator:BI 4 "predicate_operator" [(match_operand:DI 2 "gr_register_operand" "r") (match_operand:DI 3 "gr_reg_or_8bit_operand" "rK")])) (match_operand:BI 1 "register_operand" "0")))] "" "cmp.%C4.and.orcm %I0, %0 = %3, %2" [(set_attr "itanium_class" "icmp")])(define_insn "*cmpdi_orcm_1" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (not:BI (match_operator:BI 3 "signed_inequality_operator" [(match_operand:DI 2 "gr_register_operand" "r") (const_int 0)])) (match_operand:BI 1 "register_operand" "0")))] "" "cmp.%C3.and.orcm %I0, %0 = r0, %2" [(set_attr "itanium_class" "icmp")])(define_insn "*tbit_or_0" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (ne:BI (and:DI (match_operand:DI 1 "gr_register_operand" "r") (const_int 1)) (const_int 0)) (match_operand:BI 2 "register_operand" "0")))] "" "tbit.nz.or.andcm %0, %I0 = %1, 0" [(set_attr "itanium_class" "tbit")])(define_insn "*tbit_or_1" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (eq:BI (and:DI (match_operand:DI 1 "gr_register_operand" "r") (const_int 1)) (const_int 0)) (match_operand:BI 2 "register_operand" "0")))] "" "tbit.z.or.andcm %0, %I0 = %1, 0" [(set_attr "itanium_class" "tbit")])(define_insn "*tbit_or_2" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (ne:BI (zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r") (const_int 1) (match_operand:DI 2 "const_int_operand" "n")) (const_int 0)) (match_operand:BI 3 "register_operand" "0")))] "" "tbit.nz.or.andcm %0, %I0 = %1, %2" [(set_attr "itanium_class" "tbit")])(define_insn "*tbit_or_3" [(set (match_operand:BI 0 "register_operand" "=c") (ior:BI (eq:BI (zero_extract:DI (match_operand:DI 1 "gr_register_operand" "r") (const_int 1) (match_operand:DI 2 "const_int_operand" "n")) (const_int 0)) (match_operand:BI 3 "register_operand" "0")))] "" "tbit.z.or.andcm %0, %I0 = %1, %2" [(set_attr "itanium_class" "tbit")]);; Transform test of and/or of setcc into parallel comparisons.(define_split [(set (match_operand:BI 0 "register_operand" "") (ne:BI (and:DI (ne:DI (match_operand:BI 2 "register_operand" "") (const_int 0)) (match_operand:DI 3 "register_operand" "")) (const_int 0)))] "" [(set (match_dup 0) (and:BI (ne:BI (and:DI (match_dup 3) (const_int 1)) (const_int 0)) (match_dup 2)))] "")(define_split [(set (match_operand:BI 0 "register_operand" "") (eq:BI (and:DI (ne:DI (match_operand:BI 2 "register_operand" "") (const_int 0)) (match_operand:DI 3 "register_operand" "")) (const_int 0)))] "" [(set (match_dup 0) (and:BI (ne:BI (and:DI (match_dup 3) (const_int 1)) (const_int 0)) (match_dup 2))) (parallel [(set (match_dup 0) (not:BI (match_dup 0))) (clobber (scratch))])] "")(define_split [(set (match_operand:BI 0 "register_operand" "") (ne:BI (ior:DI (ne:DI (match_operand:BI 2 "register_operand" "") (const_int 0)) (match_operand:DI 3 "register_operand" "")) (const_int 0)))] "" [(set (match_dup 0) (ior:BI (ne:BI (match_dup 3) (const_int 0)) (match_dup 2)))] "")(define_split [(set (match_operand:BI 0 "register_operand" "") (eq:BI (ior:DI (ne:DI (match_operand:BI 2 "register_operand" "") (const_int 0)) (match_operand:DI 3 "register_operand" "")) (const_int 0)))] "" [(set (match_dup 0) (ior:BI (ne:BI (match_dup 3) (const_int 0)) (match_dup 2))) (parallel [(set (match_dup 0) (not:BI (match_dup 0))) (clobber (scratch))])] "");; ??? Incredibly hackish. Either need four proper patterns with all;; the alternatives, or rely on sched1 to split the insn and hope that;; nothing bad happens to the comparisons in the meantime.;;;; Alternately, adjust combine to allow 2->2 and 3->3 splits, assuming;; that we're doing height reduction.;;(define_insn_and_split ""; [(set (match_operand:BI 0 "register_operand" "=c"); (and:BI (and:BI (match_operator:BI 1 "comparison_operator"; [(match_operand 2 "" ""); (match_operand 3 "" "")]); (match_operator:BI 4 "comparison_operator"; [(match_operand 5 "" ""); (match_operand 6 "" "")])); (match_dup 0)))]; "flag_schedule_insns"; "#"; ""; [(set (match_dup 0) (and:BI (match_dup 1) (match_dup 0))); (set (match_dup 0) (and:BI (match_dup 4) (match_dup 0)))]; "");;(define_insn_and_split ""; [(set (match_operand:BI 0 "register_operand" "=c"); (ior:BI (ior:BI (match_operator:BI 1 "comparison_operator"; [(match_operand 2 "" ""); (match_operand 3 "" "")]); (match_operator:BI 4 "comparison_operator"; [(match_operand 5 "" ""); (match_operand 6 "" "")])); (match_dup 0)))]; "flag_schedule_insns"; "#"; ""; [(set (match_dup 0) (ior:BI (match_dup 1) (match_dup 0))); (set (match_dup 0) (ior:BI (match_dup 4) (match_dup 0)))]; "");;(define_split; [(set (match_operand:BI 0 "register_operand" ""); (and:BI (and:BI (match_operator:BI 1 "comparison_operator"; [(match_operand 2 "" ""); (match_operand 3 "" "")]); (match_operand:BI 7 "register_operand" "")); (and:BI (match_operator:BI 4 "comparison_operator"; [(match_operand 5 "" ""); (match_operand 6 "" "")]); (match_operand:BI 8 "register_operand" ""))))]; ""; [(set (match_dup 0) (and:BI (match_dup 7) (match_dup 8))); (set (match_dup 0) (and:BI (and:BI (match_dup 1) (match_dup 4)); (match_dup 0)))]; "");;(define_split; [(set (match_operand:BI 0 "register_operand" ""); (ior:BI (ior:BI (match_operator:BI 1 "comparison_operator"; [(match_operand 2 "" ""); (match_operand 3 "" "")]); (match_operand:BI 7 "register_operand" "")); (ior:BI (match_operator:BI 4 "comparison_operator"; [(match_operand 5 "" ""); (match_operand 6 "" "")]); (match_operand:BI 8 "register_operand" ""))))]; ""; [(set (match_dup 0) (ior:BI (match_dup 7) (match_dup 8))); (set (match_dup 0) (ior:BI (ior:BI (match_dup 1) (match_dup 4)); (match_dup 0)))]; "");; Try harder to avoid predicate copies by duplicating compares.;; Note that we'll have already split the predicate copy, which;; is kind of a pain, but oh well.(define_peephole2 [(set (match_operand:BI 0 "register_operand" "") (match_operand:BI 1 "comparison_operator" "")) (set (match_operand:CCI 2 "register_operand" "") (match_operand:CCI 3 "register_operand" "")) (set (match_operand:CCI 4 "register_operand" "") (match_operand:CCI 5 "register_operand" "")) (set (match_operand:BI 6 "register_operand" "") (unspec:BI [(match_dup 6)] UNSPEC_PRED_REL_MUTEX))] "REGNO (operands[3]) == REGNO (operands[0]) && REGNO (operands[4]) == REGNO (operands[0]) + 1 && REGNO (operands[4]) == REGNO (operands[2]) + 1 && REGNO (operands[6]) == REGNO (operands[2])" [(set (match_dup 0) (match_dup 1)) (set (match_dup 6) (match_dup 7))] "operands[7] = copy_rtx (operands[1]);");; ::::::::::::::::::::;; ::;; :: 16 bit Integer arithmetic;; ::;; ::::::::::::::::::::(define_insn "mulhi3" [(set (match_operand:HI 0 "gr_register_operand" "=r") (mult:HI (match_operand:HI 1 "gr_register_operand" "r") (match_operand:HI 2 "gr_register_operand" "r")))] "" "pmpy2.r %0 = %1, %2" [(set_attr "itanium_class" "mmmul")]);; ::::::::::::::::::::;; ::;; :: 32 bit Integer arithmetic;; ::;; ::::::::::::::::::::(define_insn "addsi3" [(set (match_operand:SI 0 "gr_register_operand" "=r,r,r") (plus:SI (match_operand:SI 1 "gr_register_operand" "%r,r,a") (match_operand:SI 2 "gr_reg_or_22bit_operand" "r,I,J")))] "" "@ add %0 = %1, %2 adds %0 = %2, %1 addl %0 = %2, %1" [(set_attr "itanium_class" "ialu")])(define_insn "*addsi3_plus1" [(set (match_operand:SI 0 "gr_register_operand" "=r") (plus:SI (plus:SI (match_operand:SI 1 "gr_register_operand" "r") (match_operand:SI 2 "gr_register_operand" "r")) (const_int 1)))] "" "add %0 = %1, %2, 1" [(set_attr "itanium_class" "ialu")])(define_insn "*addsi3_plus1_alt" [(set (match_operand:SI 0 "gr_register_operand" "=r") (plus:SI (mult:SI (match_operand:SI 1 "gr_register_operand" "r") (const_int 2)) (const_int 1)))] "" "add %0 = %1, %1, 1" [(set_attr "itanium_class" "ialu")])(define_insn "*addsi3_shladd" [(set (match_operand:SI 0 "gr_register_operand" "=r") (plus:SI (mult:SI (match_operand:SI 1 "gr_register_operand" "r") (match_operand:SI 2 "shladd_operand" "n")) (match_operand:SI 3 "gr_register_operand" "r")))] "" "shladd %0 = %1, %S2, %3" [(set_attr "itanium_class" "ialu")])(define_insn "subsi3" [(set (match_operand:SI 0 "gr_register_operand" "=r") (minus:SI (match_operand:SI 1 "gr_reg_or_8bit_operand" "rK") (match_operand:SI 2 "gr_register_opera
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -