From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 101529 invoked by alias); 2 Sep 2016 09:35:26 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 101515 invoked by uid 89); 2 Sep 2016 09:35:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=aloha, reorder, lastly, Hx-languages-length:3823 X-HELO: mail-vk0-f43.google.com Received: from mail-vk0-f43.google.com (HELO mail-vk0-f43.google.com) (209.85.213.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 02 Sep 2016 09:35:23 +0000 Received: by mail-vk0-f43.google.com with SMTP id f76so18501126vke.0 for ; Fri, 02 Sep 2016 02:35:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=PvWJYp5+UqbDobfONXtBxzid8IlxOsLgHj4U2M86X0s=; b=Q1wuHcijSl3Cz1DFK0jSDg8oZ9LkaXSs9djdWeQQixMPO5cA/0aTpMGVLi08/+2ZMa e6Cl+gmPva9SKVhXldMg+i6V4EMxdw0qNdXd+lT5WHIwn7y/gfa+c13Wk6WlsGLzTL96 F78u6PD8Lpi4H8ZmlNI+oG0E9tO3ofQbAwGEvAu6sD5db4ZpCdJwNARxnRHN+nT16iol SSVsP8JQ2YFrMJsZTyV2nJI4Oy/VhEDPeMfl1/ckCTGUp2nKtZaDpJWjKxiwPucPbz/x LABUe85iV+5/iCldeTH22R5JJQ2uXMV+h4EgHTbquedZQVcAeIgcl7oi5R3Eg+zMgekq xyig== X-Gm-Message-State: AE9vXwMtT3CoNQVhIB68JvBsZcLcj0imDOHmBywRxhdRR5vhBJH9LOvtdpMHHLmBitE+LG8BDgJclblWYBrwvQ== X-Received: by 10.31.155.141 with SMTP id d135mr10545320vke.98.1472808921937; Fri, 02 Sep 2016 02:35:21 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.21.134 with HTTP; Fri, 2 Sep 2016 02:35:21 -0700 (PDT) From: Uros Bizjak Date: Fri, 02 Sep 2016 09:35:00 -0000 Message-ID: Subject: [RFC PATCH, alpha]: ABI change: pass SFmode and SCmode variable arguments by reference To: "gcc-patches@gcc.gnu.org" Cc: Richard Henderson , "Joseph S. Myers" Content-Type: multipart/mixed; boundary=001a114100409d6e8a053b830ca4 X-SW-Source: 2016-09/txt/msg00075.txt.bz2 --001a114100409d6e8a053b830ca4 Content-Type: text/plain; charset=UTF-8 Content-length: 2317 Hello! I would like to propose an ABI adjustment for the aloha OSF/1 ABI. To quote explanation in the patch: --q-- /* Pass float and _Complex float variable arguments by reference. This avoids 64-bit store from a FP register to a pretend args save area and subsequent 32-bit load from the saved location to a FP register. Note that 32-bit loads and stores to/from a FP register on alpha reorder bits to form a canonical 64-bit value in the FP register. This fact invalidates compiler assumption that 32-bit FP value lives in the lower 32-bits of the passed 64-bit FP value, so loading the 32-bit value from the stored 64-bit location using 32-bit FP load is invalid on alpha. This introduces sort of ABI incompatibility, but until _Float32 was introduced, C-family languages promoted 32-bit float variable arg to a 64-bit double, and it was not allowed to pass float as a varible argument. Passing _Complex float as a variable argument never worked on alpha. Thus, we have no backward compatibility issues to worry about, and passing un-promoted _Float32 and _Complex float as a variable argument will actually work in the future. */ --/q-- Another rationale for the adjustment is, that "other" compilers do not know about _Float32 and _Complex float, the official ABI pre-dates some of these types by a decade or more (I was not able to find the authoritative OSF/1 ABI document on the net...), and lastly ... gcc is the last compiler that keeps this dead architecture alive, so IMO we can consider it as a de-facto implementer of the ABI. Following this ABI adjustment, we can also fix libffi, where libffi.complex/cls_complex_va_float.c says: --q-- /* Alpha splits _Complex into two arguments. It's illegal to pass float through varargs, so _Complex float goes badly. In sort of gets passed as _Complex double, but the compiler doesn't agree with itself on this issue. */ /* { dg-do run { xfail alpha*-*-* } } */ --/q-- 2016-09-02 Uros Bizjak * config/alpha/alpha.c (alpha_pass_by_reference): Pass un-named SFmode and SCmode arguments by reference. Patch was bootstrapped and regression tested on alphaev68-linux-gnu for all default languages plus obj-c++ and go. Any comments? Uros. --001a114100409d6e8a053b830ca4 Content-Type: text/plain; charset=US-ASCII; name="a.diff.txt" Content-Disposition: attachment; filename="a.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_islkceox0 Content-length: 2172 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWxwaGEvYWxwaGEuYyBiL2djYy9j b25maWcvYWxwaGEvYWxwaGEuYwppbmRleCA3MDJjZDI3Li44MWNlZjRlIDEw MDY0NAotLS0gYS9nY2MvY29uZmlnL2FscGhhL2FscGhhLmMKKysrIGIvZ2Nj L2NvbmZpZy9hbHBoYS9hbHBoYS5jCkBAIC01NzU0LDggKzU3NTQsMjkgQEAg c3RhdGljIGJvb2wKIGFscGhhX3Bhc3NfYnlfcmVmZXJlbmNlIChjdW11bGF0 aXZlX2FyZ3NfdCBjYSBBVFRSSUJVVEVfVU5VU0VELAogCQkJIG1hY2hpbmVf bW9kZSBtb2RlLAogCQkJIGNvbnN0X3RyZWUgdHlwZSBBVFRSSUJVVEVfVU5V U0VELAotCQkJIGJvb2wgbmFtZWQgQVRUUklCVVRFX1VOVVNFRCkKKwkJCSBi b29sIG5hbWVkKQogeworICAvKiBQYXNzIGZsb2F0IGFuZCBfQ29tcGxleCBm bG9hdCB2YXJpYWJsZSBhcmd1bWVudHMgYnkgcmVmZXJlbmNlLgorICAgICBU aGlzIGF2b2lkcyA2NC1iaXQgc3RvcmUgZnJvbSBhIEZQIHJlZ2lzdGVyIHRv IGEgcHJldGVuZCBhcmdzIHNhdmUgYXJlYQorICAgICBhbmQgc3Vic2VxdWVu dCAzMi1iaXQgbG9hZCBmcm9tIHRoZSBzYXZlZCBsb2NhdGlvbiB0byBhIEZQ IHJlZ2lzdGVyLgorCisgICAgIE5vdGUgdGhhdCAzMi1iaXQgbG9hZHMgYW5k IHN0b3JlcyB0by9mcm9tIGEgRlAgcmVnaXN0ZXIgb24gYWxwaGEgcmVvcmRl cgorICAgICBiaXRzIHRvIGZvcm0gYSBjYW5vbmljYWwgNjQtYml0IHZhbHVl IGluIHRoZSBGUCByZWdpc3Rlci4gIFRoaXMgZmFjdAorICAgICBpbnZhbGlk YXRlcyBjb21waWxlciBhc3N1bXB0aW9uIHRoYXQgMzItYml0IEZQIHZhbHVl IGxpdmVzIGluIHRoZSBsb3dlcgorICAgICAzMi1iaXRzIG9mIHRoZSBwYXNz ZWQgNjQtYml0IEZQIHZhbHVlLCBzbyBsb2FkaW5nIHRoZSAzMi1iaXQgdmFs dWUgZnJvbQorICAgICB0aGUgc3RvcmVkIDY0LWJpdCBsb2NhdGlvbiB1c2lu ZyAzMi1iaXQgRlAgbG9hZCBpcyBpbnZhbGlkIG9uIGFscGhhLgorCisgICAg IFRoaXMgaW50cm9kdWNlcyBzb3J0IG9mIEFCSSBpbmNvbXBhdGliaWxpdHks IGJ1dCB1bnRpbCBfRmxvYXQzMiB3YXMKKyAgICAgaW50cm9kdWNlZCwgQy1m YW1pbHkgbGFuZ3VhZ2VzIHByb21vdGVkIDMyLWJpdCBmbG9hdCB2YXJpYWJs ZSBhcmcgdG8KKyAgICAgYSA2NC1iaXQgZG91YmxlLCBhbmQgaXQgd2FzIG5v dCBhbGxvd2VkIHRvIHBhc3MgZmxvYXQgYXMgYSB2YXJpYmxlCisgICAgIGFy Z3VtZW50LiAgUGFzc2luZyBfQ29tcGxleCBmbG9hdCBhcyBhIHZhcmlhYmxl IGFyZ3VtZW50IG5ldmVyCisgICAgIHdvcmtlZCBvbiBhbHBoYS4gIFRodXMs IHdlIGhhdmUgbm8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZXMKKyAg ICAgdG8gd29ycnkgYWJvdXQsIGFuZCBwYXNzaW5nIHVucHJvbW90ZWQgX0Zs b2F0MzIgYW5kIF9Db21wbGV4IGZsb2F0CisgICAgIGFzIGEgdmFyaWFibGUg YXJndW1lbnQgd2lsbCBhY3R1YWxseSB3b3JrIGluIHRoZSBmdXR1cmUuICAq LworCisgIGlmIChtb2RlID09IFNGbW9kZSB8fCBtb2RlID09IFNDbW9kZSkK KyAgICByZXR1cm4gIW5hbWVkOworCiAgIHJldHVybiBtb2RlID09IFRGbW9k ZSB8fCBtb2RlID09IFRDbW9kZTsKIH0KIAo= --001a114100409d6e8a053b830ca4--