The intel intrinsic functions have the subtype of the vector built into their names. For example, _mm_set1_ps is a ps, which is a packed single-precision aka. a float. Although the meaning of most of them is clear, their "full name" like packed single-precision isn't always clear from the function descriptions. I have created the following table. Unfortunately some entries are missing. What are the value of them? Additional questions below the table.
| abbreviation | full name | C/++ equivalent |
|---|---|---|
| ps | packed single-precision | float |
| ph | packed half-precision | None** |
| pd | packed double-precision | double |
| pch | packed half-precision complex | None** |
| pi8 | ??? | int8_t |
| pi16 | ??? | int16_t |
| pi32 | ??? | int32_t |
| epi8 | ??? | int8_t |
| epi16 | ??? | int16_t |
| epi32 | ??? | int32_t |
| epi64 | ??? | int64_t |
| epi64x | ??? | int64_t |
Additional questions:
- Have I missed any?
- What is the difference between
epiXandpiX? - Why does no
pi64exist? - What is the difference between
epi64andepi64x?
** I have found this, but there seems to be no standard way to represent a half precision (complex) value in C/++. Please correct me if this has changed in any way.