/* Arm Custom Datapath Extension (CDE) intrinsics include file. Copyright (C) 2020 Free Software Foundation, Inc. Contributed by Arm Ltd. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #ifndef _GCC_ARM_CDE_H #define _GCC_ARM_CDE_H 1 #include #if defined (__ARM_FEATURE_CDE) #define __arm_cx1(coproc, imm) \ __builtin_arm_cx1si(coproc, imm) #define __arm_cx1a(coproc, acc, imm) \ __builtin_arm_cx1asi(coproc, acc, imm) #define __arm_cx2(coproc, n, imm) \ __builtin_arm_cx2si(coproc, n, imm) #define __arm_cx2a(coproc, acc, n, imm) \ __builtin_arm_cx2asi(coproc, acc, n, imm) #define __arm_cx3(coproc, n, m, imm) \ __builtin_arm_cx3si(coproc, n, m, imm) #define __arm_cx3a(coproc, acc, n, m, imm) \ __builtin_arm_cx3asi(coproc, acc, n, m, imm) #define __arm_cx1d(coproc, imm) \ __builtin_arm_cx1di(coproc, imm) #define __arm_cx1da(coproc, acc, imm) \ __builtin_arm_cx1adi(coproc, acc, imm) #define __arm_cx2d(coproc, n, imm) \ __builtin_arm_cx2di(coproc, n, imm) #define __arm_cx2da(coproc, acc, n, imm) \ __builtin_arm_cx2adi(coproc, acc, n, imm) #define __arm_cx3d(coproc, n, m, imm) \ __builtin_arm_cx3di(coproc, n, m, imm) #define __arm_cx3da(coproc, acc, n, m, imm) \ __builtin_arm_cx3adi(coproc, acc, n, m, imm) #if defined (__ARM_FP) || defined (__ARM_FEATURE_MVE) /* CDE builtins using FPU/MVE registers. */ /* uint32_t __arm_vcx1_u32(int coproc, uint32_t imm); */ #define __arm_vcx1_u32(coproc, imm) \ __builtin_arm_vcx1si(coproc, imm) /* uint32_t __arm_vcx1a_u32(int coproc, uint32_t acc, uint32_t imm); */ #define __arm_vcx1a_u32(coproc, acc, imm) \ __builtin_arm_vcx1asi(coproc, acc, imm) /* uint32_t __arm_vcx2_u32(int coproc, uint32_t n, uint32_t imm); */ #define __arm_vcx2_u32(coproc, n, imm) \ __builtin_arm_vcx2si(coproc, n, imm) /* uint32_t __arm_vcx2a_u32(int coproc, uint32_t acc, uint32_t n, uint32_t imm); */ #define __arm_vcx2a_u32(coproc, acc, n, imm) \ __builtin_arm_vcx2asi(coproc, acc, n, imm) /* uint32_t __arm_vcx3_u32(int coproc, uint32_t n, uint32_t m, uint32_t imm); */ #define __arm_vcx3_u32(coproc, n, m, imm) \ __builtin_arm_vcx3si(coproc, n, m, imm) /* uint32_t __arm_vcx3a_u32(int coproc, uint32_t acc, uint32_t n, uint32_t m, uint32_t imm); */ #define __arm_vcx3a_u32(coproc, acc, n, m, imm) \ __builtin_arm_vcx3asi(coproc, acc, n, m, imm) /* uint64_t __arm_vcx1d_u64(int coproc, uint32_t imm); */ #define __arm_vcx1d_u64(coproc, imm) \ __builtin_arm_vcx1di(coproc, imm) /* uint64_t __arm_vcx1da_u64(int coproc, uint64_t acc, uint32_t imm); */ #define __arm_vcx1da_u64(coproc, acc, imm) \ __builtin_arm_vcx1adi(coproc, acc, imm) /* uint64_t __arm_vcx2d_u64(int coproc, uint64_t m, uint32_t imm); */ #define __arm_vcx2d_u64(coproc, m, imm) \ __builtin_arm_vcx2di(coproc, m, imm) /* uint64_t __arm_vcx2da_u64(int coproc, uint64_t acc, uint64_t m, uint32_t imm); */ #define __arm_vcx2da_u64(coproc, acc, m, imm) \ __builtin_arm_vcx2adi(coproc, acc, m, imm) /* uint64_t __arm_vcx3d_u64(int coproc, uint64_t n, uint64_t m, uint32_t imm); */ #define __arm_vcx3d_u64(coproc, n, m, imm) \ __builtin_arm_vcx3di(coproc, n, m, imm) /* uint64_t __arm_vcx3da_u64(int coproc, uint64_t acc, uint64_t n, uint64_t m, uint32_t imm); */ #define __arm_vcx3da_u64(coproc, acc, n, m, imm) \ __builtin_arm_vcx3adi(coproc, acc, n, m, imm) #endif /* __ARM_FP || __ARM_FEATURE_MVE. */ #endif /* __ARM_FEATURE_CDE. */ #if __ARM_FEATURE_MVE #include "arm_mve_types.h" #define __arm_vcx1q_u8(coproc, imm) \ (uint8x16_t)__builtin_arm_vcx1qv16qi(coproc, imm) #define __arm_vcx1qa(coproc, acc, imm) \ __builtin_arm_vcx1qav16qi(coproc, acc, imm) #define __arm_vcx2q(coproc, n, imm) \ __builtin_arm_vcx2qv16qi(coproc, n, imm) #define __arm_vcx2q_u8(coproc, n, imm) \ (uint8x16_t)__builtin_arm_vcx2qv16qi(coproc, n, imm) #define __arm_vcx2qa(coproc, acc, n, imm) \ __builtin_arm_vcx2qav16qi(coproc, acc, n, imm) #define __arm_vcx3q(coproc, n, m, imm) \ __builtin_arm_vcx3qv16qi(coproc, n, m, imm) #define __arm_vcx3q_u8(coproc, n, m, imm) \ (uint8x16_t)__builtin_arm_vcx3qv16qi(coproc, n, m, imm) #define __arm_vcx3qa(coproc, acc, n, m, imm) \ __builtin_arm_vcx3qav16qi(coproc, acc, n, m, imm) #define __arm_vcx1q_m(coproc, inactive, imm, pred) \ __builtin_arm_vcx1q_p_v16qi(coproc, inactive, imm, pred) #define __arm_vcx1qa_m(coproc, acc, imm, pred) \ __builtin_arm_vcx1qa_p_v16qi(coproc, acc, imm, pred) #define __arm_vcx2q_m(coproc, inactive, n, imm, pred) \ __builtin_arm_vcx2q_p_v16qi(coproc, inactive, n, imm, pred) #define __arm_vcx2qa_m(coproc, acc, n, imm, pred) \ __builtin_arm_vcx2qa_p_v16qi(coproc, acc, n, imm, pred) #define __arm_vcx3q_m(coproc, inactive, n, m, imm, pred) \ __builtin_arm_vcx3q_p_v16qi(coproc, inactive, n, m, imm, pred) #define __arm_vcx3qa_m(coproc, acc, n, m, imm, pred) \ __builtin_arm_vcx3qa_p_v16qi(coproc, acc, n, m, imm, pred) #endif #endif