Condividi tramite


_mm_maddsub_pd

È necessario Visual Studio 2010 SP1.

Specifici di Microsoft

Genera l'istruzione FMA4 XMM vfmaddsubpd per eseguire una funzione alternata multiply-add/subtract a virgola mobile con un unico arrotondamento delle origini.

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

Parametri

  • [in] src1
    Parametro a 128 bit che contiene due valori a virgola mobile a 64 bit.

  • [in] src2
    Parametro a 128 bit che contiene due valori a virgola mobile a 64 bit.

  • [in] src3
    Parametro a 128 bit che contiene due valori a virgola mobile a 64 bit.

Valore restituito

Risultato a 128 bit r che contiene due valori a virgola mobile a 64 bit.

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

Requisiti

Intrinseco

Architettura

_mm_maddsub_pd

FMA4

File di intestazione <intrin.h>

Note

Ognuno dei due valori a virgola mobile a precisione doppia in src1 viene moltiplicato per il valore corrispondente in src2. Il valore di origine meno significativo di src3 viene sottratto dal prodotto corrispondente, il valore più significativo viene aggiunto al prodotto corrispondente e ogni risultato viene archiviato come valore corrispondente nella destinazione. Ogni coppia multiply-add/subtract viene eseguita con un unico arrotondamento alla fine, come se i risultati intermedi venissero calcolati a precisione infinita.

L'istruzione vfmaddsubpd è parte della famiglia FMA4 di istruzioni. Prima di utilizzare questo intrinseco, è necessario assicurarsi che il processore supporti questa istruzione. Per determinare il supporto hardware per questa istruzione, chiamare l'intrinseco __cpuid con InfoType = 0x80000001 e il bit di controllo 16 di CPUInfo[2] (ECX). Questo bit è 1 quando l'istruzione è supportata, e 0 in caso contrario.

Esempio

#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_maddsub_pd(a, b, c);
    for (i = 0; i < 2; i++) printf_s(" %.3lf", d.m128d_f64[i]);
    printf_s("\n");
}
  

Vedere anche

Riferimenti

__cpuid, __cpuidex

Altre risorse

_mm256_maddsub_pd

_mm_msubadd_pd

_mm_maddsub_ps

Oggetti intrinseci FMA4 aggiunti per Visual Studio 2010 SP1

Cronologia delle modifiche

Data

Cronologia

Motivo

Marzo 2011

È stato aggiunto questo contenuto.

Modifica di funzionalità in SP1.