📄 alpha.md
字号:
(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (match_operand:DI 2 "mode_width_operand" "n") (ashift:DI (match_operand:DI 3 "reg_or_8bit_operand" "rI") (const_int 3))))] "" "ext%M2l %r1,%3,%0" [(set_attr "type" "shift")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (minus:DI (const_int 56) (ashift:DI (and:DI (plus:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int -1)) (const_int 7)) (const_int 3)))))] "" "extqh %r1,%2,%0" [(set_attr "type" "shift")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (const_int 2147483647)) (minus:DI (const_int 56) (ashift:DI (and:DI (plus:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int -1)) (const_int 7)) (const_int 3)))))] "" "extlh %r1,%2,%0" [(set_attr "type" "shift")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (const_int 65535)) (minus:DI (const_int 56) (ashift:DI (and:DI (plus:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int -1)) (const_int 7)) (const_int 3)))))] "" "extwh %r1,%2,%0" [(set_attr "type" "shift")]);; This converts an extXl into an extXh with an appropriate adjustment;; to the address calculation.;;(define_split;; [(set (match_operand:DI 0 "register_operand" "");; (ashift:DI (zero_extract:DI (match_operand:DI 1 "register_operand" "");; (match_operand:DI 2 "mode_width_operand" "");; (ashift:DI (match_operand:DI 3 "" "");; (const_int 3)));; (match_operand:DI 4 "const_int_operand" "")));; (clobber (match_operand:DI 5 "register_operand" ""))];; "INTVAL (operands[4]) == 64 - INTVAL (operands[2])";; [(set (match_dup 5) (match_dup 6));; (set (match_dup 0);; (ashift:DI (zero_extract:DI (match_dup 1) (match_dup 2);; (ashift:DI (plus:DI (match_dup 5);; (match_dup 7));; (const_int 3)));; (match_dup 4)))];; ";;{;; operands[6] = plus_constant (operands[3], ;; INTVAL (operands[2]) / BITS_PER_UNIT);;; operands[7] = GEN_INT (- INTVAL (operands[2]) / BITS_PER_UNIT);;;}") (define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r")) (match_operand:DI 2 "mul8_operand" "I")))] "" "insbl %1,%s2,%0" [(set_attr "type" "shift")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r")) (match_operand:DI 2 "mul8_operand" "I")))] "" "inswl %1,%s2,%0" [(set_attr "type" "shift")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r")) (match_operand:DI 2 "mul8_operand" "I")))] "" "insll %1,%s2,%0" [(set_attr "type" "shift")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r")) (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] "" "insbl %1,%2,%0" [(set_attr "type" "shift")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r")) (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] "" "inswl %1,%2,%0" [(set_attr "type" "shift")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r")) (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] "" "insll %1,%2,%0" [(set_attr "type" "shift")]);; We do not include the insXh insns because they are complex to express;; and it does not appear that we would ever want to generate them.(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (and:DI (not:DI (ashift:DI (match_operand:DI 2 "mode_mask_operand" "n") (ashift:DI (match_operand:DI 3 "reg_or_8bit_operand" "rI") (const_int 3)))) (match_operand:DI 1 "reg_or_0_operand" "rJ")))] "" "msk%U2l %r1,%3,%0" [(set_attr "type" "shift")]);; We do not include the mskXh insns because it does not appear we would ever;; generate one.;; Floating-point operations. All the double-precision insns can extend;; from single, so indicate that. The exception are the ones that simply;; play with the sign bits; it's not clear what to do there.(define_insn "abssf2" [(set (match_operand:SF 0 "register_operand" "=f") (abs:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "cpys $f31,%R1,%0" [(set_attr "type" "fcpys")])(define_insn "absdf2" [(set (match_operand:DF 0 "register_operand" "=f") (abs:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "cpys $f31,%R1,%0" [(set_attr "type" "fcpys")])(define_insn "negsf2" [(set (match_operand:SF 0 "register_operand" "=f") (neg:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "cpysn %R1,%R1,%0" [(set_attr "type" "fadd")])(define_insn "negdf2" [(set (match_operand:DF 0 "register_operand" "=f") (neg:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "cpysn %R1,%R1,%0" [(set_attr "type" "fadd")])(define_insn "" [(set (match_operand:SF 0 "register_operand" "=&f") (plus:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_tp == ALPHA_TP_INSN" "add%,%)%& %R1,%R2,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "addsf3" [(set (match_operand:SF 0 "register_operand" "=f") (plus:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "add%,%)%& %R1,%R2,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:DF 0 "register_operand" "=&f") (plus:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_tp == ALPHA_TP_INSN" "add%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "adddf3" [(set (match_operand:DF 0 "register_operand" "=f") (plus:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "add%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:DF 0 "register_operand" "=f") (plus:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_tp != ALPHA_TP_INSN" "add%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:DF 0 "register_operand" "=f") (plus:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "%fG")) (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_tp != ALPHA_TP_INSN" "add%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "fix_truncdfdi2" [(set (match_operand:DI 0 "register_operand" "=f") (fix:DI (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "cvt%-qc %R1,%0" [(set_attr "type" "fadd")])(define_insn "fix_truncsfdi2" [(set (match_operand:DI 0 "register_operand" "=f") (fix:DI (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG"))))] "TARGET_FP" "cvt%-qc %R1,%0" [(set_attr "type" "fadd")])(define_insn "floatdisf2" [(set (match_operand:SF 0 "register_operand" "=f") (float:SF (match_operand:DI 1 "register_operand" "f")))] "TARGET_FP" "cvtq%,%+%& %1,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:DF 0 "register_operand" "=&f") (float:DF (match_operand:DI 1 "register_operand" "f")))] "TARGET_FP && alpha_tp == ALPHA_TP_INSN" "cvtq%-%+%& %1,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "floatdidf2" [(set (match_operand:DF 0 "register_operand" "=f") (float:DF (match_operand:DI 1 "register_operand" "f")))] "TARGET_FP" "cvtq%-%+%& %1,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_expand "extendsfdf2" [(use (match_operand:DF 0 "register_operand" "")) (use (match_operand:SF 1 "nonimmediate_operand" ""))] "TARGET_FP""{ if (alpha_tp == ALPHA_TP_INSN) emit_insn (gen_extendsfdf2_tp (operands[0], force_reg (SFmode, operands[1]))); else emit_insn (gen_extendsfdf2_no_tp (operands[0], operands[1])); DONE;}");; FIXME(define_insn "extendsfdf2_tp" [(set (match_operand:DF 0 "register_operand" "=&f") (float_extend:DF (match_operand:SF 1 "register_operand" "f")))] "TARGET_FP && alpha_tp == ALPHA_TP_INSN" "cvtsts %1,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "extendsfdf2_no_tp" [(set (match_operand:DF 0 "register_operand" "=f,f,m") (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "f,m,f")))] "TARGET_FP && alpha_tp != ALPHA_TP_INSN" "@ cpys %1,%1,%0 ld%, %0,%1 st%- %1,%0" [(set_attr "type" "fcpys,ld,st") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:SF 0 "register_operand" "=&f") (float_truncate:SF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_tp == ALPHA_TP_INSN" "cvt%-%,%)%& %R1,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "truncdfsf2" [(set (match_operand:SF 0 "register_operand" "=f") (float_truncate:SF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "cvt%-%,%)%& %R1,%0" [(set_attr "type" "fadd") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:SF 0 "register_operand" "=&f") (div:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_tp == ALPHA_TP_INSN" "div%,%)%& %R1,%R2,%0" [(set_attr "type" "fdivs") (set_attr "trap" "yes")])(define_insn "divsf3" [(set (match_operand:SF 0 "register_operand" "=f") (div:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "div%,%)%& %R1,%R2,%0" [(set_attr "type" "fdivs") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:DF 0 "register_operand" "=&f") (div:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_tp == ALPHA_TP_INSN" "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdivt") (set_attr "trap" "yes")])(define_insn "divdf3" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdivt") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_tp != ALPHA_TP_INSN" "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdivt") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_tp != ALPHA_TP_INSN" "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdivt") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_tp != ALPHA_TP_INSN" "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdivt") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:SF 0 "register_operand" "=&f") (mult:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_tp == ALPHA_TP_INSN" "mul%,%)%& %R1,%R2,%0" [(set_attr "type" "fmul") (set_attr "trap" "yes")])(define_insn "mulsf3" [(set (match_operand:SF 0 "register_operand" "=f") (mult:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "mul%,%)%& %R1,%R2,%0" [(set_attr "type" "fmul") (set_attr "trap" "yes")])(define_insn "" [(set (match_operand:DF 0 "register_operand" "=&f") (mult:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_tp == ALPHA_TP_INSN" "mul%-%)%& %R1,%R2,%0" [(set_attr "type" "fmul") (set_attr "trap" "yes")])(define_insn "muldf3" [(set (match_operand:DF 0 "register_operand" "=f") (mult:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" "mul%-%)%& %R1,%R2,%0" [(set_attr "type" "fmul") (set_attr "trap" "yes")])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -