From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28429 invoked by alias); 5 Sep 2011 09:57:16 -0000 Received: (qmail 28419 invoked by uid 22791); 5 Sep 2011 09:57:15 -0000 X-SWARE-Spam-Status: No, hits=-1.2 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 na3sys009aog107.obsmtp.com (HELO na3sys009aog107.obsmtp.com) (74.125.149.197) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 05 Sep 2011 09:56:40 +0000 Received: from sc-owa02.marvell.com ([65.219.4.130]) (using TLSv1) by na3sys009aob107.postini.com ([74.125.148.12]) with SMTP ID DSNKTmSc1vfKTb4uaajUP4spLWfb5W3Igh3e@postini.com; Mon, 05 Sep 2011 02:56:39 PDT Received: from SC-vEXCH2.marvell.com ([10.93.76.134]) by sc-owa02.marvell.com ([10.93.76.22]) with mapi; Mon, 5 Sep 2011 02:55:39 -0700 From: Xinyu Qi To: Ramana Radhakrishnan CC: "gcc-patches@gcc.gnu.org" Date: Mon, 05 Sep 2011 09:57:00 -0000 Subject: RE: [PATCH, ARM, iWMMXt][4/5]: WMMX machine description Message-ID: <4737A960563B524DA805CA602BE04B306025EF23F1@SC-VEXCH2.marvell.com> References: <4737A960563B524DA805CA602BE04B306010E1F4E9@SC-VEXCH2.marvell.com> In-Reply-To: Content-Type: multipart/mixed; boundary="_002_4737A960563B524DA805CA602BE04B306025EF23F1SCVEXCH2marve_" 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-09/txt/msg00279.txt.bz2 --_002_4737A960563B524DA805CA602BE04B306025EF23F1SCVEXCH2marve_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 7621 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. > >> >=20 > Can this be broken down further. ? I'll have to do this again but > there are some initial comments below for some discussion. >=20 > > =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, gtuv4h= i3, > gtuv2si3, gtv8qi3, gtv4hi3, gtv2si3, iwmmxt_wunpckihb, iwmmxt_wunpckihh, > iwmmxt_wunpckihw, iwmmxt_wunpckilb, iwmmxt_wunpckilh, iwmmxt_wunpckilw, > iwmmxt_wunpckehub, iwmmxt_wunpckehuh, iwmmxt_wunpckehuw, iwmmxt_wunpckehs= b, > iwmmxt_wunpckehsh, iwmmxt_wunpckehsw, iwmmxt_wunpckelub, iwmmxt_wunpckelu= h, > iwmmxt_wunpckeluw, iwmmxt_wunpckelsb, iwmmxt_wunpckelsh, iwmmxt_wunpckels= w, > iwmmxt_wmadds, iwmmxt_wmaddu, iwmmxt_wsadb, iwmmxt_wsadh, iwmmxt_wsadbz, > iwmmxt_wsadhz): Revise. >=20 > 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: [(set (match_operand:V8QI 0 "register_operand" "=3Dy") (ashiftrt:V8QI (plus:V8QI (match_operand:V8QI 1 "register_operand" "y") (match_operand:V8QI 2 "register_operand" "y")) (const_int 1)))] According to the assembly behavior of wavg2b, the correct one should be: [(set (match_operand:V8QI 0 "register_operand" "=3Dy") (truncate:V8QI (lshiftrt:V8HI (plus:V8HI (zero_extend:V8HI (match_operand:V8QI 1 "register_operan= d" "y")) (zero_extend:V8HI (match_operand:V8QI 2 "register_operan= d" "y"))) (const_int 1))))] Consider the case: The Operation on element 0x01 and 0xff: gcc with old RTL template would opt= imize to the result 0x00.That is: 0x01 + 0xff =3D> 0x00. 0x00 > 1 =3D> 0x00 While the correct result should be 0x80.=20 0x01 =3D> 0x0001, 0xff =3D> 0x00ff. 0x0001 + 0x00ff =3D> 0x0100. 0x0100 > 1= =3D> 0x0080, 0x0080 =3D> 0x80 iwmmxt_wmadds and iwmmxt_wmaddu are modified to use detailed RTL template i= nstead of unspec. For some of the wunpck patterns, change the order of zero_extend and vec_se= lect 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 h= armless. Rests of them are only revised for their format. >=20 > > (define_insn "*iwmmxt_movsi_insn" > > - [(set (match_operand:SI 0 "nonimmediate_operand" "=3Drk,r,r,rk, > m,z,r,?z,Uy,z") > >- (match_operand:SI 1 "general_operand" "rk, I,K,mi,rk,r,z,Uy,z, > z"))] > >+ [(set (match_operand:SI 0 "nonimmediate_operand" "=3Drk,r,r,r,rk, > m,z,r,?z,?Uy,?z,t,r,?t,?z,t") > >+ (match_operand:SI 1 "general_operand" " rk,I,K,N,mi,rk,r,z,Uy, z, > z,r,t, z, t,t"))] > > "TARGET_REALLY_IWMMXT > >- && ( register_operand (operands[0], SImode) > >- || register_operand (operands[1], SImode))" > >- "* > >- switch (which_alternative) > >+ && ((register_operand (operands[0], SImode) > >+ && (!reload_completed > >+ || REGNO_REG_CLASS (REGNO (operands[0])) =3D=3D IWMMXT_GR_REGS)) > >+ || (register_operand (operands[1], SImode) > >+ && (!reload_completed >=20 >=20 >=20 > >+ || REGNO_REG_CLASS (REGNO (operands[1])) =3D=3D IWMMXT_GR_REGS)= ))" >=20 > 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. >=20 > If I understand what you are trying to do here - you are trying to use > *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.=20 Add adequate constrains to *iwmmxt_movsi_insn and *iwmmxt_arm_movdi so that= don't need to change their conditions. >=20 > 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 se= ems if "-mcpu=3Diwmmxt" is specified in gcc, the assembler cannot recognize= the wmmx2 insns. >=20 > Just in case it wasn't clear please don't commit any patch in this > series until all the patches have been completely reviewed. >=20 > cheers > Ramana The new diff attached. New ChangLog: * config/arm/arm.c (arm_output_iwmmxt_shift_immediate): New function. (arm_output_iwmmxt_tinsr): Likewise. * config/arm/arm-protos.h (arm_output_iwmmxt_shift_immediate): Declare. (arm_output_iwmmxt_tinsr): Likewise. * config/arm/iwmmxt.md (WCGR0, WCGR1, WCGR2, WCGR3): New constant. (iwmmxt_psadbw, iwmmxt_walign, iwmmxt_tmrc, iwmmxt_tmcr): Delete. (iwmmxt_tbcstqi, iwmmxt_tbcsthi, iwmmxt_tbcstsi): Likewise (*iwmmxt_clrv8qi, *iwmmxt_clrv4hi, *iwmmxt_clrv2si): Likewise. (tbcstv8qi, tbcstv4hi, tbsctv2si): New pattern. (iwmmxt_clrv8qi, iwmmxt_clrv4hi, iwmmxt_clrv2si): Likewise. (*and3_iwmmxt, *ior3_iwmmxt, *xor3_iwmmxt): Likewise. (rori3, ashri3_iwmmxt, lshri3_iwmmxt): Likewise. (ashli3_iwmmxt, iwmmxt_waligni, iwmmxt_walignr): Likewise. (iwmmxt_walignr0, iwmmxt_walignr1, iwmmxt_walignr2, iwmmxt_walignr3): Lik= ewise. (iwmmxt_setwcgr0, iwmmxt_setwcgr1, iwmmxt_setwcgr2, iwmmxt_setwcgr3): Lik= ewise. (iwmmxt_getwcgr0, iwmmxt_getwcgr1, iwmmxt_getwcgr2, iwmmxt_getwcgr3): Lik= ewise. (All instruction patterns): Add wtype attribute. (*iwmmxt_arm_movdi, *iwmmxt_movsi_insn): iWMMXt coexist with vfp.=20 (iwmmxt_uavgrndv8qi3, iwmmxt_uavgrndv4hi3): Revise the pattern. (iwmmxt_uavgv8qi3, iwmmxt_uavgv4hi3): Likewise. (iwmmxt_tinsrb, iwmmxt_tinsrh, iwmmxt_tinsrw):Likewise. (eqv8qi3, eqv4hi3, eqv2si3, gtuv8qi3): Likewise. (gtuv4hi3, gtuv2si3, gtv8qi3, gtv4hi3, gtv2si3): Likewise. (iwmmxt_wunpckihh, iwmmxt_wunpckihw, iwmmxt_wunpckilh): Likewise. (iwmmxt_wunpckilw, iwmmxt_wunpckehub, iwmmxt_wunpckehuh): Likewise. (iwmmxt_wunpckehuw, iwmmxt_wunpckehsb, iwmmxt_wunpckehsh): Likewise. (iwmmxt_wunpckehsw, iwmmxt_wunpckelub, iwmmxt_wunpckeluh): Likewise. (iwmmxt_wunpckeluw, iwmmxt_wunpckelsb, iwmmxt_wunpckelsh): Likewise. (iwmmxt_wunpckelsw, iwmmxt_wmadds, iwmmxt_wmaddu): Likewise. (iwmmxt_wsadb, iwmmxt_wsadh, iwmmxt_wsadbz, iwmmxt_wsadhz): Likewise. (iwmmxt2.md): Include. * config/arm/iwmmxt2.md: New file. * config/arm/iterators.md (VMMX2): New mode_iterator. * config/arm/arm.md (wtype): New attribute. (UNSPEC_WMADDS, UNSPEC_WMADDU): Delete. (UNSPEC_WALIGNI): New unspec. * config/arm/t-arm (MD_INCLUDES): Add iwmmxt2.md. Thanks, Xinyu --_002_4737A960563B524DA805CA602BE04B306025EF23F1SCVEXCH2marve_ 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=13186; creation-date="Sun, 04 Sep 2011 22:36:30 GMT"; modification-date="Mon, 05 Sep 2011 01:03:51 GMT" Content-Transfer-Encoding: base64 Content-length: 17878 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 ZGnpXP8zfIpKZz9TOss986RUr6e4ZRQ7oeJNldxm9biUdCvzl7SIZXkoRmBp WetvrKyNvL+dN/ZW4I0L0Sgge8vyUpzI8t547Y8cKuyNM2WwvDdepb8jas/u rcCzF6JRVgYX9bkrYKaIz91YGexnyuBG+VxvSZ+bm7+kzC3kc5dkoojPXVDW ljldpoi0QVe598kclT9DZpVedwExlE5TQSmSNsIsfK6QvI0iOo6pJW8H/v/2 rr2pbWTL/20+RVeqbm1YDPGDV5LdrSV2kqEWSAZDcufOUKwfAqtGthlJxmE+ /e2HHi2pn1JLsglUDRn0ON19+nderdOnk4WnmdcPONfbnOuHnOsdzvUjzvVu VDNShRdcPAt5wRszj0e8MfN4xBszj0ddLo+y9TOPD2J9UQwtyZRYLmp2Gonn MugR3j+Q3G9L7h9K7nck948k9wna0nUb8qMOTQtZnOQBT9gdGbtl7JKxW8Yu Gbu7Unan2ZkBLhDbmFCPV+zQBM0qWhn9akgm/Wod4kkrE/rZNMZ5pZbyWRme ZuVpRJ5mZVsBXl/zWQFen3hj4GlpVpVjjpLWZzZWKLSw8YZSSE3L5Dqu31tw PlRsjqyzssHKlGRW56fnDSjpqKqzS/R0lG4JKHOxl5hUUiOF0ReNKq3KUrk1 UpupYXht59MwPO3W4tdFT4uYPjNURKwtKI6T6SfPO9LnFU6mKa4A2gIBbmsI cNWpOFoC7LyEss8nfCsvlN28sL6uULaa2IstPFnvpZG5cci70eXdOGJ7ZXmi 1peVgG7MzHwxq1NPzCo97Tp47CVmrS4OLC9mNR9flxKzrk2QZyRi5a/nVRh3 54pRnXpiVFWd9PPFqCqBIjtSLC9KlUfINUWpLZ7jw1mOyhOQqsbKIhlnyKhG GOrUE4aqyag1FRU91nccdhupk2ZY1t3wd0+V8OdwO+NYG8/xbKQtEQGNiYOr FIee2swkGb8afhFCKABXAl5LbQ0Fdk3k9WpbmDR4mYbBsGua8WkUqtcXgWVY 5MbIEVPqg1LG2nR9sSbwZvrFkNbP4CyX+8GzbxJUMTuvhao+C1Odfr6cOsEg lFG0WlsUicqx5zK3dKndn8rcRlaOaXUTbNlEq+utr9UVFbzOZXUTk/WsrW5S WtfF6nrra3U9s1aX5v9zsbpJ6anP6npra3WdTQ9yW9sqi766em0jgtzM0HfU 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 XeLDiJatU6pEoGjtZOlEKXuXVeksZdswZevUvEWBvjdm7pTsXSHuZG2dmreo P/qsuTMUcZlcu1APuV7EaOPFqJ1DjOQYNyVNAoFVEiPduKsOMRJ+0XkRIzl4 10GM8lgjQ2LULV+MdKOvWsRIlAPwIkYFxUilC1WboaLeXAWCoxsM1SE4K9E2 CwhypfW9LcaO6v6pXCQyAXNqEhLKkVEMRLgbUOZ85WxP8KFTZBvUMLAy/fVk pQgCQTqsWHvKNagCRsQ/PzuC2noIMrymoogg0Y6BFwSJFjTXTgeZXj9XRZDP O0BKjh85isgTFJRMAwk0EjiqFkVrp4VMr+yq2rH80bQMQHEo8Hz00Lr7QoYd YmVn6AVEawwiXXeoHhAVWNf7GUG07h5RTSB60UTrDCJdl6gGEKGD70QQUsSK vXAjpJBSntTEMmnKkj8C+NFFZanKOdRpWARGyUqzyRbJzNmzGWTe0Leo5myy +khRPo6LqUTlJeORpIfGHpxCdRlun+O1w1SnIrak3mRnY6RHpIBAhIRUIZfC GMToEkPQh9xhndcMOfiu1wO9Huzt54vrc9xK47W3HAV36IOZ06o7TPK/Orno 97bJbhnUx+AV+PbvuAFUY+wg/biMVaTH0TnKmGfAbR8U4BQmKWPUwi2PT18u ddiEnpZyCXXXLJMgRTmPHr0yufRtoMcn9LwCp1CnTfMK0pRxC+2iUeSWIq/Q MkfW68jq4xZXH8fc+/jPKy1Ukuel3CaDznIbKrtWEY5jugHH/w3ktTmrdfkB AA== --_002_4737A960563B524DA805CA602BE04B306025EF23F1SCVEXCH2marve_--