1 /*===---- avx10_2_512minmaxintrin.h - AVX10_2_512MINMAX intrinsics ---------=== 2 * 3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 * See https://llvm.org/LICENSE.txt for license information. 5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 * 7 *===-----------------------------------------------------------------------=== 8 */ 9 #ifndef __IMMINTRIN_H 10 #error \ 11 "Never use <avx10_2_512minmaxintrin.h> directly; include <immintrin.h> instead." 12 #endif // __IMMINTRIN_H 13 14 #ifndef __AVX10_2_512MINMAXINTRIN_H 15 #define __AVX10_2_512MINMAXINTRIN_H 16 17 #define _mm512_minmaxne_pbh(A, B, C) \ 18 ((__m512bh)__builtin_ia32_vminmaxnepbf16512( \ 19 (__v32bf)(__m512bh)(A), (__v32bf)(__m512bh)(A), (int)(C))) 20 21 #define _mm512_mask_minmaxne_pbh(W, U, A, B, C) \ 22 ((__m512bh)__builtin_ia32_selectpbf_512( \ 23 (__mmask32)(U), \ 24 (__v32bf)_mm512_minmaxne_pbh((__v32bf)(__m512bh)(A), \ 25 (__v32bf)(__m512bh)(B), (int)(C)), \ 26 (__v32bf)(__m512bh)(W))) 27 28 #define _mm512_maskz_minmaxne_pbh(U, A, B, C) \ 29 ((__m512bh)__builtin_ia32_selectpbf_512( \ 30 (__mmask32)(U), \ 31 (__v32bf)_mm512_minmaxne_pbh((__v32bf)(__m512bh)(A), \ 32 (__v32bf)(__m512bh)(B), (int)(C)), \ 33 (__v32bf) __builtin_bit_cast(__m512bh, _mm512_setzero_ps()))) 34 35 #define _mm512_minmax_pd(A, B, C) \ 36 ((__m512d)__builtin_ia32_vminmaxpd512_round_mask( \ 37 (__v8df)(__m512d)(A), (__v8df)(__m512d)(B), (int)(C), \ 38 (__v8df)_mm512_undefined_pd(), (__mmask8)-1, \ 39 _MM_FROUND_CUR_DIRECTION)) 40 41 #define _mm512_mask_minmax_pd(W, U, A, B, C) \ 42 ((__m512d)__builtin_ia32_vminmaxpd512_round_mask( \ 43 (__v8df)(__m512d)(A), (__v8df)(__m512d)(B), (int)(C), \ 44 (__v8df)(__m512d)(W), (__mmask8)(U), _MM_FROUND_CUR_DIRECTION)) 45 46 #define _mm512_maskz_minmax_pd(U, A, B, C) \ 47 ((__m512d)__builtin_ia32_vminmaxpd512_round_mask( \ 48 (__v8df)(__m512d)(A), (__v8df)(__m512d)(B), (int)(C), \ 49 (__v8df)_mm512_setzero_pd(), (__mmask8)(U), _MM_FROUND_CUR_DIRECTION)) 50 51 #define _mm512_minmax_round_pd(A, B, C, R) \ 52 ((__m512d)__builtin_ia32_vminmaxpd512_round_mask( \ 53 (__v8df)(__m512d)(A), (__v8df)(__m512d)(B), (int)(C), \ 54 (__v8df)_mm512_undefined_pd(), (__mmask8)-1, (int)(R))) 55 56 #define _mm512_mask_minmax_round_pd(W, U, A, B, C, R) \ 57 ((__m512d)__builtin_ia32_vminmaxpd512_round_mask( \ 58 (__v8df)(__m512d)(A), (__v8df)(__m512d)(B), (int)(C), \ 59 (__v8df)(__m512d)(W), (__mmask8)(U), (int)(R))) 60 61 #define _mm512_maskz_minmax_round_pd(U, A, B, C, R) \ 62 ((__m512d)__builtin_ia32_vminmaxpd512_round_mask( \ 63 (__v8df)(__m512d)(A), (__v8df)(__m512d)(B), (int)(C), \ 64 (__v8df)_mm512_setzero_pd(), (__mmask8)(U), (int)(R))) 65 66 #define _mm512_minmax_ph(A, B, C) \ 67 ((__m512h)__builtin_ia32_vminmaxph512_round_mask( \ 68 (__v32hf)(__m512h)(A), (__v32hf)(__m512h)(B), (int)(C), \ 69 (__v32hf)_mm512_undefined_ph(), (__mmask32)-1, \ 70 _MM_FROUND_CUR_DIRECTION)) 71 72 #define _mm512_mask_minmax_ph(W, U, A, B, C) \ 73 ((__m512h)__builtin_ia32_vminmaxph512_round_mask( \ 74 (__v32hf)(__m512h)(A), (__v32hf)(__m512h)(B), (int)(C), \ 75 (__v32hf)(__m512h)(W), (__mmask32)(U), _MM_FROUND_CUR_DIRECTION)) 76 77 #define _mm512_maskz_minmax_ph(U, A, B, C) \ 78 ((__m512h)__builtin_ia32_vminmaxph512_round_mask( \ 79 (__v32hf)(__m512h)(A), (__v32hf)(__m512h)(B), (int)(C), \ 80 (__v32hf)_mm512_setzero_ph(), (__mmask32)(U), _MM_FROUND_CUR_DIRECTION)) 81 82 #define _mm512_minmax_round_ph(A, B, C, R) \ 83 ((__m512h)__builtin_ia32_vminmaxph512_round_mask( \ 84 (__v32hf)(__m512h)(A), (__v32hf)(__m512h)(B), (int)(C), \ 85 (__v32hf)_mm512_undefined_ph(), (__mmask32)-1, (int)(R))) 86 87 #define _mm512_mask_minmax_round_ph(W, U, A, B, C, R) \ 88 ((__m512h)__builtin_ia32_vminmaxph512_round_mask( \ 89 (__v32hf)(__m512h)(A), (__v32hf)(__m512h)(B), (int)(C), \ 90 (__v32hf)(__m512h)(W), (__mmask32)(U), (int)(R))) 91 92 #define _mm512_maskz_minmax_round_ph(U, A, B, C, R) \ 93 ((__m512h)__builtin_ia32_vminmaxph512_round_mask( \ 94 (__v32hf)(__m512h)(A), (__v32hf)(__m512h)(B), (int)(C), \ 95 (__v32hf)_mm512_setzero_ph(), (__mmask32)(U), (int)(R))) 96 97 #define _mm512_minmax_ps(A, B, C) \ 98 ((__m512)__builtin_ia32_vminmaxps512_round_mask( \ 99 (__v16sf)(__m512)(A), (__v16sf)(__m512)(B), (int)(C), \ 100 (__v16sf)_mm512_undefined_ps(), (__mmask16)-1, \ 101 _MM_FROUND_CUR_DIRECTION)) 102 103 #define _mm512_mask_minmax_ps(W, U, A, B, C) \ 104 ((__m512)__builtin_ia32_vminmaxps512_round_mask( \ 105 (__v16sf)(__m512)(A), (__v16sf)(__m512)(B), (int)(C), (__v16sf)(W), \ 106 (__mmask16)(U), _MM_FROUND_CUR_DIRECTION)) 107 108 #define _mm512_maskz_minmax_ps(U, A, B, C) \ 109 ((__m512)__builtin_ia32_vminmaxps512_round_mask( \ 110 (__v16sf)(__m512)(A), (__v16sf)(__m512)(B), (int)(C), \ 111 (__v16sf)_mm512_setzero_ps(), (__mmask16)(U), _MM_FROUND_CUR_DIRECTION)) 112 113 #define _mm512_minmax_round_ps(A, B, C, R) \ 114 ((__m512)__builtin_ia32_vminmaxps512_round_mask( \ 115 (__v16sf)(__m512)(A), (__v16sf)(__m512)(B), (int)(C), \ 116 (__v16sf)_mm512_undefined_ps(), (__mmask16)-1, (int)(R))) 117 118 #define _mm512_mask_minmax_round_ps(W, U, A, B, C, R) \ 119 ((__m512)__builtin_ia32_vminmaxps512_round_mask( \ 120 (__v16sf)(__m512)(A), (__v16sf)(__m512)(B), (int)(C), (__v16sf)(W), \ 121 (__mmask16)(U), (int)(R))) 122 123 #define _mm512_maskz_minmax_round_ps(U, A, B, C, R) \ 124 ((__m512)__builtin_ia32_vminmaxps512_round_mask( \ 125 (__v16sf)(__m512)(A), (__v16sf)(__m512)(B), (int)(C), \ 126 (__v16sf)_mm512_setzero_ps(), (__mmask16)(U), (int)(R))) 127 #endif // __AVX10_2_512MINMAXINTRIN_H 128