aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-05-29 14:56:25 +0100
committergingerBill <bill@gingerbill.org>2022-05-29 14:56:25 +0100
commitbc3bf939e0760daeba75e29a82d2c1e8811651bb (patch)
treed5cf48256218c59e2321f1c08193b92570e85af6
parentf5e5eac3b9c8458eef17ffe062507fd0b531f0a0 (diff)
Add sha.odin
-rw-r--r--core/simd/x86/sha.odin43
1 files changed, 43 insertions, 0 deletions
diff --git a/core/simd/x86/sha.odin b/core/simd/x86/sha.odin
new file mode 100644
index 000000000..c60293a8d
--- /dev/null
+++ b/core/simd/x86/sha.odin
@@ -0,0 +1,43 @@
+//+build i386, amd64
+package simd_x86
+
+_mm_sha1msg1_epu32 :: #force_inline proc "c" (a, b: __m128i) -> __m128i {
+ return transmute(__m128i)sha1msg1(transmute(i32x4)a, transmute(i32x4)b)
+}
+_mm_sha1msg2_epu32 :: #force_inline proc "c" (a, b: __m128i) -> __m128i {
+ return transmute(__m128i)sha1msg2(transmute(i32x4)a, transmute(i32x4)b)
+}
+_mm_sha1nexte_epu32 :: #force_inline proc "c" (a, b: __m128i) -> __m128i {
+ return transmute(__m128i)sha1nexte(transmute(i32x4)a, transmute(i32x4)b)
+}
+_mm_sha1rnds4_epu32 :: #force_inline proc "c" (a, b: __m128i, $FUNC: u32) -> __m128i where 0 <= FUNC, FUNC <= 3 {
+ return transmute(__m128i)sha1rnds4(transmute(i32x4)a, transmute(i32x4)b, u8(FUNC & 0xff))
+}
+_mm_sha256msg1_epu32 :: #force_inline proc "c" (a, b: __m128i) -> __m128i {
+ return transmute(__m128i)sha256msg1(transmute(i32x4)a, transmute(i32x4)b)
+}
+_mm_sha256msg2_epu32 :: #force_inline proc "c" (a, b: __m128i) -> __m128i {
+ return transmute(__m128i)sha256msg2(transmute(i32x4)a, transmute(i32x4)b)
+}
+_mm_sha256rnds2_epu32 :: #force_inline proc "c" (a, b, k: __m128i) -> __m128i {
+ return transmute(__m128i)sha256rnds2(transmute(i32x4)a, transmute(i32x4)b, transmute(i32x4)k)
+}
+
+@(default_calling_convention="c")
+@(private)
+foreign _ {
+ @(link_name="llvm.x86.sha1msg1")
+ sha1msg1 :: proc(a, b: i32x4) -> i32x4 ---
+ @(link_name="llvm.x86.sha1msg2")
+ sha1msg2 :: proc(a, b: i32x4) -> i32x4 ---
+ @(link_name="llvm.x86.sha1nexte")
+ sha1nexte :: proc(a, b: i32x4) -> i32x4 ---
+ @(link_name="llvm.x86.sha1rnds4")
+ sha1rnds4 :: proc(a, b: i32x4, #const c: u8) -> i32x4 ---
+ @(link_name="llvm.x86.sha256msg1")
+ sha256msg1 :: proc(a, b: i32x4) -> i32x4 ---
+ @(link_name="llvm.x86.sha256msg2")
+ sha256msg2 :: proc(a, b: i32x4) -> i32x4 ---
+ @(link_name="llvm.x86.sha256rnds2")
+ sha256rnds2 :: proc(a, b, k: i32x4) -> i32x4 ---
+} \ No newline at end of file