From patchwork Tue Jul 22 14:51:32 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 372497 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 9D5501400B9 for ; Wed, 23 Jul 2014 00:52:42 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:subject:content-type; q= dns; s=default; b=PzocdNB4C22ww3iHJjyA2FBLqd/kiDCbn9qegfGNwnPQZW lBrRmIYitWCN4OC2Y7eouAor8rAKe6JTP6A6NvDD2xCgnCpDWEpDw+pTgDervaVw duBC7V1bC/J03FhBx611c0p/nOxI3iCNyCiSaOSYKITlopDWXrHCG7Vgp7L08= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:subject:content-type; s= default; bh=axluwjoy/+dbnSlU+/g1GCtIXwU=; b=bi9YVWbGXRKzWNJy6fpw gSRjuLdI8qKRusKZEjMYJXXFzMwg2wc9AzdTabq8jtK3Tv8/WdlDer1Zne+V6XDi aJiX4dxvSqlb6Jn+9QlVD4WuyqD6AwBo2GCsysfh99IImo4FNzHnwGjPqmEw7BwV IdtT3Om1TKSJUJV6VFD2VJQ= Received: (qmail 29405 invoked by alias); 22 Jul 2014 14:51:42 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 29329 invoked by uid 89); 22 Jul 2014 14:51:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: service87.mimecast.com Received: from service87.mimecast.com (HELO service87.mimecast.com) (91.220.42.44) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 22 Jul 2014 14:51:35 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Tue, 22 Jul 2014 15:51:32 +0100 Received: from [10.1.205.157] ([10.1.255.212]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 22 Jul 2014 15:51:32 +0100 Message-ID: <53CE7A74.9070505@arm.com> Date: Tue, 22 Jul 2014 15:51:32 +0100 From: Jiong Wang User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.1 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org Subject: [AArch64/GCC][9/N] Use helper functions to handle multiple mode X-MC-Unique: 114072215513210501 X-IsSubscribed: yes This patch add several helper functions to handle function invokation under different mode. We will merge core/vectore register push/restore function in later patches, so these helper functions are necessary. *no functional change* ok to install? thanks. gcc/ * config/aarch64/aarch64.c (aarch64_gen_store_pair): New helper function. (aarch64_gen_load_pair): Likewise. (aarch64_save_or_restore_fprs): Use new helper functions. (aarch64_save_or_restore_callee_save_registers): Likewise. >From 529eee0ee38d25e02efd84517e1ea2e8af4aa197 Mon Sep 17 00:00:00 2001 From: Jiong Wang Date: Tue, 17 Jun 2014 22:10:00 +0100 Subject: [PATCH 09/19] [AArch64/GCC][9/20]Use helper functions to handle multiple mode This patch add several helper functions to handle function invokation under different mode. We will merge core/vectore register push/restore function in later patches, so these helper functions are necessary. *no functional change* 2014-06-16 Jiong Wang Marcus Shawcroft gcc/ * config/aarch64/aarch64.c (aarch64_gen_store_pair): New helper function. (aarch64_gen_load_pair): Likewise. (aarch64_save_or_restore_fprs): Use new helper functions. (aarch64_save_or_restore_callee_save_registers): Likewise. --- gcc/config/aarch64/aarch64.c | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 0b6305b..c4ea9ec 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -1913,6 +1913,40 @@ aarch64_next_callee_save (unsigned regno, unsigned limit) return regno; } +static rtx +aarch64_gen_store_pair (enum machine_mode mode, rtx mem1, rtx reg1, rtx mem2, + rtx reg2) +{ + switch (mode) + { + case DImode: + return gen_store_pairdi (mem1, reg1, mem2, reg2); + + case DFmode: + return gen_store_pairdf (mem1, reg1, mem2, reg2); + + default: + gcc_unreachable (); + } +} + +static rtx +aarch64_gen_load_pair (enum machine_mode mode, rtx reg1, rtx mem1, rtx reg2, + rtx mem2) +{ + switch (mode) + { + case DImode: + return gen_load_pairdi (reg1, mem1, reg2, mem2); + + case DFmode: + return gen_load_pairdf (reg1, mem1, reg2, mem2); + + default: + gcc_unreachable (); + } +} + static void aarch64_save_or_restore_fprs (HOST_WIDE_INT start_offset, bool restore) { @@ -1946,10 +1980,10 @@ aarch64_save_or_restore_fprs (HOST_WIDE_INT start_offset, bool restore) mem2 = gen_mem_ref (DFmode, plus_constant (Pmode, stack_pointer_rtx, offset)); if (restore == false) - insn = emit_insn (gen_store_pairdf (mem, reg, mem2, reg2)); + insn = emit_insn (aarch64_gen_store_pair (DFmode, mem, reg, mem2, reg2)); else { - insn = emit_insn (gen_load_pairdf (reg, mem, reg2, mem2)); + insn = emit_insn (aarch64_gen_load_pair (DFmode, reg, mem, reg2, mem2)); add_reg_note (insn, REG_CFA_RESTORE, reg); add_reg_note (insn, REG_CFA_RESTORE, reg2); } @@ -2015,10 +2049,10 @@ aarch64_save_or_restore_callee_save_registers (HOST_WIDE_INT start_offset, mem2 = gen_mem_ref (Pmode, plus_constant (Pmode, stack_pointer_rtx, offset)); if (restore == false) - insn = emit_insn (gen_store_pairdi (mem, reg, mem2, reg2)); + insn = emit_insn (aarch64_gen_store_pair (DImode, mem, reg, mem2, reg2)); else { - insn = emit_insn (gen_load_pairdi (reg, mem, reg2, mem2)); + insn = emit_insn (aarch64_gen_load_pair (DImode, reg, mem, reg2, mem2)); add_reg_note (insn, REG_CFA_RESTORE, reg); add_reg_note (insn, REG_CFA_RESTORE, reg2); } -- 1.7.9.5