📄 alpha.md
字号:
[(set (match_operand:SI 0 "some_operand" "=&r") (plus:SI (plus:SI (mult:SI (match_operand:SI 1 "some_operand" "rJ") (match_operand:SI 2 "const48_operand" "I")) (match_operand:SI 3 "some_operand" "r")) (match_operand:SI 4 "some_operand" "rIOKL")))] "reload_in_progress" "#")(define_split [(set (match_operand:SI 0 "register_operand" "r") (plus:SI (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "") (match_operand:SI 2 "const48_operand" "")) (match_operand:SI 3 "register_operand" "")) (match_operand:SI 4 "add_operand" "rIOKL")))] "reload_completed" [(set (match_dup 0) (plus:SI (mult:SI (match_dup 1) (match_dup 2)) (match_dup 3))) (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] "")(define_insn "" [(set (match_operand:DI 0 "some_operand" "=&r") (sign_extend:DI (plus:SI (plus:SI (mult:SI (match_operand:SI 1 "some_operand" "rJ") (match_operand:SI 2 "const48_operand" "I")) (match_operand:SI 3 "some_operand" "r")) (match_operand:SI 4 "some_operand" "rIOKL"))))] "reload_in_progress" "#")(define_split [(set (match_operand:DI 0 "register_operand" "") (sign_extend:DI (plus:SI (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "") (match_operand:SI 2 "const48_operand" "")) (match_operand:SI 3 "register_operand" "")) (match_operand:SI 4 "add_operand" ""))))] "reload_completed" [(set (match_dup 5) (plus:SI (mult:SI (match_dup 1) (match_dup 2)) (match_dup 3))) (set (match_dup 0) (sign_extend:DI (plus:SI (match_dup 5) (match_dup 4))))] "{ operands[5] = gen_lowpart (SImode, operands[0]);}")(define_insn "" [(set (match_operand:DI 0 "some_operand" "=&r") (plus:DI (plus:DI (mult:DI (match_operand:DI 1 "some_operand" "rJ") (match_operand:DI 2 "const48_operand" "I")) (match_operand:DI 3 "some_operand" "r")) (match_operand:DI 4 "some_operand" "rIOKL")))] "reload_in_progress" "#")(define_split [(set (match_operand:DI 0 "register_operand" "=") (plus:DI (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "") (match_operand:DI 2 "const48_operand" "")) (match_operand:DI 3 "register_operand" "")) (match_operand:DI 4 "add_operand" "")))] "reload_completed" [(set (match_dup 0) (plus:DI (mult:DI (match_dup 1) (match_dup 2)) (match_dup 3))) (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 4)))] "")(define_insn "negsi2" [(set (match_operand:SI 0 "register_operand" "=r") (neg:SI (match_operand:SI 1 "reg_or_8bit_operand" "rI")))] "" "subl $31,%1,%0")(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (sign_extend:DI (neg:SI (match_operand:SI 1 "reg_or_8bit_operand" "rI"))))] "" "subl $31,%1,%0")(define_insn "negdi2" [(set (match_operand:DI 0 "register_operand" "=r") (neg:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI")))] "" "subq $31,%1,%0")(define_expand "subsi3" [(set (match_operand:SI 0 "register_operand" "") (minus:SI (match_operand:SI 1 "reg_or_0_operand" "") (match_operand:SI 2 "reg_or_8bit_operand" "")))] "" "{ emit_insn (gen_rtx (SET, VOIDmode, gen_lowpart (DImode, operands[0]), gen_rtx (MINUS, DImode, gen_lowpart (DImode, operands[1]), gen_lowpart (DImode, operands[2])))); DONE;} ")(define_insn "" [(set (match_operand:SI 0 "register_operand" "=r") (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ") (match_operand:SI 2 "reg_or_8bit_operand" "rI")))] "" "subl %r1,%2,%0")(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (sign_extend:DI (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ") (match_operand:SI 2 "reg_or_8bit_operand" "rI"))))] "" "subl %r1,%2,%0")(define_insn "subdi3" [(set (match_operand:DI 0 "register_operand" "=r") (minus:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (match_operand:DI 2 "reg_or_8bit_operand" "rI")))] "" "subq %r1,%2,%0")(define_insn "" [(set (match_operand:SI 0 "register_operand" "=r") (minus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ") (match_operand:SI 2 "const48_operand" "I")) (match_operand:SI 3 "reg_or_8bit_operand" "rI")))] "" "s%2subl %r1,%3,%0")(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (sign_extend:DI (minus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rJ") (match_operand:SI 2 "const48_operand" "I")) (match_operand:SI 3 "reg_or_8bit_operand" "rI"))))] "" "s%2subl %r1,%3,%0")(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (minus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (match_operand:DI 2 "const48_operand" "I")) (match_operand:DI 3 "reg_or_8bit_operand" "rI")))] "" "s%2subq %r1,%3,%0")(define_insn "mulsi3" [(set (match_operand:SI 0 "register_operand" "=r") (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ") (match_operand:SI 2 "reg_or_0_operand" "rJ")))] "" "mull %r1,%r2,%0" [(set_attr "type" "imull")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (sign_extend:DI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ") (match_operand:SI 2 "reg_or_0_operand" "rJ"))))] "" "mull %r1,%r2,%0" [(set_attr "type" "imull")])(define_insn "muldi3" [(set (match_operand:DI 0 "register_operand" "=r") (mult:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ") (match_operand:DI 2 "reg_or_0_operand" "rJ")))] "" "mulq %r1,%r2,%0" [(set_attr "type" "imulq")])(define_insn "umuldi3_highpart" [(set (match_operand:DI 0 "register_operand" "=r") (truncate:DI (lshiftrt:TI (mult:TI (zero_extend:TI (match_operand:DI 1 "register_operand" "r")) (zero_extend:TI (match_operand:DI 2 "register_operand" "r"))) (const_int 64))))] "" "umulh %1,%2,%0" [(set_attr "type" "imulq")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (truncate:DI (lshiftrt:TI (mult:TI (zero_extend:TI (match_operand:DI 1 "register_operand" "r")) (match_operand:TI 2 "cint8_operand" "I")) (const_int 64))))] "" "umulh %1,%2,%0" [(set_attr "type" "imulq")]);; The divide and remainder operations always take their inputs from;; r24 and r25, put their output in r27, and clobber r23 and r28.;; ??? comment out the divsi routines since the library functions;; don't seem to do the right thing with the high 32-bits of a;; register nonzero.;(define_expand "divsi3"; [(set (reg:SI 24) (match_operand:SI 1 "input_operand" "")); (set (reg:SI 25) (match_operand:SI 2 "input_operand" "")); (parallel [(set (reg:SI 27); (div:SI (reg:SI 24); (reg:SI 25))); (clobber (reg:DI 23)); (clobber (reg:DI 28))]); (set (match_operand:SI 0 "general_operand" ""); (reg:SI 27))]; "!TARGET_OPEN_VMS"; "");(define_expand "udivsi3"; [(set (reg:SI 24) (match_operand:SI 1 "input_operand" "")); (set (reg:SI 25) (match_operand:SI 2 "input_operand" "")); (parallel [(set (reg:SI 27); (udiv:SI (reg:SI 24); (reg:SI 25))); (clobber (reg:DI 23)); (clobber (reg:DI 28))]); (set (match_operand:SI 0 "general_operand" ""); (reg:SI 27))]; "!TARGET_OPEN_VMS"; "");(define_expand "modsi3"; [(set (reg:SI 24) (match_operand:SI 1 "input_operand" "")); (set (reg:SI 25) (match_operand:SI 2 "input_operand" "")); (parallel [(set (reg:SI 27); (mod:SI (reg:SI 24); (reg:SI 25))); (clobber (reg:DI 23)); (clobber (reg:DI 28))]); (set (match_operand:SI 0 "general_operand" ""); (reg:SI 27))]; "!TARGET_OPEN_VMS"; "");(define_expand "umodsi3"; [(set (reg:SI 24) (match_operand:SI 1 "input_operand" "")); (set (reg:SI 25) (match_operand:SI 2 "input_operand" "")); (parallel [(set (reg:SI 27); (umod:SI (reg:SI 24); (reg:SI 25))); (clobber (reg:DI 23)); (clobber (reg:DI 28))]); (set (match_operand:SI 0 "general_operand" ""); (reg:SI 27))]; "!TARGET_OPEN_VMS"; "")(define_expand "divdi3" [(set (reg:DI 24) (match_operand:DI 1 "input_operand" "")) (set (reg:DI 25) (match_operand:DI 2 "input_operand" "")) (parallel [(set (reg:DI 27) (div:DI (reg:DI 24) (reg:DI 25))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:DI 0 "general_operand" "") (reg:DI 27))] "!TARGET_OPEN_VMS" "")(define_expand "udivdi3" [(set (reg:DI 24) (match_operand:DI 1 "input_operand" "")) (set (reg:DI 25) (match_operand:DI 2 "input_operand" "")) (parallel [(set (reg:DI 27) (udiv:DI (reg:DI 24) (reg:DI 25))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:DI 0 "general_operand" "") (reg:DI 27))] "!TARGET_OPEN_VMS" "")(define_expand "moddi3" [(set (reg:DI 24) (match_operand:DI 1 "input_operand" "")) (set (reg:DI 25) (match_operand:DI 2 "input_operand" "")) (parallel [(set (reg:DI 27) (mod:DI (reg:DI 24) (reg:DI 25))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:DI 0 "general_operand" "") (reg:DI 27))] "!TARGET_OPEN_VMS" "")(define_expand "umoddi3" [(set (reg:DI 24) (match_operand:DI 1 "input_operand" "")) (set (reg:DI 25) (match_operand:DI 2 "input_operand" "")) (parallel [(set (reg:DI 27) (umod:DI (reg:DI 24) (reg:DI 25))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:DI 0 "general_operand" "") (reg:DI 27))] "!TARGET_OPEN_VMS" "");(define_insn ""; [(set (reg:SI 27); (match_operator:SI 1 "divmod_operator"; [(reg:SI 24) (reg:SI 25)])); (clobber (reg:DI 23)); (clobber (reg:DI 28))]; "!TARGET_OPEN_VMS"; "%E1 $24,$25,$27"; [(set_attr "type" "isubr")])(define_insn "" [(set (reg:DI 27) (match_operator:DI 1 "divmod_operator" [(reg:DI 24) (reg:DI 25)])) (clobber (reg:DI 23)) (clobber (reg:DI 28))] "!TARGET_OPEN_VMS" "%E1 $24,$25,$27" [(set_attr "type" "isubr")]);; Next are the basic logical operations. These only exist in DImode.(define_insn "anddi3" [(set (match_operand:DI 0 "register_operand" "=r,r,r") (and:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,rJ,rJ") (match_operand:DI 2 "and_operand" "rI,N,MH")))] "" "@ and %r1,%2,%0 bic %r1,%N2,%0 zapnot %r1,%m2,%0" [(set_attr "type" "ilog,ilog,shift")]);; There are times when we can split an AND into two AND insns. This occurs;; when we can first clear any bytes and then clear anything else. For;; example "I & 0xffff07" is "(I & 0xffffff) & 0xffffffffffffff07".;; Only do this when running on 64-bit host since the computations are;; too messy otherwise.(define_split [(set (match_operand:DI 0 "register_operand" "") (and:DI (match_operand:DI 1 "register_operand" "") (match_operand:DI 2 "const_int_operand" "")))] "HOST_BITS_PER_WIDE_INT == 64 && ! and_operand (operands[2], DImode)" [(set (match_dup 0) (and:DI (match_dup 1) (match_dup 3))) (set (match_dup 0) (and:DI (match_dup 0) (match_dup 4)))] "{ unsigned HOST_WIDE_INT mask1 = INTVAL (operands[2]); unsigned HOST_WIDE_INT mask2 = mask1; int i; /* For each byte that isn't all zeros, make it all ones. */ for (i = 0; i < 64; i += 8) if ((mask1 & ((HOST_WIDE_INT) 0xff << i)) != 0) mask1 |= (HOST_WIDE_INT) 0xff << i; /* Now turn on any bits we've just turned off. */ mask2 |= ~ mask1; operands[3] = GEN_INT (mask1); operands[4] = GEN_INT (mask2);}")(define_insn "zero_extendqihi2" [(set (match_operand:HI 0 "register_operand" "=r") (zero_extend:HI (match_operand:QI 1 "register_operand" "r")))] "" "zapnot %1,1,%0" [(set_attr "type" "shift")])(define_insn "" [(set (match_operand:SI 0 "register_operand" "=r,r") (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "r,m")))] "TARGET_BWX" "@ zapnot %1,1,%0 ldbu %0,%1" [(set_attr "type" "shift,ld")])(define_insn "" [(set (match_operand:SI 0 "register_operand" "=r") (zero_extend:SI (match_operand:QI 1 "register_operand" "r")))] "! TARGET_BWX" "zapnot %1,1,%0" [(set_attr "type" "shift")])(define_expand "zero_extendqisi2" [(set (match_operand:SI 0 "register_operand" "") (zero_extend:SI (match_operand:QI 1 "register_operand" "")))] "" "")(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r,r") (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "r,m")))] "TARGET_BWX" "@ zapnot %1,1,%0 ldbu %0,%1" [(set_attr "type" "shift,ld")])(define_insn "" [(set (match_operand:DI 0 "register_operand" "=r") (zero_extend:DI (match_operand:QI 1 "register_operand" "r")))] "! TARGET_BWX" "zapnot %1,1,%0" [(set_attr "type" "shift")]) (define_expand "zero_extendqidi2" [(set (match_operand:DI 0 "register_operand" "") (zero_extend:DI (match_operand:QI 1 "register_operand" "")))] "" "") (define_insn "" [(set (match_operand:SI 0 "register_operand" "=r,r") (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "r,m")))] "TARGET_BWX" "@ zapnot %1,3,%0 ldwu %0,%1" [(set_attr "type" "shift,ld")])(define_insn ""
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -