【发布时间】:2014-06-19 19:10:27
【问题描述】:
在下面的代码中,我可以通过 PSUBSW 指令得到 mm0 中 mm0 - mm1 的结果。当我通过 gcc 在 Mac book air 上编译时。
但是,PSUBSW 指令解释说,我们可以得到 mm1 - mm0 in mm1 in Intel developer's manual: PSUBSW mm, mm/m64, 从 mm 中的有符号压缩字中减去 mm/m64 中的有符号压缩字并饱和结果。
#include <stdio.h>
int
main()
{
short int a[4] = {1111,1112,1113,1114};
short int b[4] = {1111,2112,3113,4114};
short int c[4];
asm volatile (
"movq (%1),%%mm0\n\t"
"movq (%2),%%mm1\n\t"
"psubsw %%mm1,%%mm0\n\t"
"movq %%mm0,%0\n\t"
"emms"
: "=g"(c): "r"(&a),"r"(&b));
printf("%d %d %d %d\n", c[0], c[1], c[2], c[3]);
return 0;
}
这有什么区别? src、mm0 还是 mm1 是哪个?如果这种差异是 Intel 语法和 AT&T 语法。
【问题讨论】: