Intel® oneAPI DPC++/C++ Compiler Developer Guide and Reference

ID 767253
Date 7/13/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

Unpack Operators

  • Interleave the 64-bit value from the high half of A with the 64-bit value from the high half of B:
    I64vec2 unpack_high(I64vec2 A, I64vec2 B);
    Is64vec2 unpack_high(Is64vec2 A, Is64vec2 B);
    Iu64vec2 unpack_high(Iu64vec2 A, Iu64vec2 B);
    R0 = A1;
    R1 = B1;
    
    Corresponding intrinsic: _mm_unpackhi_epi64
  • Interleave the two 32-bit values from the high half of A with the two 32-bit values from the high half of B:
    I32vec4 unpack_high(I32vec4 A, I32vec4 B);
    Is32vec4 unpack_high(Is32vec4 A, Is32vec4 B);
    Iu32vec4 unpack_high(Iu32vec4 A, Iu32vec4 B);
    R0 = A1;
    R1 = B1;
    R2 = A2;
    R3 = B2;
    
    Corresponding intrinsic: _mm_unpackhi_epi32
  • Interleave the 32-bit value from the high half of A with the 32-bit value from the high half of B:
    I32vec2 unpack_high(I32vec2 A, I32vec2 B);
    Is32vec2 unpack_high(Is32vec2 A, Is32vec2 B);
    Iu32vec2 unpack_high(Iu32vec2 A, Iu32vec2 B);
    R0 = A1;
    R1 = B1;
    
    Corresponding intrinsic: _mm_unpackhi_pi32
  • Interleave the four 16-bit values from the high half of A with the two 16-bit values from the high half of B:
    I16vec8 unpack_high(I16vec8 A, I16vec8 B);
    Is16vec8 unpack_high(Is16vec8 A, Is16vec8 B);
    Iu16vec8 unpack_high(Iu16vec8 A, Iu16vec8 B);
    R0 = A2;
    R1 = B2;
    R2 = A3;
    R3 = B3;
    
    Corresponding intrinsic: _mm_unpackhi_epi16
  • Interleave the two 16-bit values from the high half of A with the two 16-bit values from the high half of B:
    I16vec4 unpack_high(I16vec4 A, I16vec4 B);
    Is16vec4 unpack_high(Is16vec4 A, Is16vec4 B);
    Iu16vec4 unpack_high(Iu16vec4 A, Iu16vec4 B);
    R0 = A2;R1 = B2;
    R2 = A3;R3 = B3;
    
    Corresponding intrinsic: _mm_unpackhi_pi16
  • Interleave the four 8-bit values from the high half of A with the four 8-bit values from the high half of B:
    I8vec8 unpack_high(I8vec8 A, I8vec8 B);
    Is8vec8 unpack_high(Is8vec8 A, I8vec8 B);
    Iu8vec8 unpack_high(Iu8vec8 A, I8vec8 B);
    R0 = A4;
    R1 = B4;
    R2 = A5;
    R3 = B5;
    R4 = A6;
    R5 = B6;
    R6 = A7;
    R7 = B7;
    
    Corresponding intrinsic: _mm_unpackhi_pi8
  • Interleave the sixteen 8-bit values from the high half of A with the four 8-bit values from the high half of B:
    I8vec16 unpack_high(I8vec16 A, I8vec16 B);
    Is8vec16 unpack_high(Is8vec16 A, I8vec16 B);
    Iu8vec16 unpack_high(Iu8vec16 A, I8vec16 B);
    R0 = A8;
    R1 = B8;
    R2 = A9;
    R3 = B9;
    R4 = A10;
    R5 = B10;
    R6 = A11;
    R7 = B11;
    R8 = A12;
    R8 = B12;
    R2 = A13;
    R3 = B13;
    R4 = A14;
    R5 = B14;
    R6 = A15;
    R7 = B15;
    
    Corresponding intrinsic: _mm_unpackhi_epi16
  • Interleave the 32-bit value from the low half of A with the 32-bit value from the low half of B:
    R0 = A0;
    R1 = B0;
    
    Corresponding intrinsic: _mm_unpacklo_epi32
  • Interleave the 64-bit value from the low half of A with the 64-bit values from the low half of B:
    I64vec2 unpack_low(I64vec2 A, I64vec2 B);
    Is64vec2 unpack_low(Is64vec2 A, Is64vec2 B);
    Iu64vec2 unpack_low(Iu64vec2 A, Iu64vec2 B);
    R0 = A0;
    R1 = B0;
    R2 = A1;
    R3 = B1;
    
    Corresponding intrinsic: _mm_unpacklo_epi32
  • Interleave the two 32-bit values from the low half of A with the two 32-bit values from the low half of B:
    I32vec4 unpack_low(I32vec4 A, I32vec4 B);
    Is32vec4 unpack_low(Is32vec4 A, Is32vec4 B);
    Iu32vec4 unpack_low(Iu32vec4 A, Iu32vec4 B);
    R0 = A0;
    R1 = B0;
    R2 = A1;
    R3 = B1;
    
    Corresponding intrinsic: _mm_unpacklo_epi32
  • Interleave the 32-bit value from the low half of A with the 32-bit value from the low half of B:
    I32vec2 unpack_low(I32vec2 A, I32vec2 B);
    Is32vec2 unpack_low(Is32vec2 A, Is32vec2 B);
    Iu32vec2 unpack_low(Iu32vec2 A, Iu32vec2 B);
    R0 = A0;
    R1 = B0;
    
    Corresponding intrinsic: _mm_unpacklo_pi32
  • Interleave the two 16-bit values from the low half of A with the two 16-bit values from the low half of B:
    I16vec8 unpack_low(I16vec8 A, I16vec8 B);
    Is16vec8 unpack_low(Is16vec8 A, Is16vec8 B);
    Iu16vec8 unpack_low(Iu16vec8 A, Iu16vec8 B);
    R0 = A0;
    R1 = B0;
    R2 = A1;
    R3 = B1;
    R4 = A2;
    R5 = B2;
    R6 = A3;
    R7 = B3;
    
    
    Corresponding intrinsic: _mm_unpacklo_epi16
  • Interleave the two 16-bit values from the low half of A with the two 16-bit values from the low half of B:
    I16vec4 unpack_low(I16vec4 A, I16vec4 B);
    Is16vec4 unpack_low(Is16vec4 A, Is16vec4 B);
    Iu16vec4 unpack_low(Iu16vec4 A, Iu16vec4 B);
    R0 = A0;
    R1 = B0;
    R2 = A1;
    R3 = B1;
    
    Corresponding intrinsic: _mm_unpacklo_pi16
  • Interleave the four 8-bit values from the high low of A with the four 8-bit values from the low half of B:
    I8vec16 unpack_low(I8vec16 A, I8vec16 B);
    Is8vec16 unpack_low(Is8vec16 A, Is8vec16 B);
    Iu8vec16 unpack_low(Iu8vec16 A, Iu8vec16 B);
    R0 = A0;
    R1 = B0;
    R2 = A1;
    R3 = B1;
    R4 = A2;
    R5 = B2;
    R6 = A3;
    R7 = B3;
    R8 = A4;
    R9 = B4;
    R10 = A5;
    R11 = B5;
    R12 = A6;
    R13 = B6;
    R14 = A7;
    R15 = B7;
    
    Corresponding intrinsic: _mm_unpacklo_epi8
  • Interleave the four 8-bit values from the high low of A with the four 8-bit values from the low half of B:
    I8vec8 unpack_low(I8vec8 A, I8vec8 B);
    Is8vec8 unpack_low(Is8vec8 A, Is8vec8 B);
    Iu8vec8 unpack_low(Iu8vec8 A, Iu8vec8 B);
    R0 = A0;
    R1 = B0;
    R2 = A1;
    R3 = B1;
    R4 = A2;
    R5 = B2;
    R6 = A3;
    R7 = B3;
    
    Corresponding intrinsic: _mm_unpacklo_pi8