-
Notifications
You must be signed in to change notification settings - Fork 15.6k
Open
Labels
backend:X86clang:bytecodeIssues for the clang bytecode constexpr interpreterIssues for the clang bytecode constexpr interpreterclang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"clang:headersHeaders provided by Clang, e.g. for intrinsicsHeaders provided by Clang, e.g. for intrinsicsconstexprAnything related to constant evaluationAnything related to constant evaluationgood first issuehttps://github.com/llvm/llvm-project/contributehttps://github.com/llvm/llvm-project/contribute
Description
There are a lot of x86-specific behaviours to handle here, so this initial patch should ONLY handle normal FP values (DENORMAL/INF/NAN/etc. should fail).
However the +/-0.0 special case must be handled straight away - if both operands are zero (any sign) then the second operand 'b' is returned.
We should probably introduce a interp__builtin_elementwise_fp_binop / EvaluateFpBinOpExpr callback handler mechanism for these to InterpretBuiltin / VisitCallExpr respectively.
__m128 _mm_max_ss (__m128 a, __m128 b)
__m128 _mm_mask_max_ss (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_max_ss (__mmask8 k, __m128 a, __m128 b)
__m128 _mm_min_ss (__m128 a, __m128 b)
__m128 _mm_mask_min_ss (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_min_ss (__mmask8 k, __m128 a, __m128 b)
__m128d _mm_max_sd (__m128d a, __m128d b)
__m128d _mm_mask_max_sd (__m128d src, __mmask8 k, __m128d a, __m128d b)
__m128d _mm_maskz_max_sd (__mmask8 k, __m128d a, __m128d b)
__m128d _mm_min_sd (__m128d a, __m128d b)
__m128d _mm_mask_min_sd (__m128d src, __mmask8 k, __m128d a, __m128d b)
__m128d _mm_maskz_min_sd (__mmask8 k, __m128d a, __m128d b)
__m128h _mm_max_sh (__m128h a, __m128h b)
__m128h _mm_mask_max_sh (__m128h src, __mmask8 k, __m128h a, __m128h b)
__m128h _mm_maskz_max_sh (__mmask8 k, __m128h a, __m128h b)
__m128h _mm_min_sh (__m128h a, __m128h b)
__m128h _mm_mask_min_sh (__m128h src, __mmask8 k, __m128h a, __m128h b)
__m128h _mm_maskz_min_sh (__mmask8 k, __m128h a, __m128h b)
__m128 _mm_max_ps (__m128 a, __m128 b)
__m128 _mm_mask_max_ps (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_max_ps (__mmask8 k, __m128 a, __m128 b)
__m128 _mm_min_ps (__m128 a, __m128 b)
__m128 _mm_mask_min_ps (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_min_ps (__mmask8 k, __m128 a, __m128 b)
__m256 _mm256_max_ps (__m256 a, __m256 b)
__m256 _mm256_mask_max_ps (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_max_ps (__mmask8 k, __m256 a, __m256 b)
__m256 _mm256_min_ps (__m256 a, __m256 b)
__m256 _mm256_mask_min_ps (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_min_ps (__mmask8 k, __m256 a, __m256 b)
__m512 _mm512_max_ps (__m512 a, __m512 b)
__m512 _mm512_mask_max_ps (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_max_ps (__mmask16 k, __m512 a, __m512 b)
__m512 _mm512_min_ps (__m512 a, __m512 b)
__m512 _mm512_mask_min_ps (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_min_ps (__mmask16 k, __m512 a, __m512 b)
__m128 _mm_max_pd (__m128 a, __m128 b)
__m128 _mm_mask_max_pd (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_max_pd (__mmask8 k, __m128 a, __m128 b)
__m128 _mm_min_pd (__m128 a, __m128 b)
__m128 _mm_mask_min_pd (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_min_pd (__mmask8 k, __m128 a, __m128 b)
__m256 _mm256_max_pd (__m256 a, __m256 b)
__m256 _mm256_mask_max_pd (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_max_pd (__mmask8 k, __m256 a, __m256 b)
__m256 _mm256_min_pd (__m256 a, __m256 b)
__m256 _mm256_mask_min_pd (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_min_pd (__mmask8 k, __m256 a, __m256 b)
__m512 _mm512_max_pd (__m512 a, __m512 b)
__m512 _mm512_mask_max_pd (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_max_pd (__mmask16 k, __m512 a, __m512 b)
__m512 _mm512_min_pd (__m512 a, __m512 b)
__m512 _mm512_mask_min_pd (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_min_pd (__mmask16 k, __m512 a, __m512 b)
__m128 _mm_max_ph (__m128 a, __m128 b)
__m128 _mm_mask_max_ph (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_max_ph (__mmask8 k, __m128 a, __m128 b)
__m128 _mm_min_ph (__m128 a, __m128 b)
__m128 _mm_mask_min_ph (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_min_ph (__mmask8 k, __m128 a, __m128 b)
__m256 _mm256_max_ph (__m256 a, __m256 b)
__m256 _mm256_mask_max_ph (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_max_ph (__mmask8 k, __m256 a, __m256 b)
__m256 _mm256_min_ph (__m256 a, __m256 b)
__m256 _mm256_mask_min_ph (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_min_ph (__mmask8 k, __m256 a, __m256 b)
__m512 _mm512_max_ph (__m512 a, __m512 b)
__m512 _mm512_mask_max_ph (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_max_ph (__mmask16 k, __m512 a, __m512 b)
__m512 _mm512_min_ph (__m512 a, __m512 b)
__m512 _mm512_mask_min_ph (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_min_ph (__mmask16 k, __m512 a, __m512 b)
Metadata
Metadata
Assignees
Labels
backend:X86clang:bytecodeIssues for the clang bytecode constexpr interpreterIssues for the clang bytecode constexpr interpreterclang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"clang:headersHeaders provided by Clang, e.g. for intrinsicsHeaders provided by Clang, e.g. for intrinsicsconstexprAnything related to constant evaluationAnything related to constant evaluationgood first issuehttps://github.com/llvm/llvm-project/contributehttps://github.com/llvm/llvm-project/contribute