From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13755 invoked by alias); 16 Jan 2014 11:49:59 -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 13682 invoked by uid 89); 16 Jan 2014 11:49:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: cam-smtp0.cambridge.arm.com Received: from fw-tnat.cambridge.arm.com (HELO cam-smtp0.cambridge.arm.com) (217.140.96.21) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Thu, 16 Jan 2014 11:49:57 +0000 Received: from [10.1.207.145] (e104458-lin.cambridge.arm.com [10.1.207.145]) by cam-smtp0.cambridge.arm.com (8.13.8/8.13.8) with ESMTP id s0GBnrSb026238; Thu, 16 Jan 2014 11:49:53 GMT Message-ID: <52D7C761.6090605@arm.com> Date: Thu, 16 Jan 2014 11:49:00 -0000 From: Alex Velenko User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130804 Thunderbird/17.0.8 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" CC: Marcus Shawcroft Subject: [PATCH AArch64_BE 2/4] Big-Endian lane numbering fix Content-Type: multipart/mixed; boundary="------------020304010802060800070409" X-IsSubscribed: yes X-SW-Source: 2014-01/txt/msg00972.txt.bz2 This is a multi-part message in MIME format. --------------020304010802060800070409 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 538 Hi, This patch changes get_lane intrinsics to provide a correct big-endian indexing. This fixes numerous BE load and store issues based on getting correct lane. Is this good for trunk? gcc/ 2013-01-14 Alex Velenko * config/aarch64/aarch64-simd.md (aarch64_be_checked_get_lane): New define_expand. * config/aarch64/aarch64-simd-builtins.def (BUILTIN_VALL (GETLANE, be_checked_get_lane, 0): New builtin definition. * config/aarch64/arm_neon.h: (__aarch64_vget_lane_any): Uses new safe be builtin. --------------020304010802060800070409 Content-Type: text/x-patch; name="get_lane.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="get_lane.patch" Content-length: 2093 diff --git a/gcc/config/aarch64/aarch64-simd-builtins.def b/gcc/config/aarch64/aarch64-simd-builtins.def index 1dc3c1fe33fdb8148d2ff9c7198e4d85d5dac5d7..d255759713068e64c007cf8a90f57b0fcc0fc288 100644 --- a/gcc/config/aarch64/aarch64-simd-builtins.def +++ b/gcc/config/aarch64/aarch64-simd-builtins.def @@ -49,6 +49,7 @@ BUILTIN_VALL (GETLANE, get_lane, 0) VAR1 (GETLANE, get_lane, 0, di) + BUILTIN_VALL (GETLANE, be_checked_get_lane, 0) BUILTIN_VD_RE (REINTERP, reinterpretdi, 0) BUILTIN_VDC (REINTERP, reinterpretv8qi, 0) diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 2f2e74f6bccd54accd265a55cc8dbcfe2db2e76f..2a7b5b12233a55dcbb61632f64ebee8a7f24ac02 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -2062,6 +2062,20 @@ [(set_attr "type" "neon_to_gp")] ) +(define_expand "aarch64_be_checked_get_lane" + [(match_operand: 0 "aarch64_simd_nonimmediate_operand") + (match_operand:VALL 1 "register_operand") + (match_operand:SI 2 "immediate_operand")] + "TARGET_SIMD" + { + operands[2] = GEN_INT (ENDIAN_LANE_N (mode, INTVAL (operands[2]))); + emit_insn (gen_aarch64_get_lane (operands[0], + operands[1], + operands[2])); + DONE; + } +) + ;; Lane extraction of a value, neither sign nor zero extension ;; is guaranteed so upper bits should be considered undefined. (define_insn "aarch64_get_lane" diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h index 03549bd7a27cccb14ed8cdce91cbd4e4278c273f..33816d4381c8cf271fc4a85db6cc668f6c031dd8 100644 --- a/gcc/config/aarch64/arm_neon.h +++ b/gcc/config/aarch64/arm_neon.h @@ -453,7 +453,7 @@ typedef struct poly16x8x4_t #define __aarch64_vget_lane_any(__size, __cast_ret, __cast_a, __a, __b) \ (__cast_ret \ - __builtin_aarch64_get_lane##__size (__cast_a __a, __b)) + __builtin_aarch64_be_checked_get_lane##__size (__cast_a __a, __b)) #define __aarch64_vget_lane_f32(__a, __b) \ __aarch64_vget_lane_any (v2sf, , , __a, __b) --------------020304010802060800070409--