Hi,

since z196 we have the fast-BCR-serialization facility.  With this
facility a faster synchronization primitive is provided which is
sufficient for all our cases.  In fact the compare and swap atomic
operations use the very same mechanism.

With this patch we always use the new variant on z196 and later.

The bcr variants used for synchronization purposes always go into
their own dispatch group.  This wasn't correctly implemented for z196
and zEC12 so far.

I'll commit the patch after regression tests passed.

Bye,

-Andreas-


2013-09-03  Andreas Krebbel  <andreas.kreb...@de.ibm.com>

        * config/s390/s390.md: Add "bcr_flush" value to mnemonic
        attribute.
        ("mem_thread_fence_1"): Use bcr 14,0 for z196 and later.
        Set the mnemonic attribute to "bcr_flush".  Set the "z196prop"
        attribute to "z196_alone".
        * config/s390/2827.md: Add "bcr_flush" to "ooo_groupalone" and
        "zEC12_simple".

---
 gcc/config/s390/2827.md |    4 !!!!
 gcc/config/s390/s390.md |   16 +++!!!!!!!!!!!!!
 2 files changed, 3 insertions(+), 17 modifications(!)

Index: gcc/config/s390/s390.md
===================================================================
*** gcc/config/s390/s390.md.orig
--- gcc/config/s390/s390.md
***************
*** 291,297 ****
                           z196_cracked"
               (const_string "none"))
  
! (define_attr "mnemonic" "unknown" (const_string "unknown"))
  
  ;; Length in bytes.
  
--- 291,297 ----
                           z196_cracked"
               (const_string "none"))
  
! (define_attr "mnemonic" "bcr_flush,unknown" (const_string "unknown"))
  
  ;; Length in bytes.
  
***************
*** 9007,9018 ****
  
  ; Although bcr is superscalar on Z10, this variant will never
  ; become part of an execution group.
  (define_insn "mem_thread_fence_1"
    [(set (match_operand:BLK 0 "" "")
        (unspec:BLK [(match_dup 0)] UNSPEC_MB))]
    ""
!   "bcr\t15,0"
!   [(set_attr "op_type" "RR")])
  
  ;
  ; atomic load/store operations
--- 9007,9028 ----
  
  ; Although bcr is superscalar on Z10, this variant will never
  ; become part of an execution group.
+ ; With z196 we can make use of the fast-BCR-serialization facility.
+ ; This allows for a slightly faster sync which is sufficient for our
+ ; purposes.
  (define_insn "mem_thread_fence_1"
    [(set (match_operand:BLK 0 "" "")
        (unspec:BLK [(match_dup 0)] UNSPEC_MB))]
    ""
! {
!   if (TARGET_Z196)
!     return "bcr\t14,0";
!   else
!     return "bcr\t15,0";
! }
!   [(set_attr "op_type" "RR")
!    (set_attr "mnemonic" "bcr_flush")
!    (set_attr "z196prop" "z196_alone")])
  
  ;
  ; atomic load/store operations
