/* 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
|
<http://www.gnu.org/licenses/>. */
|
|
#ifndef _GCC_ARM_CDE_H
|
#define _GCC_ARM_CDE_H 1
|
|
#include <stdint.h>
|
|
#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
|