Может ли кто-нибудь объяснить мне, почему существуют 3 варианта команды плавного умножения-накопления: vfmadd132pd
, vfmadd231pd
и vfmadd213pd
, в то время как существует только один C intrinsics _mm256_fmadd_pd
?
Чтобы сделать вещи простыми, в чем разница (в синтаксисе AT & T)
vfmadd132pd %ymm0, %ymm1, %ymm2
vfmadd231pd %ymm0, %ymm1, %ymm2
vfmadd213pd %ymm0, %ymm1, %ymm2
Я понятия не имел из руководства по интуиции Intel. Я спрашиваю, потому что я вижу их все на выходе ассемблера куска кода C, который я написал. Спасибо.
Чистый ответ (повторное формирование ответов ниже)
Для варианта ijk
значение vfmaddijkpd
:
- Синтаксис Intel:
op(i) * op(j) + op(k) -> op(1)
- Синтаксис AT & T:
op(4-i) * op(4-j) + op(4-k) -> op(3)
где op(n)
обозначает n-й операнд после команды. Таким образом существует преобразование reverse между двумя:
n <- 4 - n