_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]);
}
См. также
Ссылки
Другие ресурсы
Встроенные объекты XOP, добавленные в Visual Studio 2010 с пакетом обновления 1 (SP1)
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Март 2011 |
Добавлено это содержимое. |
Изменение функции SP1. |