diff --git a/core/simd/x86/adx.odin b/core/simd/x86/adx.odin index 4de4324a2..13acf923d 100644 --- a/core/simd/x86/adx.odin +++ b/core/simd/x86/adx.odin @@ -1,8 +1,6 @@ //+build i386, amd64 package simd_x86 -import "core:intrinsics" - _addcarry_u32 :: #force_inline proc "c" (c_in: u8, a: u32, b: u32, out: ^u32) -> u8 { x, y := llvm_addcarry_u32(c_in, a, b) out^ = y diff --git a/core/simd/x86/fxsr.odin b/core/simd/x86/fxsr.odin new file mode 100644 index 000000000..24269391e --- /dev/null +++ b/core/simd/x86/fxsr.odin @@ -0,0 +1,33 @@ +//+build i386, amd64 +package simd_x86 + +_fxsave :: #force_inline proc "c" (mem_addr: rawptr) { + fxsave(mem_addr) +} +_fxrstor :: #force_inline proc "c" (mem_addr: rawptr) { + fxrstor(mem_addr) +} + +when ODIN_ARCH == .amd64 { + _fxsave64 :: #force_inline proc "c" (mem_addr: rawptr) { + fxsave64(mem_addr) + } + _fxrstor64 :: #force_inline proc "c" (mem_addr: rawptr) { + fxrstor64(mem_addr) + } +} + +@(default_calling_convention="c") +@(private) +foreign _ { + @(link_name="llvm.x86.fxsave") + fxsave :: proc(p: rawptr) --- + @(link_name="llvm.x86.fxrstor") + fxrstor :: proc(p: rawptr) --- + + // amd64 only + @(link_name="llvm.x86.fxsave64") + fxsave64 :: proc(p: rawptr) --- + @(link_name="llvm.x86.fxrstor64") + fxrstor64 :: proc(p: rawptr) --- +} \ No newline at end of file