Share via


_mm_permute2_pd

Se requiere Visual Studio 2010 SP1.

Específicos de Microsoft

Genera la instrucción XOP XMM vpermil2pd para seleccionar los valores de punto flotante de sus primeros dos orígenes, con puesta a cero opcional.

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

Parámetros

  • [in] src1
    Un parámetro de 128 bits que contiene dos valores de punto flotante de 64 bits.

  • [in] src2
    Un parámetro de 128 bits que contiene dos valores de punto flotante de 64 bits.

  • [in] selector
    Un parámetro de 128 bits que contiene dos valores de selector enteros de 64 bits.

  • [in] control
    Un parámetro entero de 32 bits que controla el método para decidir si hay valores cero en el resultado.

Valor devuelto

Un resultado de 128 bits r que contiene dos valores de punto flotante de 64 bits.

Cada valor en el resultado es cero o un valor elegido de los cuatro valores de punto flotante de 64 bits en src1 y src2.

Requisitos

Intrínseco

Arquitectura

_mm_permute2_pd

XOP

Archivo de encabezado <intrin.h>

Comentarios

Cada una de las dos palabras dobles en selector selecciona el valor de su correspondiente palabra doble del resultado de uno de los cuatro valores de punto flotante de 64 bits en src1 y src2. El valor cero puede reemplazar este valor antes de escribirse en el resultado, dependiendo del valor de control y del valor del bit 3 de la palabra cuádruple selector.

Para cada palabra cuádruple en selector, el segundo y tercer bits de orden inferior seleccionan uno de los valores de punto flotante en src1 o src2, con valores de 0 a 1, seleccionando src1 [0] a [1], y valores de 2 a 3, seleccionando src2 [0] a src2 [1]. Se ignora el bit de orden más bajo de palabra cuádruple en selector.

El próximo bit de cada palabra cuádruple en selector se conocerá como el bit de "coincidencia" que aparece a continuación. Se ignoran los 60 bits de orden superior de cada palabra cuádruple en selector.

El cuarto origen, control, determina las condiciones bajo las que los valores de resultado estarán establecidos en 0. El valor de control debe ser 0, 1, 2, o 3. Si control es 0 o 1, el valor de punto flotante seleccionado se escribe en el destino. Si control es 2, a continuación, el valor de punto flotante seleccionado se escribe en el destino si el bit de la coincidencia correspondiente en selector es 0, pero se escribe el cero si el bit de la coincidencia es 1. Si control es 3, a continuación, el valor de punto flotante seleccionado se escribe en el destino si el bit de la coincidencia correspondiente es 1, pero se escribe el cero si el bit de la coincidencia es 0.

La instrucción vpermil2pd forma parte de la familia XOP de instrucciones. Antes de utilizar este intrínseco, debe asegurarse de que el procesador admite esta instrucción. Para determinar la compatibilidad del hardware para obtener esta instrucción, llame a __cpuid intrínseco con InfoType = 0x80000001 y compruebe el bit 11 de CPUInfo [2] (ECX). Este bit es 1 cuando se admite la instrucción, de lo contrario es 0.

Ejemplo

#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]);
}
  

Vea también

Referencia

__cpuid, __cpuidex

Otros recursos

_mm256_permute2_pd

_mm_permute2_ps

Intrínsecos XOP agregados para Visual Studio 2010 SP1

Historial de cambios

Fecha

Historial

Motivo

Marzo de 2011

Se agrega este contenido.

Cambio de características de SP1.