Geoff Chappell - Software Analyst
SKETCH OF HOW RESEARCH MIGHT CONTINUE AND RESULTS BE PRESENTED
- PREVIEW ONLY
Intrinsic Functions
Some identifiers are ordinarily interpreted as naming intrinsic functions
only under some combination of compiler options.
Putting aside the many functions for operating with MMX registers, the bulk
of intrinsic functions require /Oi. Most are
otherwise implemented in the CRT Library, even if the relevant CRT documentation
does not mention that an intrinsic implementation is available.
- _InterlockedAddLargeStatistic
- _InterlockedAnd
- _InterlockedCompareExchange
- _InterlockedDecrement
- _InterlockedExchange
- _InterlockedExchangeAdd
- _InterlockedIncrement
- _InterlockedOr
- _InterlockedXor
- _ReadWriteBarrier
- _WriteBarrier
- __emul
- __emulu
- __ll_lshift
- __ll_rshift
- __ull_rshift
- _abs64
- _byteswap_uint64
- _byteswap_ulong
- _byteswap_ushort
- _disable
- _enable
- _inp
- _inpd
- _inpw
- _lrotl
- _lrotr
- _outp
- _outpd
- _outpw
- _rotl
- _rotl64
- _rotr
- _rotr64
- _strset
- abs
- labs (implemented as alias of
abs)
- memcmp
- memcpy
- memset
- strcat
- strcmp
- strcpy
- strlen
Some more, each an alias of a corresponding function but without the leading
underscore, require both /Oi and
/Ze:
- inp
- inpd
- inpw
- outp
- outpd
- outpw
- strset
Some more, all for floating-point operations, require
/Oi
but without /Op:
- acos
- asin
- atan
- atan2
- cos
- cosh
- exp
- fabs
- fmod
- log
- log10
- pow
- sin
- sinh
- sqrt
- tan
- tanh
A few functions are intrinsic by default:
- _AddressOfReturnAddress
- _ReturnAddress
- __annotation
- __debugbreak
- __va_arg
- __va_end
- __va_start
- _abnormal_termination
- _alloca
- _exception_code
- _exception_info
- _setjmp
The MMX and 3DNow! Intrinsics
- _m_empty
- _m_femms
- _m_from_float
- _m_from_int
- _m_maskmovq
- _m_packssdw
- _m_packsswb
- _m_packuswb
- _m_paddb
- _m_paddd
- _m_paddsb
- _m_paddsw
- _m_paddusb
- _m_paddusw
- _m_paddw
- _m_pand
- _m_pandn
- _m_pavgb
- _m_pavgusb
- _m_pavgw
- _m_pcmpeqb
- _m_pcmpeqd
- _m_pcmpeqw
- _m_pcmpgtb
- _m_pcmpgtd
- _m_pcmpgtw
- _m_pextrw
- _m_pf2id
- _m_pf2iw
- _m_pfacc
- _m_pfadd
- _m_pfcmpeq
- _m_pfcmpge
- _m_pfcmpgt
- _m_pfmax
- _m_pfmin
- _m_pfmul
- _m_pfnacc
- _m_pfpnacc
- _m_pfrcp
- _m_pfrcpit1
- _m_pfrcpit2
- _m_pfrsqit1
- _m_pfrsqrt
- _m_pfsub
- _m_pfsubr
- _m_pi2fd
- _m_pi2fw
- _m_pinsrw
- _m_pmaddwd
- _m_pmaxsw
- _m_pmaxub
- _m_pminsw
- _m_pminub
- _m_pmovmskb
- _m_pmulhrw
- _m_pmulhuw
- _m_pmulhw
- _m_pmullw
- _m_por
- _m_prefetch
- _m_prefetchw
- _m_psadbw
- _m_pshufw
- _m_pslld
- _m_pslldi
- _m_psllq
- _m_psllqi
- _m_psllw
- _m_psllwi
- _m_psrad
- _m_psradi
- _m_psraw
- _m_psrawi
- _m_psrld
- _m_psrldi
- _m_psrlq
- _m_psrlqi
- _m_psrlw
- _m_psrlwi
- _m_psubb
- _m_psubd
- _m_psubsb
- _m_psubsw
- _m_psubusb
- _m_psubusw
- _m_psubw
- _m_pswapd
- _m_punpckhbw
- _m_punpckhdq
- _m_punpckhwd
- _m_punpcklbw
- _m_punpckldq
- _m_punpcklwd
- _m_pxor
- _m_to_float
- _m_to_int
- _mm_add_epi16
- _mm_add_epi32
- _mm_add_epi64
- _mm_add_epi8
- _mm_add_pd
- _mm_add_ps
- _mm_add_sd
- _mm_add_si64
- _mm_add_ss
- _mm_adds_epi16
- _mm_adds_epi8
- _mm_adds_epu16
- _mm_adds_epu8
- _mm_and_pd
- _mm_and_ps
- _mm_and_si128
- _mm_andnot_pd
- _mm_andnot_ps
- _mm_andnot_si128
- _mm_avg_epu16
- _mm_avg_epu8
- _mm_clflush
- _mm_cmpeq_epi16
- _mm_cmpeq_epi32
- _mm_cmpeq_epi8
- _mm_cmpeq_pd
- _mm_cmpeq_ps
- _mm_cmpeq_sd
- _mm_cmpeq_ss
- _mm_cmpge_pd
- _mm_cmpge_ps
- _mm_cmpge_sd
- _mm_cmpge_ss
- _mm_cmpgt_epi16
- _mm_cmpgt_epi32
- _mm_cmpgt_epi8
- _mm_cmpgt_pd
- _mm_cmpgt_ps
- _mm_cmpgt_sd
- _mm_cmpgt_ss
- _mm_cmple_pd
- _mm_cmple_ps
- _mm_cmple_sd
- _mm_cmple_ss
- _mm_cmplt_epi16
- _mm_cmplt_epi32
- _mm_cmplt_epi8
- _mm_cmplt_pd
- _mm_cmplt_ps
- _mm_cmplt_sd
- _mm_cmplt_ss
- _mm_cmpneq_pd
- _mm_cmpneq_ps
- _mm_cmpneq_sd
- _mm_cmpneq_ss
- _mm_cmpnge_pd
- _mm_cmpnge_ps
- _mm_cmpnge_sd
- _mm_cmpnge_ss
- _mm_cmpngt_pd
- _mm_cmpngt_ps
- _mm_cmpngt_sd
- _mm_cmpngt_ss
- _mm_cmpnle_pd
- _mm_cmpnle_ps
- _mm_cmpnle_sd
- _mm_cmpnle_ss
- _mm_cmpnlt_pd
- _mm_cmpnlt_ps
- _mm_cmpnlt_sd
- _mm_cmpnlt_ss
- _mm_cmpord_pd
- _mm_cmpord_ps
- _mm_cmpord_sd
- _mm_cmpord_ss
- _mm_cmpunord_pd
- _mm_cmpunord_ps
- _mm_cmpunord_sd
- _mm_cmpunord_ss
- _mm_comieq_sd
- _mm_comieq_ss
- _mm_comige_sd
- _mm_comige_ss
- _mm_comigt_sd
- _mm_comigt_ss
- _mm_comile_sd
- _mm_comile_ss
- _mm_comilt_sd
- _mm_comilt_ss
- _mm_comineq_sd
- _mm_comineq_ss
- _mm_cvt_pi2ps
- _mm_cvt_ps2pi
- _mm_cvt_si2ss
- _mm_cvt_ss2si
- _mm_cvtepi32_pd
- _mm_cvtepi32_ps
- _mm_cvtpd_epi32
- _mm_cvtpd_pi32
- _mm_cvtpd_ps
- _mm_cvtpi32_pd
- _mm_cvtps_epi32
- _mm_cvtps_pd
- _mm_cvtsd_si32
- _mm_cvtsd_ss
- _mm_cvtsi128_si32
- _mm_cvtsi32_sd
- _mm_cvtsi32_si128
- _mm_cvtss_sd
- _mm_cvtt_ps2pi
- _mm_cvtt_ss2si
- _mm_cvttpd_epi32
- _mm_cvttpd_pi32
- _mm_cvttps_epi32
- _mm_cvttsd_si32
- _mm_div_pd
- _mm_div_ps
- _mm_div_sd
- _mm_div_sd
- _mm_extract_epi16
- _mm_getcsr
- _mm_insert_epi16
- _mm_lfence
- _mm_load1_pd
- _mm_load_pd
- _mm_load_ps
- _mm_load_ps1
- _mm_load_sd
- _mm_load_si128
- _mm_load_ss
- _mm_loadh_pd
- _mm_loadh_pi
- _mm_loadl_epi64
- _mm_loadl_pd
- _mm_loadl_pi
- _mm_loadr_pd
- _mm_loadr_ps
- _mm_loadu_pd
- _mm_loadu_ps
- _mm_loadu_si128
- _mm_madd_epi16
- _mm_maskmoveu_si128
- _mm_max_epi16
- _mm_max_epu8
- _mm_max_pd
- _mm_max_ps
- _mm_max_sd
- _mm_max_ss
- _mm_mfence
- _mm_min_epi16
- _mm_min_epu8
- _mm_min_pd
- _mm_min_ps
- _mm_min_sd
- _mm_min_ss
- _mm_move_epi64
- _mm_move_sd
- _mm_move_ss
- _mm_movehl_ps
- _mm_movelh_ps
- _mm_movemask_epi8
- _mm_movemask_pd
- _mm_movemask_ps
- _mm_movepi64_pi64
- _mm_movpi64_epi64
- _mm_mul_epu32
- _mm_mul_pd
- _mm_mul_ps
- _mm_mul_sd
- _mm_mul_ss
- _mm_mul_su32
- _mm_mulhi_epi16
- _mm_mulhi_epu16
- _mm_mullo_epi16
- _mm_or_pd
- _mm_or_ps
- _mm_or_si128
- _mm_packs_epi16
- _mm_packs_epi32
- _mm_packus_epi16
- _mm_pause
- _mm_prefetch
- _mm_rep_ps
- _mm_rep_ss
- _mm_rsqrt_ps
- _mm_rsqrt_ss
- _mm_sad_epu8
- _mm_set1_epi16
- _mm_set1_epi32
- _mm_set1_epi64
- _mm_set1_epi8
- _mm_set1_pd
- _mm_set1_pi16
- _mm_set1_pi32
- _mm_set1_pi8
- _mm_set_epi16
- _mm_set_epi32
- _mm_set_epi64
- _mm_set_epi8
- _mm_set_pd
- _mm_set_pi16
- _mm_set_pi32
- _mm_set_pi8
- _mm_set_ps
- _mm_set_ps1
- _mm_set_sd
- _mm_set_ss
- _mm_setcsr
- _mm_setl_epi64
- _mm_setr_epi16
- _mm_setr_epi32
- _mm_setr_epi64
- _mm_setr_epi8
- _mm_setr_pd
- _mm_setr_pi16
- _mm_setr_pi32
- _mm_setr_pi8
- _mm_setr_ps
- _mm_setzero_pd
- _mm_setzero_ps
- _mm_setzero_si128
- _mm_setzero_si64
- _mm_sfence
- _mm_shuffle_epi32
- _mm_shuffle_pd
- _mm_shuffle_ps
- _mm_shufflehi_epi16
- _mm_shufflelo_epi16
- _mm_sll_epi16
- _mm_sll_epi32
- _mm_sll_epi64
- _mm_slli_epi16
- _mm_slli_epi32
- _mm_slli_epi64
- _mm_slli_si128
- _mm_sqrt_pd
- _mm_sqrt_ps
- _mm_sqrt_sd
- _mm_sqrt_ss
- _mm_sra_epi16
- _mm_sra_epi32
- _mm_srai_epi16
- _mm_srai_epi32
- _mm_srl_epi16
- _mm_srl_epi32
- _mm_srl_epi64
- _mm_srli_epi16
- _mm_srli_epi32
- _mm_srli_epi64
- _mm_srli_si128
- _mm_store1_pd
- _mm_store_pd
- _mm_store_ps
- _mm_store_ps1
- _mm_store_sd
- _mm_store_si128
- _mm_store_ss
- _mm_storeh_pd
- _mm_storeh_pi
- _mm_storel_epi64
- _mm_storel_pd
- _mm_storel_pi
- _mm_storer_pd
- _mm_storer_ps
- _mm_storeu_pd
- _mm_storeu_ps
- _mm_storeu_si128
- _mm_stream_pd
- _mm_stream_pi
- _mm_stream_ps
- _mm_stream_si128
- _mm_stream_si32
- _mm_sub_epi16
- _mm_sub_epi32
- _mm_sub_epi64
- _mm_sub_epi8
- _mm_sub_pd
- _mm_sub_ps
- _mm_sub_sd
- _mm_sub_si64
- _mm_sub_ss
- _mm_subs_epi16
- _mm_subs_epi8
- _mm_subs_epu16
- _mm_subs_epu8
- _mm_ucomieq_sd
- _mm_ucomieq_ss
- _mm_ucomige_sd
- _mm_ucomige_ss
- _mm_ucomigt_sd
- _mm_ucomigt_ss
- _mm_ucomile_sd
- _mm_ucomile_ss
- _mm_ucomilt_sd
- _mm_ucomilt_ss
- _mm_ucomineq_sd
- _mm_ucomineq_ss
- _mm_unpackhi_epi16
- _mm_unpackhi_epi32
- _mm_unpackhi_epi64
- _mm_unpackhi_epi8
- _mm_unpackhi_pd
- _mm_unpackhi_ps
- _mm_unpacklo_epi16
- _mm_unpacklo_epi32
- _mm_unpacklo_epi64
- _mm_unpacklo_epi8
- _mm_unpacklo_pd
- _mm_unpacklo_ps
- _mm_xor_pd
- _mm_xor_ps
- _mm_xor_si128