/* ARM NEON intrinsics include file.
Copyright (C) 2006-2016 Free Software Foundation, Inc.
Contributed by CodeSourcery.
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_NEON_H
#define _GCC_ARM_NEON_H 1
#ifndef __ARM_FP
#error "NEON intrinsics not available with the soft-float ABI. Please use -mfloat-abi=softp or -mfloat-abi=hard"
#else
#pragma GCC push_options
#pragma GCC target ("fpu=neon")
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
typedef __simd64_int8_t int8x8_t;
typedef __simd64_int16_t int16x4_t;
typedef __simd64_int32_t int32x2_t;
typedef __builtin_neon_di int64x1_t;
#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
typedef __fp16 float16_t;
typedef __simd64_float16_t float16x4_t;
#endif
typedef __simd64_float32_t float32x2_t;
typedef __simd64_poly8_t poly8x8_t;
typedef __simd64_poly16_t poly16x4_t;
#pragma GCC push_options
#pragma GCC target ("fpu=crypto-neon-fp-armv8")
typedef __builtin_neon_poly64 poly64x1_t;
#pragma GCC pop_options
typedef __simd64_uint8_t uint8x8_t;
typedef __simd64_uint16_t uint16x4_t;
typedef __simd64_uint32_t uint32x2_t;
typedef __builtin_neon_udi uint64x1_t;
typedef __simd128_int8_t int8x16_t;
typedef __simd128_int16_t int16x8_t;
typedef __simd128_int32_t int32x4_t;
typedef __simd128_int64_t int64x2_t;
#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
typedef __simd128_float16_t float16x8_t;
#endif
typedef __simd128_float32_t float32x4_t;
typedef __simd128_poly8_t poly8x16_t;
typedef __simd128_poly16_t poly16x8_t;
#pragma GCC push_options
#pragma GCC target ("fpu=crypto-neon-fp-armv8")
typedef __builtin_neon_poly64 poly64x2_t __attribute__ ((__vector_size__ (16)));
#pragma GCC pop_options
typedef __simd128_uint8_t uint8x16_t;
typedef __simd128_uint16_t uint16x8_t;
typedef __simd128_uint32_t uint32x4_t;
typedef __simd128_uint64_t uint64x2_t;
typedef float float32_t;
/* The Poly types are user visible and live in their own world,
keep them that way. */
typedef __builtin_neon_poly8 poly8_t;
typedef __builtin_neon_poly16 poly16_t;
#pragma GCC push_options
#pragma GCC target ("fpu=crypto-neon-fp-armv8")
typedef __builtin_neon_poly64 poly64_t;
typedef __builtin_neon_poly128 poly128_t;
#pragma GCC pop_options
typedef struct int8x8x2_t
{
int8x8_t val[2];
} int8x8x2_t;
typedef struct int8x16x2_t
{
int8x16_t val[2];
} int8x16x2_t;
typedef struct int16x4x2_t
{
int16x4_t val[2];
} int16x4x2_t;
typedef struct int16x8x2_t
{
int16x8_t val[2];
} int16x8x2_t;
typedef struct int32x2x2_t
{
int32x2_t val[2];
} int32x2x2_t;
typedef struct int32x4x2_t
{
int32x4_t val[2];
} int32x4x2_t;
typedef struct int64x1x2_t
{
int64x1_t val[2];
} int64x1x2_t;
typedef struct int64x2x2_t
{
int64x2_t val[2];
} int64x2x2_t;
typedef struct uint8x8x2_t
{
uint8x8_t val[2];
} uint8x8x2_t;
typedef struct uint8x16x2_t
{
uint8x16_t val[2];
} uint8x16x2_t;
typedef struct uint16x4x2_t
{
uint16x4_t val[2];
} uint16x4x2_t;
typedef struct uint16x8x2_t
{
uint16x8_t val[2];
} uint16x8x2_t;
typedef struct uint32x2x2_t
{
uint32x2_t val[2];
} uint32x2x2_t;
typedef struct uint32x4x2_t
{
uint32x4_t val[2];
} uint32x4x2_t;
typedef struct uint64x1x2_t
{
uint64x1_t val[2];
} uint64x1x2_t;
typedef struct uint64x2x2_t
{
uint64x2_t val[2];
} uint64x2x2_t;
#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
typedef struct float16x4x2_t
{
float16x4_t val[2];
} float16x4x2_t;
#endif
#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
typedef struct float16x8x2_t
{
float16x8_t val[2];
} float16x8x2_t;
#endif
typedef struct float32x2x2_t
{
float32x2_t val[2];
} float32x2x2_t;
typedef struct float32x4x2_t
{
float32x4_t val[2];
} float32x4x2_t;
typedef struct poly8x8x2_t
{
poly8x8_t val[2];
} poly8x8x2_t;
typedef struct poly8x16x2_t
{
poly8x16_t val[2];
} poly8x16x2_t;
typedef struct poly16x4x2_t
{
poly16x4_t val[2];
} poly16x4x2_t;
typedef struct poly16x8x2_t
{
poly16x8_t val[2];
} poly16x8x2_t;
#pragma GCC push_options
#pragma GCC target ("fpu=crypto-neon-fp-armv8")
typedef struct poly64x1x2_t
{
poly64x1_t val[2];
} poly64x1x2_t;
typedef struct poly64x2x2_t
{
poly64x2_t val[2];
} poly64x2x2_t;
#pragma GCC pop_options
typedef struct int8x8x3_t
{
int8x8_t val[3];
} int8x8x3_t;
typedef struct int8x16x3_t
{
int8x16_t val[3];
} int8x16x3_t;
typedef struct int16x4x3_t
{
int16x4_t val[3];
} int16x4x3_t;
typedef struct int16x8x3_t
{
int16x8_t val[3];
} int16x8x3_t;
typedef struct int32x2x3_t
{
int32x2_t val[3];
} int32x2x3_t;
typedef struct int32x4x3_t
{
int32x4_t val[3];
} int32x4x3_t;
typedef struct int64x1x3_t
{
int64x1_t val[3];
} int64x1x3_t;
typedef struct int64x2x3_t
{
int64x2_t val[3];
} int64x2x3_t;
typedef struct uint8x8x3_t
{
uint8x8_t val[3];
} uint8x8x3_t;
typedef struct uint8x16x3_t
{
uint8x16_t val[3];
} uint8x16x3_t;
typedef struct uint16x4x3_t
{
uint16x4_t val[3];
} uint16x4x3_t;
typedef struct uint16x8x3_t
{
uint16x8_t val[3];
} uint16x8x3_t;
typedef struct uint32x2x3_t
{
uint32x2_t val[3];
} uint32x2x3_t;
typedef struct uint32x4x3_t
{
uint32x4_t val[3];
} uint32x4x3_t;
typedef struct uint64x1x3_t
{
uint64x1_t val[3];
} uint64x1x3_t;
typedef struct uint64x2x3_t
{
uint64x2_t val[3];
} uint64x2x3_t;
#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
typedef struct float16x4x3_t
{
float16x4_t val[3];
} float16x4x3_t;
#endif
#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
typedef struct float16x8x3_t
{
float16x8_t val[3];
} float16x8x3_t;
#endif
typedef struct float32x2x3_t
{
float32x2_t val[3];
} float32x2x3_t;
typedef struct float32x4x3_t
{
float32x4_t val[3];
} float32x4x3_t;
typedef struct poly8x8x3_t
{
poly8x8_t val[3];
} poly8x8x3_t;
typedef struct poly8x16x3_t
{
poly8x16_t val[3];
} poly8x16x3_t;
typedef struct poly16x4x3_t
{
poly16x4_t val[3];
} poly16x4x3_t;
typedef struct poly16x8x3_t
{
poly16x8_t val[3];
} poly16x8x3_t;
#pragma GCC push_options
#pragma GCC target ("fpu=crypto-neon-fp-armv8")
typedef struct poly64x1x3_t
{
poly64x1_t val[3];
} poly64x1x3_t;
typedef struct poly64x2x3_t
{
poly64x2_t val[3];
} poly64x2x3_t;
#pragma GCC pop_options
typedef struct int8x8x4_t
{
int8x8_t val[4];
} int8x8x4_t;
typedef struct int8x16x4_t
{
int8x16_t val[4];
} int8x16x4_t;
typedef struct int16x4x4_t
{
int16x4_t val[4];
} int16x4x4_t;
typedef struct int16x8x4_t
{
int16x8_t val[4];
} int16x8x4_t;
typedef struct int32x2x4_t
{
int32x2_t val[4];
} int32x2x4_t;
typedef struct int32x4x4_t
{
int32x4_t val[4];
} int32x4x4_t;
typedef struct int64x1x4_t
{
int64x1_t val[4];
} int64x1x4_t;
typedef struct int64x2x4_t
{
int64x2_t val[4];
} int64x2x4_t;
typedef struct uint8x8x4_t
{
uint8x8_t val[4];
} uint8x8x4_t;
typedef struct uint8x16x4_t
{
uint8x16_t val[4];
} uint8x16x4_t;
typedef struct uint16x4x4_t
{
uint16x4_t val[4];
} uint16x4x4_t;
typedef struct uint16x8x4_t
{
uint16x8_t val[4];
} uint
海思编译器编译器编译器
海思编译器,通常指的是华为海思半导体公司开发的一系列针对特定处理器架构的编译工具链,如ARM架构。在本案例中,"arm-gcc6.3-linux-uclibceabi"揭示了编译器的具体版本和目标平台信息。这个名称表示的是一个基于GCC(GNU Compiler Collection)6.3版本的交叉编译器,用于Linux操作系统,并且是为UCLIBC(Micro C Library)环境下的EABI(Embedded Application Binary Interface)ARM处理器设计的。 编译器是将高级编程语言转换为机器可执行代码的关键工具。在软件开发过程中,编译器扮演着至关重要的角色,它负责解析源代码,检查语法错误,优化代码,然后生成目标代码,最终形成可执行文件。GCC是一个广泛使用的开源编译器集合,支持多种编程语言,如C、C++、Objective-C、Fortran、Ada等,并可用于多种处理器架构。 在"arm-gcc6.3-linux-uclibceabi"中,“arm”代表该编译器是为ARM架构设计的,这是嵌入式设备和移动设备中常见的处理器架构。"gcc6.3"指明了这是GCC的6.3版本,发布于2017年,包含了一些新的特性和改进。"linux"表明编译器的目标操作系统是Linux,这可能包括各种基于Linux内核的系统。"uclibceabi"指的是使用了UCLIBC库的EABI,UCLIBC是一个轻量级的C库,适用于资源受限的嵌入式系统,而EABI是嵌入式系统中定义二进制接口的标准,使得不同编译器产生的代码可以互相兼容。 编译器的使用涉及到多个步骤,包括预处理、编译、汇编和链接。预处理阶段处理宏定义、条件编译指令等;编译阶段将预处理后的源代码转化为中间语言(如汇编代码);汇编阶段将中间语言转换为目标机器码;链接器将多个编译后的对象文件合并成一个可执行程序,解决函数和全局变量的引用。 对于海思编译器,开发者需要了解其特定的选项和配置,以适应海思芯片的硬件特性。此外,由于是交叉编译器,开发者通常在非目标平台(如x86架构的个人电脑)上构建ARM架构的软件,因此需要设置正确的编译环境和路径,确保所有依赖项都被正确处理。 海思编译器是专为华为海思芯片设计的工具,通过"arm-gcc6.3-linux-uclibceabi"我们可以得知它是面向ARM架构、基于GCC 6.3、适用于Linux环境并采用UCLIBC EABI标准的编译器。理解和熟练使用这样的编译器是开发高效、可靠且与硬件紧密匹配的嵌入式软件的基础。





































































































