_mm_permute2_ps

Se requiere Visual Studio 2010 SP1.

Específicos de Microsoft

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

__m128 _mm_permute2_ps (
   __m128 src1,
   __m128 src2,
   __m128i selector,
   int control
);

Parámetros

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

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

  • [in] selector
    Un parámetro de 128 bits que contiene cuatro valores de selector enteros de 32 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 cuatro valores de punto flotante de 32 bits.

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

Requisitos

Intrínseco

Arquitectura

_mm_permute2_ps

XOP

Archivo de encabezado <intrin.h>

Comentarios

Cada una de las cuatro palabras dobles en selector selecciona el valor de su correspondiente palabra doble del resultado de uno de los ocho valores de punto flotante de 32 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 doble selector.

Para cada palabra doble en selector, los tres bits de orden inferior seleccionan uno de los valores de punto flotante en src1 o src2, con valores de 0 a 3, seleccionando src1 [0] a [3], y valores de 4 a 7, seleccionando src2 [0] a src2 [3].

El próximo bit de cada palabra doble en selector se conocerá como el bit de "coincidencia" que aparece a continuación. Se ignoran los 28 bits de orden superior de cada palabra doble 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 vpermil2ps 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()
{
    __m128 a, b, d;
    __m128i select;
    int i;
    for (i = 0; i < 4; i++) {
        a.m128_f32[i] = i;
        b.m128_f32[i] = i+4;
    }
    select.m128i_i32[0] = 5;
    select.m128i_i32[1] = 1 + 8; // turn on match bit
    select.m128i_i32[2] = 2;
    select.m128i_i32[3] = 6 + 8; // turn on match bit
    d = _mm_permute2_ps(a, b, select, 0); // just select, don't zero
    for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
    printf_s("\n");
    d = _mm_permute2_ps(a, b, select, 2); // zero if match is 1
    for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
    printf_s("\n");
    d = _mm_permute2_ps(a, b, select, 3); // zero if match is 0
    for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
    printf_s("\n");
}
  

Vea también

Referencia

__cpuid, __cpuidex

Otros recursos

_mm256_permute2_ps

_mm_permute2_pd

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.