core/simd/arm: Initial import

This commit is contained in:
Yawning Angel
2026-03-12 02:44:21 +09:00
parent 004a65e382
commit 48b1f3b830
3 changed files with 41 additions and 0 deletions

34
core/simd/arm/aes.odin Normal file
View File

@@ -0,0 +1,34 @@
#+build arm64,arm32
package simd_arm
@(require_results,enable_target_feature="aes")
vaeseq_u8 :: #force_inline proc "c" (data, key: uint8x16_t) -> uint8x16_t {
return _vaeseq_u8(data, key)
}
@(require_results,enable_target_feature="aes")
vaesdq_u8 :: #force_inline proc "c" (data, key: uint8x16_t) -> uint8x16_t {
return _vaesdq_u8(data, key)
}
@(require_results,enable_target_feature="aes")
vaesmcq_u8 :: #force_inline proc "c" (data: uint8x16_t) -> uint8x16_t {
return _vaesmcq_u8(data)
}
@(require_results,enable_target_feature="aes")
vaesimcq_u8 :: #force_inline proc "c" (data: uint8x16_t) -> uint8x16_t {
return _vaesimcq_u8(data)
}
@(private,default_calling_convention="none")
foreign _ {
@(link_name = "llvm.aarch64.crypto.aese" when ODIN_ARCH == .arm64 else "llvm.arm.neon.aese")
_vaeseq_u8 :: proc(data, key: uint8x16_t) -> uint8x16_t ---
@(link_name = "llvm.aarch64.crypto.aesd" when ODIN_ARCH == .arm64 else "llvm.arm.neon.aesd")
_vaesdq_u8 :: proc(data, key: uint8x16_t) -> uint8x16_t ---
@(link_name = "llvm.aarch64.crypto.aesmc" when ODIN_ARCH == .arm64 else "llvm.arm.neon.aesmc")
_vaesmcq_u8 :: proc(data: uint8x16_t) -> uint8x16_t ---
@(link_name = "llvm.aarch64.crypto.aesimc" when ODIN_ARCH == .arm64 else "llvm.arm.neon.aesimc")
_vaesimcq_u8 :: proc(data: uint8x16_t) -> uint8x16_t ---
}

2
core/simd/arm/doc.odin Normal file
View File

@@ -0,0 +1,2 @@
// `SIMD` intrinsics specific to ARMv8 `arm32` and `arm64` architectures.
package simd_arm

5
core/simd/arm/types.odin Normal file
View File

@@ -0,0 +1,5 @@
#+build arm64,arm32
package simd_arm
uint8x16_t :: #simd[16]u8
uint32x4_t :: #simd[4]u32