GCC中x86架构下simd intrinsic函数的实现的分析

本文深入探讨了GCC如何在x86架构下通过simd intrinsic函数支持向量操作,分析了数据类型定义、操作实现流程,包括从gimple到RTL再到汇编指令的转换,以及builtin函数的定义、初始化和转换过程。
摘要由CSDN通过智能技术生成

intel提供了多种寄存器和指令来支持单指令多数据(simd)操作,按时间先后顺序包括MMX系列(支持64位寄存器),SSE系列(支持128位寄存器),AVX系列(支持256位寄存器)和AVX-512系列(支持512位寄存器)。本文以AVX系列的寄存器和指令位例子,分析GCC编译其中如何以intrinsic函数的形式来为程序开发者提供simd操作的支持。

数据类型

512位寄存器的数据类型主要分为两类:一类是以“__v”开头的内部类型,用以实现intrinsic函数;另一类是以“__m”开头的数据类型,是前一种类型的别名。这两种类型都定义为32个字节长度,avxintrin.h文件中有如下定义。

typedef double __v4df __attribute__ ((__vector_size__ (32)));

typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));

其定义是通过vector_size关键字,定义了一个长度为32字节的属性。vector_size是一个

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值