Index: gcc/config/s390/2827.md
===================================================================
*** gcc/config/s390/2827.md.orig
--- gcc/config/s390/2827.md
***************
*** 32,43 ****
          (const_int 0)))
  
  (define_attr "ooo_groupalone" ""
!   (cond [(eq_attr "mnemonic" 
"lnxbr,madb,ltxtr,clc,axtr,msebr,slbgr,xc,alcr,lpxbr,slbr,maebr,mlg,mfy,lxdtr,maeb,lxeb,nc,mxtr,sxtr,dxbr,alc,msdbr,ltxbr,lxdb,madbr,lxdbr,lxebr,mvc,m,mseb,mlr,mlgr,slb,tcxb,msdb,sqxbr,alcgr,oc,flogr,alcg,mxbr,dxtr,axbr,mr,sxbr,slbg,ml,lcxbr")
 (const_int 1)]
          (const_int 0)))
  
  (define_insn_reservation "zEC12_simple" 1
    (and (eq_attr "cpu" "zEC12")
!        (eq_attr "mnemonic" 
"ltg,ogrk,lr,lnebr,lghrl,sdbr,x,asi,lhr,sebr,madb,ar,lhrl,clfxtr,llgfr,clghrl,cgr,cli,agrk,ic,adbr,aebr,lrv,clg,cy,cghi,sy,celfbr,seb,clgfr,al,tm,lang,clfebr,lghr,cdb,lpebr,laa,ark,lh,or,icy,xi,msebr,n,llihl,afi,cs,nrk,sth,lgr,l,lcr,stey,xg,crt,slgfr,ny,ld,j,llihh,slgr,clfhsi,slg,lb,lgrl,lrl,llihf,lndbr,llcr,laxg,mvghi,rllg,sdb,xrk,laag,alhsik,algfi,algr,aly,agfi,lrvr,d,crl,llgc,tmhl,algsi,lgh,icmh,clhrl,xgrk,icm,iilf,ork,lbr,cg,ldgr,lgf,iihf,llghr,sg,clfdbr,llgtr,stam,cebr,tmhh,tceb,slgf,basr,lgbr,maebr,lgb,cgfi,aeb,ltebr,lax,clfit,lrvgr,nihl,ni,clfdtr,srdl,mdb,srk,xihf,stgrl,sthrl,algf,ltr,cdlgbr,cgit,ng,lat,llghrl,ltgr,nihh,clgfrl,srlk,maeb,agr,cxlftr,ler,bcr,stcy,cds,clfi,nihf,ly,clt,lgat,alg,lhy,lgfrl,clghsi,clrt,tmll,srlg,tcdb,ay,sty,clr,lgfi,lan,lpdbr,clgt,adb,ahik,sra,algrk,cdfbr,lcebr,clfxbr,msdbr,ceb,clgr,tmy,tmlh,alghsik,lcgr,mvi,cdbr,ltgf,xr,larl,ldr,llgcr,clgrt,clrl,cghsi,cliy,madbr,oy,ogr,llgt,meebr,slr,clgxbr,chi,s,icmy,llc,ngr,clhhsi,ltgfr,llill,lhi,o,meeb,clgdtr,sll,clgrl,clgf,ledbr,cegbr,mviy,algfr,rll,cdlftr,sldl,cdlgtr,lg,niy,st,sgr,ag,le,xgr,cr,stg,llilh,sr,lzer,cdsg,sllk,mdbr,stoc,csg,clgit,chhsi,strl,llilf,lndfr,ngrk,clgebr,clgfi,llgh,mseb,ltdbr,oill,la,llhrl,stc,lghi,oihl,xiy,sllg,llgf,cgrt,ldeb,cl,sl,cdlfbr,oi,oilh,nr,srak,oihh,ear,slgrk,og,c,slgfi,sthy,oilf,oiy,msdb,oihf,a,cfi,lzxr,lzdr,srag,cdgbr,brasl,alr,cgrl,llgfrl,cit,clgxtr,ley,exrl,lcdfr,lay,xilf,lcdbr,alsi,mvhhi,srl,chsi,lgfr,lrvg,cly,sgrk,ahi,celgbr,nill,clgdbr,jg,slrk,lxr,sar,slfi,cpsdr,lcgfr,aghik,nilh,mvhi,lpdfr,xy,alrk,lao,agsi,ldy,nilf,llhr,alfi,laog,sly,aghi,ldebr,bras,srda,cefbr,lt"))
 "nothing")
  
  (define_insn_reservation "zEC12_cgdbr" 2
    (and (eq_attr "cpu" "zEC12")
--- 32,43 ----
          (const_int 0)))
  
  (define_attr "ooo_groupalone" ""
!   (cond [(eq_attr "mnemonic" 
"lnxbr,madb,ltxtr,clc,axtr,msebr,slbgr,xc,alcr,lpxbr,slbr,maebr,mlg,mfy,lxdtr,maeb,lxeb,nc,mxtr,sxtr,dxbr,alc,msdbr,ltxbr,lxdb,madbr,lxdbr,lxebr,mvc,m,mseb,mlr,mlgr,slb,tcxb,msdb,sqxbr,alcgr,oc,flogr,alcg,mxbr,dxtr,axbr,mr,sxbr,slbg,ml,lcxbr,bcr_flush")
 (const_int 1)]
          (const_int 0)))
  
  (define_insn_reservation "zEC12_simple" 1
    (and (eq_attr "cpu" "zEC12")
!        (eq_attr "mnemonic" 
"ltg,ogrk,lr,lnebr,lghrl,sdbr,x,asi,lhr,sebr,madb,ar,lhrl,clfxtr,llgfr,clghrl,cgr,cli,agrk,ic,adbr,aebr,lrv,clg,cy,cghi,sy,celfbr,seb,clgfr,al,tm,lang,clfebr,lghr,cdb,lpebr,laa,ark,lh,or,icy,xi,msebr,n,llihl,afi,cs,nrk,sth,lgr,l,lcr,stey,xg,crt,slgfr,ny,ld,j,llihh,slgr,clfhsi,slg,lb,lgrl,lrl,llihf,lndbr,llcr,laxg,mvghi,rllg,sdb,xrk,laag,alhsik,algfi,algr,aly,agfi,lrvr,d,crl,llgc,tmhl,algsi,lgh,icmh,clhrl,xgrk,icm,iilf,ork,lbr,cg,ldgr,lgf,iihf,llghr,sg,clfdbr,llgtr,stam,cebr,tmhh,tceb,slgf,basr,lgbr,maebr,lgb,cgfi,aeb,ltebr,lax,clfit,lrvgr,nihl,ni,clfdtr,srdl,mdb,srk,xihf,stgrl,sthrl,algf,ltr,cdlgbr,cgit,ng,lat,llghrl,ltgr,nihh,clgfrl,srlk,maeb,agr,cxlftr,ler,bcr_flush,stcy,cds,clfi,nihf,ly,clt,lgat,alg,lhy,lgfrl,clghsi,clrt,tmll,srlg,tcdb,ay,sty,clr,lgfi,lan,lpdbr,clgt,adb,ahik,sra,algrk,cdfbr,lcebr,clfxbr,msdbr,ceb,clgr,tmy,tmlh,alghsik,lcgr,mvi,cdbr,ltgf,xr,larl,ldr,llgcr,clgrt,clrl,cghsi,cliy,madbr,oy,ogr,llgt,meebr,slr,clgxbr,chi,s,icmy,llc,ngr,clhhsi,ltgfr,llill,lhi,o,meeb,clgdtr,sll,clgrl,clgf,ledbr,cegbr,mviy,algfr,rll,cdlftr,sldl,cdlgtr,lg,niy,st,sgr,ag,le,xgr,cr,stg,llilh,sr,lzer,cdsg,sllk,mdbr,stoc,csg,clgit,chhsi,strl,llilf,lndfr,ngrk,clgebr,clgfi,llgh,mseb,ltdbr,oill,la,llhrl,stc,lghi,oihl,xiy,sllg,llgf,cgrt,ldeb,cl,sl,cdlfbr,oi,oilh,nr,srak,oihh,ear,slgrk,og,c,slgfi,sthy,oilf,oiy,msdb,oihf,a,cfi,lzxr,lzdr,srag,cdgbr,brasl,alr,cgrl,llgfrl,cit,clgxtr,ley,exrl,lcdfr,lay,xilf,lcdbr,alsi,mvhhi,srl,chsi,lgfr,lrvg,cly,sgrk,ahi,celgbr,nill,clgdbr,jg,slrk,lxr,sar,slfi,cpsdr,lcgfr,aghik,nilh,mvhi,lpdfr,xy,alrk,lao,agsi,ldy,nilf,llhr,alfi,laog,sly,aghi,ldebr,bras,srda,cefbr,lt"))
 "nothing")
  
  (define_insn_reservation "zEC12_cgdbr" 2
    (and (eq_attr "cpu" "zEC12")

Reply via email to