/* Copyright (C) 2024 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #if !defined _IMMINTRIN_H_INCLUDED #error "Never use directly; include instead." #endif #ifndef _AVX10_2_512MINMAXINTRIN_H_INCLUDED #define _AVX10_2_512MINMAXINTRIN_H_INCLUDED #if !defined (__AVX10_2_512__) #pragma GCC push_options #pragma GCC target("avx10.2-512") #define __DISABLE_AVX10_2_512__ #endif /* __AVX10_2_512__ */ #ifdef __OPTIMIZE__ extern __inline __m512bh __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_minmax_nepbh (__m512bh __A, __m512bh __B, const int __C) { return (__m512bh) __builtin_ia32_minmaxnepbf16512_mask ((__v32bf) __A, (__v32bf) __B, __C, (__v32bf)(__m512bh) _mm512_setzero_si512 (), (__mmask32) -1); } extern __inline __m512bh __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_mask_minmax_nepbh (__m512bh __W, __mmask32 __U, __m512bh __A, __m512bh __B, const int __C) { return (__m512bh) __builtin_ia32_minmaxnepbf16512_mask ((__v32bf) __A, (__v32bf) __B, __C, (__v32bf) __W, (__mmask32) __U); } extern __inline __m512bh __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_maskz_minmax_nepbh (__mmask32 __U, __m512bh __A, __m512bh __B, const int __C) { return (__m512bh) __builtin_ia32_minmaxnepbf16512_mask ((__v32bf) __A, (__v32bf) __B, __C, (__v32bf)(__m512bh) _mm512_setzero_si512 (), (__mmask32) __U); } extern __inline __m512d __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_minmax_pd (__m512d __A, __m512d __B, const int __C) { return (__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) __A, (__v8df) __B, __C, (__v8df) _mm512_undefined_pd (), (__mmask8) -1, _MM_FROUND_CUR_DIRECTION); } extern __inline __m512d __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_mask_minmax_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B, const int __C) { return (__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) __A, (__v8df) __B, __C, (__v8df) __W, (__mmask8) __U, _MM_FROUND_CUR_DIRECTION); } extern __inline __m512d __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_maskz_minmax_pd (__mmask8 __U, __m512d __A, __m512d __B, const int __C) { return (__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) __A, (__v8df) __B, __C, (__v8df) _mm512_setzero_pd (), (__mmask8) __U, _MM_FROUND_CUR_DIRECTION); } extern __inline __m512d __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_minmax_round_pd (__m512d __A, __m512d __B, const int __C, const int __R) { return (__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) __A, (__v8df) __B, __C, (__v8df) _mm512_undefined_pd (), (__mmask8) -1, __R); } extern __inline __m512d __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_mask_minmax_round_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B, const int __C, const int __R) { return (__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) __A, (__v8df) __B, __C, (__v8df) __W, (__mmask8) __U, __R); } extern __inline __m512d __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_maskz_minmax_round_pd (__mmask8 __U, __m512d __A, __m512d __B, const int __C, const int __R) { return (__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) __A, (__v8df) __B, __C, (__v8df) _mm512_setzero_pd (), (__mmask8) __U, __R); } extern __inline __m512h __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_minmax_ph (__m512h __A, __m512h __B, const int __C) { return (__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) __A, (__v32hf) __B, __C, (__v32hf) _mm512_undefined_ph (), (__mmask32) -1, _MM_FROUND_CUR_DIRECTION); } extern __inline __m512h __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_mask_minmax_ph (__m512h __W, __mmask32 __U, __m512h __A, __m512h __B, const int __C) { return (__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) __A, (__v32hf) __B, __C, (__v32hf) __W, (__mmask32) __U, _MM_FROUND_CUR_DIRECTION); } extern __inline __m512h __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_maskz_minmax_ph (__mmask32 __U, __m512h __A, __m512h __B, const int __C) { return (__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) __A, (__v32hf) __B, __C, (__v32hf) _mm512_setzero_ph (), (__mmask32) __U, _MM_FROUND_CUR_DIRECTION); } extern __inline __m512h __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_minmax_round_ph (__m512h __A, __m512h __B, const int __C, const int __R) { return (__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) __A, (__v32hf) __B, __C, (__v32hf) _mm512_undefined_ph (), (__mmask32) -1, __R); } extern __inline __m512h __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_mask_minmax_round_ph (__m512h __W, __mmask32 __U, __m512h __A, __m512h __B, const int __C, const int __R) { return (__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) __A, (__v32hf) __B, __C, (__v32hf) __W, (__mmask32) __U, __R); } extern __inline __m512h __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_maskz_minmax_round_ph (__mmask32 __U, __m512h __A, __m512h __B, const int __C, const int __R) { return (__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) __A, (__v32hf) __B, __C, (__v32hf) _mm512_setzero_ph (), (__mmask32) __U, __R); } extern __inline __m512 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_minmax_ps (__m512 __A, __m512 __B, const int __C) { return (__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) __A, (__v16sf) __B, __C, (__v16sf) _mm512_undefined_ps (), (__mmask16) -1, _MM_FROUND_CUR_DIRECTION); } extern __inline __m512 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_mask_minmax_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B, const int __C) { return (__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) __A, (__v16sf) __B, __C, (__v16sf) __W, (__mmask16) __U, _MM_FROUND_CUR_DIRECTION); } extern __inline __m512 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_maskz_minmax_ps (__mmask16 __U, __m512 __A, __m512 __B, const int __C) { return (__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) __A, (__v16sf) __B, __C, (__v16sf) _mm512_setzero_ps (), (__mmask16) __U, _MM_FROUND_CUR_DIRECTION); } extern __inline __m512 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_minmax_round_ps (__m512 __A, __m512 __B, const int __C, const int __R) { return (__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) __A, (__v16sf) __B, __C, (__v16sf) _mm512_undefined_ps (), (__mmask16) -1, __R); } extern __inline __m512 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_mask_minmax_round_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B, const int __C, const int __R) { return (__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) __A, (__v16sf) __B, __C, (__v16sf) __W, (__mmask16) __U, __R); } extern __inline __m512 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm512_maskz_minmax_round_ps (__mmask16 __U, __m512 __A, __m512 __B, const int __C, const int __R) { return (__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) __A, (__v16sf) __B, __C, (__v16sf) _mm512_setzero_ps (), (__mmask16) __U, __R); } #else #define _mm512_minmax_nepbh(A, B, C) \ ((__m512bh) __builtin_ia32_minmaxnepbf16512_mask ((__v32bf) (A), \ (__v32bf) (B), \ (int) (C), \ (__v32bf) (__m512bh) \ _mm512_setzero_si512 (), \ (__mmask32) (-1))) #define _mm512_mask_minmax_nepbh(W, U, A, B, C) \ ((__m512bh) __builtin_ia32_minmaxnepbf16512_mask ((__v32bf) (A), \ (__v32bf) (B), \ (int) (C), \ (__v32bf) (__m512bh) (W), \ (__mmask32) (U))) #define _mm512_maskz_minmax_nepbh(U, A, B, C) \ ((__m512bh) __builtin_ia32_minmaxnepbf16512_mask ((__v32bf) (A), \ (__v32bf) (B), \ (int) (C), \ (__v32bf) (__m512bh) \ _mm512_setzero_si512 (), \ (__mmask32) (U))) #define _mm512_minmax_round_pd(A, B, C, R) \ ((__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) (A), \ (__v8df) (B), \ (int) (C), \ (__v8df) (__m512d) \ _mm512_undefined_pd (), \ (__mmask8) (-1), \ (int) (R))) #define _mm512_mask_minmax_round_pd(W, U, A, B, C, R) \ ((__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) (A), \ (__v8df) (B), \ (int) (C), \ (__v8df) (__m512d) (W), \ (__mmask8) (U), \ (int) (R))) #define _mm512_maskz_minmax_round_pd(U, A, B, C, R) \ ((__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) (A), \ (__v8df) (B), \ (int) (C), \ (__v8df) (__m512d) \ _mm512_setzero_pd (), \ (__mmask8) (U), \ (int) (R))) #define _mm512_minmax_round_ph(A, B, C, R) \ ((__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) (A), \ (__v32hf) (B), \ (int) (C), \ (__v32hf) (__m512h) \ _mm512_undefined_ph (), \ (__mmask32) (-1), \ (int) (R))) #define _mm512_mask_minmax_round_ph(W, U, A, B, C, R) \ ((__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) (A), \ (__v32hf) (B), \ (int) (C), \ (__v32hf) (__m512h) (W), \ (__mmask32) (U), \ (int) (R))) #define _mm512_maskz_minmax_round_ph(U, A, B, C, R) \ ((__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) (A), \ (__v32hf) (B), \ (int) (C), \ (__v32hf) (__m512h) \ _mm512_setzero_ph (), \ (__mmask32) (U), \ (int) (R))) #define _mm512_minmax_round_ps(A, B, C, R) \ ((__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) (A), \ (__v16sf) (B), \ (int) (C), \ (__v16sf) (__m512) \ _mm512_undefined_ps (), \ (__mmask16) (-1), \ (int) (R))) #define _mm512_mask_minmax_round_ps(W, U, A, B, C, R) \ ((__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) (A), \ (__v16sf) (B), \ (int) (C), \ (__v16sf) (__m512) (W), \ (__mmask16) (U), \ (int) (R))) #define _mm512_maskz_minmax_round_ps(U, A, B, C, R) \ ((__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) (A), \ (__v16sf) (B), \ (int) (C), \ (__v16sf) (__m512) \ _mm512_setzero_ps (), \ (__mmask16) (U), \ (int) (R))) #define _mm512_minmax_pd(A, B, C) \ ((__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) (A), \ (__v8df) (B), \ (int) (C), \ (__v8df) (__m512d) \ _mm512_undefined_pd (), \ (__mmask8) (-1), \ _MM_FROUND_CUR_DIRECTION)) #define _mm512_mask_minmax_pd(W, U, A, B, C) \ ((__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) (A), \ (__v8df) (B), \ (int) (C), \ (__v8df) (__m512d) (W), \ (__mmask8) (U), \ _MM_FROUND_CUR_DIRECTION)) #define _mm512_maskz_minmax_pd(U, A, B, C) \ ((__m512d) __builtin_ia32_minmaxpd512_mask_round ((__v8df) (A), \ (__v8df) (B), \ (int) (C), \ (__v8df) (__m512d) \ _mm512_setzero_pd (), \ (__mmask8) (U), \ _MM_FROUND_CUR_DIRECTION)) #define _mm512_minmax_ph(A, B, C) \ ((__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) (A), \ (__v32hf) (B), \ (int) (C), \ (__v32hf) (__m512h) \ _mm512_undefined_ph (), \ (__mmask32) (-1), \ _MM_FROUND_CUR_DIRECTION)) #define _mm512_mask_minmax_ph(W, U, A, B, C) \ ((__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) (A), \ (__v32hf) (B), \ (int) (C), \ (__v32hf) (__m512h) (W), \ (__mmask32) (U), \ _MM_FROUND_CUR_DIRECTION)) #define _mm512_maskz_minmax_ph(U, A, B, C) \ ((__m512h) __builtin_ia32_minmaxph512_mask_round ((__v32hf) (A), \ (__v32hf) (B), \ (int) (C), \ (__v32hf) (__m512h) \ _mm512_setzero_ph (), \ (__mmask32) (U), \ _MM_FROUND_CUR_DIRECTION)) #define _mm512_minmax_ps(A, B, C) \ ((__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) (A), \ (__v16sf) (B), \ (int) (C), \ (__v16sf) (__m512) \ _mm512_undefined_ps (), \ (__mmask16) (-1), \ _MM_FROUND_CUR_DIRECTION)) #define _mm512_mask_minmax_ps(W, U, A, B, C) \ ((__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) (A), \ (__v16sf) (B), \ (int) (C), \ (__v16sf) (__m512) (W), \ (__mmask16) (U), \ _MM_FROUND_CUR_DIRECTION)) #define _mm512_maskz_minmax_ps(U, A, B, C) \ ((__m512) __builtin_ia32_minmaxps512_mask_round ((__v16sf) (A), \ (__v16sf) (B), \ (int) (C), \ (__v16sf) (__m512) \ _mm512_setzero_ps (), \ (__mmask16) (U), \ _MM_FROUND_CUR_DIRECTION)) #endif #ifdef __DISABLE_AVX10_2_512__ #undef __DISABLE_AVX10_2_512__ #pragma GCC pop_options #endif /* __DISABLE_AVX10_2_512__ */ #endif /* _AVX10_2_512MINMAXINTRIN_H_INCLUDED */