aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-05-29 13:36:55 +0100
committergingerBill <bill@gingerbill.org>2022-05-29 13:36:55 +0100
commit7f3540b7f541b75b1c4b4db558636d8295297c3f (patch)
tree6397e96bd2b132d70dd5975a10f0e2f92b95df77
parent3ad2cde833dc7b8ad83185f251f1ee544b4e3ef8 (diff)
Add abm.odin
-rw-r--r--core/simd/x86/abm.odin20
1 files changed, 20 insertions, 0 deletions
diff --git a/core/simd/x86/abm.odin b/core/simd/x86/abm.odin
new file mode 100644
index 000000000..f1898811f
--- /dev/null
+++ b/core/simd/x86/abm.odin
@@ -0,0 +1,20 @@
+//+build i386, amd64
+package simd_x86
+
+import "core:intrinsics"
+
+_lzcnt_u32 :: #force_inline proc "c" (x: u32) -> u32 {
+ return intrinsics.count_leading_zeros(x)
+}
+_popcnt32 :: #force_inline proc "c" (x: u32) -> i32 {
+ return i32(intrinsics.count_ones(x))
+}
+
+when ODIN_ARCH == .amd64 {
+ _lzcnt_u64 :: #force_inline proc "c" (x: u64) -> u64 {
+ return intrinsics.count_leading_zeros(x)
+ }
+ _popcnt64 :: #force_inline proc "c" (x: u64) -> i32 {
+ return i32(intrinsics.count_ones(x))
+ }
+} \ No newline at end of file