Blender V4.3
types_int4_impl.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
7#ifndef __UTIL_TYPES_H__
8# error "Do not include this file directly, include util/types.h instead."
9#endif
10
12
13#ifndef __KERNEL_NATIVE_VECTOR_TYPES__
14# ifdef __KERNEL_SSE__
16
17__forceinline int4::int4(const int4 &a) : m128(a.m128) {}
18
19__forceinline int4::int4(const __m128i &a) : m128(a) {}
20
21__forceinline int4::operator const __m128i &() const
22{
23 return m128;
24}
25
26__forceinline int4::operator __m128i &()
27{
28 return m128;
29}
30
31__forceinline int4 &int4::operator=(const int4 &a)
32{
33 m128 = a.m128;
34 return *this;
35}
36# endif /* __KERNEL_SSE__ */
37
38# ifndef __KERNEL_GPU__
39__forceinline int int4::operator[](int i) const
40{
41 util_assert(i >= 0);
42 util_assert(i < 4);
43 return *(&x + i);
44}
45
47{
48 util_assert(i >= 0);
49 util_assert(i < 4);
50 return *(&x + i);
51}
52# endif
53
54ccl_device_inline int4 make_int4(int x, int y, int z, int w)
55{
56# ifdef __KERNEL_SSE__
57 return int4(_mm_set_epi32(w, z, y, x));
58# else
59 return {x, y, z, w};
60# endif
61}
62
63#endif /* __KERNEL_NATIVE_VECTOR_TYPES__ */
64
66{
67#ifdef __KERNEL_SSE__
68 return int4(_mm_set1_epi32(i));
69#else
70 return make_int4(i, i, i, i);
71#endif
72}
73
75{
76#if defined(__KERNEL_GPU__)
77 return make_int4((int)f.x, (int)f.y, (int)f.z, 0);
78#elif defined(__KERNEL_SSE__)
79 return int4(_mm_cvtps_epi32(f.m128));
80#else
81 return make_int4((int)f.x, (int)f.y, (int)f.z, (int)f.w);
82#endif
83}
84
86{
87#ifdef __KERNEL_SSE__
88 return int4(_mm_cvtps_epi32(f.m128));
89#else
90 return make_int4((int)f.x, (int)f.y, (int)f.z, (int)f.w);
91#endif
92}
93
95{
96#ifdef __KERNEL_PRINTF__
97 printf("%s: %d %d %d %d\n", label, a.x, a.y, a.z, a.w);
98#endif
99}
100
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
Definition btQuadWord.h:117
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
const int & operator[](int i) const
#define printf
#define util_assert(statement)
Definition defines.h:98
const char * label
#define ccl_private
#define ccl_device_inline
#define CCL_NAMESPACE_END
#define __forceinline
float z
Definition sky_float3.h:27
float y
Definition sky_float3.h:27
float x
Definition sky_float3.h:27
ccl_device_inline void print_int4(ccl_private const char *label, const int4 a)
ccl_device_inline int4 make_int4(int x, int y, int z, int w)