mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 16:18:52 +00:00
Add fxsr.odin
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
//+build i386, amd64
|
//+build i386, amd64
|
||||||
package simd_x86
|
package simd_x86
|
||||||
|
|
||||||
import "core:intrinsics"
|
|
||||||
|
|
||||||
_addcarry_u32 :: #force_inline proc "c" (c_in: u8, a: u32, b: u32, out: ^u32) -> u8 {
|
_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)
|
x, y := llvm_addcarry_u32(c_in, a, b)
|
||||||
out^ = y
|
out^ = y
|
||||||
|
|||||||
@@ -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) ---
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user