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

📄 alpha.md

📁 linux下的gcc编译器
💻 MD
📖 第 1 页 / 共 5 页
字号:
(define_insn "*adddi_internal"  [(set (match_operand:DI 0 "register_operand" "=r,r,r")	(plus:DI (match_operand:DI 1 "register_operand" "%r,r,r")		 (match_operand:DI 2 "add_operand" "r,K,L")))]  ""  "@   addq %1,%2,%0   lda %0,%2(%1)   ldah %0,%h2(%1)");; ??? Allow large constants when basing off the frame pointer or some;; virtual register that may eliminate to the frame pointer.  This is;; done because register elimination offsets will change the hi/lo split,;; and if we split before reload, we will require additional instructions.(define_insn "*adddi_fp_hack"  [(set (match_operand:DI 0 "register_operand" "=r")        (plus:DI (match_operand:DI 1 "reg_no_subreg_operand" "r")		 (match_operand:DI 2 "const_int_operand" "n")))]  "NONSTRICT_REG_OK_FP_BASE_P (operands[1])   && INTVAL (operands[2]) >= 0   /* This is the largest constant an lda+ldah pair can add, minus      an upper bound on the displacement between SP and AP during      register elimination.  See INITIAL_ELIMINATION_OFFSET.  */   && INTVAL (operands[2])	< (0x7fff8000	   - FIRST_PSEUDO_REGISTER * UNITS_PER_WORD	   - ALPHA_ROUND(current_function_outgoing_args_size)	   - (ALPHA_ROUND (get_frame_size ()			   + max_reg_num () * UNITS_PER_WORD			   + current_function_pretend_args_size)	      - current_function_pretend_args_size))"  "#");; Don't do this if we are adjusting SP since we don't want to do it;; in two steps.  Don't split FP sources for the reason listed above.(define_split  [(set (match_operand:DI 0 "register_operand" "")	(plus:DI (match_operand:DI 1 "register_operand" "")		 (match_operand:DI 2 "const_int_operand" "")))]  "! add_operand (operands[2], DImode)   && operands[0] != stack_pointer_rtx   && operands[1] != frame_pointer_rtx   && operands[1] != arg_pointer_rtx"  [(set (match_dup 0) (plus:DI (match_dup 1) (match_dup 3)))   (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 4)))]{  HOST_WIDE_INT val = INTVAL (operands[2]);  HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000);  HOST_WIDE_INT rest = val - low;  operands[4] = GEN_INT (low);  if (CONST_OK_FOR_LETTER_P (rest, 'L'))    operands[3] = GEN_INT (rest);  else if (! no_new_pseudos)    {      operands[3] = gen_reg_rtx (DImode);      emit_move_insn (operands[3], operands[2]);      emit_insn (gen_adddi3 (operands[0], operands[1], operands[3]));      DONE;    }  else    FAIL;})(define_insn "*saddl"  [(set (match_operand:SI 0 "register_operand" "=r,r")	(plus:SI (mult:SI (match_operand:SI 1 "reg_not_elim_operand" "r,r")			  (match_operand:SI 2 "const48_operand" "I,I"))		 (match_operand:SI 3 "sext_add_operand" "rI,O")))]  ""  "@   s%2addl %1,%3,%0   s%2subl %1,%n3,%0")(define_insn "*saddl_se"  [(set (match_operand:DI 0 "register_operand" "=r,r")	(sign_extend:DI	 (plus:SI (mult:SI (match_operand:SI 1 "reg_not_elim_operand" "r,r")			   (match_operand:SI 2 "const48_operand" "I,I"))		  (match_operand:SI 3 "sext_add_operand" "rI,O"))))]  ""  "@   s%2addl %1,%3,%0   s%2subl %1,%n3,%0")(define_split  [(set (match_operand:DI 0 "register_operand" "")	(sign_extend:DI	 (plus:SI (mult:SI (match_operator:SI 1 "comparison_operator"					      [(match_operand 2 "" "")					       (match_operand 3 "" "")])			   (match_operand:SI 4 "const48_operand" ""))		  (match_operand:SI 5 "sext_add_operand" ""))))   (clobber (match_operand:DI 6 "reg_not_elim_operand" ""))]  ""  [(set (match_dup 6) (match_dup 7))   (set (match_dup 0)	(sign_extend:DI (plus:SI (mult:SI (match_dup 8) (match_dup 4))				 (match_dup 5))))]{  operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[1]), DImode,				operands[2], operands[3]);  operands[8] = gen_lowpart (SImode, operands[6]);})(define_insn "*saddq"  [(set (match_operand:DI 0 "register_operand" "=r,r")	(plus:DI (mult:DI (match_operand:DI 1 "reg_not_elim_operand" "r,r")			  (match_operand:DI 2 "const48_operand" "I,I"))		 (match_operand:DI 3 "sext_add_operand" "rI,O")))]  ""  "@   s%2addq %1,%3,%0   s%2subq %1,%n3,%0")(define_insn "addvdi3"  [(set (match_operand:DI 0 "register_operand" "=r,r")	(plus:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,rJ")		 (match_operand:DI 2 "sext_add_operand" "rI,O")))   (trap_if (ne (plus:TI (sign_extend:TI (match_dup 1))			 (sign_extend:TI (match_dup 2)))		(sign_extend:TI (plus:DI (match_dup 1)					 (match_dup 2))))	    (const_int 0))]  ""  "@   addqv %r1,%2,%0   subqv %r1,%n2,%0")(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 "*negsi_se"  [(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 "negvsi2"  [(set (match_operand:SI 0 "register_operand" "=r")	(neg:SI (match_operand:SI 1 "register_operand" "r")))   (trap_if (ne (neg:DI (sign_extend:DI (match_dup 1)))		(sign_extend:DI (neg:SI (match_dup 1))))	    (const_int 0))]  ""  "sublv $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_insn "negvdi2"  [(set (match_operand:DI 0 "register_operand" "=r")	(neg:DI (match_operand:DI 1 "register_operand" "r")))   (trap_if (ne (neg:TI (sign_extend:TI (match_dup 1)))		(sign_extend:TI (neg:DI (match_dup 1))))	    (const_int 0))]  ""  "subqv $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" "")))]  "! optimize"  "")(define_insn "*subsi_internal"  [(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 "*subsi_se"  [(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 "*subsi_se2"  [(set (match_operand:DI 0 "register_operand" "=r")	(sign_extend:DI	 (subreg:SI (minus:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")			      (match_operand:DI 2 "reg_or_8bit_operand" "rI"))		    0)))]  ""  "subl %r1,%2,%0")(define_insn "subvsi3"  [(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")))   (trap_if (ne (minus:DI (sign_extend:DI (match_dup 1))			  (sign_extend:DI (match_dup 2)))		(sign_extend:DI (minus:SI (match_dup 1)					  (match_dup 2))))	    (const_int 0))]  ""  "sublv %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 "*ssubl"  [(set (match_operand:SI 0 "register_operand" "=r")	(minus:SI (mult:SI (match_operand:SI 1 "reg_not_elim_operand" "r")			   (match_operand:SI 2 "const48_operand" "I"))		  (match_operand:SI 3 "reg_or_8bit_operand" "rI")))]  ""  "s%2subl %1,%3,%0")(define_insn "*ssubl_se"  [(set (match_operand:DI 0 "register_operand" "=r")	(sign_extend:DI	 (minus:SI (mult:SI (match_operand:SI 1 "reg_not_elim_operand" "r")			    (match_operand:SI 2 "const48_operand" "I"))		   (match_operand:SI 3 "reg_or_8bit_operand" "rI"))))]  ""  "s%2subl %1,%3,%0")(define_insn "*ssubq"  [(set (match_operand:DI 0 "register_operand" "=r")	(minus:DI (mult:DI (match_operand:DI 1 "reg_not_elim_operand" "r")			   (match_operand:DI 2 "const48_operand" "I"))		  (match_operand:DI 3 "reg_or_8bit_operand" "rI")))]  ""  "s%2subq %1,%3,%0")(define_insn "subvdi3"  [(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")))   (trap_if (ne (minus:TI (sign_extend:TI (match_dup 1))			  (sign_extend:TI (match_dup 2)))		(sign_extend:TI (minus:DI (match_dup 1)					  (match_dup 2))))	    (const_int 0))]  ""  "subqv %r1,%2,%0");; The Unicos/Mk assembler doesn't support mull.(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_8bit_operand" "rI")))]  "!TARGET_ABI_UNICOSMK"  "mull %r1,%2,%0"  [(set_attr "type" "imul")   (set_attr "opsize" "si")])(define_insn "*mulsi_se"  [(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_8bit_operand" "rI"))))]  "!TARGET_ABI_UNICOSMK"  "mull %r1,%2,%0"  [(set_attr "type" "imul")   (set_attr "opsize" "si")])(define_insn "mulvsi3"  [(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_8bit_operand" "rI")))   (trap_if (ne (mult:DI (sign_extend:DI (match_dup 1))			 (sign_extend:DI (match_dup 2)))		(sign_extend:DI (mult:SI (match_dup 1)					 (match_dup 2))))	    (const_int 0))]  "!TARGET_ABI_UNICOSMK"  "mullv %r1,%2,%0"  [(set_attr "type" "imul")   (set_attr "opsize" "si")])(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_8bit_operand" "rI")))]  ""  "mulq %r1,%2,%0"  [(set_attr "type" "imul")])(define_insn "mulvdi3"  [(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_8bit_operand" "rI")))   (trap_if (ne (mult:TI (sign_extend:TI (match_dup 1))			 (sign_extend:TI (match_dup 2)))		(sign_extend:TI (mult:DI (match_dup 1)					 (match_dup 2))))	    (const_int 0))]  ""  "mulqv %r1,%2,%0"  [(set_attr "type" "imul")])(define_expand "umuldi3_highpart"  [(set (match_operand:DI 0 "register_operand" "")	(truncate:DI	 (lshiftrt:TI	  (mult:TI (zero_extend:TI		     (match_operand:DI 1 "register_operand" ""))		   (match_operand:DI 2 "reg_or_8bit_operand" ""))	  (const_int 64))))]  ""{  if (REG_P (operands[2]))    operands[2] = gen_rtx_ZERO_EXTEND (TImode, operands[2]);})(define_insn "*umuldi3_highpart_reg"  [(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" "imul")   (set_attr "opsize" "udi")])(define_insn "*umuldi3_highpart_const"  [(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" "imul")   (set_attr "opsize" "udi")]);; The divide and remainder operations take their inputs from r24 and;; r25, put their output in r27, and clobber r23 and r28 on all;; systems except Unicos/Mk. On Unicos, the standard library provides;; subroutines which use the standard calling convention and work on;; DImode operands.;; ??? Force sign-extension here because some versions of OSF/1 and;; Interix/NT don't do the right thing if the inputs are not properly;; sign-extended.  But Linux, for instance, does not have this;; problem.  Is it worth the complication here to eliminate the sign;; extension?(define_expand "divsi3"  [(set (match_dup 3)	(sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))   (set (match_dup 4)	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "")))   (parallel [(set (match_dup 5)		   (sign_extend:DI (div:SI (match_dup 3) (match_dup 4))))	      (clobber (reg:DI 23))	      (clobber (reg:DI 28))])   (set (match_operand:SI 0 "nonimmediate_operand" "")	(subreg:SI (match_dup 5) 0))]  "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"{  operands[3] = gen_reg_rtx (DImode);  operands[4] = gen_reg_rtx (DImode);  operands[5] = gen_reg_rtx (DImode);})(define_expand "udivsi3"  [(set (match_dup 3)	(sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))   (set (match_dup 4)	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "")))   (parallel [(set (match_dup 5)		   (sign_extend:DI (udiv:SI (match_dup 3) (match_dup 4))))	      (clobber (reg:DI 23))	      (clobber (reg:DI 28))])   (set (match_operand:SI 0 "nonimmediate_operand" "")	(subreg:SI (match_dup 5) 0))]  "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"{  operands[3] = gen_reg_rtx (DImode);  operands[4] = gen_reg_rtx (DImode);  operands[5] = gen_reg_rtx (DImode);})(define_expand "modsi3"  [(set (match_dup 3)	(sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))   (set (match_dup 4)	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "")))   (parallel [(set (match_dup 5)		   (sign_extend:DI (mod:SI (match_dup 3) (match_dup 4))))	      (clobber (reg:DI 23))	      (clobber (reg:DI 28))])   (set (match_operand:SI 0 "nonimmediate_operand" "")	(subreg:SI (match_dup 5) 0))]  "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK"{  operands[3] = gen_reg_rtx (DImode);  operands[4] = gen_reg_rtx (DImode);  operands[5] = gen_reg_rtx (DImode);})(define_expand "umodsi3"  [(set (match_dup 3)	(sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "")))   (set (match_dup 4)	(sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "")))

⌨️ 快捷键说明

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