Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Visual Studio 2010 SP1 wird benötigt.
Microsoft-spezifisch
Generiert die XOP-Anweisung vpmadcswd, um eine Ganzzahl-Multiplikation-und-Akkumulation seiner Quellen auszuführen.
__m128i _mm_maddd_epi16 (
__m128i src1,
__m128i src2,
__m128i src3
);
Parameter
[in] src1
Ein 128-Bit-Parameter, der acht 16-Bit-Ganzzahlen mit Vorzeichen enthält.[in] src2
Ein 128-Bit-Parameter, der acht 16-Bit-Ganzzahlen mit Vorzeichen enthält.[in] src3
Ein 128-Bit-Parameter, der vier 32-Bit-Ganzzahlen mit Vorzeichen enthält.
Rückgabewert
Ein 128-Bit-Ergebnis r, das vier 32-Bit-Ganzzahlen mit Vorzeichen enthält.
tempeven[i] := src1[2*i] * src2[2*i]; // 16*16->32
tempodd[i] := src1[2*i+1] * src2[2*i+1]; // 16*16->32
r[i] = tempeven[i] + tempodd[i] + src3[i];
Anforderungen
Intrinsisch |
Architektur |
|---|---|
_mm_maddd_epi16 |
XOP |
Headerdatei <intrin.h>
Hinweise
Jeder 16-Bit-Ganzzahlwert mit Vorzeichen und geradem Index in src1 wird mit dem zugehörigen 16-Bit-Ganzzahlwert mit Vorzeichen in src2 multipliziert. Der nächste (ungerade) 16-Bit-Ganzzahlwert mit Vorzeichen in src1 wird mit dem zugehörigen 16-Bit-Ganzzahlwert mit Vorzeichen in src2 multipliziert. Die 32-Bit-Ganzzahlprodukte mit Vorzeichen werden addiert, ihre Summe wird dem zugehörigen 32-Bit-Ganzzahlwert mit Vorzeichen in src3 hinzugefügt, und das 32-Bit-Ganzzahlergebnis mit Vorzeichen wird im zugehörigen Wert im Ziel gespeichert.
Überlauf wird ignoriert.
Die vpmadcswd-Anweisung ist Teil der XOP-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 11 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()
{
__m128i a, b, c, d;
int i;
for (i = 0; i < 8; i++) {
a.m128i_i16[i] = 8000*(i-4);
b.m128i_i16[i] = 10000;
}
for (i = 0; i < 4; i++) {
c.m128i_i32[i] = -1900000000;
}
d = _mm_maddd_epi16(a, b, c);
for (i = 0; i < 4; i++) printf_s(" %d", d.m128i_i32[i]);
printf_s("\n");
}
Siehe auch
Referenz
Weitere Ressourcen
In Visual Studio 2010 SP1 hinzugefügte systeminterne XOP-Funktionen
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
|---|---|---|
|
März 2011 |
Diesen Inhalt hinzugefügt. |
SP1-Funktionsänderung. |