OSDN Git Service

Make UNSPEC/UNSPECV constants use the enum; Fix 48192; Add test case for 48053
authormeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Mar 2011 16:21:30 +0000 (16:21 +0000)
committermeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Mar 2011 16:21:30 +0000 (16:21 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@171247 138bc75d-0d04-0410-961f-82ee72b054a4

14 files changed:
gcc/ChangeLog
gcc/config/rs6000/altivec.md
gcc/config/rs6000/dfp.md
gcc/config/rs6000/paired.md
gcc/config/rs6000/rs6000.md
gcc/config/rs6000/sync.md
gcc/config/rs6000/vector.md
gcc/config/rs6000/vsx.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pr48053-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr48192.c [new file with mode: 0644]
libcpp/ChangeLog
libcpp/directives.c
libcpp/expr.c

index 576df6c..baf4d85 100644 (file)
@@ -1,3 +1,20 @@
+2011-03-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000.md (UNSPEC_*, UNSPECV_*): Redefine all
+       UNSPEC constants to be in the unspec enumeration, and redefine
+       all UNSPECV constants to be in the unspecv enumeration, so that
+       dumps print which unspec/unspec_volatile this is.
+       * config/rs6000/vector.md (UNSPEC_*): Ditto.
+       * config/rs6000/paired.md (UNSPEC_*): Ditto.
+       * config/rs6000/vsx.md (UNSPEC_*): Ditto.
+       * config/rs6000/altivec.md (UNSPEC_*, UNSPECV_*): Ditto.
+       * config/rs6000/dfp.md (UNSPEC_*): Ditto.
+
+       * config/rs6000/rs6000.md (UNSPECV_ISYNC, UNSPECV_LWSYNC): Rename
+       UNSPEC_ISYNC and UNSPEC_HWSYNC to UNSPECV_ISYNC and
+       UNSPECV_LWSYNC, since these are used as unspec_volatile.
+       * config/rs6000/sync.md (isync, lwsync): Ditto.
+
 2011-03-21  Richard Guenther  <rguenther@suse.de>
 
        * params.def (lto-min-partition): Fix typo.
index d7357ee..d507b86 100644 (file)
 ;; along with GCC; see the file COPYING3.  If not see
 ;; <http://www.gnu.org/licenses/>.
 
-(define_constants
-   ;; 51-62 deleted
-  [(UNSPEC_VCMPBFP       64)
-   (UNSPEC_VMSUMU        65)
-   (UNSPEC_VMSUMM        66)
-   (UNSPEC_VMSUMSHM      68)
-   (UNSPEC_VMSUMUHS      69)
-   (UNSPEC_VMSUMSHS      70)
-   (UNSPEC_VMHADDSHS     71)
-   (UNSPEC_VMHRADDSHS    72)
-   (UNSPEC_VMLADDUHM     73)
-   (UNSPEC_VADDCUW       75)
-   (UNSPEC_VADDU         76)
-   (UNSPEC_VADDS         77)
-   (UNSPEC_VAVGU         80)
-   (UNSPEC_VAVGS         81)
-   (UNSPEC_VMULEUB       83)
-   (UNSPEC_VMULESB       84)
-   (UNSPEC_VMULEUH       85)
-   (UNSPEC_VMULESH       86)
-   (UNSPEC_VMULOUB       87)
-   (UNSPEC_VMULOSB       88)
-   (UNSPEC_VMULOUH       89)
-   (UNSPEC_VMULOSH       90)
-   (UNSPEC_VPKUHUM       93)
-   (UNSPEC_VPKUWUM       94)
-   (UNSPEC_VPKPX         95)
-   (UNSPEC_VPKSHSS       97)
-   (UNSPEC_VPKSWSS       99)
-   (UNSPEC_VPKUHUS      100)
-   (UNSPEC_VPKSHUS      101)
-   (UNSPEC_VPKUWUS      102)
-   (UNSPEC_VPKSWUS      103)
-   ;; 104 deleted
-   (UNSPEC_VSLV4SI      110)
-   (UNSPEC_VSLO         111)
-   (UNSPEC_VSR          118)
-   (UNSPEC_VSRO         119)
-   (UNSPEC_VSUBCUW      124)
-   (UNSPEC_VSUBU        125)
-   (UNSPEC_VSUBS        126)
-   (UNSPEC_VSUM4UBS     131)
-   (UNSPEC_VSUM4S       132)
-   (UNSPEC_VSUM2SWS     134)
-   (UNSPEC_VSUMSWS      135)
-   (UNSPEC_VPERM        144)
-   (UNSPEC_VPERM_UNS    145)
-   ;; 148 deleted
-   (UNSPEC_VRFIN        149)
-   ;; 150 deleted
-   (UNSPEC_VCFUX        151)
-   (UNSPEC_VCFSX        152)
-   (UNSPEC_VCTUXS       153)
-   (UNSPEC_VCTSXS       154)
-   (UNSPEC_VLOGEFP      155)
-   (UNSPEC_VEXPTEFP     156)
-   ;; 157-162 deleted
-   (UNSPEC_VLSDOI       163)
-   (UNSPEC_VUPKHSB      167)
-   (UNSPEC_VUPKHPX      168)
-   (UNSPEC_VUPKHSH      169)
-   (UNSPEC_VUPKLSB      170)
-   (UNSPEC_VUPKLPX      171)
-   (UNSPEC_VUPKLSH      172)
-   ;; 173 deleted
-   (UNSPEC_DST          190)
-   (UNSPEC_DSTT         191)
-   (UNSPEC_DSTST        192)
-   (UNSPEC_DSTSTT       193)
-   (UNSPEC_LVSL         194)
-   (UNSPEC_LVSR         195)
-   (UNSPEC_LVE          196)
-   (UNSPEC_STVX         201)
-   (UNSPEC_STVXL        202)
-   (UNSPEC_STVE         203)
-   (UNSPEC_SET_VSCR     213)
-   (UNSPEC_GET_VRSAVE   214)
-   (UNSPEC_LVX         215)
-   (UNSPEC_REDUC_PLUS   217)
-   (UNSPEC_VECSH        219)
-   (UNSPEC_EXTEVEN_V4SI 220)
-   (UNSPEC_EXTEVEN_V8HI 221)
-   (UNSPEC_EXTEVEN_V16QI 222)
-   (UNSPEC_EXTEVEN_V4SF 223)
-   (UNSPEC_EXTODD_V4SI  224)
-   (UNSPEC_EXTODD_V8HI  225)
-   (UNSPEC_EXTODD_V16QI 226)
-   (UNSPEC_EXTODD_V4SF  227)
-   (UNSPEC_INTERHI_V4SI 228)
-   (UNSPEC_INTERHI_V8HI 229)
-   (UNSPEC_INTERHI_V16QI 230)
-   ;; delete 231
-   (UNSPEC_INTERLO_V4SI 232)
-   (UNSPEC_INTERLO_V8HI 233)
-   (UNSPEC_INTERLO_V16QI 234)
-   ;; delete 235
-   (UNSPEC_LVLX         236)
-   (UNSPEC_LVLXL        237)
-   (UNSPEC_LVRX         238)
-   (UNSPEC_LVRXL        239)
-   (UNSPEC_STVLX        240)
-   (UNSPEC_STVLXL       241)
-   (UNSPEC_STVRX        242)
-   (UNSPEC_STVRXL       243)
-   (UNSPEC_VMULWHUB     308)
-   (UNSPEC_VMULWLUB     309)
-   (UNSPEC_VMULWHSB     310)
-   (UNSPEC_VMULWLSB     311)
-   (UNSPEC_VMULWHUH     312)
-   (UNSPEC_VMULWLUH     313)
-   (UNSPEC_VMULWHSH     314)
-   (UNSPEC_VMULWLSH     315)
-   (UNSPEC_VUPKHUB      316)
-   (UNSPEC_VUPKHUH      317)
-   (UNSPEC_VUPKLUB      318)
-   (UNSPEC_VUPKLUH      319)
-   (UNSPEC_VPERMSI     320)
-   (UNSPEC_VPERMHI     321)
-   (UNSPEC_INTERHI      322)
-   (UNSPEC_INTERLO      323)
-   (UNSPEC_VUPKHS_V4SF  324)
-   (UNSPEC_VUPKLS_V4SF  325)
-   (UNSPEC_VUPKHU_V4SF  326)
-   (UNSPEC_VUPKLU_V4SF  327)
+(define_c_enum "unspec"
+  [UNSPEC_VCMPBFP
+   UNSPEC_VMSUMU
+   UNSPEC_VMSUMM
+   UNSPEC_VMSUMSHM
+   UNSPEC_VMSUMUHS
+   UNSPEC_VMSUMSHS
+   UNSPEC_VMHADDSHS
+   UNSPEC_VMHRADDSHS
+   UNSPEC_VMLADDUHM
+   UNSPEC_VADDCUW
+   UNSPEC_VADDU
+   UNSPEC_VADDS
+   UNSPEC_VAVGU
+   UNSPEC_VAVGS
+   UNSPEC_VMULEUB
+   UNSPEC_VMULESB
+   UNSPEC_VMULEUH
+   UNSPEC_VMULESH
+   UNSPEC_VMULOUB
+   UNSPEC_VMULOSB
+   UNSPEC_VMULOUH
+   UNSPEC_VMULOSH
+   UNSPEC_VPKUHUM
+   UNSPEC_VPKUWUM
+   UNSPEC_VPKPX
+   UNSPEC_VPKSHSS
+   UNSPEC_VPKSWSS
+   UNSPEC_VPKUHUS
+   UNSPEC_VPKSHUS
+   UNSPEC_VPKUWUS
+   UNSPEC_VPKSWUS
+   UNSPEC_VSLV4SI
+   UNSPEC_VSLO
+   UNSPEC_VSR
+   UNSPEC_VSRO
+   UNSPEC_VSUBCUW
+   UNSPEC_VSUBU
+   UNSPEC_VSUBS
+   UNSPEC_VSUM4UBS
+   UNSPEC_VSUM4S
+   UNSPEC_VSUM2SWS
+   UNSPEC_VSUMSWS
+   UNSPEC_VPERM
+   UNSPEC_VPERM_UNS
+   UNSPEC_VRFIN
+   UNSPEC_VCFUX
+   UNSPEC_VCFSX
+   UNSPEC_VCTUXS
+   UNSPEC_VCTSXS
+   UNSPEC_VLOGEFP
+   UNSPEC_VEXPTEFP
+   UNSPEC_VLSDOI
+   UNSPEC_VUPKHSB
+   UNSPEC_VUPKHPX
+   UNSPEC_VUPKHSH
+   UNSPEC_VUPKLSB
+   UNSPEC_VUPKLPX
+   UNSPEC_VUPKLSH
+   UNSPEC_DST
+   UNSPEC_DSTT
+   UNSPEC_DSTST
+   UNSPEC_DSTSTT
+   UNSPEC_LVSL
+   UNSPEC_LVSR
+   UNSPEC_LVE
+   UNSPEC_STVX
+   UNSPEC_STVXL
+   UNSPEC_STVE
+   UNSPEC_SET_VSCR
+   UNSPEC_GET_VRSAVE
+   UNSPEC_LVX
+   UNSPEC_REDUC_PLUS
+   UNSPEC_VECSH
+   UNSPEC_EXTEVEN_V4SI
+   UNSPEC_EXTEVEN_V8HI
+   UNSPEC_EXTEVEN_V16QI
+   UNSPEC_EXTEVEN_V4SF
+   UNSPEC_EXTODD_V4SI
+   UNSPEC_EXTODD_V8HI
+   UNSPEC_EXTODD_V16QI
+   UNSPEC_EXTODD_V4SF
+   UNSPEC_INTERHI_V4SI
+   UNSPEC_INTERHI_V8HI
+   UNSPEC_INTERHI_V16QI
+   UNSPEC_INTERLO_V4SI
+   UNSPEC_INTERLO_V8HI
+   UNSPEC_INTERLO_V16QI
+   UNSPEC_LVLX
+   UNSPEC_LVLXL
+   UNSPEC_LVRX
+   UNSPEC_LVRXL
+   UNSPEC_STVLX
+   UNSPEC_STVLXL
+   UNSPEC_STVRX
+   UNSPEC_STVRXL
+   UNSPEC_VMULWHUB
+   UNSPEC_VMULWLUB
+   UNSPEC_VMULWHSB
+   UNSPEC_VMULWLSB
+   UNSPEC_VMULWHUH
+   UNSPEC_VMULWLUH
+   UNSPEC_VMULWHSH
+   UNSPEC_VMULWLSH
+   UNSPEC_VUPKHUB
+   UNSPEC_VUPKHUH
+   UNSPEC_VUPKLUB
+   UNSPEC_VUPKLUH
+   UNSPEC_VPERMSI
+   UNSPEC_VPERMHI
+   UNSPEC_INTERHI
+   UNSPEC_INTERLO
+   UNSPEC_VUPKHS_V4SF
+   UNSPEC_VUPKLS_V4SF
+   UNSPEC_VUPKHU_V4SF
+   UNSPEC_VUPKLU_V4SF
 ])
 
-(define_constants
-  [(UNSPECV_SET_VRSAVE   30)
-   (UNSPECV_MTVSCR      186)
-   (UNSPECV_MFVSCR      187)
-   (UNSPECV_DSSALL      188)
-   (UNSPECV_DSS         189)
+(define_c_enum "unspecv"
+  [UNSPECV_SET_VRSAVE
+   UNSPECV_MTVSCR
+   UNSPECV_MFVSCR
+   UNSPECV_DSSALL
+   UNSPECV_DSS
   ])
 
 ;; Vec int modes
index 5ffe7fc..d57ac93 100644 (file)
@@ -1,5 +1,5 @@
 ;; Decimal Floating Point (DFP) patterns.
-;; Copyright (C) 2007, 2008, 2010
+;; Copyright (C) 2007, 2008, 2010, 2011
 ;; Free Software Foundation, Inc.
 ;; Contributed by Ben Elliston (bje@au.ibm.com) and Peter Bergner
 ;; (bergner@vnet.ibm.com).
@@ -24,9 +24,9 @@
 ;; UNSPEC usage
 ;;
 
-(define_constants
-  [(UNSPEC_MOVSD_LOAD          400)
-   (UNSPEC_MOVSD_STORE         401)
+(define_c_enum "unspec"
+  [UNSPEC_MOVSD_LOAD
+   UNSPEC_MOVSD_STORE
   ])
 
 
index 0533f00..d1b0e8e 100644 (file)
@@ -1,5 +1,5 @@
 ;; PowerPC paired single and double hummer description
-;; Copyright (C) 2007, 2009, 2010
+;; Copyright (C) 2007, 2009, 2010, 2011
 ;; Free Software Foundation, Inc.
 ;; Contributed by David Edelsohn <edelsohn@gnu.org> and Revital Eres
 ;; <eres@il.ibm.com>
 ;; along with this program; see the file COPYING3.  If not see
 ;; <http://www.gnu.org/licenses/>.
 
-(define_constants
-[(UNSPEC_INTERHI_V2SF     330)
- (UNSPEC_INTERLO_V2SF     331)
- (UNSPEC_EXTEVEN_V2SF     332)
- (UNSPEC_EXTODD_V2SF      333)
-])
+(define_c_enum "unspec"
+  [UNSPEC_INTERHI_V2SF
+   UNSPEC_INTERLO_V2SF
+   UNSPEC_EXTEVEN_V2SF
+   UNSPEC_EXTODD_V2SF
+  ])
 
 (define_insn "paired_negv2sf2"
   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
index 24fd516..dafc2d2 100644 (file)
@@ -1,6 +1,6 @@
 ;; Machine description for IBM RISC System 6000 (POWER) for GNU C compiler
 ;; Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-;; 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+;; 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;; Free Software Foundation, Inc.
 ;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
 
 ;; UNSPEC usage
 ;;
 
-(define_constants
-  [(UNSPEC_FRSP                        0)      ; frsp for POWER machines
-   (UNSPEC_PROBE_STACK         4)      ; probe stack memory reference
-   (UNSPEC_TIE                 5)      ; tie stack contents and stack pointer
-   (UNSPEC_TOCPTR              6)      ; address of a word pointing to the TOC
-   (UNSPEC_TOC                 7)      ; address of the TOC (more-or-less)
-   (UNSPEC_MOVSI_GOT           8)
-   (UNSPEC_MV_CR_OV            9)      ; move_from_CR_ov_bit
-   (UNSPEC_FCTIWZ              10)
-   (UNSPEC_FRIM                        11)
-   (UNSPEC_FRIN                        12)
-   (UNSPEC_FRIP                        13)
-   (UNSPEC_FRIZ                        14)
-   (UNSPEC_LD_MPIC             15)     ; load_macho_picbase
-   (UNSPEC_MPIC_CORRECT                16)     ; macho_correct_pic
-   (UNSPEC_TLSGD               17)
-   (UNSPEC_TLSLD               18)
-   (UNSPEC_MOVESI_FROM_CR      19)
-   (UNSPEC_MOVESI_TO_CR                20)
-   (UNSPEC_TLSDTPREL           21)
-   (UNSPEC_TLSDTPRELHA         22)
-   (UNSPEC_TLSDTPRELLO         23)
-   (UNSPEC_TLSGOTDTPREL                24)
-   (UNSPEC_TLSTPREL            25)
-   (UNSPEC_TLSTPRELHA          26)
-   (UNSPEC_TLSTPRELLO          27)
-   (UNSPEC_TLSGOTTPREL         28)
-   (UNSPEC_TLSTLS              29)
-   (UNSPEC_FIX_TRUNC_TF                30)     ; fadd, rounding towards zero
-   (UNSPEC_MV_CR_GT            31)     ; move_from_CR_gt_bit
-   (UNSPEC_STFIWX              32)
-   (UNSPEC_POPCNTB             33)
-   (UNSPEC_FRES                        34)
-   (UNSPEC_SP_SET              35)
-   (UNSPEC_SP_TEST             36)
-   (UNSPEC_SYNC                        37)
-   (UNSPEC_LWSYNC              38)
-   (UNSPEC_ISYNC               39)
-   (UNSPEC_SYNC_OP             40)
-   (UNSPEC_ATOMIC              41)
-   (UNSPEC_CMPXCHG             42)
-   (UNSPEC_XCHG                        43)
-   (UNSPEC_AND                 44)
-   (UNSPEC_DLMZB               45)
-   (UNSPEC_DLMZB_CR            46)
-   (UNSPEC_DLMZB_STRLEN                47)
-   (UNSPEC_RSQRT               48)
-   (UNSPEC_TOCREL              49)
-   (UNSPEC_MACHOPIC_OFFSET     50)
-   (UNSPEC_BPERM               51)
-   (UNSPEC_COPYSIGN            52)
-   (UNSPEC_PARITY              53)
-   (UNSPEC_FCTIW               54)
-   (UNSPEC_FCTID               55)
-   (UNSPEC_LFIWAX              56)
-   (UNSPEC_LFIWZX              57)
-   (UNSPEC_FCTIWUZ             58)
+(define_c_enum "unspec"
+  [UNSPEC_FRSP                 ; frsp for POWER machines
+   UNSPEC_PROBE_STACK          ; probe stack memory reference
+   UNSPEC_TIE                  ; tie stack contents and stack pointer
+   UNSPEC_TOCPTR               ; address of a word pointing to the TOC
+   UNSPEC_TOC                  ; address of the TOC (more-or-less)
+   UNSPEC_MOVSI_GOT
+   UNSPEC_MV_CR_OV             ; move_from_CR_ov_bit
+   UNSPEC_FCTIWZ
+   UNSPEC_FRIM
+   UNSPEC_FRIN
+   UNSPEC_FRIP
+   UNSPEC_FRIZ
+   UNSPEC_LD_MPIC              ; load_macho_picbase
+   UNSPEC_MPIC_CORRECT         ; macho_correct_pic
+   UNSPEC_TLSGD
+   UNSPEC_TLSLD
+   UNSPEC_MOVESI_FROM_CR
+   UNSPEC_MOVESI_TO_CR
+   UNSPEC_TLSDTPREL
+   UNSPEC_TLSDTPRELHA
+   UNSPEC_TLSDTPRELLO
+   UNSPEC_TLSGOTDTPREL
+   UNSPEC_TLSTPREL
+   UNSPEC_TLSTPRELHA
+   UNSPEC_TLSTPRELLO
+   UNSPEC_TLSGOTTPREL
+   UNSPEC_TLSTLS
+   UNSPEC_FIX_TRUNC_TF         ; fadd, rounding towards zero
+   UNSPEC_MV_CR_GT             ; move_from_CR_gt_bit
+   UNSPEC_STFIWX
+   UNSPEC_POPCNTB
+   UNSPEC_FRES
+   UNSPEC_SP_SET
+   UNSPEC_SP_TEST
+   UNSPEC_SYNC
+   UNSPEC_SYNC_OP
+   UNSPEC_ATOMIC
+   UNSPEC_CMPXCHG
+   UNSPEC_XCHG
+   UNSPEC_AND
+   UNSPEC_DLMZB
+   UNSPEC_DLMZB_CR
+   UNSPEC_DLMZB_STRLEN
+   UNSPEC_RSQRT
+   UNSPEC_TOCREL
+   UNSPEC_MACHOPIC_OFFSET
+   UNSPEC_BPERM
+   UNSPEC_COPYSIGN
+   UNSPEC_PARITY
+   UNSPEC_FCTIW
+   UNSPEC_FCTID
+   UNSPEC_LFIWAX
+   UNSPEC_LFIWZX
+   UNSPEC_FCTIWUZ
   ])
 
 ;;
 ;; UNSPEC_VOLATILE usage
 ;;
 
-(define_constants
-  [(UNSPECV_BLOCK              0)
-   (UNSPECV_LL                 1)      ; load-locked
-   (UNSPECV_SC                 2)      ; store-conditional
-   (UNSPECV_PROBE_STACK_RANGE  3)      ; probe range of stack addresses
-   (UNSPECV_EH_RR              9)      ; eh_reg_restore
+(define_c_enum "unspecv"
+  [UNSPECV_BLOCK
+   UNSPECV_LL                  ; load-locked
+   UNSPECV_SC                  ; store-conditional
+   UNSPECV_PROBE_STACK_RANGE   ; probe range of stack addresses
+   UNSPECV_EH_RR               ; eh_reg_restore
+   UNSPECV_ISYNC               ; isync instruction
+   UNSPECV_LWSYNC              ; lwsync
   ])
+
 \f
 ;; Define an insn type attribute.  This is used in function unit delay
 ;; computations.
index f6cc91d..c3fbd9e 100644 (file)
@@ -1,5 +1,6 @@
 ;; Machine description for PowerPC synchronization instructions.
-;; Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2007, 2008, 2009, 2011
+;; Free Software Foundation, Inc.
 ;; Contributed by Geoffrey Keating.
 
 ;; This file is part of GCC.
 
 (define_insn "isync"
   [(set (mem:BLK (match_scratch 0 "X"))
-       (unspec_volatile:BLK [(mem:BLK (match_scratch 1 "X"))] UNSPEC_ISYNC))]
+       (unspec_volatile:BLK [(mem:BLK (match_scratch 1 "X"))] UNSPECV_ISYNC))]
   ""
   "{ics|isync}"
   [(set_attr "type" "isync")])
 ; Some AIX assemblers don't accept lwsync, so we use a .long.
 (define_insn "lwsync"
   [(set (mem:BLK (match_scratch 0 "X"))
-       (unspec_volatile:BLK [(mem:BLK (match_scratch 1 "X"))] UNSPEC_LWSYNC))]
+       (unspec_volatile:BLK [(mem:BLK (match_scratch 1 "X"))] UNSPECV_LWSYNC))]
   ""
 {
   if (TARGET_NO_LWSYNC)
index 5335d9d..c5a7870 100644 (file)
@@ -74,8 +74,7 @@
                           (V2DF  "V2DI")])
 
 ;; constants for unspec
-(define_constants
-  [(UNSPEC_PREDICATE   400)])
+(define_c_enum "unspec" [UNSPEC_PREDICATE])
 
 \f
 ;; Vector move instructions.
index a5b5a53..fc331dc 100644 (file)
                             (V16QI     "QI")])
                             
 ;; Constants for creating unspecs
-(define_constants
-  [(UNSPEC_VSX_CONCAT          500)
-   (UNSPEC_VSX_CVDPSXWS                501)
-   (UNSPEC_VSX_CVDPUXWS                502)
-   (UNSPEC_VSX_CVSPDP          503)
-   (UNSPEC_VSX_CVSXWDP         504)
-   (UNSPEC_VSX_CVUXWDP         505)
-   (UNSPEC_VSX_CVSXDSP         506)
-   (UNSPEC_VSX_CVUXDSP         507)
-   (UNSPEC_VSX_CVSPSXDS                508)
-   (UNSPEC_VSX_CVSPUXDS                509)
-   ;; 510-514 deleted
-   (UNSPEC_VSX_TDIV            515)
-   (UNSPEC_VSX_TSQRT           516)
-   (UNSPEC_VSX_XXPERMDI                517)
-   (UNSPEC_VSX_SET             518)
-   (UNSPEC_VSX_ROUND_I         519)
-   (UNSPEC_VSX_ROUND_IC                520)
-   (UNSPEC_VSX_SLDWI           521)])
+(define_c_enum "unspec"
+  [UNSPEC_VSX_CONCAT
+   UNSPEC_VSX_CVDPSXWS
+   UNSPEC_VSX_CVDPUXWS
+   UNSPEC_VSX_CVSPDP
+   UNSPEC_VSX_CVSXWDP
+   UNSPEC_VSX_CVUXWDP
+   UNSPEC_VSX_CVSXDSP
+   UNSPEC_VSX_CVUXDSP
+   UNSPEC_VSX_CVSPSXDS
+   UNSPEC_VSX_CVSPUXDS
+   UNSPEC_VSX_TDIV
+   UNSPEC_VSX_TSQRT
+   UNSPEC_VSX_XXPERMDI
+   UNSPEC_VSX_SET
+   UNSPEC_VSX_ROUND_I
+   UNSPEC_VSX_ROUND_IC
+   UNSPEC_VSX_SLDWI
+  ])
 
 ;; VSX moves
 (define_insn "*vsx_mov<mode>"
index 8bce526..97fa329 100644 (file)
@@ -1,3 +1,12 @@
+2011-03-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR preprocessor/48192
+       * gcc.target/powerpc/pr48192.c: New file.
+
+       PR target/48053
+       * gcc.target/powerpc/pr48053-3.c: New file, add test case for
+       split problem of 0 being loaded in a VSX register.
+
 2011-03-21  Richard Guenther  <rguenther@suse.de>
 
        PR c/47939
diff --git a/gcc/testsuite/gcc.target/powerpc/pr48053-3.c b/gcc/testsuite/gcc.target/powerpc/pr48053-3.c
new file mode 100644 (file)
index 0000000..399b3d3
--- /dev/null
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O3 -mcpu=power7" } */
+
+/* Cut down example from s_scalbnl that aborted on 32-bit when the fix for
+   48053 went in to allow creating DImode 0's in VSX registers.  */
+
+typedef union
+{
+  long double value;
+  struct
+  {
+    unsigned long long msw;
+    unsigned long long lsw;
+  } parts64;
+  struct
+  {
+    unsigned int w0, w1, w2, w3;
+  } parts32;
+} ieee854_long_double_shape_type;
+
+static const long double twolm54 = 5.55111512312578270212e-17;
+
+long double foo (long double x, int n)
+{
+  long long k, hx, lx;
+  ieee854_long_double_shape_type qw_u;
+
+  qw_u.value = x;
+  hx = qw_u.parts64.msw;
+  lx = qw_u.parts64.lsw;
+
+  k = ((hx >> 52) & 0x7ff) + n + 54;
+
+  qw_u.parts64.msw = ((hx & 0x800fffffffffffffULL) | (k << 52));
+  qw_u.parts64.lsw = lx;
+  x = qw_u.value;
+
+  return x*twolm54;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr48192.c b/gcc/testsuite/gcc.target/powerpc/pr48192.c
new file mode 100644 (file)
index 0000000..5159260
--- /dev/null
@@ -0,0 +1,49 @@
+/* { dg-do compile } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-options "-O3 -mcpu=power7 -std=gnu89" } */
+
+/* Make sure that the conditional macros vector, bool, and pixel are not
+   considered as being defined.  */
+
+#ifdef bool
+#error "bool is considered defined"
+#endif
+
+#ifdef vector
+#error "vector is considered defined"
+#endif
+
+#ifdef pixel
+#error "pixel is condsidered defined"
+#endif
+
+#if defined(bool)
+#error "bool is considered defined"
+#endif
+
+#if defined(vector)
+#error "vector is considered defined"
+#endif
+
+#if defined(pixel)
+#error "pixel is condsidered defined"
+#endif
+
+#ifndef bool
+#else
+#error "bool is considered defined"
+#endif
+
+#ifndef vector
+#else
+#error "vector is considered defined"
+#endif
+
+#ifndef pixel
+#else
+#error "pixel is condsidered defined"
+#endif
+
+#define bool long double
+bool pixel = 0;
index 6ef4788..c08e6fe 100644 (file)
@@ -1,3 +1,11 @@
+2011-03-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       PR preprocessor/48192
+       * directives.c (do_ifdef): Do not consider conditional macros as
+       being defined.
+       (do_ifndef): Ditto.
+       * expr.c (parse_defined): Ditto.
+
 2011-03-18  Richard Henderson  <rth@redhat.com>
 
        PR bootstrap/45381
index 85a17b1..f244ae5 100644 (file)
@@ -1819,7 +1819,12 @@ do_ifdef (cpp_reader *pfile)
 
       if (node)
        {
-         skip = node->type != NT_MACRO;
+         /* Do not treat conditional macros as being defined.  This is due to
+            the powerpc and spu ports using conditional macros for 'vector',
+            'bool', and 'pixel' to act as conditional keywords.  This messes
+            up tests like #ifndef bool.  */
+         skip = (node->type != NT_MACRO
+                 || ((node->flags & NODE_CONDITIONAL) != 0));
          _cpp_mark_macro_used (node);
          if (!(node->flags & NODE_USED))
            {
@@ -1860,7 +1865,12 @@ do_ifndef (cpp_reader *pfile)
 
       if (node)
        {
-         skip = node->type == NT_MACRO;
+         /* Do not treat conditional macros as being defined.  This is due to
+            the powerpc and spu ports using conditional macros for 'vector',
+            'bool', and 'pixel' to act as conditional keywords.  This messes
+            up tests like #ifndef bool.  */
+         skip = (node->type == NT_MACRO
+                 && ((node->flags & NODE_CONDITIONAL) == 0));
          _cpp_mark_macro_used (node);
          if (!(node->flags & NODE_USED))
            {
index d2fec2a..3c36127 100644 (file)
@@ -720,10 +720,15 @@ parse_defined (cpp_reader *pfile)
 
   pfile->state.prevent_expansion--;
 
+  /* Do not treat conditional macros as being defined.  This is due to the
+     powerpc and spu ports using conditional macros for 'vector', 'bool', and
+     'pixel' to act as conditional keywords.  This messes up tests like #ifndef
+     bool.  */
   result.unsignedp = false;
   result.high = 0;
   result.overflow = false;
-  result.low = node && node->type == NT_MACRO;
+  result.low = (node && node->type == NT_MACRO
+               && (node->flags & NODE_CONDITIONAL) == 0);
   return result;
 }