| Index: gcc/gcc/config/rs6000/power5.md
|
| diff --git a/gcc/gcc/config/rs6000/power5.md b/gcc/gcc/config/rs6000/power5.md
|
| index 1b73e093e6ed77d42446cc96be2c2cdf0ad893f4..b6db0931219d993c54bf6870a487fbd0a1646788 100644
|
| --- a/gcc/gcc/config/rs6000/power5.md
|
| +++ b/gcc/gcc/config/rs6000/power5.md
|
| @@ -1,5 +1,5 @@
|
| ;; Scheduling description for IBM POWER5 processor.
|
| -;; Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
|
| +;; Copyright (C) 2003, 2004, 2007, 2009 Free Software Foundation, Inc.
|
| ;;
|
| ;; This file is part of GCC.
|
| ;;
|
| @@ -40,16 +40,12 @@
|
| |(du4_power5,lsu1_power5)")
|
|
|
| (define_reservation "iq_power5"
|
| - "(du1_power5,iu1_power5)\
|
| - |(du2_power5,iu2_power5)\
|
| - |(du3_power5,iu2_power5)\
|
| - |(du4_power5,iu1_power5)")
|
| + "(du1_power5|du2_power5|du3_power5|du4_power5),\
|
| + (iu1_power5|iu2_power5)")
|
|
|
| (define_reservation "fpq_power5"
|
| - "(du1_power5,fpu1_power5)\
|
| - |(du2_power5,fpu2_power5)\
|
| - |(du3_power5,fpu2_power5)\
|
| - |(du4_power5,fpu1_power5)")
|
| + "(du1_power5|du2_power5|du3_power5|du4_power5),\
|
| + (fpu1_power5|fpu2_power5)")
|
|
|
| ; Dispatch slots are allocated in order conforming to program order.
|
| (absence_set "du1_power5" "du2_power5,du3_power5,du4_power5,du5_power5")
|
| @@ -105,10 +101,11 @@
|
| (define_insn_reservation "power5-store" 12
|
| (and (eq_attr "type" "store")
|
| (eq_attr "cpu" "power5"))
|
| - "(du1_power5,lsu1_power5,iu1_power5)\
|
| - |(du2_power5,lsu2_power5,iu2_power5)\
|
| - |(du3_power5,lsu2_power5,iu2_power5)\
|
| - |(du4_power5,lsu1_power5,iu1_power5)")
|
| + "((du1_power5,lsu1_power5)\
|
| + |(du2_power5,lsu2_power5)\
|
| + |(du3_power5,lsu2_power5)\
|
| + |(du4_power5,lsu1_power5)),\
|
| + (iu1_power5|iu2_power5)")
|
|
|
| (define_insn_reservation "power5-store-update" 12
|
| (and (eq_attr "type" "store_u")
|
| @@ -124,10 +121,11 @@
|
| (define_insn_reservation "power5-fpstore" 12
|
| (and (eq_attr "type" "fpstore")
|
| (eq_attr "cpu" "power5"))
|
| - "(du1_power5,lsu1_power5,fpu1_power5)\
|
| - |(du2_power5,lsu2_power5,fpu2_power5)\
|
| - |(du3_power5,lsu2_power5,fpu2_power5)\
|
| - |(du4_power5,lsu1_power5,fpu1_power5)")
|
| + "((du1_power5,lsu1_power5)\
|
| + |(du2_power5,lsu2_power5)\
|
| + |(du3_power5,lsu2_power5)\
|
| + |(du4_power5,lsu1_power5)),\
|
| + (fpu1_power5|fpu2_power5)")
|
|
|
| (define_insn_reservation "power5-fpstore-update" 12
|
| (and (eq_attr "type" "fpstore_u,fpstore_ux")
|
| @@ -144,29 +142,31 @@
|
| ; Integer latency is 2 cycles
|
| (define_insn_reservation "power5-integer" 2
|
| (and (eq_attr "type" "integer,insert_dword,shift,trap,\
|
| - var_shift_rotate,cntlz,exts")
|
| + var_shift_rotate,cntlz,exts,isel")
|
| (eq_attr "cpu" "power5"))
|
| "iq_power5")
|
|
|
| (define_insn_reservation "power5-two" 2
|
| (and (eq_attr "type" "two")
|
| (eq_attr "cpu" "power5"))
|
| - "(du1_power5+du2_power5,iu1_power5,nothing,iu2_power5)\
|
| - |(du2_power5+du3_power5,iu2_power5,nothing,iu2_power5)\
|
| - |(du3_power5+du4_power5,iu2_power5,nothing,iu1_power5)\
|
| - |(du4_power5+du1_power5,iu1_power5,nothing,iu1_power5)")
|
| + "((du1_power5+du2_power5)\
|
| + |(du2_power5+du3_power5)\
|
| + |(du3_power5+du4_power5)\
|
| + |(du4_power5+du1_power5)),\
|
| + ((iu1_power5,nothing,iu2_power5)\
|
| + |(iu2_power5,nothing,iu2_power5)\
|
| + |(iu2_power5,nothing,iu1_power5)\
|
| + |(iu1_power5,nothing,iu1_power5))")
|
|
|
| (define_insn_reservation "power5-three" 2
|
| (and (eq_attr "type" "three")
|
| (eq_attr "cpu" "power5"))
|
| - "(du1_power5+du2_power5+du3_power5,\
|
| - iu1_power5,nothing,iu2_power5,nothing,iu2_power5)\
|
| - |(du2_power5+du3_power5+du4_power5,\
|
| - iu2_power5,nothing,iu2_power5,nothing,iu1_power5)\
|
| - |(du3_power5+du4_power5+du1_power5,\
|
| - iu2_power5,nothing,iu1_power5,nothing,iu1_power5)\
|
| - |(du4_power5+du1_power5+du2_power5,\
|
| - iu1_power5,nothing,iu2_power5,nothing,iu2_power5)")
|
| + "(du1_power5+du2_power5+du3_power5|du2_power5+du3_power5+du4_power5\
|
| + |du3_power5+du4_power5+du1_power5|du4_power5+du1_power5+du2_power5),\
|
| + ((iu1_power5,nothing,iu2_power5,nothing,iu2_power5)\
|
| + |(iu2_power5,nothing,iu2_power5,nothing,iu1_power5)\
|
| + |(iu2_power5,nothing,iu1_power5,nothing,iu1_power5)\
|
| + |(iu1_power5,nothing,iu2_power5,nothing,iu2_power5))")
|
|
|
| (define_insn_reservation "power5-insert" 4
|
| (and (eq_attr "type" "insert_word")
|
| @@ -202,26 +202,17 @@
|
| (define_insn_reservation "power5-lmul" 7
|
| (and (eq_attr "type" "lmul")
|
| (eq_attr "cpu" "power5"))
|
| - "(du1_power5,iu1_power5*6)\
|
| - |(du2_power5,iu2_power5*6)\
|
| - |(du3_power5,iu2_power5*6)\
|
| - |(du4_power5,iu1_power5*6)")
|
| + "(du1_power5|du2_power5|du3_power5|du4_power5),(iu1_power5*6|iu2_power5*6)")
|
|
|
| (define_insn_reservation "power5-imul" 5
|
| (and (eq_attr "type" "imul")
|
| (eq_attr "cpu" "power5"))
|
| - "(du1_power5,iu1_power5*4)\
|
| - |(du2_power5,iu2_power5*4)\
|
| - |(du3_power5,iu2_power5*4)\
|
| - |(du4_power5,iu1_power5*4)")
|
| + "(du1_power5|du2_power5|du3_power5|du4_power5),(iu1_power5*4|iu2_power5*4)")
|
|
|
| (define_insn_reservation "power5-imul3" 4
|
| (and (eq_attr "type" "imul2,imul3")
|
| (eq_attr "cpu" "power5"))
|
| - "(du1_power5,iu1_power5*3)\
|
| - |(du2_power5,iu2_power5*3)\
|
| - |(du3_power5,iu2_power5*3)\
|
| - |(du4_power5,iu1_power5*3)")
|
| + "(du1_power5|du2_power5|du3_power5|du4_power5),(iu1_power5*3|iu2_power5*3)")
|
|
|
|
|
| ; SPR move only executes in first IU.
|
| @@ -300,18 +291,14 @@
|
| (define_insn_reservation "power5-sdiv" 33
|
| (and (eq_attr "type" "sdiv,ddiv")
|
| (eq_attr "cpu" "power5"))
|
| - "(du1_power5,fpu1_power5*28)\
|
| - |(du2_power5,fpu2_power5*28)\
|
| - |(du3_power5,fpu2_power5*28)\
|
| - |(du4_power5,fpu1_power5*28)")
|
| + "(du1_power5|du2_power5|du3_power5|du4_power5),\
|
| + (fpu1_power5*28|fpu2_power5*28)")
|
|
|
| (define_insn_reservation "power5-sqrt" 40
|
| (and (eq_attr "type" "ssqrt,dsqrt")
|
| (eq_attr "cpu" "power5"))
|
| - "(du1_power5,fpu1_power5*35)\
|
| - |(du2_power5,fpu2_power5*35)\
|
| - |(du3_power5,fpu2_power5*35)\
|
| - |(du4_power5,fpu2_power5*35)")
|
| + "(du1_power5|du2_power5|du3_power5|du4_power5),\
|
| + (fpu1_power5*35|fpu2_power5*35)")
|
|
|
| (define_insn_reservation "power5-isync" 2
|
| (and (eq_attr "type" "isync")
|
|
|