git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add generic kremap for kernel remapping
[lunaix-os.git]
/
lunaix-os
/
arch
/
x86
/
hal
/
rngx86.c
diff --git
a/lunaix-os/arch/x86/hal/rngx86.c
b/lunaix-os/arch/x86/hal/rngx86.c
index 0d48d440624bd4cc8ba6a5529ea9e86a08253b5e..c4441961c9ed83622d65fec0b679ec6d9b49c0c1 100644
(file)
--- a/
lunaix-os/arch/x86/hal/rngx86.c
+++ b/
lunaix-os/arch/x86/hal/rngx86.c
@@
-8,22
+8,24
@@
rng_fill(void* data, size_t len)
{
#ifdef CONFIG_ARCH_X86_64
asm volatile("1:\n"
{
#ifdef CONFIG_ARCH_X86_64
asm volatile("1:\n"
+ "subq $8, %1\n"
"rdrand %%rax\n"
"rdrand %%rax\n"
- "movq %%rax, (%0)\n"
+ "movq %%rax, (%0
, %1, 1
)\n"
"addq $8, %%rax\n"
"addq $8, %%rax\n"
- "
subq $8
, %1\n"
+ "
testq %1
, %1\n"
"jnz 1b"
::
"r"((ptr_t)data),
"r"((len & ~0x7))
:
"jnz 1b"
::
"r"((ptr_t)data),
"r"((len & ~0x7))
:
- "
%e
ax");
+ "
r
ax");
#else
asm volatile("1:\n"
#else
asm volatile("1:\n"
+ "subl $4, %1\n"
"rdrand %%eax\n"
"rdrand %%eax\n"
- "movl %%eax, (%0)\n"
+ "movl %%eax, (%0
, %1, 1
)\n"
"addl $4, %%eax\n"
"addl $4, %%eax\n"
- "
subl $4
, %1\n"
+ "
testl %1
, %1\n"
"jnz 1b"
::
"r"((ptr_t)data),
"jnz 1b"
::
"r"((ptr_t)data),