Blaze 3.9
InvCbrt.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_MATH_SIMD_INVCBRT_H_
36#define _BLAZE_MATH_SIMD_INVCBRT_H_
37
38
39//*************************************************************************************************
40// Includes
41//*************************************************************************************************
42
44#include <blaze/system/Inline.h>
46
47
48namespace blaze {
49
50//=================================================================================================
51//
52// 32-BIT FLOATING POINT SIMD TYPES
53//
54//=================================================================================================
55
56//*************************************************************************************************
65template< typename T > // Type of the operand
66BLAZE_ALWAYS_INLINE const SIMDfloat invcbrt( const SIMDf32<T>& a ) noexcept
67#if BLAZE_SVML_MODE && BLAZE_AVX512F_MODE
68{
69 return _mm512_recip_ps( _mm512_cbrt_ps( (*a).eval().value ) );
70}
71#elif BLAZE_SVML_MODE && BLAZE_AVX_MODE
72{
73 return _mm256_invcbrt_ps( (*a).eval().value );
74}
75#elif BLAZE_SVML_MODE && BLAZE_SSE_MODE
76{
77 return _mm_invcbrt_ps( (*a).eval().value );
78}
79#else
80= delete;
81#endif
82//*************************************************************************************************
83
84
85
86
87//=================================================================================================
88//
89// 64-BIT FLOATING POINT SIMD TYPES
90//
91//=================================================================================================
92
93//*************************************************************************************************
102template< typename T > // Type of the operand
103BLAZE_ALWAYS_INLINE const SIMDdouble invcbrt( const SIMDf64<T>& a ) noexcept
104#if BLAZE_SVML_MODE && BLAZE_AVX512F_MODE
105{
106 return _mm512_recip_pd( _mm512_cbrt_pd( (*a).eval().value ) );
107}
108#elif BLAZE_SVML_MODE && BLAZE_AVX_MODE
109{
110 return _mm256_invcbrt_pd( (*a).eval().value );
111}
112#elif BLAZE_SVML_MODE && BLAZE_SSE_MODE
113{
114 return _mm_invcbrt_pd( (*a).eval().value );
115}
116#else
117= delete;
118#endif
119//*************************************************************************************************
120
121} // namespace blaze
122
123#endif
Header file for the basic SIMD types.
SIMD type for 64-bit double precision floating point data values.
SIMD type for 32-bit single precision floating point data values.
BLAZE_ALWAYS_INLINE const SIMDdouble invcbrt(const SIMDf64< T > &a) noexcept=delete
Computes the inverse cubic root for a vector of double precision floating point values.
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
System settings for the inline keywords.
System settings for the SSE mode.