diff --git a/src/crt0/src/lib.rs b/src/crt0/src/lib.rs
index ee596cadc557d5b49104837781b0382f2658755f..69e0ce481a399c6fbf97513c5a73ed764ba9aabc 100644
--- a/src/crt0/src/lib.rs
+++ b/src/crt0/src/lib.rs
@@ -5,6 +5,33 @@
 
 use core::arch::global_asm;
 
+#[cfg(target_arch = "aarch64")]
+global_asm!("
+    .globl _start
+_start:
+    mov x0, sp
+    bl relibc_start
+");
+
+#[cfg(target_arch = "x86")]
+global_asm!("
+    .globl _start
+    .type _start, @function
+_start:
+    sub esp, 8
+
+    mov DWORD PTR [esp], 0x00001F80
+    # ldmxcsr [esp]
+    mov WORD PTR [esp], 0x031F
+    fldcw [esp]
+
+    add esp, 8
+
+    push esp
+    call relibc_start
+    .size _start, . - _start
+");
+
 #[cfg(target_arch = "x86_64")]
 global_asm!("
     .globl _start
@@ -25,13 +52,6 @@ _start:
     call relibc_start
     .size _start, . - _start
 ");
-#[cfg(target_arch = "aarch64")]
-global_asm!("
-    .globl _start
-_start:
-    mov x0, sp
-    bl relibc_start
-");
 
 #[linkage = "weak"]
 #[no_mangle]