diff options
Diffstat (limited to 'intern/cycles/util/types_float8.h')
-rw-r--r-- | intern/cycles/util/types_float8.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/intern/cycles/util/types_float8.h b/intern/cycles/util/types_float8.h new file mode 100644 index 00000000000..cf1f66b7622 --- /dev/null +++ b/intern/cycles/util/types_float8.h @@ -0,0 +1,74 @@ +/* + * Original code Copyright 2017, Intel Corporation + * Modifications Copyright 2018, Blender Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Intel Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __UTIL_TYPES_FLOAT8_H__ +#define __UTIL_TYPES_FLOAT8_H__ + +#ifndef __UTIL_TYPES_H__ +# error "Do not include this file directly, include util/types.h instead." +#endif + +CCL_NAMESPACE_BEGIN + +#ifndef __KERNEL_GPU__ + +struct ccl_try_align(32) float8 +{ +# ifdef __KERNEL_AVX2__ + union { + __m256 m256; + struct { + float a, b, c, d, e, f, g, h; + }; + }; + + __forceinline float8(); + __forceinline float8(const float8 &a); + __forceinline explicit float8(const __m256 &a); + + __forceinline operator const __m256 &() const; + __forceinline operator __m256 &(); + + __forceinline float8 &operator=(const float8 &a); + +# else /* __KERNEL_AVX2__ */ + float a, b, c, d, e, f, g, h; +# endif /* __KERNEL_AVX2__ */ + + __forceinline float operator[](int i) const; + __forceinline float &operator[](int i); +}; + +ccl_device_inline float8 make_float8(float f); +ccl_device_inline float8 +make_float8(float a, float b, float c, float d, float e, float f, float g, float h); +#endif /* __KERNEL_GPU__ */ + +CCL_NAMESPACE_END + +#endif /* __UTIL_TYPES_FLOAT8_H__ */ |