From patchwork Tue Feb 10 22:46:37 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 438593 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 908BC140119 for ; Wed, 11 Feb 2015 09:48:17 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; q=dns; s=default; b=QRzv9/vFTuglBKA721 5MSM3LRuoPBHnqn6iboI+83ivH2yzccr8JvL4EKmgHky+vxBSaCfoTbY+9qkgX3k 8SlkKKOangNPWWIDjLlHQPtWYK+zS128mkfYSswfcilpZhL5GdiTvgRvffoKm5z6 QO1V5k+iK5hV7617/9cxKXUIw= 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 :mime-version:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; s=default; bh=R16BY9mOIXT4s+zpwUN8Mf7q QJo=; b=ulIvKG2vNEMcLXussY2zifNSrNzB+vTurDJA/qD39Vn3eNnk+vuZY9xF AQXqKZKI+hDRDIx2V2Qwrp6aCwNSj0Vz7FmmAyRLKJItIlPunlDQ+D3DSfs8JInA FcWfbbcCh5dPOnJmEw9uX3gAY4mmBLw9zSZkCDrHq3qOY5GZOJs= Received: (qmail 5965 invoked by alias); 10 Feb 2015 22:46: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 5940 invoked by uid 89); 10 Feb 2015 22:46:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=unavailable version=3.3.2 X-HELO: mail-lb0-f172.google.com Received: from mail-lb0-f172.google.com (HELO mail-lb0-f172.google.com) (209.85.217.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 10 Feb 2015 22:46:41 +0000 Received: by mail-lb0-f172.google.com with SMTP id l4so39239371lbv.3 for ; Tue, 10 Feb 2015 14:46:37 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.152.5.6 with SMTP id o6mr8634494lao.59.1423608397462; Tue, 10 Feb 2015 14:46:37 -0800 (PST) Received: by 10.25.21.213 with HTTP; Tue, 10 Feb 2015 14:46:37 -0800 (PST) In-Reply-To: <54DA7604.8020807@redhat.com> References: <54DA4F85.70606@redhat.com> <54DA7604.8020807@redhat.com> Date: Tue, 10 Feb 2015 14:46:37 -0800 Message-ID: Subject: Re: [PATCH] Implement libffi for AARCH64:ILP32 From: Andrew Pinski To: Richard Henderson Cc: GCC Patches , "libffi-discuss@sourceware.org" X-IsSubscribed: yes On Tue, Feb 10, 2015 at 1:20 PM, Richard Henderson wrote: > On 02/10/2015 11:02 AM, Andrew Pinski wrote: >> +#define FFI_SIZEOF_JAVA_RAW 4 > > Since aarch64 doesn't implement the raw java api, this is irrelevant. Ok. This is what I applied to GCC after testing it (I don't have access to the libffi git repo). 2015-02-10 Andrew Pinski * src/aarch64/ffitarget.h (ffi_arg): Use unsigned long long for ILP32. (FFI_SIZEOF_ARG): Define to 64 for ILP32. (ffi_sarg): Use signed long long for ILP32. * src/aarch64/sysv.S (PTR_REG): New macro. (PTR_SIZE): New macro. (ffi_closure_SYSV): Load cif, fn and user_data using PTR_REG. (ffi_go_closure_SYSV): Load cif and fn using PTR_REG. Thanks, Andrew Pinski > > > r~ commit b3d4df7304dcbc56475f400837b47fc52143292e Author: Andrew Pinski Date: Mon Feb 9 08:41:09 2015 +0000 * src/aarch64/ffitarget.h (ffi_arg): Use unsigned long long for ILP32. (FFI_SIZEOF_ARG): Define to 64 for ILP32. (ffi_sarg): Use signed long long for ILP32. * src/aarch64/sysv.S (PTR_REG): New macro. (PTR_SIZE): New macro. (ffi_closure_SYSV): Load cif, fn and user_data using PTR_REG. (ffi_go_closure_SYSV): Load cif and fn using PTR_REG. diff --git a/libffi/src/aarch64/ffitarget.h b/libffi/src/aarch64/ffitarget.h index fca2811..2862ec7 100644 --- a/libffi/src/aarch64/ffitarget.h +++ b/libffi/src/aarch64/ffitarget.h @@ -27,8 +27,14 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #endif #ifndef LIBFFI_ASM +#ifdef __ILP32__ +#define FFI_SIZEOF_ARG 8 +typedef unsigned long long ffi_arg; +typedef signed long long ffi_sarg; +#else typedef unsigned long ffi_arg; typedef signed long ffi_sarg; +#endif typedef enum ffi_abi { diff --git a/libffi/src/aarch64/sysv.S b/libffi/src/aarch64/sysv.S index 46f50b9..c1bf9b9 100644 --- a/libffi/src/aarch64/sysv.S +++ b/libffi/src/aarch64/sysv.S @@ -45,6 +45,18 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ # define BE(X) 0 #endif +#ifdef __ILP32__ +#define PTR_REG(n) w##n +#else +#define PTR_REG(n) x##n +#endif + +#ifdef __ILP32__ +#define PTR_SIZE 4 +#else +#define PTR_SIZE 8 +#endif + .text .align 4 @@ -248,8 +260,8 @@ CNAME(ffi_closure_SYSV): stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] /* Load ffi_closure_inner arguments. */ - ldp x0, x1, [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */ - ldr x2, [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+16] /* load user_data */ + ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */ + ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */ .Ldo_closure: add x3, sp, #16 /* load context */ add x4, sp, #ffi_closure_SYSV_FS /* load stack */ @@ -403,7 +415,7 @@ CNAME(ffi_go_closure_SYSV): stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] /* Load ffi_closure_inner arguments. */ - ldp x0, x1, [x18, #8] /* load cif, fn */ + ldp PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */ mov x2, x18 /* load user_data */ b .Ldo_closure cfi_endproc