From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19627 invoked by alias); 6 Oct 2009 03:10:02 -0000 Received: (qmail 19601 invoked by uid 22791); 6 Oct 2009 03:10:01 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 06 Oct 2009 03:09:57 +0000 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n9639tDZ000336; Mon, 5 Oct 2009 23:09:55 -0400 Received: from stone.twiddle.home (vpn-225-154.phx2.redhat.com [10.3.225.154]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n9639t7B001757; Mon, 5 Oct 2009 23:09:55 -0400 Message-ID: <4ACAB4FE.7010204@redhat.com> Date: Tue, 06 Oct 2009 03:10:00 -0000 From: Richard Henderson User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090814 Fedora/3.0-2.6.b3.fc11 Thunderbird/3.0b3 MIME-Version: 1.0 To: Mohamed Shafi CC: GCC Subject: Re: How to split 40bit data types load/store? References: <4AAE5A2D.6090605@redhat.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org X-SW-Source: 2009-10/txt/msg00103.txt.bz2 On 10/05/2009 07:02 AM, Mohamed Shafi wrote: > . But now it seems that i > need to split the pattern before reload also. Oh? Why? > The only addressing mode > supported for accessing this section is (SP+offset). Ouch. Is there no general register to high-8bit move either? So you can't do load (R0), D0 load (R0+4), R1 move.ext R1, D0.u8 > (define_expand "movda" > [(set (match_operand:DA 0 "nonimmediate_operand" "") > (match_operand:DA 1 "nonimmediate_operand" ""))] So, DAmode is your 40-bit value. What's SAmode? > (define_insn "load_reg_ext" > [(set (subreg:SA (zero_extract:DA (match_operand:DA 0 "register_operand" "=d") > (const_int 8) > (const_int 24)) 4) > (match_operand:SA 1 "memory_operand" "Sd3"))] This pattern doesn't look kosher with the subreg outside the zero_extract. I know I mentioned using zero_extract in an earlier message, but that may not actually work with an object larger than word size. You may be better off with an unspec: (set (match_operand:DA 0 "register_operand" "=d") (unspec:DA [(match_operand:DA 1 "register_operand" "0") (match_operand:SA 2 "memory_operand" "Sd3")] UNSPEC_LOAD_REG_EXT)) or whatever you actually need. r~