Поделиться через


_mm_maccsd_epi16

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

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

Формирует инструкцию XOP vpmacsswd для выполнения операции умножения-сложения целых чисел с насыщением над своими источниками.

__m128i _mm_maccsd_epi16 (
   __m128i src1,
   __m128i src2,
   __m128i src3
); 

Параметры

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

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

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

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

128-битный результат r, содержащий четыре 32-битных знаковых целых числа.

r[i] := src1[2*i] * src2[2*i] + src3[i];

Требования

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

Архитектура

_mm_maccsd_epi16

XOP

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

Заметки

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

Если результат сложения с 32-битным произведением больше 2147483647 (0x7FFFFFFF) или меньше -2147483648 (0x80000000), операция умножения-сложения насыщается путем установки результата равным 2147483647 или -2147483648 соответственно.

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

Пример

#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] = 30000;
        b.m128i_i16[i] = 8000*(i-4);
    }
    for (i = 0; i < 4; i++) {
        c.m128i_i32[i] = 1300000000*i - 2000000000;
    }
    d = _mm_maccsd_epi16(a, b, c);
    for (i = 0; i < 4; i++) printf_s(" %d", d.m128i_i32[i]);
    printf_s("\n");
}
  

См. также

Ссылки

__cpuid, __cpuidex

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

_mm_maccd_epi16

_mm_macc_epi16

_mm_maccs_epi16

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

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

Дата

Журнал

Причина

Март 2011

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

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