Mercurial > hg > CbC > CbC_gcc
diff gcc/config/sparc/sparc.md @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | b7f97abdc517 |
children | 04ced10e8804 |
line wrap: on
line diff
--- a/gcc/config/sparc/sparc.md Tue May 25 18:58:51 2010 +0900 +++ b/gcc/config/sparc/sparc.md Tue Mar 22 17:18:12 2011 +0900 @@ -75,6 +75,7 @@ (UNSPECV_CAS 8) (UNSPECV_SWAP 9) (UNSPECV_LDSTUB 10) + (UNSPECV_PROBE_STACK_RANGE 11) ]) @@ -103,9 +104,14 @@ cypress, v8, supersparc, - sparclite,f930,f934, - hypersparc,sparclite86x, - sparclet,tsc701, + hypersparc, + leon, + sparclite, + f930, + f934, + sparclite86x, + sparclet, + tsc701, v9, ultrasparc, ultrasparc3, @@ -338,6 +344,7 @@ (include "cypress.md") (include "supersparc.md") (include "hypersparc.md") +(include "leon.md") (include "sparclet.md") (include "ultra1_2.md") (include "ultra3.md") @@ -1106,14 +1113,15 @@ ;; Load in operand 0 the (absolute) address of operand 1, which is a symbolic ;; value subject to a PC-relative relocation. Operand 2 is a helper function -;; that adds the PC value at the call point to operand 0. +;; that adds the PC value at the call point to register #(operand 3). (define_insn "load_pcrel_sym<P:mode>" [(set (match_operand:P 0 "register_operand" "=r") (unspec:P [(match_operand:P 1 "symbolic_operand" "") - (match_operand:P 2 "call_address_operand" "")] UNSPEC_LOAD_PCREL_SYM)) + (match_operand:P 2 "call_address_operand" "") + (match_operand:P 3 "const_int_operand" "")] UNSPEC_LOAD_PCREL_SYM)) (clobber (reg:P 15))] - "" + "REGNO (operands[0]) == INTVAL (operands[3])" { if (flag_delayed_branch) return "sethi\t%%hi(%a1-4), %0\n\tcall\t%a2\n\t add\t%0, %%lo(%a1+4), %0"; @@ -3506,7 +3514,7 @@ } }) -(define_insn_and_split "adddi3_insn_sp32" +(define_insn_and_split "*adddi3_insn_sp32" [(set (match_operand:DI 0 "register_operand" "=r") (plus:DI (match_operand:DI 1 "arith_double_operand" "%r") (match_operand:DI 2 "arith_double_operand" "rHI"))) @@ -3579,7 +3587,7 @@ "addx\t%r1, %2, %0" [(set_attr "type" "ialuX")]) -(define_insn_and_split "" +(define_insn_and_split "*adddi3_extend_sp32" [(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"))) @@ -3679,7 +3687,7 @@ } }) -(define_insn_and_split "subdi3_insn_sp32" +(define_insn_and_split "*subdi3_insn_sp32" [(set (match_operand:DI 0 "register_operand" "=r") (minus:DI (match_operand:DI 1 "register_operand" "r") (match_operand:DI 2 "arith_double_operand" "rHI"))) @@ -3751,7 +3759,7 @@ operands[4] = gen_highpart (SImode, operands[0]);" [(set_attr "length" "2")]) -(define_insn_and_split "" +(define_insn_and_split "*subdi3_extend_sp32" [(set (match_operand:DI 0 "register_operand" "=r") (minus:DI (match_operand:DI 1 "register_operand" "r") (zero_extend:DI (match_operand:SI 2 "register_operand" "r")))) @@ -5063,7 +5071,7 @@ [(set (match_operand:DI 0 "register_operand" "=r") (neg:DI (match_operand:DI 1 "register_operand" "r"))) (clobber (reg:CC 100))] - "TARGET_ARCH32" + "! TARGET_ARCH64" "#" "&& reload_completed" [(parallel [(set (reg:CC_NOOV 100) @@ -6340,6 +6348,15 @@ = adjust_address (operands[0], GET_MODE (operands[0]), SPARC_STACK_BIAS); }) +(define_insn "probe_stack_range<P:mode>" + [(set (match_operand:P 0 "register_operand" "=r") + (unspec_volatile:P [(match_operand:P 1 "register_operand" "0") + (match_operand:P 2 "register_operand" "r")] + UNSPECV_PROBE_STACK_RANGE))] + "" + "* return output_probe_stack_range (operands[0], operands[2]);" + [(set_attr "type" "multi")]) + ;; Prepare to return any type including a structure value. (define_expand "untyped_return"