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.