aboutsummaryrefslogtreecommitdiff
path: root/code/handmade_intrinsics.h
diff options
context:
space:
mode:
Diffstat (limited to 'code/handmade_intrinsics.h')
-rw-r--r--code/handmade_intrinsics.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/code/handmade_intrinsics.h b/code/handmade_intrinsics.h
new file mode 100644
index 0000000..2a3a69e
--- /dev/null
+++ b/code/handmade_intrinsics.h
@@ -0,0 +1,103 @@
+/* date = May 13th 2025 1:41 pm */
+
+#ifndef HANDMADE_INTRINSICS_H
+#define HANDMADE_INTRINSICS_H
+
+//
+// TODO(casey): Remove math.h
+//
+#include <math.h>
+
+inline s32
+RoundReal32ToInt32(r32 Real32)
+{
+ s32 Result = (s32)(roundf(Real32));
+ return Result;
+}
+
+inline u32
+RoundReal32ToUInt32(r32 Real32)
+{
+ u32 Result = (u32)(roundf(Real32));
+ return Result;
+}
+
+inline u32
+TruncateReal32ToUInt32(r32 Real32)
+{
+ u32 Result = (u32)Real32;
+ return Result;
+}
+
+inline s32
+TruncateReal32ToInt32(r32 Real32)
+{
+ s32 Result = (s32)Real32;
+ return Result;
+}
+
+inline s32
+FloorReal32ToInt32(r32 Real32)
+{
+ s32 Result = (s32)floorf(Real32);
+ return Result;
+}
+
+inline r32
+Sin(r32 Angle)
+{
+ r32 Result = sinf(Angle);
+ return Result;
+}
+
+inline r32
+Cos(r32 Angle)
+{
+ r32 Result = cosf(Angle);
+ return Result;
+}
+
+inline r32
+Atan2(r32 Y, r32 X)
+{
+ r32 Result = atan2f(Y, X);
+ return Result;
+}
+
+struct bit_scan_result
+{
+ b32 Found;
+ u32 Index;
+};
+
+internal inline bit_scan_result
+FindLeastSignificantSetBit(u32 Value)
+{
+ bit_scan_result Result = {};
+
+#if 0
+#elif COMPILER_GNU
+ Result.Index = __builtin_ffs(Value);
+ if(Result.Index)
+ {
+ Result.Found = true;
+ Result.Index--;
+ }
+#else
+ for(u32 Test = 0;
+ Test < 32;
+ Test++)
+ {
+ if(Value & (1 << Test))
+ {
+ Result.Index = Test;
+ Result.Found = true;
+ break;
+ }
+ }
+#endif
+
+ return Result;
+}
+
+#endif //HANDMADE_INTRINSICS_H