📄 m88k.md
字号:
if (REG_P (operands[0])) return \"extu %0,r25,1<lo>\"; return \"extu r25,r25,1<lo>\;st r25,%0\";}")(define_peephole [(set (cc0) (match_operand:SI 0 "register_operand" "r")) (set (match_operand:SI 1 "general_operand" "=g") (ltu (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[1])) return \"cmp r25,%0,0\;extu %1,r25,1<lo>\"; return \"cmp r25,%0,0\;extu r25,r25,1<lo>\;st r25,%1\";}")(define_peephole [(set (cc0) (compare (match_operand:SI 0 "arith_operand" "r") (match_operand:SI 1 "arith_operand" "rI"))) (set (match_operand:SI 2 "general_operand" "=g") (ltu (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[2])) return \"cmp r25,%0,%1\;extu %2,r25,1<lo>\"; return \"cmp r25,%0,%1\;extu r25,r25,1<lo>\;st r25,%2\";}")(define_insn "sge" [(set (match_operand:SI 0 "general_operand" "=g") (ge (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[0])) return \"extu %0,r25,1<ge>\"; return \"extu r25,r25,1<ge>\;st r25,%0\";}")(define_peephole [(set (cc0) (match_operand:SI 0 "register_operand" "r")) (set (match_operand:SI 1 "general_operand" "=g") (ge (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[1])) return \"cmp r25,%0,0\;extu %1,r25,1<ge>\"; return \"cmp r25,%0,0\;extu r25,r25,1<ge>\;st r25,%1\";}")(define_peephole [(set (cc0) (compare (match_operand:SI 0 "arith_operand" "r") (match_operand:SI 1 "arith_operand" "rI"))) (set (match_operand:SI 2 "general_operand" "=g") (ge (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[2])) return \"cmp r25,%0,%1\;extu %2,r25,1<ge>\"; return \"cmp r25,%0,%1\;extu r25,r25,1<ge>\;st r25,%2\";}")(define_insn "sgeu" [(set (match_operand:SI 0 "general_operand" "=g") (geu (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[0])) return \"extu %0,r25,1<hs>\"; return \"extu r25,r25,1<hs>\;st r25,%0\";}")(define_peephole [(set (cc0) (match_operand:SI 0 "register_operand" "r")) (set (match_operand:SI 1 "general_operand" "=g") (geu (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[1])) return \"cmp r25,%0,0\;extu %1,r25,1<hs>\"; return \"cmp r25,%0,0\;extu r25,r25,1<hs>\;st r25,%1\";}")(define_peephole [(set (cc0) (compare (match_operand:SI 0 "arith_operand" "r") (match_operand:SI 1 "arith_operand" "rI"))) (set (match_operand:SI 2 "general_operand" "=g") (geu (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[2])) return \"cmp r25,%0,%1\;extu %2,r25,1<hs>\"; return \"cmp r25,%0,%1\;extu r25,r25,1<hs>\;st r25,%2\";}")(define_insn "sle" [(set (match_operand:SI 0 "general_operand" "=g") (le (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[0])) return \"extu %0,r25,1<le>\"; return \"extu r25,r25,1<le>\;st r25,%0\";}")(define_peephole [(set (cc0) (match_operand:SI 0 "register_operand" "r")) (set (match_operand:SI 1 "general_operand" "=g") (le (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[1])) return \"cmp r25,%0,0\;extu %1,r25,1<le>\"; return \"cmp r25,%0,0\;extu r25,r25,1<le>\;st r25,%1\";}")(define_peephole [(set (cc0) (compare (match_operand:SI 0 "arith_operand" "r") (match_operand:SI 1 "arith_operand" "rI"))) (set (match_operand:SI 2 "general_operand" "=g") (le (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[2])) return \"cmp r25,%0,%1\;extu %2,r25,1<le>\"; return \"cmp r25,%0,%1\;extu r25,r25,1<le>\;st r25,%2\";}")(define_insn "sleu" [(set (match_operand:SI 0 "general_operand" "=g") (leu (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[0])) return \"extu %0,r25,1<ls>\"; return \"extu r25,r25,1<ls>\;st r25,%0\";}")(define_peephole [(set (cc0) (match_operand:SI 0 "register_operand" "r")) (set (match_operand:SI 1 "general_operand" "=g") (leu (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[1])) return \"cmp r25,%0,0\;extu %1,r25,1<ls>\"; return \"cmp r25,%0,0\;extu r25,r25,1<ls>\;st r25,%1\";}")(define_peephole [(set (cc0) (compare (match_operand:SI 0 "arith_operand" "r") (match_operand:SI 1 "arith_operand" "rI"))) (set (match_operand:SI 2 "general_operand" "=g") (leu (cc0) (const_int 0)))] "" "*{ CC_STATUS_INIT; if (REG_P (operands[2])) return \"cmp r25,%0,%1\;extu %2,r25,1<ls>\"; return \"cmp r25,%0,%1\;extu r25,r25,1<ls>\;st r25,%2\";}");; Unconditional and other jump instructions(define_insn "jump" [(set (pc) (label_ref (match_operand 0 "" "")))] "" "br %l0")(define_insn "" [(set (pc) (label_ref (match_operand 0 "" ""))) (clobber (const_int 1))] "" "br.n %l0")(define_insn "tablejump" [(set (pc) (match_operand:SI 0 "register_operand" "r")) (use (label_ref (match_operand 1 "" "")))] "" "jmp %0");;- jump to subroutine(define_insn "call" [(call (match_operand:SI 0 "memory_operand" "m") (match_operand:SI 1 "general_operand" "g")) (use (reg:SI 1))] ;;- Don't use operand 1 for most machines. "" "*{ operands[0] = XEXP (operands[0], 0); if (REG_P (operands[0])) return \"jsr %0\"; return \"bsr %0\";}")(define_insn "" [(call (match_operand:SI 0 "memory_operand" "m") (match_operand:SI 1 "general_operand" "g")) (clobber (const_int 1)) (use (reg:SI 1))] ;;- Don't use operand 1 for most machines. "" "*{ operands[0] = XEXP (operands[0], 0); if (REG_P (operands[0])) return \"jsr.n %0\"; return \"bsr.n %0\";}");;- jump to subroutine(define_insn "call_value" [(set (match_operand 0 "" "=r") (call (match_operand:SI 1 "memory_operand" "m") (match_operand:SI 2 "general_operand" "g"))) (use (reg:SI 1))] ;;- Don't use operand 2 for most machines. "" "*{ operands[1] = XEXP (operands[1], 0); if (REG_P (operands[1])) return \"jsr %1\"; return \"bsr %1\";}")(define_insn "" [(set (match_operand 0 "" "=r") (call (match_operand:SI 1 "memory_operand" "m") (match_operand:SI 2 "general_operand" "g"))) (use (reg:SI 1)) (clobber (const_int 2))] ;;- Don't use operand 2 for most machines. "" "*{ operands[1] = XEXP (operands[1], 0); if (REG_P (operands[1])) return \"jsr.n %1\"; return \"bsr.n %1\";}");; A memory ref with constant address is not normally valid.;; But it is valid in a call insns. This pattern allows the;; loading of the address to combine with the call.(define_insn "" [(call (mem:SI (match_operand:SI 0 "" "i")) (match_operand:SI 1 "general_operand" "g")) (use (reg:SI 1))] ;;- Don't use operand 1 for most machines. "GET_CODE (operands[0]) == SYMBOL_REF" "bsr %0")(define_insn "" [(call (mem:SI (match_operand:SI 0 "" "i")) (match_operand:SI 1 "general_operand" "g")) (clobber (const_int 1)) (use (reg:SI 1))] ;;- Don't use operand 1 for most machines. "GET_CODE (operands[0]) == SYMBOL_REF" "bsr.n %0")(define_insn "nop" [(const_int 0)] "" "nop");; Recognize jbs and jbc instructions.(define_insn "" [(set (pc) (if_then_else (ne (sign_extract:SI (match_operand:SI 0 "register_operand" "r") (const_int 1) (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (label_ref (match_operand 2 "" "")) (pc)))] "" "bb1 %1,%0,%l2")(define_insn "" [(set (pc) (if_then_else (eq (sign_extract:SI (match_operand:SI 0 "register_operand" "r") (const_int 1) (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (label_ref (match_operand 2 "" "")) (pc)))] "" "bb0 %1,%0,%l2")(define_insn "" [(set (pc) (if_then_else (ne (sign_extract:SI (match_operand:SI 0 "register_operand" "r") (const_int 1) (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (pc) (label_ref (match_operand 2 "" ""))))] "" "bb0 %1,%0,%l2")(define_insn "" [(set (pc) (if_then_else (eq (sign_extract:SI (match_operand:SI 0 "register_operand" "r") (const_int 1) (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (pc) (label_ref (match_operand 2 "" ""))))] "" "bb1 %1,%0,%l2")(define_insn "" [(set (pc) (if_then_else (ne (sign_extract:SI (match_operand:SI 0 "general_operand" "r") (const_int 1) (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (label_ref (match_operand 2 "" "")) (pc)))] "" "bb1 %1,%0,%l2")(define_insn "" [(set (pc) (if_then_else (eq (sign_extract:SI (match_operand:SI 0 "general_operand" "r") (const_int 1) (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (label_ref (match_operand 2 "" "")) (pc)))] "" "bb0 %1,%0,%l2")(define_insn "" [(set (pc) (if_then_else (eq (and:SI (match_operand:SI 0 "register_operand" "r") (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (pc) (label_ref (match_operand 2 "" ""))))] "exact_log2 (INTVAL (operands[1])) >= 0" "*{ operands[1] = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1]))); return \"bb1 %1,%0,%l2\";}")(define_insn "" [(set (pc) (if_then_else (eq (and:SI (match_operand:SI 0 "register_operand" "r") (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (label_ref (match_operand 2 "" "")) (pc)))] "exact_log2 (INTVAL (operands[1])) >= 0" "*{ operands[1] = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1]))); return \"bb0 %1,%0,%l2\";}")(define_insn "" [(set (pc) (if_then_else (ne (and:SI (match_operand:SI 0 "register_operand" "r") (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (pc) (label_ref (match_operand 2 "" ""))))] "exact_log2 (INTVAL (operands[1])) >= 0" "*{ operands[1] = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1]))); return \"bb0 %1,%0,%l2\";}")(define_insn "" [(set (pc) (if_then_else (ne (and:SI (match_operand:SI 0 "register_operand" "r") (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (label_ref (match_operand 2 "" "")) (pc)))] "exact_log2 (INTVAL (operands[1])) >= 0" "*{ operands[1] = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1]))); return \"bb1 %1,%0,%l2\";}")(define_insn "" [(set (pc) (if_then_else (ne (sign_extract:SI (match_operand:SI 0 "general_operand" "r") (const_int 1) (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (pc) (label_ref (match_operand 2 "" ""))))] "" "bb0 %1,%0,%l2")(define_insn "" [(set (pc) (if_then_else (eq (sign_extract:SI (match_operand:SI 0 "general_operand" "r") (const_int 1) (match_operand:SI 1 "int5_operand" "K")) (const_int 0)) (pc) (label_ref (match_operand 2 "" ""))))] "" "bb1 %1,%0,%l2")(define_insn "" [(set (pc) (if_then_else (ne (and:SI (match_operand:SI 0 "register_operand" "r") (const_int 1)) (const_int 0)) (label_ref (match_operand 1 "" "")) (pc)))] "" "bb1 0,%0,%l1")(define_insn "" [(set (pc) (if_then_else (eq (and:SI (match_operand:SI 0 "register_operand" "r") (const_int 1)) (const_int 0)) (label_ref (match_operand 1 "" "")) (pc)))] "" "bb0 0,%0,%l1")(define_insn "" [(set (pc) (if_then_else (ne (and:SI (match_operand:SI 0 "register_operand" "r") (const_int 1)) (const_int 0)) (pc) (label_ref (match_operand 1 "" ""))))] "" "bb0 0,%0,%l1")(define_insn "" [(set (pc) (if_then_else (eq (and:SI (match_operand:SI 0 "register_operand" "r") (const_int 1)) (const_int 0)) (pc) (label_ref (match_operand 1 "" ""))))] "" "bb1 0,%0,%l1");; These four entries allow a jlbc or jlbs,to be made;; by combination with a bic.(define_insn "" [(set (pc) (if_then_else (ne (and:SI (match_operand:SI 0 "register_operand" "r") (not:SI (const_int -2))) (const_int 0)) (label_ref (match_operand 1 "" "")) (pc)))] "" "bb1 0,%0,%l1")(define_insn "" [(set (pc) (if_then_else (eq (and:SI (match_operand:SI 0 "register_operand" "r") (not:SI (const_int -2))) (const_int 0)) (label_ref (match_operand 1 "" "")) (pc)))] "" "bb0 0,%0,%l1")(define_insn "" [(set (pc) (if_then_else (ne (and:SI (match_operand:SI 0 "register_operand" "r") (not:SI (const_int -2))) (const_int 0)) (pc) (label_ref (match_operand 1 "" ""))))] "" "bb0 0,%0,%l1")(define_insn "" [(set (pc) (if_then_else (eq (and:SI (match_operand:SI 0 "register_operand" "r") (not:SI (const_int -2))) (const_int 0)) (pc) (label_ref (match_operand 1 "" ""))))] "" "bb1 0,%0,%l1");;- Local variables:;;- mode:emacs-lisp;;- comment-start: ";;- ";;- eval: (set-syntax-table (copy-sequence (syntax-table)));;- eval: (modify-syntax-entry ?[ "(]");;- eval: (modify-syntax-entry ?] ")[");;- eval: (modify-syntax-entry ?{ "(}");;- eval: (modify-syntax-entry ?} "){");;- End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -