From 96f46444e146883a2edbf66ba29a911e08e05037 Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Fri, 8 Dec 2006 12:42:44 +0000 Subject: [PATCH] bfin.c (effective_address_32bit_p): Return true for anything involving the GOT. * config/bfin/bfin.c (effective_address_32bit_p): Return true for anything involving the GOT. (bfin_adjust_cost): Don't take the REGNO of a MEM. (trapping_loads_p): Look inside the pattern of an insn to find the SET. * config/bfin/bfin.md (attr "type"): Add movcc. (insn_reservation "alu"): Likewise. (movsicc_insn1, movsicc_insn2): Change type to movcc. From-SVN: r119655 --- gcc/ChangeLog | 11 +++++++++++ gcc/config/bfin/bfin.c | 12 +++++++++--- gcc/config/bfin/bfin.md | 8 ++++---- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6a38e9ded50..998d8c9f6a3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2006-12-08 Bernd Schmidt + + * config/bfin/bfin.c (effective_address_32bit_p): Return true for + anything involving the GOT. + (bfin_adjust_cost): Don't take the REGNO of a MEM. + (trapping_loads_p): Look inside the pattern of an insn to find the + SET. + * config/bfin/bfin.md (attr "type"): Add movcc. + (insn_reservation "alu"): Likewise. + (movsicc_insn1, movsicc_insn2): Change type to movcc. + 2006-12-07 Andrew Pinski * config/spu/spu-c.c (spu_build_overload_builtin): Delete. diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index abfeaeec2b6..e31ced12bd3 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -1097,6 +1097,9 @@ effective_address_32bit_p (rtx op, enum machine_mode mode) return 0; } + if (GET_CODE (XEXP (op, 1)) == UNSPEC) + return 1; + offset = INTVAL (XEXP (op, 1)); /* All byte loads use a 16 bit offset. */ @@ -2997,7 +3000,8 @@ bfin_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost) rtx pat = PATTERN (dep_insn); rtx dest = SET_DEST (pat); rtx src = SET_SRC (pat); - if (! ADDRESS_REGNO_P (REGNO (dest)) || ! D_REGNO_P (REGNO (src))) + if (! ADDRESS_REGNO_P (REGNO (dest)) + || ! (MEM_P (src) || D_REGNO_P (REGNO (src)))) return cost; return cost + (dep_insn_type == TYPE_MOVE ? 4 : 3); } @@ -3918,10 +3922,12 @@ trapping_loads_p (rtx insn) { enum attr_type t; t = get_attr_type (XVECEXP (pat, 0, 1)); - if (t == TYPE_MCLD && may_trap_p (SET_SRC (XVECEXP (pat, 0, 1)))) + if (t == TYPE_MCLD + && may_trap_p (SET_SRC (PATTERN (XVECEXP (pat, 0, 1))))) return true; t = get_attr_type (XVECEXP (pat, 0, 2)); - if (t == TYPE_MCLD && may_trap_p (SET_SRC (XVECEXP (pat, 0, 2)))) + if (t == TYPE_MCLD + && may_trap_p (SET_SRC (PATTERN (XVECEXP (pat, 0, 2))))) return true; return false; } diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md index 45423275193..8a59ce8fd9a 100644 --- a/gcc/config/bfin/bfin.md +++ b/gcc/config/bfin/bfin.md @@ -159,7 +159,7 @@ (MACFLAG_IH 10)]) (define_attr "type" - "move,mvi,mcld,mcst,dsp32,mult,alu0,shft,brcc,br,call,misc,sync,compare,dummy" + "move,movcc,mvi,mcld,mcst,dsp32,mult,alu0,shft,brcc,br,call,misc,sync,compare,dummy" (const_string "misc")) (define_attr "addrtype" "32bit,preg,ireg" @@ -198,7 +198,7 @@ (define_reservation "core" "slot0+slot1+slot2") (define_insn_reservation "alu" 1 - (eq_attr "type" "move,mvi,alu0,shft,brcc,br,call,misc,sync,compare") + (eq_attr "type" "move,movcc,mvi,alu0,shft,brcc,br,call,misc,sync,compare") "core") (define_insn_reservation "imul" 3 @@ -352,7 +352,7 @@ if cc %0 =%2; /* movsicc-1b */ if !cc %0 =%1; if cc %0=%2; /* movsicc-1 */" [(set_attr "length" "2,2,4") - (set_attr "type" "move") + (set_attr "type" "movcc") (set_attr "seq_insns" "*,*,multi")]) (define_insn "*movsicc_insn2" @@ -368,7 +368,7 @@ if cc %0 =%1; /* movsicc-2a */ if cc %0 =%1; if !cc %0=%2; /* movsicc-1 */" [(set_attr "length" "2,2,4") - (set_attr "type" "move") + (set_attr "type" "movcc") (set_attr "seq_insns" "*,*,multi")]) ;; Insns to load HIGH and LO_SUM -- 2.30.2