_mm_macc_sd

Требуется Visual Studio 2010 с пакетом обновления 1 (SP1).

Только для систем Microsoft

Формирует инструкцию vfmaddsd FMA4 XMM для выполнения операции умножения-сложения с одним округлением значений двойной точности с плавающей запятой над младшими значениями с плавающей запятой своих источников.

__m128d _mm_macc_sd (
   __m128d src1,
   __m128d src2,
   __m128d src3
); 

Параметры

  • [входящий] src1
    128-битный параметр, содержащий в младшем учетверенном слове 64-битное значение с плавающей запятой.

  • [входящий] src2
    128-битный параметр, содержащий в младшем учетверенном слове 64-битное значение с плавающей запятой.

  • [входящий] src3
    128-битный параметр, содержащий в младшем учетверенном слове 64-битное значение с плавающей запятой.

Возвращаемое значение

128-битный результат r, содержащий два 64-битных значения с плавающей запятой.

r[0] := src1[0] * src2[0] + src3[0];
r[1] := 0.;

Требования

Встроенный объект

Архитектура

_mm_macc_sd

FMA4

Файл заголовка <intrin.h>

Заметки

Младшее значение двойной точности с плавающей запятой в параметре src1 умножается на соответствующее значение в параметре src2 и складывается с соответствующим значением в параметре src3, после чего результат сохраняется в виде соответствующего значения в целевом объекте. Остальные значения в параметрах src1, src2 и src3 игнорируются, и старшее значение двойной точности с плавающей запятой в результате устанавливается равным 0. Операция умножения-сложения выполняется с одним округлением в конце, как если бы промежуточные результаты вычислялись с бесконечной точностью.

Инструкция vfmaddsd входит в состав семейства инструкций FMA4. Прежде чем использовать эту встроенную инструкцию, необходимо убедиться, что процессор ее поддерживает. Чтобы определить, имеется ли аппаратная поддержка этой инструкции, вызовите встроенную инструкцию __cpuid с InfoType = 0x80000001 и проверьте бит 16 в CPUInfo[2] (ECX). Этот бит равен 1, если инструкция поддерживается, и 0 в противном случае.

Пример

#include <stdio.h>
#include <intrin.h>
int main()
{
    __m128d a, b, c, d;
    int i;
    for (i = 0; i < 2; i++) {
        a.m128d_f64[i] = i;
        b.m128d_f64[i] = 2.;
        c.m128d_f64[i] = 3.;
    }
    d = _mm_macc_sd(a, b, c);
    for (i = 0; i < 2; i++) printf_s(" %.3lf", d.m128d_f64[i]);
    printf_s("\n");
}
  

См. также

Ссылки

__cpuid, __cpuidex

Другие ресурсы

_mm256_macc_pd

_mm_macc_pd

_mm_macc_ss

_mm_nmacc_sd

_mm_msub_sd

_mm_nmsub_sd

Встроенные объекты FMA4, добавленные в Visual Studio 2010 с пакетом обновления 1 (SP1)

Журнал изменений

Дата

Журнал

Причина

Март 2011

Добавлено это содержимое.

Изменение функции SP1.