Share via


_mm_maddsub_ps

Visual Studio 2010 SP1 wird benötigt.

Microsoft-spezifisch

Generiert die FMA4 XMM-Anweisung vfmaddsubps, um eine abwechselnde einfach gerundete Gleitkomma-Multiplikations-Addition/Subtraktion seiner Quellen auszuführen.

__m128 _mm_maddsub_ps (
   __m128 src1,
   __m128 src2,
   __m128 src3
);

Parameter

  • [in] src1
    Ein 128-Bit-Parameter, der vier 32-Bit-Gleitkommawerte enthält.

  • [in] src2
    Ein 128-Bit-Parameter, der vier 32-Bit-Gleitkommawerte enthält.

  • [in] src3
    Ein 128-Bit-Parameter, der vier 32-Bit-Gleitkommawerte enthält.

Rückgabewert

Ein 128-Bit-Ergebnis r, das vier 32-Bit-Gleitkommawerte enthält.

r[i] := src1[i] * src2[i] - src3[i]; // i even
r[i] := src1[i] * src2[i] + src3[i]; // i odd

Anforderungen

Intrinsisch

Architektur

_mm_maddsub_ps

FMA4

Headerdatei <intrin.h>

Hinweise

Jeder der vier Gleitkommawerte mit einfacher Genauigkeit in src1 wird mit dem entsprechenden Wert in src2 multipliziert. Jeder gerade Quellwert von src3 wird von seinem zugehörigen Produkt subtrahiert, jeder ungerade Wert wird zu seinem zugehörigen Produkt addiert, und jedes Ergebnis wird im zugehörigen Wert im Ziel gespeichert. Jedes Addition-Subtraktion-Multiplikationspaar wird mit einer einzelnen abschließenden Rundung ausgeführt, als ob die Zwischenergebnisse mit unendlicher Genauigkeit berechnet wurden.

Die vfmaddsubps-Anweisung ist Teil der FMA4-Anweisungsfamilie. Bevor Sie diese systeminterne Funktion verwenden, müssen Sie sicherstellen, dass der Prozessor diese Anweisung unterstützt. Um die Hardwareunterstützung für diese Anweisung zu bestimmen, rufen Sie die systeminterne Funktion __cpuid mit InfoType = 0x80000001 auf, und prüfen Sie Bit 16 von CPUInfo[2] (ECX). Dieses Bit ist 1, wenn die Anweisung unterstützt wird, und andernfalls 0.

Beispiel

#include <stdio.h>
#include <intrin.h>
int main()
{
    __m128 a, b, c, d;
    int i;
    for (i = 0; i < 4; i++) {
        a.m128_f32[i] = i;
        b.m128_f32[i] = 2.;
        c.m128_f32[i] = 3.;
    }
    d = _mm_maddsub_ps(a, b, c);
    for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
    printf_s("\n");
}
  

Siehe auch

Referenz

__cpuid, __cpuidex

Weitere Ressourcen

_mm256_maddsub_ps

_mm_msubadd_ps

_mm_maddsub_pd

In Visual Studio 2010 SP1 hinzugefügte systeminterne FMA4-Funktionen

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

März 2011

Diesen Inhalt hinzugefügt.

SP1-Funktionsänderung.