From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14437 invoked by alias); 29 Dec 2011 06:14:45 -0000 Received: (qmail 14422 invoked by uid 22791); 29 Dec 2011 06:14:41 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,TW_IW,TW_MX X-Spam-Check-By: sourceware.org Received: from na3sys009aog120.obsmtp.com (HELO na3sys009aog120.obsmtp.com) (74.125.149.140) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 29 Dec 2011 06:14:27 +0000 Received: from SC-OWA01.marvell.com ([65.219.4.129]) (using TLSv1) by na3sys009aob120.postini.com ([74.125.148.12]) with SMTP ID DSNKTvwFPfLeKK1Os9zSN4soR+bDz6zab0UM@postini.com; Wed, 28 Dec 2011 22:14:27 PST Received: from SC-vEXCH2.marvell.com ([10.93.76.134]) by SC-OWA01.marvell.com ([10.93.76.21]) with mapi; Wed, 28 Dec 2011 22:12:33 -0800 From: Xinyu Qi To: Richard Earnshaw CC: Ramana Radhakrishnan , "gcc-patches@gcc.gnu.org" Date: Thu, 29 Dec 2011 06:24:00 -0000 Subject: RE: PING: [PATCH, ARM, iWMMXt][4/5]: WMMX machine description Message-ID: <4737A960563B524DA805CA602BE04B3063344A6BDE@SC-VEXCH2.marvell.com> References: <4737A960563B524DA805CA602BE04B306010E1F4E9@SC-VEXCH2.marvell.com> <4737A960563B524DA805CA602BE04B30602611FB90@SC-VEXCH2.marvell.com> <4737A960563B524DA805CA602BE04B30602925062B@SC-VEXCH2.marvell.com> <4EE8DD9D.3060508@arm.com> <4737A960563B524DA805CA602BE04B3063206B1776@SC-VEXCH2.marvell.com> <4EF2FE29.1060204@arm.com> In-Reply-To: <4EF2FE29.1060204@arm.com> Content-Type: multipart/mixed; boundary="_002_4737A960563B524DA805CA602BE04B3063344A6BDESCVEXCH2marve_" 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-12/txt/msg01787.txt.bz2 --_002_4737A960563B524DA805CA602BE04B3063344A6BDESCVEXCH2marve_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 6403 At 2011-12-22 17:53:45,"Richard Earnshaw" wrote:=20 > On 22/12/11 06:38, Xinyu Qi wrote: > > At 2011-12-15 01:32:13,"Richard Earnshaw" wrote: > >> On 24/11/11 01:33, Xinyu Qi wrote: > >>> 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: > >>>> > >>>> Hi Xinyu, > >>>> > >>>> This doesn't apply cleanly currently on trunk and the reject appears > >>>> to come from iwmmxt.md and I've not yet investigated why. > >>>> > >>>> Can you have a look ? > >>>> > >> > >> This patch is NOT ok. > >> > >> You're adding features that were new in iWMMXt2 (ie not in the original > >> implementation) but you've provided no means by which the compiler can > >> detect which operations are only available on the new cores. > > > > Hi Richard, > > > > All of the WMMX chips support WMMX2 instructions. >=20 > This may be true for Marvell's current range of processors, but I find > it hard to reconcile with the assembler support in GAS, which clearly > distinguishes between iWMMXT and iWMMXT2 instruction sets. Are you > telling me that no cores were ever manufactured (even by Intel) that > only supported iWMMXT? >=20 > I'm concerned that this patch will break support for existing users who > have older chips (for GCC we have to go through a deprecation cycle if > we want to drop support for something we now believe is no-longer worth > maintaining). >=20 > > What I do is to complement the WMMX2 intrinsic support in GCC. >=20 > I understand that, and I'm not saying the patch can never go in; just > that it needs to separate out the support for the different architecture > variants. >=20 > > I don't think it is necessary for users to consider whether one WMMX in= sn is a > WMMX2 insn or not. >=20 > Users don't (unless they want their code to run on legacy processors > that only support the original instruction set), but the compiler surely > must know what it is targeting. Remember that the instruction patterns > are not entirely black boxes, the compiler can do optimizations on > intrinsics (it's one of the reasons why they are better than inline > assembly). Unless the compiler knows exactly what instructions are > legal, it could end up optimizing something that started as a WMMX insn > into something that's a WMMX2 insn (for example, propagating a constant > into a vector shift expression). >=20 > R. Hi, Richard, You are right. There exist the chips that only support WMMX instructions in= the history. I distinguish the iWMMXt and iWMMXt2 in the patch update this time. In current GCC, -march=3Diwmmxt and -march=3Diwmmxt2 (or -mcpu=3Diwmmxt and= -mcpu=3Diwmmxt2) are almost no difference in the compiling stage. I take advantage of them to do the work, that is, make -march=3Diwmmxt (or = -mcpu=3Diwmmxt) only support iWMMXt intrinsic iWMMXt built in and WMMX inst= ructions, and make -march=3Diwmmxt2 (or -mcpu=3Diwmmxt2) support fully iWMMXt2. Define a new flag FL_IWMMXT2 to represent the chip support iWMMXt2 extensio= n, which directly controls the iWMMXt2 built in initialization and the foll= owed defines. Define __IWMMXT2__ in TARGET_CPU_CPP_BUILTINS to control the access of iWMM= Xt2 intrinsics. Define TARGET_REALLY_IWMMXT2 to control the access of WMMX2 instructions' m= achine description. In arm.md, define iwmmxt2 in "arch" attr to control the access of the alter= native in shift patterns.=20 The updated patch 4/5 is attached here. 1/5, 2/5 and 3/5 are updated accord= ingly. Attach them in related mails. Please take a look if such modification is proper. Changelog: * 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. (rorv4hi3, rorv2si3, rordi3): Likewise. (rorv4hi3_di, rorv2si3_di, rordi3_di): Likewise. (ashrv4hi3_di, ashrv2si3_di, ashrdi3_di): Likewise. (lshrv4hi3_di, lshrv2si3_di, lshrdi3_di): Likewise. (ashlv4hi3_di, ashlv2si3_di, ashldi3_di): Likewise. (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. (ror3, ror3_di): Likewise. (ashr3_di, lshr3_di, ashl3_di): Likewise. (ashli3_iwmmxt, iwmmxt_waligni, iwmmxt_walignr): Likewise. (iwmmxt_walignr0, iwmmxt_walignr1): Likewise. (iwmmxt_walignr2, iwmmxt_walignr3): Likewise. (iwmmxt_setwcgr0, iwmmxt_setwcgr1): Likewise. (iwmmxt_setwcgr2, iwmmxt_setwcgr3): Likewise. (iwmmxt_getwcgr0, iwmmxt_getwcgr1): Likewise. (iwmmxt_getwcgr2, iwmmxt_getwcgr3): Likewise. (All instruction patterns): Add wtype attribute. (*iwmmxt_arm_movdi, *iwmmxt_movsi_insn): iWMMXt coexist with vfp. (iwmmxt_uavgrndv8qi3, iwmmxt_uavgrndv4hi3): Revise the pattern. (iwmmxt_uavgv8qi3, iwmmxt_uavgv4hi3): Likewise. (ashr3_iwmmxt, ashl3_iwmmxt, lshr3_iwmmxt): 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. * config/arm/predicates.md (imm_or_reg_operand): New predicate. Thanks, Xinyu --_002_4737A960563B524DA805CA602BE04B3063344A6BDESCVEXCH2marve_ 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=13102; creation-date="Thu, 29 Dec 2011 06:02:17 GMT"; modification-date="Thu, 29 Dec 2011 02:37:49 GMT" Content-Transfer-Encoding: base64 Content-length: 17764 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 koD2qvkgo1ML0hqk7IOksnEpDZJKSlINoplIoZJlrtCVee4rqhVDHvz+76W7 ltkwU2BKpGQaTG3zxMnjVU6O4gq0ZepopCsT5dRgQV5V23B2mQkSJW8nVaNA 0t+VLS3KebyiUWeZ244pbycXMAosvjGHJ+XxKkmn6O3kAkb11hcdnqmsy+QA hnzatdGjtdejnoYelYPclDoJNFZKj5Rzrzb0SDizs9GjcvSugh7p+CNDejSo X4+UM7BW9Ei0GmCjRxX1SIaFph1R1YCuAc1RToja0JylaNsFRLnUKN8WY6N1 fEa4eG1jLmvO9ULGPDLKhAg3CJbFX5rvE8x4iryDJAiWpmdRlpIoECyOFdvP chsqARLxz88OoZ4ihAyPrEhCSLSDYAMh0bjm6lkh0+PoshAKeMdMlQOoHEbk DgpLppEEOhkgNQuj1bNDpkd4ZV2Zfk5dhqA0H3g6lmjl4yHDUbF0QLRB0Qqj SDkkagdFFcb3fkYUrXxU1BKKNrZolVGkHBa1gCJ0RJ4IQ5JgcRZeAhVS65Pq WSbNspUgEf7osrNUTR3q3CyCo2wt2uwbSdc5sxkUnhXY1OscMgxJUT5Kq6wk 5SfTluSbxm6cRNkZLs/pIGKOqUQsuSfZSzPyLZKBIIJCrsJLZRBieBEM/j9Z UF2IIfsBAA== --_002_4737A960563B524DA805CA602BE04B3063344A6BDESCVEXCH2marve_--