在查看这段代码时,我注意到以下四个指令:
vmulpd %ymm1,%ymm3,%ymm4 /* aim*bim */
vmulpd %ymm0,%ymm3,%ymm6 /* are*bim */
vfmadd231pd %ymm2,%ymm1,%ymm6
vfmsub231pd %ymm0,%ymm2,%ymm4
现在,如果您认为 AT&T 表示法中的指令是 形式的operator source,source,destination
,那么第一条指令不是没用吗?
%ymm4 = f(%ymm1, %ymm3)
%ymm6 = f(%ymm0, %ymm3)
%ymm6 = f(%ymm2, %ymm1)
%ymm4 = f(%ymm0, %ymm2)
前两个值显然从未读取过,因此不应计算它们。但是,似乎情况并非如此,因为如果我删除这些行,测试就会失败。