From patchwork Tue Aug 19 13:43:16 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Lawrence X-Patchwork-Id: 381359 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 10864140097 for ; Tue, 19 Aug 2014 23:43:46 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:subject:references :in-reply-to:content-type; q=dns; s=default; b=e76HyMRCLuGpxus58 nLDxHvOxgSTqB9HBOdhK/z7rRh9q12RSgI+1gmS9ZkSSByvQ+WdUHd2c+xOqj5nQ seBYpb+y1XtE1AaVWceRV0kdh/gRPbJ939tywSwxwiaVrhTpWA35eRE5qXk3qwXC gfM/CPWklAigkgCaJnFeoPMUpA= 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 :message-id:date:from:mime-version:to:subject:references :in-reply-to:content-type; s=default; bh=pWSZME/WaqtR6iGRCEIGa6J Sk/E=; b=OspSss4VdB8oW9SSNxQ/51NHNYR2OChrfrAlc12Zd9nBK9r7T1F+Ats 3NcFl93dB6jTfdGs75yGUJq5YFigcT3uCBfK9I58FIudENjYRsQJrxI3am1WDl7H KwwRBbDk3qWwTmfTFO5KLn07hknJ85M7EdOLC83T7RJdz8SmSSkU= Received: (qmail 14110 invoked by alias); 19 Aug 2014 13:43:26 -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 14101 invoked by uid 89); 19 Aug 2014 13:43:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, SPF_PASS autolearn=ham version=3.3.2 X-HELO: service87.mimecast.com Received: from service87.mimecast.com (HELO service87.mimecast.com) (91.220.42.44) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 19 Aug 2014 13:43:21 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Tue, 19 Aug 2014 14:43:18 +0100 Received: from [10.1.209.51] ([10.1.255.212]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 19 Aug 2014 14:43:17 +0100 Message-ID: <53F35474.1020002@arm.com> Date: Tue, 19 Aug 2014 14:43:16 +0100 From: Alan Lawrence User-Agent: Thunderbird 2.0.0.24 (X11/20101213) MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" Subject: [PATCH AArch64 2/2] Remove vector compare/tst __builtins References: <53F32A86.4060109@arm.com> In-Reply-To: <53F32A86.4060109@arm.com> X-MC-Unique: 114081914431805001 X-IsSubscribed: yes The vector compare intrinsics (vc[gl][et]z, vceqz, vtst) were written using __builtin functions as (IIUC) at the time gcc vector extensions did not support comparison ops across both C and C++ frontends. These have since been updated. Following the first patch, we now get equal/better code generation from using gcc vector extensions (specifically, TST instructions are generated again, and all NOTs are eliminated), so we can remove a bunch of code and builtins :). Tested with check-gcc and check-g++ on aarch64-none-elf, aarch64.exp+simd.exp on aarch64_be-none-elf. gcc/ChangeLog: * config/aarch64/aarch64-builtins.c (aarch64_fold_builtin): Remove code handling cmge, cmgt, cmeq, cmtst. * config/aarch64/aarch64-simd-builtins.def (cmeq, cmge, cmgt, cmle, cmlt, cmgeu, cmgtu, cmtst): Remove. * config/aarch64/arm_neon.h (vceq_*, vceqq_*, vceqz_*, vceqzq_*, vcge_*, vcgeq_*, vcgez_*, vcgezq_*, vcgt_*, vcgtq_*, vcgtz_*, vcgtzq_*, vcle_*, vcleq_*, vclez_*, vclezq_*, vclt_*, vcltq_*, vcltz_*, vcltzq_*, vtst_*, vtstq_*): Use gcc vector extensions. diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c index c3df73e..aa2c40c 100644 --- a/gcc/config/aarch64/aarch64-builtins.c +++ b/gcc/config/aarch64/aarch64-builtins.c @@ -1215,22 +1215,6 @@ aarch64_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *args, BUILTIN_VALLDI (UNOP, abs, 2) return fold_build1 (ABS_EXPR, type, args[0]); break; - BUILTIN_VALLDI (BINOP, cmge, 0) - return fold_build2 (GE_EXPR, type, args[0], args[1]); - break; - BUILTIN_VALLDI (BINOP, cmgt, 0) - return fold_build2 (GT_EXPR, type, args[0], args[1]); - break; - BUILTIN_VALLDI (BINOP, cmeq, 0) - return fold_build2 (EQ_EXPR, type, args[0], args[1]); - break; - BUILTIN_VSDQ_I_DI (TST, cmtst, 0) - { - tree and_node = fold_build2 (BIT_AND_EXPR, type, args[0], args[1]); - tree vec_zero_node = build_zero_cst (type); - return fold_build2 (NE_EXPR, type, and_node, vec_zero_node); - break; - } VAR1 (REINTERP_SS, reinterpretdi, 0, df) VAR1 (REINTERP_SS, reinterpretv8qi, 0, df) VAR1 (REINTERP_SS, reinterpretv4hi, 0, df) diff --git a/gcc/config/aarch64/aarch64-simd-builtins.def b/gcc/config/aarch64/aarch64-simd-builtins.def index ae52469..9320e99 100644 --- a/gcc/config/aarch64/aarch64-simd-builtins.def +++ b/gcc/config/aarch64/aarch64-simd-builtins.def @@ -240,17 +240,6 @@ BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n, 0) BUILTIN_VSDQ_I (SHIFTIMM, uqshl_n, 0) - /* Implemented by aarch64_cm. */ - BUILTIN_VALLDI (BINOP, cmeq, 0) - BUILTIN_VALLDI (BINOP, cmge, 0) - BUILTIN_VALLDI (BINOP, cmgt, 0) - BUILTIN_VALLDI (BINOP, cmle, 0) - BUILTIN_VALLDI (BINOP, cmlt, 0) - /* Implemented by aarch64_cm. */ - BUILTIN_VSDQ_I_DI (BINOP, cmgeu, 0) - BUILTIN_VSDQ_I_DI (BINOP, cmgtu, 0) - BUILTIN_VSDQ_I_DI (TST, cmtst, 0) - /* Implemented by reduc_plus_. */ BUILTIN_VALL (UNOP, reduc_splus_, 10) BUILTIN_VDQ (UNOP, reduc_uplus_, 10) diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h index e7485f0..ea56b82 100644 --- a/gcc/config/aarch64/arm_neon.h +++ b/gcc/config/aarch64/arm_neon.h @@ -14632,7 +14632,7 @@ vcaltq_f64 (float64x2_t __a, float64x2_t __b) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vceq_f32 (float32x2_t __a, float32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmeqv2sf (__a, __b); + return (uint32x2_t) (__a == __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -14644,26 +14644,25 @@ vceq_f64 (float64x1_t __a, float64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vceq_p8 (poly8x8_t __a, poly8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmeqv8qi ((int8x8_t) __a, - (int8x8_t) __b); + return (uint8x8_t) (__a == __b); } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vceq_s8 (int8x8_t __a, int8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmeqv8qi (__a, __b); + return (uint8x8_t) (__a == __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vceq_s16 (int16x4_t __a, int16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmeqv4hi (__a, __b); + return (uint16x4_t) (__a == __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vceq_s32 (int32x2_t __a, int32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmeqv2si (__a, __b); + return (uint32x2_t) (__a == __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -14675,22 +14674,19 @@ vceq_s64 (int64x1_t __a, int64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vceq_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmeqv8qi ((int8x8_t) __a, - (int8x8_t) __b); + return (__a == __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vceq_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmeqv4hi ((int16x4_t) __a, - (int16x4_t) __b); + return (__a == __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vceq_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmeqv2si ((int32x2_t) __a, - (int32x2_t) __b); + return (__a == __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -14702,72 +14698,67 @@ vceq_u64 (uint64x1_t __a, uint64x1_t __b) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vceqq_f32 (float32x4_t __a, float32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmeqv4sf (__a, __b); + return (uint32x4_t) (__a == __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vceqq_f64 (float64x2_t __a, float64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmeqv2df (__a, __b); + return (uint64x2_t) (__a == __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vceqq_p8 (poly8x16_t __a, poly8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmeqv16qi ((int8x16_t) __a, - (int8x16_t) __b); + return (uint8x16_t) (__a == __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vceqq_s8 (int8x16_t __a, int8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmeqv16qi (__a, __b); + return (uint8x16_t) (__a == __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vceqq_s16 (int16x8_t __a, int16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmeqv8hi (__a, __b); + return (uint16x8_t) (__a == __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vceqq_s32 (int32x4_t __a, int32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmeqv4si (__a, __b); + return (uint32x4_t) (__a == __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vceqq_s64 (int64x2_t __a, int64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmeqv2di (__a, __b); + return (uint64x2_t) (__a == __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vceqq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmeqv16qi ((int8x16_t) __a, - (int8x16_t) __b); + return (__a == __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vceqq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmeqv8hi ((int16x8_t) __a, - (int16x8_t) __b); + return (__a == __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vceqq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmeqv4si ((int32x4_t) __a, - (int32x4_t) __b); + return (__a == __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vceqq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmeqv2di ((int64x2_t) __a, - (int64x2_t) __b); + return (__a == __b); } /* vceq - scalar. */ @@ -14801,8 +14792,7 @@ vceqd_f64 (float64_t __a, float64_t __b) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vceqz_f32 (float32x2_t __a) { - float32x2_t __b = {0.0f, 0.0f}; - return (uint32x2_t) __builtin_aarch64_cmeqv2sf (__a, __b); + return (uint32x2_t) (__a == 0.0f); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -14814,30 +14804,25 @@ vceqz_f64 (float64x1_t __a) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vceqz_p8 (poly8x8_t __a) { - poly8x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x8_t) __builtin_aarch64_cmeqv8qi ((int8x8_t) __a, - (int8x8_t) __b); + return (uint8x8_t) (__a == 0); } __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vceqz_s8 (int8x8_t __a) { - int8x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x8_t) __builtin_aarch64_cmeqv8qi (__a, __b); + return (uint8x8_t) (__a == 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vceqz_s16 (int16x4_t __a) { - int16x4_t __b = {0, 0, 0, 0}; - return (uint16x4_t) __builtin_aarch64_cmeqv4hi (__a, __b); + return (uint16x4_t) (__a == 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vceqz_s32 (int32x2_t __a) { - int32x2_t __b = {0, 0}; - return (uint32x2_t) __builtin_aarch64_cmeqv2si (__a, __b); + return (uint32x2_t) (__a == 0); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -14849,25 +14834,19 @@ vceqz_s64 (int64x1_t __a) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vceqz_u8 (uint8x8_t __a) { - uint8x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x8_t) __builtin_aarch64_cmeqv8qi ((int8x8_t) __a, - (int8x8_t) __b); + return (__a == 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vceqz_u16 (uint16x4_t __a) { - uint16x4_t __b = {0, 0, 0, 0}; - return (uint16x4_t) __builtin_aarch64_cmeqv4hi ((int16x4_t) __a, - (int16x4_t) __b); + return (__a == 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vceqz_u32 (uint32x2_t __a) { - uint32x2_t __b = {0, 0}; - return (uint32x2_t) __builtin_aarch64_cmeqv2si ((int32x2_t) __a, - (int32x2_t) __b); + return (__a == 0); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -14879,86 +14858,67 @@ vceqz_u64 (uint64x1_t __a) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vceqzq_f32 (float32x4_t __a) { - float32x4_t __b = {0.0f, 0.0f, 0.0f, 0.0f}; - return (uint32x4_t) __builtin_aarch64_cmeqv4sf (__a, __b); + return (uint32x4_t) (__a == 0.0f); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vceqzq_f64 (float64x2_t __a) { - float64x2_t __b = {0.0, 0.0}; - return (uint64x2_t) __builtin_aarch64_cmeqv2df (__a, __b); + return (uint64x2_t) (__a == 0.0f); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vceqzq_p8 (poly8x16_t __a) { - poly8x16_t __b = {0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x16_t) __builtin_aarch64_cmeqv16qi ((int8x16_t) __a, - (int8x16_t) __b); + return (uint8x16_t) (__a == 0); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vceqzq_s8 (int8x16_t __a) { - int8x16_t __b = {0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x16_t) __builtin_aarch64_cmeqv16qi (__a, __b); + return (uint8x16_t) (__a == 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vceqzq_s16 (int16x8_t __a) { - int16x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint16x8_t) __builtin_aarch64_cmeqv8hi (__a, __b); + return (uint16x8_t) (__a == 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vceqzq_s32 (int32x4_t __a) { - int32x4_t __b = {0, 0, 0, 0}; - return (uint32x4_t) __builtin_aarch64_cmeqv4si (__a, __b); + return (uint32x4_t) (__a == 0); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vceqzq_s64 (int64x2_t __a) { - int64x2_t __b = {0, 0}; - return (uint64x2_t) __builtin_aarch64_cmeqv2di (__a, __b); + return (uint64x2_t) (__a == __AARCH64_INT64_C (0)); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vceqzq_u8 (uint8x16_t __a) { - uint8x16_t __b = {0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x16_t) __builtin_aarch64_cmeqv16qi ((int8x16_t) __a, - (int8x16_t) __b); + return (__a == 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vceqzq_u16 (uint16x8_t __a) { - uint16x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint16x8_t) __builtin_aarch64_cmeqv8hi ((int16x8_t) __a, - (int16x8_t) __b); + return (__a == 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vceqzq_u32 (uint32x4_t __a) { - uint32x4_t __b = {0, 0, 0, 0}; - return (uint32x4_t) __builtin_aarch64_cmeqv4si ((int32x4_t) __a, - (int32x4_t) __b); + return (__a == 0); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vceqzq_u64 (uint64x2_t __a) { - uint64x2_t __b = {0, 0}; - return (uint64x2_t) __builtin_aarch64_cmeqv2di ((int64x2_t) __a, - (int64x2_t) __b); + return (__a == __AARCH64_UINT64_C (0)); } /* vceqz - scalar. */ @@ -14992,7 +14952,7 @@ vceqzd_f64 (float64_t __a) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcge_f32 (float32x2_t __a, float32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgev2sf (__a, __b); + return (uint32x2_t) (__a >= __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15004,19 +14964,19 @@ vcge_f64 (float64x1_t __a, float64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcge_s8 (int8x8_t __a, int8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmgev8qi (__a, __b); + return (uint8x8_t) (__a >= __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcge_s16 (int16x4_t __a, int16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmgev4hi (__a, __b); + return (uint16x4_t) (__a >= __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcge_s32 (int32x2_t __a, int32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgev2si (__a, __b); + return (uint32x2_t) (__a >= __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15028,22 +14988,19 @@ vcge_s64 (int64x1_t __a, int64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcge_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __a, - (int8x8_t) __b); + return (__a >= __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcge_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __a, - (int16x4_t) __b); + return (__a >= __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcge_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __a, - (int32x2_t) __b); + return (__a >= __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15055,65 +15012,61 @@ vcge_u64 (uint64x1_t __a, uint64x1_t __b) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgeq_f32 (float32x4_t __a, float32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgev4sf (__a, __b); + return (uint32x4_t) (__a >= __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgeq_f64 (float64x2_t __a, float64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgev2df (__a, __b); + return (uint64x2_t) (__a >= __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcgeq_s8 (int8x16_t __a, int8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmgev16qi (__a, __b); + return (uint8x16_t) (__a >= __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcgeq_s16 (int16x8_t __a, int16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmgev8hi (__a, __b); + return (uint16x8_t) (__a >= __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgeq_s32 (int32x4_t __a, int32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgev4si (__a, __b); + return (uint32x4_t) (__a >= __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgeq_s64 (int64x2_t __a, int64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgev2di (__a, __b); + return (uint64x2_t) (__a >= __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcgeq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __a, - (int8x16_t) __b); + return (__a >= __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcgeq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __a, - (int16x8_t) __b); + return (__a >= __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgeq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __a, - (int32x4_t) __b); + return (__a >= __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgeq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __a, - (int64x2_t) __b); + return (__a >= __b); } /* vcge - scalar. */ @@ -15147,8 +15100,7 @@ vcged_f64 (float64_t __a, float64_t __b) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcgez_f32 (float32x2_t __a) { - float32x2_t __b = {0.0f, 0.0f}; - return (uint32x2_t) __builtin_aarch64_cmgev2sf (__a, __b); + return (uint32x2_t) (__a >= 0.0f); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15160,22 +15112,19 @@ vcgez_f64 (float64x1_t __a) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcgez_s8 (int8x8_t __a) { - int8x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x8_t) __builtin_aarch64_cmgev8qi (__a, __b); + return (uint8x8_t) (__a >= 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcgez_s16 (int16x4_t __a) { - int16x4_t __b = {0, 0, 0, 0}; - return (uint16x4_t) __builtin_aarch64_cmgev4hi (__a, __b); + return (uint16x4_t) (__a >= 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcgez_s32 (int32x2_t __a) { - int32x2_t __b = {0, 0}; - return (uint32x2_t) __builtin_aarch64_cmgev2si (__a, __b); + return (uint32x2_t) (__a >= 0); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15187,44 +15136,37 @@ vcgez_s64 (int64x1_t __a) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgezq_f32 (float32x4_t __a) { - float32x4_t __b = {0.0f, 0.0f, 0.0f, 0.0f}; - return (uint32x4_t) __builtin_aarch64_cmgev4sf (__a, __b); + return (uint32x4_t) (__a >= 0.0f); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgezq_f64 (float64x2_t __a) { - float64x2_t __b = {0.0, 0.0}; - return (uint64x2_t) __builtin_aarch64_cmgev2df (__a, __b); + return (uint64x2_t) (__a >= 0.0); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcgezq_s8 (int8x16_t __a) { - int8x16_t __b = {0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x16_t) __builtin_aarch64_cmgev16qi (__a, __b); + return (uint8x16_t) (__a >= 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcgezq_s16 (int16x8_t __a) { - int16x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint16x8_t) __builtin_aarch64_cmgev8hi (__a, __b); + return (uint16x8_t) (__a >= 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgezq_s32 (int32x4_t __a) { - int32x4_t __b = {0, 0, 0, 0}; - return (uint32x4_t) __builtin_aarch64_cmgev4si (__a, __b); + return (uint32x4_t) (__a >= 0); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgezq_s64 (int64x2_t __a) { - int64x2_t __b = {0, 0}; - return (uint64x2_t) __builtin_aarch64_cmgev2di (__a, __b); + return (uint64x2_t) (__a >= __AARCH64_INT64_C (0)); } /* vcgez - scalar. */ @@ -15252,7 +15194,7 @@ vcgezd_f64 (float64_t __a) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcgt_f32 (float32x2_t __a, float32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgtv2sf (__a, __b); + return (uint32x2_t) (__a > __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15264,19 +15206,19 @@ vcgt_f64 (float64x1_t __a, float64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcgt_s8 (int8x8_t __a, int8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmgtv8qi (__a, __b); + return (uint8x8_t) (__a > __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcgt_s16 (int16x4_t __a, int16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmgtv4hi (__a, __b); + return (uint16x4_t) (__a > __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcgt_s32 (int32x2_t __a, int32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgtv2si (__a, __b); + return (uint32x2_t) (__a > __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15288,22 +15230,19 @@ vcgt_s64 (int64x1_t __a, int64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcgt_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __a, - (int8x8_t) __b); + return (__a > __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcgt_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __a, - (int16x4_t) __b); + return (__a > __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcgt_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __a, - (int32x2_t) __b); + return (__a > __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15315,65 +15254,61 @@ vcgt_u64 (uint64x1_t __a, uint64x1_t __b) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgtq_f32 (float32x4_t __a, float32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgtv4sf (__a, __b); + return (uint32x4_t) (__a > __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgtq_f64 (float64x2_t __a, float64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgtv2df (__a, __b); + return (uint64x2_t) (__a > __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcgtq_s8 (int8x16_t __a, int8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmgtv16qi (__a, __b); + return (uint8x16_t) (__a > __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcgtq_s16 (int16x8_t __a, int16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmgtv8hi (__a, __b); + return (uint16x8_t) (__a > __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgtq_s32 (int32x4_t __a, int32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgtv4si (__a, __b); + return (uint32x4_t) (__a > __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgtq_s64 (int64x2_t __a, int64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgtv2di (__a, __b); + return (uint64x2_t) (__a > __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcgtq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __a, - (int8x16_t) __b); + return (__a > __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcgtq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __a, - (int16x8_t) __b); + return (__a > __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgtq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __a, - (int32x4_t) __b); + return (__a > __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgtq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __a, - (int64x2_t) __b); + return (__a > __b); } /* vcgt - scalar. */ @@ -15407,8 +15342,7 @@ vcgtd_f64 (float64_t __a, float64_t __b) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcgtz_f32 (float32x2_t __a) { - float32x2_t __b = {0.0f, 0.0f}; - return (uint32x2_t) __builtin_aarch64_cmgtv2sf (__a, __b); + return (uint32x2_t) (__a > 0.0f); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15420,22 +15354,19 @@ vcgtz_f64 (float64x1_t __a) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcgtz_s8 (int8x8_t __a) { - int8x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x8_t) __builtin_aarch64_cmgtv8qi (__a, __b); + return (uint8x8_t) (__a > 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcgtz_s16 (int16x4_t __a) { - int16x4_t __b = {0, 0, 0, 0}; - return (uint16x4_t) __builtin_aarch64_cmgtv4hi (__a, __b); + return (uint16x4_t) (__a > 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcgtz_s32 (int32x2_t __a) { - int32x2_t __b = {0, 0}; - return (uint32x2_t) __builtin_aarch64_cmgtv2si (__a, __b); + return (uint32x2_t) (__a > 0); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15447,44 +15378,37 @@ vcgtz_s64 (int64x1_t __a) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgtzq_f32 (float32x4_t __a) { - float32x4_t __b = {0.0f, 0.0f, 0.0f, 0.0f}; - return (uint32x4_t) __builtin_aarch64_cmgtv4sf (__a, __b); + return (uint32x4_t) (__a > 0.0f); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgtzq_f64 (float64x2_t __a) { - float64x2_t __b = {0.0, 0.0}; - return (uint64x2_t) __builtin_aarch64_cmgtv2df (__a, __b); + return (uint64x2_t) (__a > 0.0); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcgtzq_s8 (int8x16_t __a) { - int8x16_t __b = {0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x16_t) __builtin_aarch64_cmgtv16qi (__a, __b); + return (uint8x16_t) (__a > 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcgtzq_s16 (int16x8_t __a) { - int16x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint16x8_t) __builtin_aarch64_cmgtv8hi (__a, __b); + return (uint16x8_t) (__a > 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcgtzq_s32 (int32x4_t __a) { - int32x4_t __b = {0, 0, 0, 0}; - return (uint32x4_t) __builtin_aarch64_cmgtv4si (__a, __b); + return (uint32x4_t) (__a > 0); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcgtzq_s64 (int64x2_t __a) { - int64x2_t __b = {0, 0}; - return (uint64x2_t) __builtin_aarch64_cmgtv2di (__a, __b); + return (uint64x2_t) (__a > __AARCH64_INT64_C (0)); } /* vcgtz - scalar. */ @@ -15512,7 +15436,7 @@ vcgtzd_f64 (float64_t __a) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcle_f32 (float32x2_t __a, float32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgev2sf (__b, __a); + return (uint32x2_t) (__a <= __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15524,19 +15448,19 @@ vcle_f64 (float64x1_t __a, float64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcle_s8 (int8x8_t __a, int8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmgev8qi (__b, __a); + return (uint8x8_t) (__a <= __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcle_s16 (int16x4_t __a, int16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmgev4hi (__b, __a); + return (uint16x4_t) (__a <= __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcle_s32 (int32x2_t __a, int32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgev2si (__b, __a); + return (uint32x2_t) (__a <= __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15548,22 +15472,19 @@ vcle_s64 (int64x1_t __a, int64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcle_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __b, - (int8x8_t) __a); + return (__a <= __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcle_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __b, - (int16x4_t) __a); + return (__a <= __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcle_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __b, - (int32x2_t) __a); + return (__a <= __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15575,65 +15496,61 @@ vcle_u64 (uint64x1_t __a, uint64x1_t __b) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcleq_f32 (float32x4_t __a, float32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgev4sf (__b, __a); + return (uint32x4_t) (__a <= __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcleq_f64 (float64x2_t __a, float64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgev2df (__b, __a); + return (uint64x2_t) (__a <= __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcleq_s8 (int8x16_t __a, int8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmgev16qi (__b, __a); + return (uint8x16_t) (__a <= __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcleq_s16 (int16x8_t __a, int16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmgev8hi (__b, __a); + return (uint16x8_t) (__a <= __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcleq_s32 (int32x4_t __a, int32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgev4si (__b, __a); + return (uint32x4_t) (__a <= __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcleq_s64 (int64x2_t __a, int64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgev2di (__b, __a); + return (uint64x2_t) (__a <= __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcleq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __b, - (int8x16_t) __a); + return (__a <= __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcleq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __b, - (int16x8_t) __a); + return (__a <= __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcleq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __b, - (int32x4_t) __a); + return (__a <= __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcleq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __b, - (int64x2_t) __a); + return (__a <= __b); } /* vcle - scalar. */ @@ -15667,8 +15584,7 @@ vcled_f64 (float64_t __a, float64_t __b) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vclez_f32 (float32x2_t __a) { - float32x2_t __b = {0.0f, 0.0f}; - return (uint32x2_t) __builtin_aarch64_cmlev2sf (__a, __b); + return (uint32x2_t) (__a <= 0.0f); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15680,22 +15596,19 @@ vclez_f64 (float64x1_t __a) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vclez_s8 (int8x8_t __a) { - int8x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x8_t) __builtin_aarch64_cmlev8qi (__a, __b); + return (uint8x8_t) (__a <= 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vclez_s16 (int16x4_t __a) { - int16x4_t __b = {0, 0, 0, 0}; - return (uint16x4_t) __builtin_aarch64_cmlev4hi (__a, __b); + return (uint16x4_t) (__a <= 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vclez_s32 (int32x2_t __a) { - int32x2_t __b = {0, 0}; - return (uint32x2_t) __builtin_aarch64_cmlev2si (__a, __b); + return (uint32x2_t) (__a <= 0); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15707,44 +15620,37 @@ vclez_s64 (int64x1_t __a) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vclezq_f32 (float32x4_t __a) { - float32x4_t __b = {0.0f, 0.0f, 0.0f, 0.0f}; - return (uint32x4_t) __builtin_aarch64_cmlev4sf (__a, __b); + return (uint32x4_t) (__a <= 0.0f); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vclezq_f64 (float64x2_t __a) { - float64x2_t __b = {0.0, 0.0}; - return (uint64x2_t) __builtin_aarch64_cmlev2df (__a, __b); + return (uint64x2_t) (__a <= 0.0); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vclezq_s8 (int8x16_t __a) { - int8x16_t __b = {0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x16_t) __builtin_aarch64_cmlev16qi (__a, __b); + return (uint8x16_t) (__a <= 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vclezq_s16 (int16x8_t __a) { - int16x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint16x8_t) __builtin_aarch64_cmlev8hi (__a, __b); + return (uint16x8_t) (__a <= 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vclezq_s32 (int32x4_t __a) { - int32x4_t __b = {0, 0, 0, 0}; - return (uint32x4_t) __builtin_aarch64_cmlev4si (__a, __b); + return (uint32x4_t) (__a <= 0); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vclezq_s64 (int64x2_t __a) { - int64x2_t __b = {0, 0}; - return (uint64x2_t) __builtin_aarch64_cmlev2di (__a, __b); + return (uint64x2_t) (__a <= __AARCH64_INT64_C (0)); } /* vclez - scalar. */ @@ -15772,7 +15678,7 @@ vclezd_f64 (float64_t __a) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vclt_f32 (float32x2_t __a, float32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgtv2sf (__b, __a); + return (uint32x2_t) (__a < __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15784,19 +15690,19 @@ vclt_f64 (float64x1_t __a, float64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vclt_s8 (int8x8_t __a, int8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmgtv8qi (__b, __a); + return (uint8x8_t) (__a < __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vclt_s16 (int16x4_t __a, int16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmgtv4hi (__b, __a); + return (uint16x4_t) (__a < __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vclt_s32 (int32x2_t __a, int32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgtv2si (__b, __a); + return (uint32x2_t) (__a < __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15808,22 +15714,19 @@ vclt_s64 (int64x1_t __a, int64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vclt_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __b, - (int8x8_t) __a); + return (__a < __b); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vclt_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __b, - (int16x4_t) __a); + return (__a < __b); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vclt_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __b, - (int32x2_t) __a); + return (__a < __b); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15835,65 +15738,61 @@ vclt_u64 (uint64x1_t __a, uint64x1_t __b) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcltq_f32 (float32x4_t __a, float32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgtv4sf (__b, __a); + return (uint32x4_t) (__a < __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcltq_f64 (float64x2_t __a, float64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgtv2df (__b, __a); + return (uint64x2_t) (__a < __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcltq_s8 (int8x16_t __a, int8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmgtv16qi (__b, __a); + return (uint8x16_t) (__a < __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcltq_s16 (int16x8_t __a, int16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmgtv8hi (__b, __a); + return (uint16x8_t) (__a < __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcltq_s32 (int32x4_t __a, int32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgtv4si (__b, __a); + return (uint32x4_t) (__a < __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcltq_s64 (int64x2_t __a, int64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgtv2di (__b, __a); + return (uint64x2_t) (__a < __b); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcltq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __b, - (int8x16_t) __a); + return (__a < __b); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcltq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __b, - (int16x8_t) __a); + return (__a < __b); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcltq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __b, - (int32x4_t) __a); + return (__a < __b); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcltq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __b, - (int64x2_t) __a); + return (__a < __b); } /* vclt - scalar. */ @@ -15927,8 +15826,7 @@ vcltd_f64 (float64_t __a, float64_t __b) __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcltz_f32 (float32x2_t __a) { - float32x2_t __b = {0.0f, 0.0f}; - return (uint32x2_t) __builtin_aarch64_cmltv2sf (__a, __b); + return (uint32x2_t) (__a < 0.0f); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15940,22 +15838,19 @@ vcltz_f64 (float64x1_t __a) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vcltz_s8 (int8x8_t __a) { - int8x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x8_t) __builtin_aarch64_cmltv8qi (__a, __b); + return (uint8x8_t) (__a < 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vcltz_s16 (int16x4_t __a) { - int16x4_t __b = {0, 0, 0, 0}; - return (uint16x4_t) __builtin_aarch64_cmltv4hi (__a, __b); + return (uint16x4_t) (__a < 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vcltz_s32 (int32x2_t __a) { - int32x2_t __b = {0, 0}; - return (uint32x2_t) __builtin_aarch64_cmltv2si (__a, __b); + return (uint32x2_t) (__a < 0); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -15967,44 +15862,37 @@ vcltz_s64 (int64x1_t __a) __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcltzq_f32 (float32x4_t __a) { - float32x4_t __b = {0.0f, 0.0f, 0.0f, 0.0f}; - return (uint32x4_t) __builtin_aarch64_cmltv4sf (__a, __b); + return (uint32x4_t) (__a < 0.0f); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcltzq_f64 (float64x2_t __a) { - float64x2_t __b = {0.0, 0.0}; - return (uint64x2_t) __builtin_aarch64_cmltv2df (__a, __b); + return (uint64x2_t) (__a < 0.0); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vcltzq_s8 (int8x16_t __a) { - int8x16_t __b = {0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}; - return (uint8x16_t) __builtin_aarch64_cmltv16qi (__a, __b); + return (uint8x16_t) (__a < 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vcltzq_s16 (int16x8_t __a) { - int16x8_t __b = {0, 0, 0, 0, 0, 0, 0, 0}; - return (uint16x8_t) __builtin_aarch64_cmltv8hi (__a, __b); + return (uint16x8_t) (__a < 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vcltzq_s32 (int32x4_t __a) { - int32x4_t __b = {0, 0, 0, 0}; - return (uint32x4_t) __builtin_aarch64_cmltv4si (__a, __b); + return (uint32x4_t) (__a < 0); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vcltzq_s64 (int64x2_t __a) { - int64x2_t __b = {0, 0}; - return (uint64x2_t) __builtin_aarch64_cmltv2di (__a, __b); + return (uint64x2_t) (__a < __AARCH64_INT64_C (0)); } /* vcltz - scalar. */ @@ -24222,19 +24110,19 @@ vtrnq_u32 (uint32x4_t a, uint32x4_t b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vtst_s8 (int8x8_t __a, int8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmtstv8qi (__a, __b); + return (uint8x8_t) ((__a & __b) != 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vtst_s16 (int16x4_t __a, int16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmtstv4hi (__a, __b); + return (uint16x4_t) ((__a & __b) != 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vtst_s32 (int32x2_t __a, int32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmtstv2si (__a, __b); + return (uint32x2_t) ((__a & __b) != 0); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -24246,22 +24134,19 @@ vtst_s64 (int64x1_t __a, int64x1_t __b) __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__)) vtst_u8 (uint8x8_t __a, uint8x8_t __b) { - return (uint8x8_t) __builtin_aarch64_cmtstv8qi ((int8x8_t) __a, - (int8x8_t) __b); + return ((__a & __b) != 0); } __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__)) vtst_u16 (uint16x4_t __a, uint16x4_t __b) { - return (uint16x4_t) __builtin_aarch64_cmtstv4hi ((int16x4_t) __a, - (int16x4_t) __b); + return ((__a & __b) != 0); } __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__)) vtst_u32 (uint32x2_t __a, uint32x2_t __b) { - return (uint32x2_t) __builtin_aarch64_cmtstv2si ((int32x2_t) __a, - (int32x2_t) __b); + return ((__a & __b) != 0); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) @@ -24273,53 +24158,49 @@ vtst_u64 (uint64x1_t __a, uint64x1_t __b) __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vtstq_s8 (int8x16_t __a, int8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmtstv16qi (__a, __b); + return (uint8x16_t) ((__a & __b) != 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vtstq_s16 (int16x8_t __a, int16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmtstv8hi (__a, __b); + return (uint16x8_t) ((__a & __b) != 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vtstq_s32 (int32x4_t __a, int32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmtstv4si (__a, __b); + return (uint32x4_t) ((__a & __b) != 0); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vtstq_s64 (int64x2_t __a, int64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmtstv2di (__a, __b); + return (uint64x2_t) ((__a & __b) != __AARCH64_INT64_C (0)); } __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__)) vtstq_u8 (uint8x16_t __a, uint8x16_t __b) { - return (uint8x16_t) __builtin_aarch64_cmtstv16qi ((int8x16_t) __a, - (int8x16_t) __b); + return ((__a & __b) != 0); } __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__)) vtstq_u16 (uint16x8_t __a, uint16x8_t __b) { - return (uint16x8_t) __builtin_aarch64_cmtstv8hi ((int16x8_t) __a, - (int16x8_t) __b); + return ((__a & __b) != 0); } __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__)) vtstq_u32 (uint32x4_t __a, uint32x4_t __b) { - return (uint32x4_t) __builtin_aarch64_cmtstv4si ((int32x4_t) __a, - (int32x4_t) __b); + return ((__a & __b) != 0); } __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__)) vtstq_u64 (uint64x2_t __a, uint64x2_t __b) { - return (uint64x2_t) __builtin_aarch64_cmtstv2di ((int64x2_t) __a, - (int64x2_t) __b); + return ((__a & __b) != __AARCH64_UINT64_C (0)); } __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))