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


_mm_permute2_pd

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

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

Формирует инструкцию XOP XMM vpermil2pd для выбора значений с плавающей запятой из своих первых двух источников с необязательным обнулением.

__m128d _mm_permute2_pd (
   __m128d src1,
   __m128d src2,
   __m128i selector,
   int control
);

Параметры

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

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

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

  • [входящий] control
    32-битный целочисленный параметр, определяющий способ принятие решения о том, обнулять ли значения в результате.

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

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

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

Требования

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

Архитектура

_mm_permute2_pd

XOP

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

Заметки

Каждое из двух учетверенных слов в параметре selector выбирает значение для соответствующего ему учетверенному слову результата из одного из четырех 64-битных значений с плавающей запятой в параметрах src1 и src2. Это значение может быть заменено нулем, прежде чем оно будет записано в результат, в зависимости от значения параметра control и значения бита 3 учетверенного слова selector.

Для каждого учетверенного слова в параметре selector второй и третий младшие биты выбирают одно из значений с плавающей запятой в параметре src1 или src2, причем значения 0–1 выбирают src1[0]–src1[1], а значения 2–3 выбирают src2[0]–src2[1]. Младший бит в каждом учетверенном слове в параметре selector игнорируется.

Следующий бит каждого учетверенного слова в параметре selector ниже называется "битом совпадения". Старшие 60 битов в каждом учетверенном слове в параметре selector игнорируются.

Четвертый источник, control, определяет условия, при которых значения результата будут установлены равными 0. Значение параметра control должно быть равно 0, 1, 2 или 3. Если параметр control равен 0 или 1, выбранное значение с плавающей запятой записывается в целевой объект. Если параметр control равен 2, выбранное значение с плавающей запятой записывается в целевой объект, если соответствующий бит совпадения в параметре selector равен 0, однако, если бит совпадения равен 1, записывается нуль. Если параметр control равен 3, выбранное значение с плавающей запятой записывается в целевой объект, если соответствующий бит совпадения равен 1, однако, если бит совпадения равен 0, записывается нуль.

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

Пример

#include <stdio.h>
#include <intrin.h>
int main()
{
    __m128d a, b, d;
    __m128i select;
    int i;
    a.m128d_f64[0] = 0.;
    a.m128d_f64[1] = 1.;
    b.m128d_f64[0] = 2.;
    b.m128d_f64[1] = 3.;
    select.m128i_i64[0] = 2 << 1;
    select.m128i_i64[1] = (1 << 1) + 8; // turn on match bit
    
    d = _mm_permute2_pd(a, b, select, 0); // just select, don't zero
    printf_s("%.3lf %.3lf\n", d.m128d_f64[0], d.m128d_f64[1]);
    d = _mm_permute2_pd(a, b, select, 2); // zero if match is 1
    printf_s("%.3lf %.3lf\n", d.m128d_f64[0], d.m128d_f64[1]);
    d = _mm_permute2_pd(a, b, select, 3); // zero if match is 0
    printf_s("%.3lf %.3lf\n", d.m128d_f64[0], d.m128d_f64[1]);
}
  

См. также

Ссылки

__cpuid, __cpuidex

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

_mm256_permute2_pd

_mm_permute2_ps

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

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

Дата

Журнал

Причина

Март 2011

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

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