From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20608 invoked by alias); 24 Nov 2011 01:33:36 -0000 Received: (qmail 20600 invoked by uid 22791); 24 Nov 2011 01:33:34 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,TW_IW,TW_MX,TW_VF,TW_VG,TW_XF X-Spam-Check-By: sourceware.org Received: from na3sys009aog104.obsmtp.com (HELO na3sys009aog104.obsmtp.com) (74.125.149.73) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 24 Nov 2011 01:33:19 +0000 Received: from sc-owa02.marvell.com ([65.219.4.130]) (using TLSv1) by na3sys009aob104.postini.com ([74.125.148.12]) with SMTP ID DSNKTs2e3Qyd+0MxhVkzNdsbpAB2WKR6+7LY@postini.com; Wed, 23 Nov 2011 17:33:19 PST Received: from SC-vEXCH2.marvell.com ([10.93.76.134]) by sc-owa02.marvell.com ([10.93.76.22]) with mapi; Wed, 23 Nov 2011 17:33:17 -0800 From: Xinyu Qi To: Ramana Radhakrishnan CC: "gcc-patches@gcc.gnu.org" Date: Thu, 24 Nov 2011 09:56:00 -0000 Subject: RE: PING: [PATCH, ARM, iWMMXt][4/5]: WMMX machine description Message-ID: <4737A960563B524DA805CA602BE04B30602925062B@SC-VEXCH2.marvell.com> References: <4737A960563B524DA805CA602BE04B306010E1F4E9@SC-VEXCH2.marvell.com> <4737A960563B524DA805CA602BE04B30602611FB90@SC-VEXCH2.marvell.com> In-Reply-To: Content-Type: multipart/mixed; boundary="_002_4737A960563B524DA805CA602BE04B30602925062BSCVEXCH2marve_" MIME-Version: 1.0 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-11/txt/msg02343.txt.bz2 --_002_4737A960563B524DA805CA602BE04B30602925062BSCVEXCH2marve_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 12502 Hi Ramana, I solve the conflict, please try again. The new diff is attached. Thanks, Xinyu At 2011-11-19 07:36:15,"Ramana Radhakrishnan" wrote: >=20 > Hi Xinyu, >=20 > This doesn't apply cleanly currently on trunk and the reject appears > to come from iwmmxt.md and I've not yet investigated why. >=20 > Can you have a look ? >=20 > cheers > Ramana >=20 > On 26 September 2011 04:22, Xinyu Qi wrote: > > Ping. > > > > http://gcc.gnu.org/ml/gcc-patches/2011-09/msg00279.html > > > > =A0 =A0 =A0 =A0* config/arm/arm.c (arm_output_iwmmxt_shift_immediate): = New > function. > > =A0 =A0 =A0 =A0(arm_output_iwmmxt_tinsr): Likewise. > > =A0 =A0 =A0 =A0* config/arm/arm-protos.h > (arm_output_iwmmxt_shift_immediate): Declare. > > =A0 =A0 =A0 =A0(arm_output_iwmmxt_tinsr): Likewise. > > =A0 =A0 =A0 =A0* config/arm/iwmmxt.md (WCGR0, WCGR1, WCGR2, WCGR3): > New constant. > > =A0 =A0 =A0 =A0(iwmmxt_psadbw, iwmmxt_walign, iwmmxt_tmrc, iwmmxt_tmcr): > Delete. > > =A0 =A0 =A0 =A0(iwmmxt_tbcstqi, iwmmxt_tbcsthi, iwmmxt_tbcstsi): Likewi= se > > =A0 =A0 =A0 =A0(*iwmmxt_clrv8qi, *iwmmxt_clrv4hi, *iwmmxt_clrv2si): Lik= ewise. > > =A0 =A0 =A0 =A0(tbcstv8qi, tbcstv4hi, tbsctv2si): New pattern. > > =A0 =A0 =A0 =A0(iwmmxt_clrv8qi, iwmmxt_clrv4hi, iwmmxt_clrv2si): Likewi= se. > > =A0 =A0 =A0 =A0(*and3_iwmmxt, *ior3_iwmmxt, > *xor3_iwmmxt): Likewise. > > =A0 =A0 =A0 =A0(rori3, ashri3_iwmmxt, lshri3_iwmmxt): > Likewise. > > =A0 =A0 =A0 =A0(ashli3_iwmmxt, iwmmxt_waligni, iwmmxt_walignr): > Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_walignr0, iwmmxt_walignr1): Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_walignr2, iwmmxt_walignr3): Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_setwcgr0, iwmmxt_setwcgr1): Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_setwcgr2, iwmmxt_setwcgr3): Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_getwcgr0, iwmmxt_getwcgr1): Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_getwcgr2, iwmmxt_getwcgr3): Likewise. > > =A0 =A0 =A0 =A0(All instruction patterns): Add wtype attribute. > > =A0 =A0 =A0 =A0(*iwmmxt_arm_movdi, *iwmmxt_movsi_insn): iWMMXt coexist > with vfp. > > =A0 =A0 =A0 =A0(iwmmxt_uavgrndv8qi3, iwmmxt_uavgrndv4hi3): Revise the > pattern. > > =A0 =A0 =A0 =A0(iwmmxt_uavgv8qi3, iwmmxt_uavgv4hi3): Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_tinsrb, iwmmxt_tinsrh, iwmmxt_tinsrw):Likewise. > > =A0 =A0 =A0 =A0(eqv8qi3, eqv4hi3, eqv2si3, gtuv8qi3): Likewise. > > =A0 =A0 =A0 =A0(gtuv4hi3, gtuv2si3, gtv8qi3, gtv4hi3, gtv2si3): Likewis= e. > > =A0 =A0 =A0 =A0(iwmmxt_wunpckihh, iwmmxt_wunpckihw, iwmmxt_wunpckilh): > Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_wunpckilw, iwmmxt_wunpckehub, iwmmxt_wunpckehuh): > Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_wunpckehuw, iwmmxt_wunpckehsb, > iwmmxt_wunpckehsh): Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_wunpckehsw, iwmmxt_wunpckelub, > iwmmxt_wunpckeluh): Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_wunpckeluw, iwmmxt_wunpckelsb, iwmmxt_wunpckelsh= ): > Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_wunpckelsw, iwmmxt_wmadds, iwmmxt_wmaddu): > Likewise. > > =A0 =A0 =A0 =A0(iwmmxt_wsadb, iwmmxt_wsadh, iwmmxt_wsadbz, > iwmmxt_wsadhz): Likewise. > > =A0 =A0 =A0 =A0(iwmmxt2.md): Include. > > =A0 =A0 =A0 =A0* config/arm/iwmmxt2.md: New file. > > =A0 =A0 =A0 =A0* config/arm/iterators.md (VMMX2): New mode_iterator. > > =A0 =A0 =A0 =A0* config/arm/arm.md (wtype): New attribute. > > =A0 =A0 =A0 =A0(UNSPEC_WMADDS, UNSPEC_WMADDU): Delete. > > =A0 =A0 =A0 =A0(UNSPEC_WALIGNI): New unspec. > > =A0 =A0 =A0 =A0* config/arm/t-arm (MD_INCLUDES): Add iwmmxt2.md. > > > > At 2011-09-05 17:55:34,"Xinyu Qi" wrote: > >> At 2011-08-18 10:21:01,"Ramana Radhakrishnan" > >> wrote: > >> > On 14 July 2011 08:45, Xinyu Qi wrote: > >> > >> Hi, > >> > >> > >> > >> It is the fourth part of iWMMXt maintenance. > >> > >> > >> > > >> > Can this be broken down further. ? I'll have to do this again but > >> > there are some initial comments below for some discussion. > >> > >> > > >> > > =A0(*iwmmxt_arm_movdi, *iwmmxt_movsi_insn, iwmmxt_uavgrndv8qi3, > >> > iwmmxt_uavgrndv4hi3, iwmmxt_uavgv8qi3, iwmmxt_uavgv4hi3, > iwmmxt_tinsrb, > >> > iwmmxt_tinsrh, iwmmxt_tinsrw, eqv8qi3, eqv4hi3, eqv2si3, gtuv8qi3, > >> gtuv4hi3, > >> > gtuv2si3, gtv8qi3, gtv4hi3, gtv2si3, iwmmxt_wunpckihb, > iwmmxt_wunpckihh, > >> > iwmmxt_wunpckihw, iwmmxt_wunpckilb, iwmmxt_wunpckilh, > iwmmxt_wunpckilw, > >> > iwmmxt_wunpckehub, iwmmxt_wunpckehuh, iwmmxt_wunpckehuw, > >> iwmmxt_wunpckehsb, > >> > iwmmxt_wunpckehsh, iwmmxt_wunpckehsw, iwmmxt_wunpckelub, > >> iwmmxt_wunpckeluh, > >> > iwmmxt_wunpckeluw, iwmmxt_wunpckelsb, iwmmxt_wunpckelsh, > >> iwmmxt_wunpckelsw, > >> > iwmmxt_wmadds, iwmmxt_wmaddu, iwmmxt_wsadb, iwmmxt_wsadh, > iwmmxt_wsadbz, > >> > iwmmxt_wsadhz): Revise. > >> > > >> > Revise to do what ? > >> > >> Sorry for late response. > >> > >> Some of them have incorrect RTL templates. For example, see > iwmmxt_uavgv8qi3 > >> Its old RTL template is: > >> =A0 [(set (match_operand:V8QI =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0 "regis= ter_operand" > "=3Dy") > >> =A0 =A0 =A0 =A0 (ashiftrt:V8QI (plus:V8QI > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (match_operand:V8Q= I 1 > "register_operand" "y") > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(ma= tch_operand:V8QI 2 > "register_operand" "y")) > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (const_int 1))= )] > >> > >> According to the assembly behavior of wavg2b, the correct one should b= e: > >> =A0 [(set (match_operand:V8QI =A00 "register_operand" "=3Dy") > >> =A0 =A0 =A0 =A0 (truncate:V8QI > >> =A0 =A0 =A0 =A0 =A0 =A0(lshiftrt:V8HI > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0(plus:V8HI (zero_extend:V8HI (match_operand= :V8QI 1 > >> "register_operand" "y")) > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (zero_extend:V8HI (mat= ch_operand:V8QI 2 > >> "register_operand" "y"))) > >> =A0 =A0 =A0 =A0 =A0 =A0(const_int 1))))] > >> > >> Consider the case: > >> The Operation on element 0x01 and 0xff: gcc with old RTL template would > optimize > >> to the result 0x00.That is: > >> 0x01 + 0xff =3D> 0x00. 0x00 > 1 =3D> 0x00 > >> While the correct result should be 0x80. > >> 0x01 =3D> 0x0001, 0xff =3D> 0x00ff. 0x0001 + 0x00ff =3D> 0x0100. 0x010= 0 > 1 =3D> > 0x0080, > >> 0x0080 =3D> 0x80 > >> > >> iwmmxt_wmadds and iwmmxt_wmaddu are modified to use detailed RTL > template > >> instead of unspec. > >> > >> For some of the wunpck patterns, change the order of zero_extend and > vec_select > >> in order to avoid a vec_select optimization internal error in old vers= ion gcc. > >> Maybe this internal bug has been fixed, but such modification is harml= ess. > >> > >> Rests of them are only revised for their format. > >> > >> > > >> > > (define_insn "*iwmmxt_movsi_insn" > >> > > - =A0[(set (match_operand:SI 0 "nonimmediate_operand" "=3Drk,r,r,r= k, > >> > m,z,r,?z,Uy,z") > >> > >- =A0(match_operand:SI 1 "general_operand" =A0 =A0 =A0"rk, > I,K,mi,rk,r,z,Uy,z, > >> > z"))] > >> > >+ =A0[(set (match_operand:SI 0 "nonimmediate_operand" "=3Drk,r,r,r,= rk, > >> > m,z,r,?z,?Uy,?z,t,r,?t,?z,t") > >> > >+ =A0(match_operand:SI 1 "general_operand" =A0 =A0 =A0" > rk,I,K,N,mi,rk,r,z,Uy, > >> z, > >> > z,r,t, z, t,t"))] > >> > > =A0 "TARGET_REALLY_IWMMXT > >> > >- =A0 && ( =A0 register_operand (operands[0], SImode) > >> > >- =A0 =A0 =A0 || register_operand (operands[1], SImode))" > >> > >- =A0"* > >> > >- =A0 switch (which_alternative) > >> > >+ =A0 && ((register_operand (operands[0], SImode) > >> > >+ =A0&& (!reload_completed > >> > >+ =A0 =A0 =A0|| REGNO_REG_CLASS (REGNO (operands[0])) =3D=3D > IWMMXT_GR_REGS)) > >> > >+ =A0 =A0 =A0 || (register_operand (operands[1], SImode) > >> > >+ =A0 =A0 && (!reload_completed > >> > > >> > > >> > > >> > >+ =A0 =A0 =A0 =A0 || REGNO_REG_CLASS (REGNO (operands[1])) =3D=3D > IWMMXT_GR_REGS)))" > >> > > >> > I don't like this at all - what you are doing is assuming that after > >> > reg-alloc you are going to be able to rely on whether something has a > >> > particular register class and then turn on and off it's matching. So > >> > this matches before reload and doesn't do so after reload for the > >> > cases where *iwmmxt_movsi_insn is really in a core register. I don't > >> > think you can do it this way. If you really want to do this properly= - > >> > have an arch field for iwmmxt as well in the arch attribute and then > >> > add these alternatives to existing patterns. > >> > > >> > If I understand what you are trying to do here - you are trying to u= se > >> > *arm_movsi_insn and other patterns in the rest of the backend and let > >> > things like "predicable" kick in right after reload for all cases > >> > other than the ones you enumerate. In which case get rid of all the > >> > other constaints in this pattern other than the constraints that are > >> > valid for registers of class IWMMXT_REGS > >> > >> This piece of code is added to make iwmmxt coexist with vfp when iwmmxt > and > >> vfp are enabled together. Agree, I don't think it is a good fix. > >> Add adequate constrains to *iwmmxt_movsi_insn and > *iwmmxt_arm_movdi so that > >> don't need to change their conditions. > >> > >> > > >> > Also the definition of output_move_double has changed now and hence > >> > this needs some rework. > >> > >> Done. > >> > >> > Should there be a distinction between iwmmxt and iwmmxt2 ? Is it a > >> > user visible option ? > >> > >> I don't think users need to know the distinction between iwmmxt and > iwmmxt2 > >> though there are two options "-mcpu=3Diwmmxt" and "-mcpu=3Diwmmxt2". It > seems if > >> "-mcpu=3Diwmmxt" is specified in gcc, the assembler cannot recognize t= he > wmmx2 > >> insns. > >> > >> > >> > > >> > Just in case it wasn't clear please don't commit any patch in this > >> > series until all the patches have been completely reviewed. > >> > > >> > cheers > >> > Ramana > >> > >> > >> The new diff attached. New ChangLog: > >> > >> * config/arm/arm.c (arm_output_iwmmxt_shift_immediate): New function. > >> =A0 (arm_output_iwmmxt_tinsr): Likewise. > >> * config/arm/arm-protos.h (arm_output_iwmmxt_shift_immediate): > Declare. > >> =A0 (arm_output_iwmmxt_tinsr): Likewise. > >> * config/arm/iwmmxt.md (WCGR0, WCGR1, WCGR2, WCGR3): New > constant. > >> =A0 (iwmmxt_psadbw, iwmmxt_walign, iwmmxt_tmrc, iwmmxt_tmcr): > Delete. > >> =A0 (iwmmxt_tbcstqi, iwmmxt_tbcsthi, iwmmxt_tbcstsi): Likewise > >> =A0 (*iwmmxt_clrv8qi, *iwmmxt_clrv4hi, *iwmmxt_clrv2si): Likewise. > >> =A0 (tbcstv8qi, tbcstv4hi, tbsctv2si): New pattern. > >> =A0 (iwmmxt_clrv8qi, iwmmxt_clrv4hi, iwmmxt_clrv2si): Likewise. > >> =A0 (*and3_iwmmxt, *ior3_iwmmxt, > *xor3_iwmmxt): Likewise. > >> =A0 (rori3, ashri3_iwmmxt, lshri3_iwmmxt): > Likewise. > >> =A0 (ashli3_iwmmxt, iwmmxt_waligni, iwmmxt_walignr): Likewise. > >> =A0 (iwmmxt_walignr0, iwmmxt_walignr1, iwmmxt_walignr2, > iwmmxt_walignr3): > >> Likewise. > >> =A0 (iwmmxt_setwcgr0, iwmmxt_setwcgr1, iwmmxt_setwcgr2, > iwmmxt_setwcgr3): > >> Likewise. > >> =A0 (iwmmxt_getwcgr0, iwmmxt_getwcgr1, iwmmxt_getwcgr2, > iwmmxt_getwcgr3): > >> Likewise. > >> =A0 (All instruction patterns): Add wtype attribute. > >> =A0 (*iwmmxt_arm_movdi, *iwmmxt_movsi_insn): iWMMXt coexist with > vfp. > >> =A0 (iwmmxt_uavgrndv8qi3, iwmmxt_uavgrndv4hi3): Revise the pattern. > >> =A0 (iwmmxt_uavgv8qi3, iwmmxt_uavgv4hi3): Likewise. > >> =A0 (iwmmxt_tinsrb, iwmmxt_tinsrh, iwmmxt_tinsrw):Likewise. > >> =A0 (eqv8qi3, eqv4hi3, eqv2si3, gtuv8qi3): Likewise. > >> =A0 (gtuv4hi3, gtuv2si3, gtv8qi3, gtv4hi3, gtv2si3): Likewise. > >> =A0 (iwmmxt_wunpckihh, iwmmxt_wunpckihw, iwmmxt_wunpckilh): > Likewise. > >> =A0 (iwmmxt_wunpckilw, iwmmxt_wunpckehub, iwmmxt_wunpckehuh): > Likewise. > >> =A0 (iwmmxt_wunpckehuw, iwmmxt_wunpckehsb, iwmmxt_wunpckehsh): > Likewise. > >> =A0 (iwmmxt_wunpckehsw, iwmmxt_wunpckelub, iwmmxt_wunpckeluh): > Likewise. > >> =A0 (iwmmxt_wunpckeluw, iwmmxt_wunpckelsb, iwmmxt_wunpckelsh): > Likewise. > >> =A0 (iwmmxt_wunpckelsw, iwmmxt_wmadds, iwmmxt_wmaddu): Likewise. > >> =A0 (iwmmxt_wsadb, iwmmxt_wsadh, iwmmxt_wsadbz, iwmmxt_wsadhz): > Likewise. > >> =A0 (iwmmxt2.md): Include. > >> * config/arm/iwmmxt2.md: New file. > >> * config/arm/iterators.md (VMMX2): New mode_iterator. > >> * config/arm/arm.md (wtype): New attribute. > >> =A0 (UNSPEC_WMADDS, UNSPEC_WMADDU): Delete. > >> =A0 (UNSPEC_WALIGNI): New unspec. > >> * config/arm/t-arm (MD_INCLUDES): Add iwmmxt2.md. > >> > >> Thanks, > >> Xinyu > > --_002_4737A960563B524DA805CA602BE04B30602925062BSCVEXCH2marve_ Content-Type: application/x-gzip; name="4_wmmx_md.diff.gz" Content-Description: 4_wmmx_md.diff.gz Content-Disposition: attachment; filename="4_wmmx_md.diff.gz"; size=13183; creation-date="Wed, 23 Nov 2011 17:22:19 GMT"; modification-date="Wed, 23 Nov 2011 17:18:24 GMT" Content-Transfer-Encoding: base64 Content-length: 17873 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 sEOQvjF0lmTzB5R/gK0rHgBiLMCeljeeWpOlgx5+WLoPC8+Cinon2SqxyrHP gj4SW02o9pqrH+gXVFf417y5mi0em2hl0IW/XXfcXDkT+ADsDb6KLsJrwwl8 3luO4ONLB/4aomuP952mD7sEH0JLTjP4xHR5N22uxrMH6y/8z72PHv4Bf9mw qYfh+M8mObvMnob/4zTDQ7rD/4FXXNRJzx2iX/BPz8GNwk6gBNom2ZPbJMm0 TZzD2wwy7JooI6cZfIIN/kWkhmi8Iw//mth3d3hIcEDTH3hc8A/0f3BI+3iI q+bqL/jPjPyzmuHHR9Olhy7gVlfxPyv8r+XeW01oLCbjJlTT+NejNyasgfow NctoPnBZCmgdwNliOKGmtQmQs3rnLmZYplA1fGdyi++Dx6FrI3dsCyPS9m04 wiCJCFfNf0D4vF08Wq5rT6zX21spODoTTOcV6kETOXRBx6BLh0Xw1rXuIAap JjEYOY5bbG5KMu5xC5SBb7H9Nc6jSEZbzRbYaTfftpGvhu3qV8gOy50Ta4q4 jHwhB3y3XegMQSWBpM23xtP5wlncI96Op9D7GftL1yKGuQddB9e+n0LO9bZB p9Vug0+uZYHB4s5fIbP8abGcT7ANbULiY/LWd9eG7c7RdJ0P3UcL4jq6iR+4 mtqwT7YDVakHHoaujzTr514vfgL+ge7doca8oLH34GmxBOPhHCB/HWFstPQh CR/5JW/gCKH7Zt89wQskSQ3OJhk15MHMC5X354tr8NmaQ8vvgK/LkQN1+5k9 tuYexCDsDLriQUBgEoEV4A35PbBseN8FEIh4IrpNALvxGmpe2FMXkyBY3YZd fILa2o8f3gty6YKRxgOaBGoaTKFBIHocDnFlOw7KqIO6/g4qJwCfBN9Pr375 cn2FyZxc/AYN0uXlycXVb1Cjwn4t4BMoJ4+YLOh725A0HAGMuPwnxI3zj5e9 X+DzJx9Oz06vfiPddcGn06uLj4MB+PTlElqYryeXV6e967OTS/D1+vLrl8HH PQAGlsXhJSYS8vMOzwl23vyh7XjhkH+D0+jB/jkTaAYfLTidY8t+hL0bYl9V PlOYyhC5n3ikiIfvoTohncK46n35+tvpxecu7OzpHTaB8DZ+7b+mvv/w7s2b 1Wq1dz9f7i3c+zcOIeu9+Z89+itN1tuj3YZ+v9doaLkL8A2+F/JhoEntw4BL 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 --_002_4737A960563B524DA805CA602BE04B30602925062BSCVEXCH2marve_--