Jelajahi Sumber

Add fxsr.odin

gingerBill 3 tahun lalu
induk
melakukan
846f8377b2
2 mengubah file dengan 33 tambahan dan 2 penghapusan
  1. 0 2
      core/simd/x86/adx.odin
  2. 33 0
      core/simd/x86/fxsr.odin

+ 0 - 2
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

+ 33 - 0
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) ---
+}