From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9633 invoked by alias); 7 Nov 2014 15:31:11 -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 9585 invoked by uid 89); 7 Nov 2014 15:31:10 -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_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-wg0-f43.google.com Received: from mail-wg0-f43.google.com (HELO mail-wg0-f43.google.com) (74.125.82.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 07 Nov 2014 15:31:08 +0000 Received: by mail-wg0-f43.google.com with SMTP id y10so4053186wgg.16 for ; Fri, 07 Nov 2014 07:31:05 -0800 (PST) X-Received: by 10.180.74.76 with SMTP id r12mr6318912wiv.6.1415374265631; Fri, 07 Nov 2014 07:31:05 -0800 (PST) Received: from pike.twiddle.home.com ([87.111.149.167]) by mx.google.com with ESMTPSA id p1sm12186731wjy.22.2014.11.07.07.31.04 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 07 Nov 2014 07:31:05 -0800 (PST) From: Richard Henderson To: libffi-discuss@sourceware.org Subject: [PATCH 09/13] x86: Add support for Complex Date: Fri, 07 Nov 2014 15:31:00 -0000 Message-Id: <1415374240-1792-10-git-send-email-rth@twiddle.net> In-Reply-To: <1415374240-1792-1-git-send-email-rth@twiddle.net> References: <1415374240-1792-1-git-send-email-rth@twiddle.net> X-SW-Source: 2014/txt/msg00196.txt.bz2 --- src/x86/ffi.c | 27 +++++++++++++++++++++++++++ testsuite/libffi.call/call.exp | 3 ++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/x86/ffi.c b/src/x86/ffi.c index 40e47d2..a0d0cf3 100644 --- a/src/x86/ffi.c +++ b/src/x86/ffi.c @@ -120,6 +120,7 @@ ffi_prep_cif_machdep(ffi_cif *cif) else #endif { + do_struct: switch (cabi) { case FFI_THISCALL: @@ -136,6 +137,32 @@ ffi_prep_cif_machdep(ffi_cif *cif) bytes += ALIGN (sizeof(void*), FFI_SIZEOF_ARG); } break; + case FFI_TYPE_COMPLEX: + switch (cif->rtype->elements[0]->type) + { + case FFI_TYPE_DOUBLE: + case FFI_TYPE_LONGDOUBLE: + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + goto do_struct; + case FFI_TYPE_FLOAT: + case FFI_TYPE_INT: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + flags = X86_RET_INT64; + break; + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + flags = X86_RET_INT32; + break; + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + flags = X86_RET_STRUCT_2B; + break; + default: + return FFI_BAD_TYPEDEF; + } + break; default: return FFI_BAD_TYPEDEF; } diff --git a/testsuite/libffi.call/call.exp b/testsuite/libffi.call/call.exp index 55de25c..d42dae5 100644 --- a/testsuite/libffi.call/call.exp +++ b/testsuite/libffi.call/call.exp @@ -27,7 +27,8 @@ run-many-tests $tlist "" # ??? We really should preprocess ffi.h and grep # for FFI_TARGET_HAS_COMPLEX_TYPE. if { [istarget s390*] - || [istarget x86_64*] } { + || [istarget x86_64*] + || [istarget i?86*] } { run-many-tests $ctlist "" } else { foreach test $ctlist { -- 1.9.3