From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 479 invoked by alias); 28 Oct 2014 18:54:14 -0000 Mailing-List: contact libffi-discuss-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libffi-discuss-owner@sourceware.org Received: (qmail 416 invoked by uid 89); 28 Oct 2014 18:54:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qg0-f51.google.com Received: from mail-qg0-f51.google.com (HELO mail-qg0-f51.google.com) (209.85.192.51) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Tue, 28 Oct 2014 18:54:12 +0000 Received: by mail-qg0-f51.google.com with SMTP id j5so1020352qga.24 for ; Tue, 28 Oct 2014 11:54:09 -0700 (PDT) X-Received: by 10.140.34.102 with SMTP id k93mr7423579qgk.21.1414522449733; Tue, 28 Oct 2014 11:54:09 -0700 (PDT) Received: from anchor.com (50-194-63-110-static.hfc.comcastbusiness.net. [50.194.63.110]) by mx.google.com with ESMTPSA id 69sm1717430qgy.19.2014.10.28.11.54.08 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Oct 2014 11:54:09 -0700 (PDT) From: Richard Henderson To: libffi-discuss@sourceware.org Cc: Richard Henderson Subject: [PATCH 15/16] aarch64: Move x8 out of call_context Date: Tue, 28 Oct 2014 18:54:00 -0000 Message-Id: <1414522393-19169-16-git-send-email-rth@twiddle.net> In-Reply-To: <1414522393-19169-1-git-send-email-rth@twiddle.net> References: <1414522393-19169-1-git-send-email-rth@twiddle.net> X-SW-Source: 2014/txt/msg00143.txt.bz2 From: Richard Henderson Reduces stack size. It was only used by the closure, and there are available argument registers. --- src/aarch64/ffi.c | 5 ++--- src/aarch64/internal.h | 2 +- src/aarch64/sysv.S | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/aarch64/ffi.c b/src/aarch64/ffi.c index 4f85140..f546ab2 100644 --- a/src/aarch64/ffi.c +++ b/src/aarch64/ffi.c @@ -52,7 +52,6 @@ struct call_context { struct _v v[N_V_ARG_REG]; UINT64 x[N_X_ARG_REG]; - UINT64 x8; }; #if defined (__clang__) && defined (__APPLE__) @@ -766,7 +765,7 @@ ffi_closure_SYSV_inner (ffi_cif *cif, void (*fun)(ffi_cif*,void*,void**,void*), void *user_data, struct call_context *context, - void *stack, void *rvalue) + void *stack, void *rvalue, void *struct_rvalue) { void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); int i, h, nargs, flags; @@ -861,7 +860,7 @@ ffi_closure_SYSV_inner (ffi_cif *cif, flags = cif->flags; if (flags & AARCH64_RET_IN_MEM) - rvalue = (void *)(uintptr_t)context->x8; + rvalue = struct_rvalue; fun (cif, rvalue, avalue, user_data); diff --git a/src/aarch64/internal.h b/src/aarch64/internal.h index a3070db..9c3e077 100644 --- a/src/aarch64/internal.h +++ b/src/aarch64/internal.h @@ -64,4 +64,4 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define N_X_ARG_REG 8 #define N_V_ARG_REG 8 -#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8 + 16) +#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8) diff --git a/src/aarch64/sysv.S b/src/aarch64/sysv.S index abd848d..7f00a3f 100644 --- a/src/aarch64/sysv.S +++ b/src/aarch64/sysv.S @@ -241,7 +241,6 @@ CNAME(ffi_closure_SYSV): stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] - str x8, [sp, #16 + 16*N_V_ARG_REG + 64] /* Load ffi_closure_inner arguments. */ ldp x0, x1, [x17, #FFI_TRAMPOLINE_SIZE] /* load cif, fn */ @@ -249,6 +248,7 @@ CNAME(ffi_closure_SYSV): add x3, sp, #16 /* load context */ add x4, sp, #ffi_closure_SYSV_FS /* load stack */ add x5, sp, #16+CALL_CONTEXT_SIZE /* load rvalue */ + mov x6, x8 /* load struct_rval */ bl CNAME(ffi_closure_SYSV_inner) /* Load the return value as directed. */ -- 1.9.3