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

📄 m88k.md

📁 早期freebsd实现
💻 MD
📖 第 1 页 / 共 5 页
字号:
  [(set (reg:SI 3) (minus:SI (match_operand:SI 2 "register_operand" "")			     (match_operand:SI 3 "immediate_operand" "")))   (set (match_operand 5 "register_operand" "")	(match_operand 4 "memory_operand" ""))   (set (reg:SI 2) (minus:SI (match_operand:SI 1 "register_operand" "")			     (match_dup 3)))   (use (reg:SI 2))   (use (reg:SI 3))   (use (match_dup 5))   (parallel [(set (reg:DI 2)		   (call (mem:SI (match_operand 0 "" ""))			 (const_int 0)))	      (clobber (reg:SI 1))])]  ""  "");; Call an SImode looping block move library function (e.g. __movstrSI64n68).;; operands 0-5 as in the non-looping interface;; operand 6 is the loop count(define_expand "call_movstrsi_loop"  [(set (reg:SI 3) (minus:SI (match_operand:SI 2 "register_operand" "")			     (match_operand:SI 3 "immediate_operand" "")))   (set (match_operand:SI 5 "register_operand" "")	(match_operand:SI 4 "memory_operand" ""))   (set (reg:SI 2) (minus:SI (match_operand:SI 1 "register_operand" "")			     (match_dup 3)))   (set (reg:SI 6) (match_operand:SI 6 "immediate_operand" ""))   (use (reg:SI 2))   (use (reg:SI 3))   (use (match_dup 5))   (use (reg:SI 6))   (parallel [(set (reg:DI 2)		   (call (mem:SI (match_operand 0 "" ""))			 (const_int 0)))	      (clobber (reg:SI 1))])]  ""  "");;- zero extension instructions(define_expand "zero_extendhisi2"  [(set (match_operand:SI 0 "register_operand" "")	(zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))]  ""  "{  if (GET_CODE (operands[1]) == MEM      && symbolic_address_p (XEXP (operands[1], 0)))    operands[1]      = legitimize_address (flag_pic, operands[1], 0, 0);}")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r,r,r")	(zero_extend:SI (match_operand:HI 1 "move_operand" "!r,n,m")))]  "GET_CODE (operands[1]) != CONST_INT"  "@   mask %0,%1,0xffff   or %0,%#r0,%h1   %V1ld.hu %0,%1"  [(set_attr "type" "arith,arith,load")])(define_expand "zero_extendqihi2"  [(set (match_operand:HI 0 "register_operand" "")	(zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))]  ""  "{  if (GET_CODE (operands[1]) == MEM      && symbolic_address_p (XEXP (operands[1], 0)))    operands[1]      = legitimize_address (flag_pic, operands[1], 0, 0);}")(define_insn ""  [(set (match_operand:HI 0 "register_operand" "=r,r,r")	(zero_extend:HI (match_operand:QI 1 "move_operand" "r,n,m")))]  "GET_CODE (operands[1]) != CONST_INT"  "@   mask %0,%1,0xff   or %0,%#r0,%q1   %V1ld.bu %0,%1"  [(set_attr "type" "arith,arith,load")])(define_expand "zero_extendqisi2"  [(set (match_operand:SI 0 "register_operand" "")	(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]  ""  "{  if (GET_CODE (operands[1]) == MEM      && symbolic_address_p (XEXP (operands[1], 0)))    {      operands[1]	= legitimize_address (flag_pic, operands[1], 0, 0);      emit_insn (gen_rtx (SET, VOIDmode, operands[0],			  gen_rtx (ZERO_EXTEND, SImode, operands[1])));      DONE;    }}")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r,r,r")	(zero_extend:SI (match_operand:QI 1 "move_operand" "r,n,m")))]  "GET_CODE (operands[1]) != CONST_INT"  "@   mask %0,%1,0xff   or %0,%#r0,%q1   %V1ld.bu %0,%1"  [(set_attr "type" "arith,arith,load")]);;- sign extension instructions(define_expand "extendsidi2"  [(set (subreg:SI (match_operand:DI 0 "register_operand" "=r") 1)        (match_operand:SI 1 "general_operand" "g"))   (set (subreg:SI (match_dup 0) 0)        (ashiftrt:SI (subreg:SI (match_dup 0) 1)                     (const_int 31)))]  ""  "")(define_expand "extendhisi2"  [(set (match_operand:SI 0 "register_operand" "")	(sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))]  ""  "{  if (GET_CODE (operands[1]) == MEM      && symbolic_address_p (XEXP (operands[1], 0)))    operands[1]      = legitimize_address (flag_pic, operands[1], 0, 0);}")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")	(sign_extend:SI (match_operand:HI 1 "move_operand" "!r,P,N,m")))]  "GET_CODE (operands[1]) != CONST_INT"  "@   ext %0,%1,16<0>   or %0,%#r0,%h1   subu %0,%#r0,%H1   %V1ld.h %0,%1"  [(set_attr "type" "bit,arith,arith,load")])(define_expand "extendqihi2"  [(set (match_operand:HI 0 "register_operand" "")	(sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))]  ""  "{  if (GET_CODE (operands[1]) == MEM      && symbolic_address_p (XEXP (operands[1], 0)))    operands[1]      = legitimize_address (flag_pic, operands[1], 0, 0);}")(define_insn ""  [(set (match_operand:HI 0 "register_operand" "=r,r,r,r")	(sign_extend:HI (match_operand:QI 1 "move_operand" "!r,P,N,m")))]  "GET_CODE (operands[1]) != CONST_INT"  "@   ext %0,%1,8<0>   or %0,%#r0,%q1   subu %0,%#r0,%Q1   %V1ld.b %0,%1"  [(set_attr "type" "bit,arith,arith,load")])(define_expand "extendqisi2"  [(set (match_operand:SI 0 "register_operand" "")	(sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]  ""  "{  if (GET_CODE (operands[1]) == MEM      && symbolic_address_p (XEXP (operands[1], 0)))    operands[1]      = legitimize_address (flag_pic, operands[1], 0, 0);}")(define_insn ""  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")	(sign_extend:SI (match_operand:QI 1 "move_operand" "!r,P,N,m")))]  "GET_CODE (operands[1]) != CONST_INT"  "@   ext %0,%1,8<0>   or %0,%#r0,%q1   subu %0,%#r0,%Q1   %V1ld.b %0,%1"  [(set_attr "type" "bit,arith,arith,load")]);; Conversions between float and double.;; The fadd instruction does not conform to IEEE 754 when used to;; convert between float and double.  In particular, the sign of -0 is;; not preserved.  Interestingly, fsub does conform.(define_expand "extendsfdf2"  [(set (match_operand:DF 0 "register_operand" "=r")	(float_extend:DF (match_operand:SF 1 "register_operand" "r")))]  ""  "")(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=r")	(float_extend:DF (match_operand:SF 1 "register_operand" "r")))]  "! TARGET_88110"  "fsub.dss %0,%1,%#r0"  [(set_attr "type" "spadd")])(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=r,x")	(float_extend:DF (match_operand:SF 1 "register_operand" "r,x")))]  "TARGET_88110"  "fcvt.ds %0,%1"  [(set_attr "type" "spadd")])(define_expand "truncdfsf2"  [(set (match_operand:SF 0 "register_operand" "=r")	(float_truncate:SF (match_operand:DF 1 "register_operand" "r")))]  ""  "")(define_insn ""  [(set (match_operand:SF 0 "register_operand" "=r")	(float_truncate:SF (match_operand:DF 1 "register_operand" "r")))]  "! TARGET_88110"  "fsub.sds %0,%1,%#r0"  [(set_attr "type" "dpadd")])(define_insn ""  [(set (match_operand:SF 0 "register_operand" "=r,x")	(float_truncate:SF (match_operand:DF 1 "register_operand" "r,x")))]  "TARGET_88110"  "fcvt.sd %0,%1"  [(set_attr "type" "dpadd")]);; Conversions between floating point and integer(define_insn "floatsidf2"  [(set (match_operand:DF 0 "register_operand" "=r,x")	(float:DF (match_operand:SI 1 "register_operand" "r,r")))]  ""  "flt.ds %0,%1"  [(set_attr "type" "spadd,dpadd")])(define_insn "floatsisf2"  [(set (match_operand:SF 0 "register_operand" "=r,x")	(float:SF (match_operand:SI 1 "register_operand" "r,r")))]  ""  "flt.ss %0,%1"  [(set_attr "type" "spadd,spadd")])(define_insn "fix_truncdfsi2"  [(set (match_operand:SI 0 "register_operand" "=r,x")	(fix:SI (match_operand:DF 1 "register_operand" "r,r")))]  ""  "trnc.sd %0,%1"  [(set_attr "type" "dpadd,dpadd")])(define_insn "fix_truncsfsi2"  [(set (match_operand:SI 0 "register_operand" "=r,x")	(fix:SI (match_operand:SF 1 "register_operand" "r,r")))]  ""  "trnc.ss %0,%1"  [(set_attr "type" "spadd,dpadd")]);;- arithmetic instructions;;- add instructions(define_insn "addsi3"  [(set (match_operand:SI 0 "register_operand" "=r,r")	(plus:SI (match_operand:SI 1 "add_operand" "%r,r")		 (match_operand:SI 2 "add_operand" "rI,J")))]  ""  "@   addu %0,%1,%2   subu %0,%1,%n2");; patterns for mixed mode floating point.;; Do not define patterns that utilize mixed mode arithmetic that result;; in narrowing the precision, because it loses accuracy, since the standard;; requires double rounding, whereas the 88000 instruction only rounds once.(define_expand "adddf3"  [(set (match_operand:DF 0 "register_operand" "=r,x")	(plus:DF (match_operand:DF 1 "general_operand" "%r,x")		 (match_operand:DF 2 "general_operand" "r,x")))]  ""  "{  operands[1] = legitimize_operand (operands[1], DFmode);  operands[2] = legitimize_operand (operands[2], DFmode);}")(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=r,x")	(plus:DF (float_extend:DF (match_operand:SF 1 "register_operand" "r,x"))		 (float_extend:DF (match_operand:SF 2 "register_operand" "r,x"))))]  ""  "fadd.dss %0,%1,%2"  [(set_attr "type" "spadd")])(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=r,x")	(plus:DF (match_operand:DF 1 "register_operand" "r,x")		 (float_extend:DF (match_operand:SF 2 "register_operand" "r,x"))))]  ""  "fadd.dds %0,%1,%2"  [(set_attr "type" "dpadd")])(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=r,x")	(plus:DF (float_extend:DF (match_operand:SF 1 "register_operand" "r,x"))		 (match_operand:DF 2 "register_operand" "r,x")))]  ""  "fadd.dsd %0,%1,%2"  [(set_attr "type" "dpadd")])(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=r,x")	(plus:DF (match_operand:DF 1 "register_operand" "%r,x")		 (match_operand:DF 2 "register_operand" "r,x")))]  ""  "fadd.ddd %0,%1,%2"  [(set_attr "type" "dpadd")])(define_insn "addsf3"  [(set (match_operand:SF 0 "register_operand" "=r,x")	(plus:SF (match_operand:SF 1 "register_operand" "%r,x")		 (match_operand:SF 2 "register_operand" "r,x")))]  ""  "fadd.sss %0,%1,%2"  [(set_attr "type" "spadd")])(define_insn ""  [(set (match_operand:DI 0 "register_operand" "=r")	(plus:DI (match_operand:DI 1 "register_operand" "r")		 (zero_extend:DI		  (match_operand:SI 2 "register_operand" "r"))))   (clobber (reg:CC 0))]  ""  "addu.co %d0,%d1,%2\;addu.ci %0,%1,%#r0"  [(set_attr "type" "marith")])(define_insn ""  [(set (match_operand:DI 0 "register_operand" "=r")	(plus:DI (zero_extend:DI		  (match_operand:SI 1 "register_operand" "r"))		 (match_operand:DI 2 "register_operand" "r")))   (clobber (reg:CC 0))]  ""  "addu.co %d0,%1,%d2\;addu.ci %0,%#r0,%2"  [(set_attr "type" "marith")])(define_insn "adddi3"  [(set (match_operand:DI 0 "register_operand" "=r")	(plus:DI (match_operand:DI 1 "register_operand" "%r")		 (match_operand:DI 2 "register_operand" "r")))   (clobber (reg:CC 0))]  ""  "addu.co %d0,%d1,%d2\;addu.ci %0,%1,%2"  [(set_attr "type" "marith")]);; Add with carry insns.(define_insn ""  [(parallel [(set (match_operand:SI 0 "reg_or_0_operand" "=r")		   (plus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")			    (match_operand:SI 2 "reg_or_0_operand" "rO")))	      (set (reg:CC 0)		   (unspec:CC [(match_dup 1) (match_dup 2)] 0))])]  ""  "addu.co %r0,%r1,%r2")(define_insn ""  [(set (reg:CC 0) (unspec:CC [(match_operand:SI 0 "reg_or_0_operand" "rO")			       (match_operand:SI 1 "reg_or_0_operand" "rO")]			      0))]  ""  "addu.co %#r0,%r0,%r1")(define_insn ""  [(set (match_operand:SI 0 "reg_or_0_operand" "=r")	(plus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")		 (unspec:SI [(match_operand:SI 2 "reg_or_0_operand" "rO")			     (reg:CC 0)] 0)))]  ""  "addu.ci %r0,%r1,%r2");;- subtract instructions(define_insn "subsi3"  [(set (match_operand:SI 0 "register_operand" "=r")	(minus:SI (match_operand:SI 1 "register_operand" "r")		  (match_operand:SI 2 "arith32_operand" "rI")))]  ""  "subu %0,%1,%2");; patterns for mixed mode floating point;; Do not define patterns that utilize mixed mode arithmetic that result;; in narrowing the precision, because it loses accuracy, since the standard;; requires double rounding, whereas the 88000 instruction only rounds once.(define_expand "subdf3"  [(set (match_operand:DF 0 "register_operand" "=r,x")	(minus:DF (match_operand:DF 1 "general_operand" "r,x")		  (match_operand:DF 2 "general_operand" "r,x")))]  ""  "{  operands[1] = legitimize_operand (operands[1], DFmode);  operands[2] = legitimize_operand (operands[2], DFmode);}")(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=r,x")	(minus:DF (float_extend:DF (match_operand:SF 1 "register_operand" "r,x"))		  (float_extend:DF (match_operand:SF 2 "register_operand" "r,x"))))]  ""  "fsub.dss %0,%1,%2"  [(set_attr "type" "spadd")])(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=r,x")	(minus:DF (match_operand:DF 1 "register_operand" "r,x")		  (float_extend:DF (match_operand:SF 2 "register_operand" "r,x"))))]  ""  "fsub.dds %0,%1,%2"  [(set_attr "type" "dpadd")])(define_insn ""  [(set (match_operand:DF 0 "register_operand" "=r,x")	(m

⌨️ 快捷键说明

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