- 1
- 2
- 3
- 4
- 5
- 6
- 45



















- 粉丝: 97
- 资源: 63
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- [AB PLC例程源码][MMS_043640]DeviceNet Diagnostic.zip
- [AB PLC例程源码][MMS_039840]ASCII_Messaging.zip
- [AB PLC例程源码][MMS_040306]Configuration of AMCI 3601 Single Axis Stepper Motor Controller with.zip
- [AB PLC例程源码][MMS_040307]MD60, MD65 Drives control with CompactLogix.zip
- [AB PLC例程源码][MMS_040305]ASCII Read , Write for CompactLogix & Bul90.zip
- [AB PLC例程源码][MMS_040316]DINT Conversion of INT data type and Arithmatic comparison .zip
- [AB PLC例程源码][MMS_040315]Double INC and Double DEC of INT datatype.zip
- [AB PLC例程源码][MMS_040317]DINT Conversion of INT data type and Arithmetic operations like Div, Mul.zip
- [AB PLC例程源码][MMS_040319]Swaps Byte in an array.zip
- [AB PLC例程源码][MMS_040318]DINT data type to String data type conversion.zip
- [AB PLC例程源码][MMS_040322]Decoding of Boolean array.zip
- [AB PLC例程源码][MMS_040323]Encoding of Boolean array.zip
- [AB PLC例程源码][MMS_040324]Value search in an array.zip
- [AB PLC例程源码][MMS_040325]Bubble sorting.zip
- [AB PLC例程源码][MMS_040326]Level control using FBD.zip
- [AB PLC例程源码][MMS_040327]Ramp Control of Electrical parameters.zip



评论0