Intel® C++ Compiler Classic Developer Guide and Reference

ID 767249
Date 7/13/2023
Public
Document Table of Contents

Single-Precision Floating-Point Vector Intrinsics

The single-precision floating-point vector intrinsics listed here are designed for the Intel® Pentium® 4 processor with Streaming SIMD Extensions 3 (Intel® SSE3). The prototypes for these intrinsics are in the pmmintrin.h header file.

To use these intrinsics, include the immintrin.h file as follows:

#include <immintrin.h>

The results of each intrinsic operation are placed in the registers R0, R1, R2, and R3.

Intrinsic Name

Operation

Corresponding Intel®
SSE3 Instruction

_mm_addsub_ps

Subtract and add

ADDSUBPS

_mm_hadd_ps

Add

HADDPS

_mm_hsub_ps

Subtracts

HSUBPS

_mm_movehdup_ps

Duplicates

MOVSHDUP

_mm_moveldup_ps

Duplicates

MOVSLDUP

_mm_addsub_ps

extern __m128 _mm_addsub_ps(__m128 a, __m128 b);

Subtracts even vector elements while adding odd vector elements.

R0

R1

R2

R3

a0 - b0;

a1 + b1;

a2 - b2;

a3 + b3;

_mm_hadd_ps

extern __m128 _mm_hadd_ps(__m128 a, __m128 b);

Adds adjacent vector elements.

R0

R1

R2

R3

a0 + a1;

a2 + a3;

b0 + b1;

b2 + b3;

_mm_hsub_ps

extern __m128 _mm_hsub_ps(__m128 a, __m128 b);

Subtracts adjacent vector elements.

R0

R1

R2

R3

a0 - a1;

a2 - a3;

b0 - b1;

b2 - b3;

_mm_movehdup_ps

extern __m128 _mm_movehdup_ps(__m128 a);

Duplicates odd vector elements into even vector elements.

R0

R1

R2

R3

a1;

a1;

a3;

a3;

_mm_moveldup_ps

extern __m128 _mm_moveldup_ps(__m128 a);

Duplicates even vector elements into odd vector elements.

R0

R1

R2

R3

a0;

a0;

a2;

a2;