UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UnrealPlatformMathSSE4.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5// HEADER_UNIT_SKIP - Included through other header
6
7#include "HAL/Platform.h"
9
10// UE5.2+ requires SSE4.2
11
12// We have to retain this #if because it's pulled in via the linux header chain
13// for all platforms at the moment and we rely on the parent class to implement
14// the functions
15#if PLATFORM_MAYBE_HAS_SSE4_1
16#include <smmintrin.h>
17
18namespace UE4
19{
20namespace SSE4
21{
22 UE_FORCEINLINE_HINT float TruncToFloat(float F)
23 {
25 }
26
27 UE_FORCEINLINE_HINT double TruncToDouble(double F)
28 {
30 }
31
32 UE_FORCEINLINE_HINT float FloorToFloat(float F)
33 {
35 }
36
38 {
40 }
41
42 UE_FORCEINLINE_HINT float RoundToFloat(float F)
43 {
44 return FloorToFloat(F + 0.5f);
45 }
46
47 UE_FORCEINLINE_HINT double RoundToDouble(double F)
48 {
49 return FloorToDouble(F + 0.5);
50 }
51
52 UE_FORCEINLINE_HINT float CeilToFloat(float F)
53 {
55 }
56
57 UE_FORCEINLINE_HINT double CeilToDouble(double F)
58 {
60 }
61}
62}
63
64#endif // PLATFORM_MAYBE_HAS_SSE4_1
65
66#define UNREALPLATFORMMATH_SSE4_1_ENABLED PLATFORM_ALWAYS_HAS_SSE4_1
67
68template<class Base>
70{
71#if UNREALPLATFORMMATH_SSE4_1_ENABLED
72
73 // Truncate
74
75 static UE_FORCEINLINE_HINT float TruncToFloat(float F)
76 {
77 return UE4::SSE4::TruncToFloat(F);
78 }
79
80 static UE_FORCEINLINE_HINT double TruncToDouble(double F)
81 {
82 return UE4::SSE4::TruncToDouble(F);
83 }
84
85 // Round
86
87 static UE_FORCEINLINE_HINT float RoundToFloat(float F)
88 {
89 return UE4::SSE4::RoundToFloat(F);
90 }
91
92 static UE_FORCEINLINE_HINT double RoundToDouble(double F)
93 {
94 return UE4::SSE4::RoundToDouble(F);
95 }
96
97 // Floor
98
99 static UE_FORCEINLINE_HINT float FloorToFloat(float F)
100 {
101 return UE4::SSE4::FloorToFloat(F);
102 }
103
104 static UE_FORCEINLINE_HINT double FloorToDouble(double F)
105 {
106 return UE4::SSE4::FloorToDouble(F);
107 }
108
109 // Ceil
110
111 static UE_FORCEINLINE_HINT float CeilToFloat(float F)
112 {
113 return UE4::SSE4::CeilToFloat(F);
114 }
115
116 static UE_FORCEINLINE_HINT double CeilToDouble(double F)
117 {
118 return UE4::SSE4::CeilToDouble(F);
119 }
120
121
122 //
123 // Wrappers for overloads in the base, required since calls declared in base struct won't redirect back to this class
124 //
125
126 static UE_FORCEINLINE_HINT double TruncToFloat(double F) { return TruncToDouble(F); }
127 static UE_FORCEINLINE_HINT double RoundToFloat(double F) { return RoundToDouble(F); }
128 static UE_FORCEINLINE_HINT double FloorToFloat(double F) { return FloorToDouble(F); }
129 static UE_FORCEINLINE_HINT double CeilToFloat(double F) { return CeilToDouble(F); }
130
131#endif // UNREALPLATFORMMATH_SSE4_ENABLED
132};
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FVector FloorToDouble(const FVector Vec)
Definition HeterogeneousVolumesLiveShadingPipeline.cpp:2340
Definition ObjectMacros.h:2385
Definition UnrealPlatformMathSSE4.h:70
Definition UnrealPlatformMathSSE.h:15