Board logo

标题: GCC中SIMD指令的应用方法--使用built-in操作 [打印本页]

作者: look_w    时间: 2018-5-9 20:00     标题: GCC中SIMD指令的应用方法--使用built-in操作

使用built-in操作 ...GCC built-in Operation 什么是built-in操作?就是对待MMX操作数,就如int, float等基本数据类型一般, 有相应定义的操作,如加(+)、减(-),或者数据类型之间的转换。 详细内容参考GNU GCC Manual  Extensions to the C Language Family4#4Built-in Functions4#4 X86 Built-in Functions一节。      
一些MMX指令有其相应的built-in操作, 下面一段代码为例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
/*无需特别的头文件,built-in嘛*/
/* gcc -Wall  -o bins  builtinmmx.c*/
/*定义了一个vector数据类型,hi表示16位,4表示4个*/
typedef int v4hi __attribute__ ((mode(V4HI)));
/*定义了2个32位的vector类型,si表示32位*/
typedef int v2si __attribute__ ((mode(V2SI)));
int main(int argc,char *argv[])
{
  short pa[4] = {0x8000, 0x8000, 1, -1};
  short pb[4] = {0x8000, 0x7FFF, -1, -2};
   
  v4hi va, vb;
  v4hi vsum;
   
  va = ((v4hi*)pa)[0];
  vb = ((v4hi*)pb)[0];
   
  /* 4个16位进行饱和加 */
  //vsum = __builtin_ia32_paddsw(va, vb);
  /* 4个16位还可以直接进行加法,但不同于两个long long相加 */
  vsum =  va + vb;
   
  /*vector的输出还需要强制转换为long long*/
  printf("...with MMX instructions...to compute vec_add: %llx \n", (long long)vsum);
   
  //结果1:0xfffd0000ffff8000
  //结果2:0xfffd0000ffff0000
   
  return(0);
}




几点说明:





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0