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 |