https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87674

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Note, there are differences in intrinsic prototypes for many intrinsics between
GCC and ICC and it isn't that big a deal e.g. in this case, it is unspecified
if the intrinsics are implemented using macros or inlines and so programs
really can't in these cases notice the difference.

That said, I've compared prototypes of ICC and GCC intrinsics and found
differences for:
_bzhi_u64          second arg is unsigned int in ICC, unsigned long long in GCC
_encls_u32         first arg is int in ICC, unsigned int in GCC
_enclu_u32
_mm256_extract_epi16 these extract or insert short or char in ICC, int in GCC
_mm256_extract_epi8
_mm256_insert_epi16
_mm256_insert_epi8
_mm256_mask_slli_epi16 the shift argument is unsigned in ICC, int in GCC
_mm256_mask_slli_epi32
_mm256_mask_slli_epi64
_mm256_mask_srai_epi16
_mm256_mask_srai_epi32
_mm256_mask_srai_epi64
_mm256_mask_srli_epi32
_mm256_mask_srli_epi64
_mm256_maskz_slli_epi16
_mm256_maskz_slli_epi32
_mm256_maskz_slli_epi64
_mm256_maskz_srai_epi16
_mm256_maskz_srai_epi32
_mm256_maskz_srai_epi64
_mm256_maskz_srli_epi32
_mm256_maskz_srli_epi64
_mm256_srai_epi64
_mm512_mask_slli_epi16
_mm512_mask_srai_epi16
_mm512_mask_srli_epi16
_mm512_maskz_slli_epi16
_mm512_maskz_srai_epi16
_mm512_slli_epi16
_mm512_srai_epi16
_mm512_srli_epi16
_mm_mask_slli_epi16
_mm_mask_slli_epi32
_mm_mask_slli_epi64
_mm_mask_srai_epi16
_mm_mask_srai_epi32
_mm_mask_srai_epi64
_mm_mask_srli_epi32
_mm_mask_srli_epi64
_mm_maskz_slli_epi16
_mm_maskz_slli_epi32
_mm_maskz_slli_epi64
_mm_maskz_srai_epi16
_mm_maskz_srai_epi32
_mm_maskz_srai_epi64
_mm_maskz_srli_epi32
_mm_maskz_srli_epi64
_mm_srai_epi64
_mm512_mask_prefetch_i64scatter_pd  fixed by this PR
_mm512_mask_prefetch_i64scatter_ps
_mm_mask_mullo_epi32
_mm_mask_packs_epi32
_mm_mask_packus_epi32
_mm512_stream_load_si512    argument is const void * in ICC, void * in GCC
_mm512_stream_pd         argument is void * in ICC, double * in GCC
_mm512_stream_ps         argument is void * in ICC, float * in GCC
_mm512_stream_si512      argument is void * in ICC, __m512i * in GCC
_mm_stream_load_si128    argument is const __m128i * in ICC, __m128i * in GCC
_mm_clflushopt           argument is const void * in ICC, void * in GCC
_mm_clwb
_mm_prefetch             argument is const char * in ICC, const void * in GCC
_mm_shuffle_ps           last argument is unsigned int in ICC, int in GCC
_xgetbv                  sign differences in return type or argument types
_xrstor
_xrstor64
_xrstors
_xrstors64
_xsave
_xsave64
_xsavec
_xsavec64
_xsaveopt
_xsaveopt64
_xsaves
_xsaves64
_xsetbv
_xtest                   returns unsigned char in ICC, int in GCC

Dunno if we want to change anything from the above beyond the above patch,
perhaps the const type * vs. type * differences might be highest on the list to
change.

Reply via email to