Second Extended Filesystem (ext2) and other improvements (#33)
[lunaix-os.git] / lunaix-os / arch / x86 / hal / rngx86.c
index 0d48d440624bd4cc8ba6a5529ea9e86a08253b5e..c4441961c9ed83622d65fec0b679ec6d9b49c0c1 100644 (file)
@@ -8,22 +8,24 @@ rng_fill(void* data, size_t len)
 {
 #ifdef CONFIG_ARCH_X86_64
     asm volatile("1:\n"
+                 "subq   $8, %1\n"
                  "rdrand %%rax\n"
-                 "movq   %%rax, (%0)\n"
+                 "movq   %%rax, (%0, %1, 1)\n"
                  "addq   $8, %%rax\n"
-                 "subq   $8, %1\n"
+                 "testq  %1, %1\n"
                  "jnz    1b" 
                  ::
                  "r"((ptr_t)data),
                  "r"((len & ~0x7))
                  : 
-                 "%eax");
+                 "rax");
 #else
     asm volatile("1:\n"
+                 "subl $4, %1\n"
                  "rdrand %%eax\n"
-                 "movl %%eax, (%0)\n"
+                 "movl %%eax, (%0, %1, 1)\n"
                  "addl $4, %%eax\n"
-                 "subl $4, %1\n"
+                 "testl  %1, %1\n"
                  "jnz 1b" 
                  ::
                  "r"((ptr_t)data),