⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mips.md

📁 GCC编译器源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
;; functional unit:(define_function_unit "imuldiv" 1 0  (and (eq_attr "type" "fadd") (eq_attr "cpu" "r4300"))  3 3)(define_function_unit "imuldiv" 1 0  (and (eq_attr "type" "fcmp,fabs,fneg") (eq_attr "cpu" "r4300"))  1 1)(define_function_unit "imuldiv" 1 0  (and (eq_attr "type" "fmul") (and (eq_attr "mode" "SF") (eq_attr "cpu" "r4300")))  5 5)(define_function_unit "imuldiv" 1 0  (and (eq_attr "type" "fmul") (and (eq_attr "mode" "DF") (eq_attr "cpu" "r4300")))  8 8)(define_function_unit "imuldiv" 1 0  (and (and (eq_attr "type" "fdiv") (eq_attr "type" "fsqrt"))       (and (eq_attr "mode" "SF") (eq_attr "cpu" "r4300")))  29 29)(define_function_unit "imuldiv" 1 0  (and (and (eq_attr "type" "fdiv") (eq_attr "type" "fsqrt"))       (and (eq_attr "mode" "DF") (eq_attr "cpu" "r4300")))  58 58);; The following functional units do not use the cpu type, and use;; much less memory in genattrtab.c.;; (define_function_unit "memory"   1 0 (eq_attr "type" "load")                                3 0);; (define_function_unit "memory"   1 0 (eq_attr "type" "store")                               1 0);;       ;; (define_function_unit "fp_comp"  1 0 (eq_attr "type" "fcmp")                                2 0);;       ;; (define_function_unit "transfer" 1 0 (eq_attr "type" "xfer")                                2 0);; (define_function_unit "transfer" 1 0 (eq_attr "type" "hilo")                                3 0);;   ;; (define_function_unit "imuldiv"  1 1 (eq_attr "type" "imul")                               17 0);; (define_function_unit "imuldiv"  1 1 (eq_attr "type" "idiv")                               38 0);;   ;; (define_function_unit "adder"    1 1 (eq_attr "type" "fadd")                                4 0);; (define_function_unit "adder"    1 1 (eq_attr "type" "fabs,fneg")                           2 0);;   ;; (define_function_unit "mult"     1 1 (and (eq_attr "type" "fmul") (eq_attr "mode" "SF"))    7 0);; (define_function_unit "mult"     1 1 (and (eq_attr "type" "fmul") (eq_attr "mode" "DF"))    8 0);;   ;; (define_function_unit "divide"   1 1 (and (eq_attr "type" "fdiv") (eq_attr "mode" "SF"))   23 0);; (define_function_unit "divide"   1 1 (and (eq_attr "type" "fdiv") (eq_attr "mode" "DF"))   36 0);; ;; (define_function_unit "sqrt"     1 1 (and (eq_attr "type" "fsqrt") (eq_attr "mode" "SF"))  54 0);; (define_function_unit "sqrt"     1 1 (and (eq_attr "type" "fsqrt") (eq_attr "mode" "DF")) 112 0);;;;  ....................;;;;	ADDITION;;;;  ....................;;(define_insn "adddf3"  [(set (match_operand:DF 0 "register_operand" "=f")	(plus:DF (match_operand:DF 1 "register_operand" "f")		 (match_operand:DF 2 "register_operand" "f")))]  "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"  "add.d\\t%0,%1,%2"  [(set_attr "type"	"fadd")   (set_attr "mode"	"DF")   (set_attr "length"	"1")])(define_insn "addsf3"  [(set (match_operand:SF 0 "register_operand" "=f")	(plus:SF (match_operand:SF 1 "register_operand" "f")		 (match_operand:SF 2 "register_operand" "f")))]  "TARGET_HARD_FLOAT"  "add.s\\t%0,%1,%2"  [(set_attr "type"	"fadd")   (set_attr "mode"	"SF")   (set_attr "length"	"1")])(define_expand "addsi3"  [(set (match_operand:SI 0 "register_operand" "=d")	(plus:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")		 (match_operand:SI 2 "arith_operand" "dI")))]  ""  "{  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == -32768)    operands[2] = force_reg (SImode, operands[2]);}")(define_insn "addsi3_internal"  [(set (match_operand:SI 0 "register_operand" "=d")	(plus:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")		 (match_operand:SI 2 "arith_operand" "dI")))]  "GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != -32768"  "addu\\t%0,%z1,%2"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"1")])(define_expand "adddi3"  [(parallel [(set (match_operand:DI 0 "register_operand" "")		   (plus:DI (match_operand:DI 1 "se_register_operand" "")			    (match_operand:DI 2 "se_arith_operand" "")))	      (clobber (match_dup 3))])]  "TARGET_64BIT || !TARGET_DEBUG_G_MODE"  "{  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == -32768)    operands[2] = force_reg (DImode, operands[2]);  if (TARGET_64BIT)    {      emit_insn (gen_adddi3_internal_3 (operands[0], operands[1],					operands[2]));      DONE;    }  operands[3] = gen_reg_rtx (SImode);}")(define_insn "adddi3_internal_1"  [(set (match_operand:DI 0 "register_operand" "=d,&d")	(plus:DI (match_operand:DI 1 "register_operand" "0,d")		 (match_operand:DI 2 "register_operand" "d,d")))   (clobber (match_operand:SI 3 "register_operand" "=d,d"))]  "!TARGET_64BIT && !TARGET_DEBUG_G_MODE"  "*{  return (REGNO (operands[0]) == REGNO (operands[1])	  && REGNO (operands[0]) == REGNO (operands[2]))    ? \"srl\\t%3,%L0,31\;sll\\t%M0,%M0,1\;sll\\t%L0,%L1,1\;addu\\t%M0,%M0,%3\"    : \"addu\\t%L0,%L1,%L2\;sltu\\t%3,%L0,%L2\;addu\\t%M0,%M1,%M2\;addu\\t%M0,%M0,%3\";}"  [(set_attr "type"	"darith")   (set_attr "mode"	"DI")   (set_attr "length"	"4")])(define_split  [(set (match_operand:DI 0 "register_operand" "")	(plus:DI (match_operand:DI 1 "register_operand" "")		 (match_operand:DI 2 "register_operand" "")))   (clobber (match_operand:SI 3 "register_operand" ""))]  "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE   && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))   && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))   && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))   && (REGNO (operands[0]) != REGNO (operands[1])       || REGNO (operands[0]) != REGNO (operands[2]))"  [(set (subreg:SI (match_dup 0) 0)	(plus:SI (subreg:SI (match_dup 1) 0)		 (subreg:SI (match_dup 2) 0)))   (set (match_dup 3)	(ltu:SI (subreg:SI (match_dup 0) 0)		(subreg:SI (match_dup 2) 0)))   (set (subreg:SI (match_dup 0) 1)	(plus:SI (subreg:SI (match_dup 1) 1)		 (subreg:SI (match_dup 2) 1)))   (set (subreg:SI (match_dup 0) 1)	(plus:SI (subreg:SI (match_dup 0) 1)		 (match_dup 3)))]  "")(define_split  [(set (match_operand:DI 0 "register_operand" "")	(plus:DI (match_operand:DI 1 "register_operand" "")		 (match_operand:DI 2 "register_operand" "")))   (clobber (match_operand:SI 3 "register_operand" ""))]  "reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE   && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))   && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))   && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))   && (REGNO (operands[0]) != REGNO (operands[1])       || REGNO (operands[0]) != REGNO (operands[2]))"  [(set (subreg:SI (match_dup 0) 1)	(plus:SI (subreg:SI (match_dup 1) 1)		 (subreg:SI (match_dup 2) 1)))   (set (match_dup 3)	(ltu:SI (subreg:SI (match_dup 0) 1)		(subreg:SI (match_dup 2) 1)))   (set (subreg:SI (match_dup 0) 0)	(plus:SI (subreg:SI (match_dup 1) 0)		 (subreg:SI (match_dup 2) 0)))   (set (subreg:SI (match_dup 0) 0)	(plus:SI (subreg:SI (match_dup 0) 0)		 (match_dup 3)))]  "")(define_insn "adddi3_internal_2"  [(set (match_operand:DI 0 "register_operand" "=d,d,d")	(plus:DI (match_operand:DI 1 "register_operand" "%d,%d,%d")		 (match_operand:DI 2 "small_int" "P,J,N")))   (clobber (match_operand:SI 3 "register_operand" "=d,d,d"))]  "!TARGET_64BIT && !TARGET_DEBUG_G_MODE && INTVAL (operands[2]) != -32768"  "@   addu\\t%L0,%L1,%2\;sltu\\t%3,%L0,%2\;addu\\t%M0,%M1,%3   move\\t%L0,%L1\;move\\t%M0,%M1   subu\\t%L0,%L1,%n2\;sltu\\t%3,%L0,%2\;subu\\t%M0,%M1,1\;addu\\t%M0,%M0,%3"  [(set_attr "type"	"darith")   (set_attr "mode"	"DI")   (set_attr "length"	"3,2,4")])(define_split  [(set (match_operand:DI 0 "register_operand" "")	(plus:DI (match_operand:DI 1 "register_operand" "")		 (match_operand:DI 2 "small_int" "")))   (clobber (match_operand:SI 3 "register_operand" "=d"))]  "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE   && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))   && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))   && INTVAL (operands[2]) > 0"  [(set (subreg:SI (match_dup 0) 0)	(plus:SI (subreg:SI (match_dup 1) 0)		 (match_dup 2)))   (set (match_dup 3)	(ltu:SI (subreg:SI (match_dup 0) 0)		(match_dup 2)))   (set (subreg:SI (match_dup 0) 1)	(plus:SI (subreg:SI (match_dup 1) 1)		 (match_dup 3)))]  "")(define_split  [(set (match_operand:DI 0 "register_operand" "")	(plus:DI (match_operand:DI 1 "register_operand" "")		 (match_operand:DI 2 "small_int" "")))   (clobber (match_operand:SI 3 "register_operand" "=d"))]  "reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE   && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))   && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))   && INTVAL (operands[2]) > 0"  [(set (subreg:SI (match_dup 0) 1)	(plus:SI (subreg:SI (match_dup 1) 1)		 (match_dup 2)))   (set (match_dup 3)	(ltu:SI (subreg:SI (match_dup 0) 1)		(match_dup 2)))   (set (subreg:SI (match_dup 0) 0)	(plus:SI (subreg:SI (match_dup 1) 0)		 (match_dup 3)))]  "")(define_insn "adddi3_internal_3"  [(set (match_operand:DI 0 "register_operand" "=d")	(plus:DI (match_operand:DI 1 "se_reg_or_0_operand" "dJ")		 (match_operand:DI 2 "se_arith_operand" "dI")))]  "TARGET_64BIT && (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != -32768)"  "*{  return (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)    ? \"dsubu\\t%0,%z1,%n2\"    : \"daddu\\t%0,%z1,%2\";}"  [(set_attr "type"	"darith")   (set_attr "mode"	"DI")   (set_attr "length"	"1")])(define_insn "addsi3_internal_2"  [(set (match_operand:DI 0 "register_operand" "=d")	(sign_extend:DI (plus:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")				 (match_operand:SI 2 "arith_operand" "dI"))))]  "TARGET_64BIT && (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != -32768)"  "*{  return (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)    ? \"subu\\t%0,%z1,%n2\"    : \"addu\\t%0,%z1,%2\";}"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"1")]);;;;  ....................;;;;	SUBTRACTION;;;;  ....................;;(define_insn "subdf3"  [(set (match_operand:DF 0 "register_operand" "=f")	(minus:DF (match_operand:DF 1 "register_operand" "f")		  (match_operand:DF 2 "register_operand" "f")))]  "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"  "sub.d\\t%0,%1,%2"  [(set_attr "type"	"fadd")   (set_attr "mode"	"DF")   (set_attr "length"	"1")])(define_insn "subsf3"  [(set (match_operand:SF 0 "register_operand" "=f")	(minus:SF (match_operand:SF 1 "register_operand" "f")		  (match_operand:SF 2 "register_operand" "f")))]  "TARGET_HARD_FLOAT"  "sub.s\\t%0,%1,%2"  [(set_attr "type"	"fadd")   (set_attr "mode"	"SF")   (set_attr "length"	"1")])(define_expand "subsi3"  [(set (match_operand:SI 0 "register_operand" "=d")	(minus:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")		  (match_operand:SI 2 "arith_operand" "dI")))]  ""  "{  if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == -32768)    operands[2] = force_reg (SImode, operands[2]);}")(define_insn "subsi3_internal"  [(set (match_operand:SI 0 "register_operand" "=d")	(minus:SI (match_operand:SI 1 "reg_or_0_operand" "dJ")		  (match_operand:SI 2 "arith_operand" "dI")))]  "GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != -32768"  "subu\\t%0,%z1,%2"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"1")])(define_expand "subdi3"  [(parallel [(set (match_operand:DI 0 "register_operand" "=d")		   (minus:DI (match_operand:DI 1 "se_register_operand" "d")			     (match_operand:DI 2 "se_register_operand" "d")))	      (clobber (match_dup 3))])]  "TARGET_64BIT || !TARGET_DEBUG_G_MODE"  "{  if (TARGET_64BIT)    {      emit_insn (gen_subdi3_internal_3 (operands[0], operands[1],					operands[2]));      DONE;    }  operands[3] = gen_reg_rtx (SImode);}")(define_insn "subdi3_internal"  [(set (match_operand:DI 0 "register_operand" "=d")	(minus:DI (match_operand:DI 1 "register_operand" "d")		  (match_operand:DI 2 "register_operand" "d")))   (clobber (match_operand:SI 3 "register_operand" "=d"))]  "!TARGET_64BIT && !TARGET_DEBUG_G_MODE"  "sltu\\t%3,%L1,%L2\;subu\\t%L0,%L1,%L2\;subu\\t%M0,%M1,%M2\;subu\\t%M0,%M0,%3"  [(set_attr "type"	"darith")   (set_attr "mode"	"DI")   (set_attr "length"	"4")])(define_split  [(set (match_operand:DI 0 "register_operand" "")	(minus:DI (match_operand:DI 1 "register_operand" "")		  (match_operand:DI 2 "register_operand" "")))   (clobber (match_operand:SI 3 "register_operand" ""))]  "reload_completed && !WORDS_BIG_ENDIAN && !TARGET_64BIT && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE   && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))   && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))   && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"  [(set (match_dup 3)	(ltu:SI (subreg:SI (match_dup 1) 0)		(subreg:SI (match_dup 2) 0)))   (set (subreg:SI (match_dup 0) 0)	(minus:SI (subreg:SI (match_dup 1) 0)		  (subreg:SI (match_dup 2) 0)))   (set (subreg:SI (match_dup 0) 1)	(minus:SI (subreg:SI (match_dup 1) 1)		  (subreg:SI (match_dup 2) 1)))   (set (subreg:SI (match_dup 0) 1)	(minus:SI (subreg:SI (match_dup 0) 1)		  (match_dup 3)))]  "")(define_split  [(set (match_operand:DI 0 "register_operand" "")	(minus:DI (match_operand:DI 1 "register_operand" "")		  (match_operand:DI 2 "register_operand" "")))   (clobber (match_operand:SI 3 "register_operand" ""))]  "reload_completed && WORDS_BIG_ENDIAN && !TARGET_64BIT && !TARGET_DEBUG_D_MODE && !TARGET_DEBUG_G_MODE   && GET_CODE (operands[0]) == REG && GP_REG_P (REGNO (operands[0]))   && GET_CODE (operands[1]) == REG && GP_REG_P (REGNO (operands[1]))   && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"  [(set (match_dup 3)	(ltu:SI (subreg:SI (match_dup 1) 1)	        (subreg:SI (match_dup 2) 1)))   (set (subreg:SI (match_dup 0) 1)	(minus:SI (subreg:SI (match_dup 1) 1)		  (subreg:SI (match_dup 2) 1)))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -