From bc3bf939e0760daeba75e29a82d2c1e8811651bb Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 29 May 2022 14:56:25 +0100 Subject: [PATCH] Add sha.odin --- core/simd/x86/sha.odin | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 core/simd/x86/sha.odin 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