📄 i960.md
字号:
[(set (reg:CC 36) (compare:CC (match_operand:TF 0 "register_operand" "f") (match_operand:TF 1 "nonmemory_operand" "fG")))] "TARGET_NUMERICS" "cmpr %0,%1" [(set_attr "type" "fpcc")])(define_expand "movtf" [(set (match_operand:TF 0 "general_operand" "") (match_operand:TF 1 "fpmove_src_operand" ""))] "" "{ if (emit_move_sequence (operands, TFmode)) DONE;}")(define_insn "" [(set (match_operand:TF 0 "general_operand" "=r,*f,d,d,m,o") (match_operand:TF 1 "fpmove_src_operand" "r,GH,F,m,d,G"))] "current_function_args_size == 0 && (register_operand (operands[0], TFmode) || register_operand (operands[1], TFmode) || operands[1] == CONST0_RTX (TFmode))" "*{ switch (which_alternative) { case 0: if (FP_REG_P (operands[0]) || FP_REG_P (operands[1])) return \"movre %1,%0\"; else return \"movq %1,%0\"; case 1: return \"movre %1,%0\"; case 2: return i960_output_ldconst (operands[0], operands[1]); case 3: return \"ldq %1,%0\"; case 4: return \"stq %1,%0\"; case 5: operands[1] = adj_offsettable_operand (operands[0], 4); operands[2] = adj_offsettable_operand (operands[0], 8); operands[3] = adj_offsettable_operand (operands[0], 12); return \"st g14,%0\;st g14,%1\;st g14,%2\;st g14,%3\"; }}" [(set_attr "type" "move,move,load,fpload,fpstore,fpstore")])(define_insn "" [(set (match_operand:TF 0 "general_operand" "=r,*f,d,d,m") (match_operand:TF 1 "fpmove_src_operand" "r,GH,F,m,d"))] "current_function_args_size != 0 && (register_operand (operands[0], TFmode) || register_operand (operands[1], TFmode))" "*{ switch (which_alternative) { case 0: if (FP_REG_P (operands[0]) || FP_REG_P (operands[1])) return \"movre %1,%0\"; else return \"movq %1,%0\"; case 1: return \"movre %1,%0\"; case 2: return i960_output_ldconst (operands[0], operands[1]); case 3: return \"ldq %1,%0\"; case 4: return \"stq %1,%0\"; }}" [(set_attr "type" "move,move,load,fpload,fpstore")])(define_insn "extendsftf2" [(set (match_operand:TF 0 "register_operand" "=*f,d") (float_extend:TF (match_operand:SF 1 "register_operand" "d,f")))] "TARGET_NUMERICS" "@ movr %1,%0 movre %1,%0" [(set_attr "type" "fpmove")])(define_insn "extenddftf2" [(set (match_operand:TF 0 "register_operand" "=*f,d") (float_extend:TF (match_operand:DF 1 "register_operand" "d,f")))] "TARGET_NUMERICS" "@ movrl %1,%0 movre %1,%0" [(set_attr "type" "fpmove")])(define_insn "trunctfdf2" [(set (match_operand:DF 0 "register_operand" "=d") (float_truncate:DF (match_operand:TF 1 "register_operand" "f")))] "TARGET_NUMERICS" "movrl %1,%0" [(set_attr "type" "fpmove")])(define_insn "trunctfsf2" [(set (match_operand:SF 0 "register_operand" "=d") (float_truncate:SF (match_operand:TF 1 "register_operand" "f")))] "TARGET_NUMERICS" "movr %1,%0" [(set_attr "type" "fpmove")])(define_insn "floatsitf2" [(set (match_operand:TF 0 "register_operand" "=f") (float:TF (match_operand:SI 1 "register_operand" "d")))] "TARGET_NUMERICS" "cvtir %1,%0" [(set_attr "type" "fpcvt")])(define_insn "fix_trunctfsi2" [(set (match_operand:SI 0 "register_operand" "=d") (fix:SI (fix:TF (match_operand:TF 1 "register_operand" "f"))))] "TARGET_NUMERICS" "cvtzri %1,%0" [(set_attr "type" "fpcvt")])(define_insn "fixuns_trunctfsi2" [(set (match_operand:SI 0 "register_operand" "=d") (unsigned_fix:SI (fix:TF (match_operand:TF 1 "register_operand" "f"))))] "TARGET_NUMERICS" "cvtzri %1,%0" [(set_attr "type" "fpcvt")])(define_insn "addtf3" [(set (match_operand:TF 0 "register_operand" "=f") (plus:TF (match_operand:TF 1 "nonmemory_operand" "%fG") (match_operand:TF 2 "nonmemory_operand" "fG")))] "TARGET_NUMERICS" "addr %1,%2,%0" [(set_attr "type" "fpadd")])(define_insn "subtf3" [(set (match_operand:TF 0 "register_operand" "=f") (minus:TF (match_operand:TF 1 "nonmemory_operand" "fG") (match_operand:TF 2 "nonmemory_operand" "fG")))] "TARGET_NUMERICS" "subr %2,%1,%0" [(set_attr "type" "fpadd")])(define_insn "multf3" [(set (match_operand:TF 0 "register_operand" "=f") (mult:TF (match_operand:TF 1 "nonmemory_operand" "fG") (match_operand:TF 2 "nonmemory_operand" "fG")))] "TARGET_NUMERICS" "mulr %1,%2,%0" [(set_attr "type" "fpmul")])(define_insn "divtf3" [(set (match_operand:TF 0 "register_operand" "=f") (div:TF (match_operand:TF 1 "nonmemory_operand" "fG") (match_operand:TF 2 "nonmemory_operand" "fG")))] "TARGET_NUMERICS" "divr %2,%1,%0" [(set_attr "type" "fpdiv")])(define_insn "negtf2" [(set (match_operand:TF 0 "register_operand" "=f") (neg:TF (match_operand:TF 1 "register_operand" "f")))] "TARGET_NUMERICS" "subr %1,0f0.0,%0" [(set_attr "type" "fpadd")])(define_insn "abstf2" [(set (match_operand:TF 0 "register_operand" "=f") (abs:TF (match_operand:TF 1 "register_operand" "f")))] "(TARGET_NUMERICS)" "cpysre %1,0f0.0,%0" [(set_attr "type" "fpmove")]);; Arithmetic shift instructions.(define_insn "ashlsi3" [(set (match_operand:SI 0 "register_operand" "=d") (ashift:SI (match_operand:SI 1 "arith_operand" "dI") (match_operand:SI 2 "arith_operand" "dI")))] "" "shli %2,%1,%0" [(set_attr "type" "alu2")])(define_insn "ashrsi3" [(set (match_operand:SI 0 "register_operand" "=d") (ashiftrt:SI (match_operand:SI 1 "arith_operand" "dI") (match_operand:SI 2 "arith_operand" "dI")))] "" "shri %2,%1,%0" [(set_attr "type" "alu2")])(define_insn "lshrsi3" [(set (match_operand:SI 0 "register_operand" "=d") (lshiftrt:SI (match_operand:SI 1 "arith_operand" "dI") (match_operand:SI 2 "arith_operand" "dI")))] "" "shro %2,%1,%0" [(set_attr "type" "alu2")]);; Unconditional and other jump instructions.(define_insn "jump" [(set (pc) (label_ref (match_operand 0 "" "")))] "" "b %l0" [(set_attr "type" "branch")])(define_insn "indirect_jump" [(set (pc) (match_operand:SI 0 "address_operand" "p"))] "" "bx %a0" [(set_attr "type" "branch")])(define_insn "tablejump" [(set (pc) (match_operand:SI 0 "register_operand" "d")) (use (label_ref (match_operand 1 "" "")))] "" "bx (%0)" [(set_attr "type" "branch")]);;- jump to subroutine(define_expand "call" [(call (match_operand:SI 0 "general_operand" "g") (match_operand:SI 1 "immediate_operand" "i"))] "" "{ emit_insn (gen_call_internal (operands[0], operands[1], virtual_outgoing_args_rtx)); DONE;}")(define_insn "call_internal" [(call (match_operand:SI 0 "general_operand" "g") (match_operand:SI 1 "immediate_operand" "i")) (use (match_operand:SI 2 "address_operand" "p")) (clobber (match_scratch:SI 3 "=&d"))] "" "* return i960_output_call_insn (operands[0], operands[1], operands[2], operands[3], insn);" [(set_attr "type" "call")])(define_expand "call_value" [(set (match_operand 0 "register_operand" "=d") (call (match_operand:SI 1 "general_operand" "g") (match_operand:SI 2 "immediate_operand" "i")))] "" "{ emit_insn (gen_call_value_internal (operands[0], operands[1], operands[2], virtual_outgoing_args_rtx)); DONE;}")(define_insn "call_value_internal" [(set (match_operand 0 "register_operand" "=d") (call (match_operand:SI 1 "general_operand" "g") (match_operand:SI 2 "immediate_operand" "i"))) (use (match_operand:SI 3 "address_operand" "p")) (clobber (match_scratch:SI 4 "=&d"))] "" "* return i960_output_call_insn (operands[1], operands[2], operands[3], operands[4], insn);" [(set_attr "type" "call")])(define_insn "return" [(return)] "" "* return i960_output_ret_insn (insn);" [(set_attr "type" "branch")])(define_insn "nop" [(const_int 0)] "" "");; Various peephole optimizations for multiple-word moves, loads, and stores.;; Multiple register moves.;; Matched 5/28/91(define_peephole [(set (match_operand:SI 0 "register_operand" "=r") (match_operand:SI 1 "register_operand" "r")) (set (match_operand:SI 2 "register_operand" "=r") (match_operand:SI 3 "register_operand" "r")) (set (match_operand:SI 4 "register_operand" "=r") (match_operand:SI 5 "register_operand" "r")) (set (match_operand:SI 6 "register_operand" "=r") (match_operand:SI 7 "register_operand" "r"))] "((REGNO (operands[0]) & 3) == 0) && ((REGNO (operands[1]) & 3) == 0) && (REGNO (operands[0]) + 1 == REGNO (operands[2])) && (REGNO (operands[1]) + 1 == REGNO (operands[3])) && (REGNO (operands[0]) + 2 == REGNO (operands[4])) && (REGNO (operands[1]) + 2 == REGNO (operands[5])) && (REGNO (operands[0]) + 3 == REGNO (operands[6])) && (REGNO (operands[1]) + 3 == REGNO (operands[7]))" "movq %1,%0");; Matched 4/17/92(define_peephole [(set (match_operand:DI 0 "register_operand" "=r") (match_operand:DI 1 "register_operand" "r")) (set (match_operand:DI 2 "register_operand" "=r") (match_operand:DI 3 "register_operand" "r"))] "((REGNO (operands[0]) & 3) == 0) && ((REGNO (operands[1]) & 3) == 0) && (REGNO (operands[0]) + 2 == REGNO (operands[2])) && (REGNO (operands[1]) + 2 == REGNO (operands[3]))" "movq %1,%0");; Matched 4/17/92(define_peephole [(set (match_operand:DI 0 "register_operand" "=r") (match_operand:DI 1 "register_operand" "r")) (set (match_operand:SI 2 "register_operand" "=r") (match_operand:SI 3 "register_operand" "r")) (set (match_operand:SI 4 "register_operand" "=r") (match_operand:SI 5 "register_operand" "r"))] "((REGNO (operands[0]) & 3) == 0) && ((REGNO (operands[1]) & 3) == 0) && (REGNO (operands[0]) + 2 == REGNO (operands[2])) && (REGNO (operands[1]) + 2 == REGNO (operands[3])) && (REGNO (operands[0]) + 3 == REGNO (operands[4])) && (REGNO (operands[1]) + 3 == REGNO (operands[5]))" "movq %1,%0");; Matched 4/17/92(define_peephole [(set (match_operand:SI 0 "register_operand" "=r") (match_operand:SI 1 "register_operand" "r")) (set (match_operand:SI 2 "register_operand" "=r") (match_operand:SI 3 "register_operand" "r")) (set (match_operand:DI 4 "register_operand" "=r") (match_operand:DI 5 "register_operand" "r"))] "((REGNO (operands[0]) & 3) == 0) && ((REGNO (operands[1]) & 3) == 0) && (REGNO (operands[0]) + 1 == REGNO (operands[2])) && (REGNO (operands[1]) + 1 == REGNO (operands[3])) && (REGNO (operands[0]) + 2 == REGNO (operands[4])) && (REGNO (operands[1]) + 2 == REGNO (operands[5]))" "movq %1,%0");; Matched 4/17/92(define_peephole [(set (match_operand:DI 0 "register_operand" "=r") (match_operand:DI 1 "register_operand" "r")) (set (match_operand:SI 2 "register_operand" "=r") (match_operand:SI 3 "register_operand" "r"))] "((REGNO (operands[0]) & 3) == 0) && ((REGNO (operands[1]) & 3) == 0) && (REGNO (operands[0]) + 2 == REGNO (operands[2])) && (REGNO (operands[1]) + 2 == REGNO (operands[3]))" "movt %1,%0");; Matched 5/28/91(define_peephole [(set (match_operand:SI 0 "register_operand" "=r") (match_operand:SI 1 "register_operand" "r")) (set (match_operand:SI 2 "register_operand" "=r") (match_operand:SI 3 "register_operand" "r")) (set (match_operand:SI 4 "register_operand" "=r") (match_operand:SI 5 "register_operand" "r"))] "((REGNO (operands[0]) & 3) == 0) && ((REGNO (operands[1]) & 3) == 0) && (REGNO (operands[0]) + 1 == REGNO (operands[2])) && (REGNO (operands[1]) + 1 == REGNO (operands[3])) && (REGNO (operands[0]) + 2 == REGNO (operands[4])) && (REGNO (operands[1]) + 2 == REGNO (operands[5]))" "movt %1,%0");; Matched 5/28/91(define_peephole [(set (match_operand:SI 0 "register_operand" "=r") (match_operand:SI 1 "register_operand" "r")) (set (match_operand:SI 2 "register_operand" "=r") (match_operand:SI 3 "register_operand" "r"))] "((REGNO (operands[0]) & 1) == 0) && ((REGNO (operands[1]) & 1) == 0) && (REGNO (operands[0]) + 1 == REGNO (operands[2])) && (REGNO (operands[1]) + 1 == REGNO (operands[3]))" "movl %1,%0"); Multiple register loads.;; Matched 6/15/91(define_peephole [(set (match_operand:SI 0 "register_operand" "=r") (mem:SI (plus:SI (match_operand:SI 1 "register_operand" "r") (match_operand:SI 2 "immediate_operand" "n")))) (set (match_operand:SI 3 "register_operand" "=r") (mem:SI (plus:SI (match_dup 1) (match_operand:SI 4 "immediate_operand" "n")))) (set (match_operand:SI 5 "register_operand" "=r") (mem:SI (plus:SI (match_dup 1) (match_operand:SI 6 "immediate_operand" "n")))) (set (match_operand:SI 7 "register_operand" "=r") (mem:SI (plus:SI (match_dup 1) (match_operand:SI 8 "immediate_operand" "n"))))] "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0) && (REGNO (operands[1]) != REGNO (operands[0])) && (REGNO (operands[0]) + 1 == REGNO (operands[3])) && (REGNO (operands[1]) != REGNO (operands[3])) && (REGNO (operands[0]) + 2 == REGNO (operands[5])) && (REGNO (operands[1]) != REGNO (operands[5])) && (REGNO (operands[0]) + 3 == REGNO (operands[7])) && (INTVAL (operands[2]) + 4 == INTVAL (operands[4])) && (INTVAL (operands[2]) + 8 == INTVAL (operands[6])) && (INTVAL (operands[2]) + 12 == INTVAL (operands[8])))" "ldq %2(%1),%0");; Matched 5/28/91(define_peephole [(set (match_operand:DF 0 "register_operand" "=d") (mem:DF (plus:SI (match_operand:SI 1 "register_operand" "d") (match_operand:SI 2 "immediate_operand" "n")))) (set (match_operand:DF 3 "register_operand" "=d") (mem:DF (plus:SI (match_dup 1) (match_operand:SI 4 "immediate_operand" "n"))))] "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0) && (REGNO (operands[1]) != REGNO (operands[0])) && (REGNO (operands[0]) + 2 == REGNO (operands[3])) && (REGNO (operands[1]) != REGNO (operands[3])) && (INTVAL (operands[2]) + 8 == INTVAL (operands[4])))" "ldq %2(%1),%0");; Matched 1/24/92(define_peephole [(set (match_operand:DI 0 "register_operand" "=d") (mem:DI (plus:SI (match_operand:SI 1 "register_operand" "d") (match_operand:SI 2 "immediate_operand" "n")))) (set (match_operand:DI 3 "register_operand" "=d") (mem:DI (plus:SI (match_dup 1) (match_operand:SI 4 "immediate_operand" "n"))))] "(i960_si_ti (operands[1], operands[2]) && ((REGNO (operands[0]) & 3) == 0) && (REGNO (operands[1]) != REGNO (operands[0])) && (REGNO (operands[0]) + 2 == REGNO (operands[3])) && (REGNO (operands[1]) != REGNO (operands[3])) && (INTVAL (operands[2]) + 8 == INTVAL (operands[4])))" "ldq %2(%1),%0");; Matched 4/17/92(define_peephole [(set (match_operand:SI 0 "register_operand" "=d") (mem:SI (match_operand:SI 1 "register_operand" "d"))) (set (match_operand:SI 2 "register_operand" "=d") (mem:SI (plus:SI (match_dup 1) (match_operand:SI 3 "immediate_operand" "n")))) (set (match_operand:SI 4 "register_operand" "=d")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -