aboutsummaryrefslogtreecommitdiff
path: root/core/simd
diff options
context:
space:
mode:
authorYawning Angel <yawning@schwanenlied.me>2024-05-18 17:55:48 +0900
committerYawning Angel <yawning@schwanenlied.me>2024-06-01 22:55:42 +0900
commitf49575f1fbb0009b57d98cdacb90f2fed6b2c075 (patch)
tree211ba611c63cd7619e251e6d4160ab0a45b0cc8b /core/simd
parent72a5e74ef3821315788fbcca746c9ed1b852cf8e (diff)
core/simd/x86: Add the AES-NI intrinsics
Diffstat (limited to 'core/simd')
-rw-r--r--core/simd/x86/aes.odin49
1 files changed, 49 insertions, 0 deletions
diff --git a/core/simd/x86/aes.odin b/core/simd/x86/aes.odin
new file mode 100644
index 000000000..3a32de0d6
--- /dev/null
+++ b/core/simd/x86/aes.odin
@@ -0,0 +1,49 @@
+//+build i386, amd64
+package simd_x86
+
+@(require_results, enable_target_feature = "aes")
+_mm_aesdec :: #force_inline proc "c" (a, b: __m128i) -> __m128i {
+ return aesdec(a, b)
+}
+
+@(require_results, enable_target_feature = "aes")
+_mm_aesdeclast :: #force_inline proc "c" (a, b: __m128i) -> __m128i {
+ return aesdeclast(a, b)
+}
+
+@(require_results, enable_target_feature = "aes")
+_mm_aesenc :: #force_inline proc "c" (a, b: __m128i) -> __m128i {
+ return aesenc(a, b)
+}
+
+@(require_results, enable_target_feature = "aes")
+_mm_aesenclast :: #force_inline proc "c" (a, b: __m128i) -> __m128i {
+ return aesenclast(a, b)
+}
+
+@(require_results, enable_target_feature = "aes")
+_mm_aesimc :: #force_inline proc "c" (a: __m128i) -> __m128i {
+ return aesimc(a)
+}
+
+@(require_results, enable_target_feature = "aes")
+_mm_aeskeygenassist :: #force_inline proc "c" (a: __m128i, $IMM8: u8) -> __m128i {
+ return aeskeygenassist(a, u8(IMM8))
+}
+
+
+@(private, default_calling_convention = "none")
+foreign _ {
+ @(link_name = "llvm.x86.aesni.aesdec")
+ aesdec :: proc(a, b: __m128i) -> __m128i ---
+ @(link_name = "llvm.x86.aesni.aesdeclast")
+ aesdeclast :: proc(a, b: __m128i) -> __m128i ---
+ @(link_name = "llvm.x86.aesni.aesenc")
+ aesenc :: proc(a, b: __m128i) -> __m128i ---
+ @(link_name = "llvm.x86.aesni.aesenclast")
+ aesenclast :: proc(a, b: __m128i) -> __m128i ---
+ @(link_name = "llvm.x86.aesni.aesimc")
+ aesimc :: proc(a: __m128i) -> __m128i ---
+ @(link_name = "llvm.x86.aesni.aeskeygenassist")
+ aeskeygenassist :: proc(a: __m128i, imm8: u8) -> __m128i ---
+}