On May 8, 2020 3:58:17 AM PDT, Uros Bizjak <ubiz...@gmail.com> wrote:
>Current minimum required version of binutils is 2.23,
>which supports RDRAND and RDSEED instruction mnemonics.
>
>Replace the byte-wise specification of RDRAND and
>RDSEED with these proper mnemonics.
>
>Signed-off-by: Uros Bizjak <ubiz...@gmail.com>
>CC: "H. Peter Anvin" <h...@zytor.com>
>CC: Ingo Molnar <mi...@redhat.com>
>CC: Thomas Gleixner <t...@linutronix.de>
>---
> arch/x86/include/asm/archrandom.h | 26 ++++++++------------------
> 1 file changed, 8 insertions(+), 18 deletions(-)
>
>diff --git a/arch/x86/include/asm/archrandom.h
>b/arch/x86/include/asm/archrandom.h
>index 7a4bb1bd4bdb..ebc248e49549 100644
>--- a/arch/x86/include/asm/archrandom.h
>+++ b/arch/x86/include/asm/archrandom.h
>@@ -15,16 +15,6 @@
> 
> #define RDRAND_RETRY_LOOPS    10
> 
>-#define RDRAND_INT    ".byte 0x0f,0xc7,0xf0"
>-#define RDSEED_INT    ".byte 0x0f,0xc7,0xf8"
>-#ifdef CONFIG_X86_64
>-# define RDRAND_LONG  ".byte 0x48,0x0f,0xc7,0xf0"
>-# define RDSEED_LONG  ".byte 0x48,0x0f,0xc7,0xf8"
>-#else
>-# define RDRAND_LONG  RDRAND_INT
>-# define RDSEED_LONG  RDSEED_INT
>-#endif
>-
> /* Unconditional execution of RDRAND and RDSEED */
> 
> static inline bool __must_check rdrand_long(unsigned long *v)
>@@ -32,9 +22,9 @@ static inline bool __must_check rdrand_long(unsigned
>long *v)
>       bool ok;
>       unsigned int retry = RDRAND_RETRY_LOOPS;
>       do {
>-              asm volatile(RDRAND_LONG
>+              asm volatile("rdrand %[out]"
>                            CC_SET(c)
>-                           : CC_OUT(c) (ok), "=a" (*v));
>+                           : CC_OUT(c) (ok), [out] "=r" (*v));
>               if (ok)
>                       return true;
>       } while (--retry);
>@@ -46,9 +36,9 @@ static inline bool __must_check rdrand_int(unsigned
>int *v)
>       bool ok;
>       unsigned int retry = RDRAND_RETRY_LOOPS;
>       do {
>-              asm volatile(RDRAND_INT
>+              asm volatile("rdrand %[out]"
>                            CC_SET(c)
>-                           : CC_OUT(c) (ok), "=a" (*v));
>+                           : CC_OUT(c) (ok), [out] "=r" (*v));
>               if (ok)
>                       return true;
>       } while (--retry);
>@@ -58,18 +48,18 @@ static inline bool __must_check rdrand_int(unsigned
>int *v)
> static inline bool __must_check rdseed_long(unsigned long *v)
> {
>       bool ok;
>-      asm volatile(RDSEED_LONG
>+      asm volatile("rdseed %[out]"
>                    CC_SET(c)
>-                   : CC_OUT(c) (ok), "=a" (*v));
>+                   : CC_OUT(c) (ok), [out] "=r" (*v));
>       return ok;
> }
> 
> static inline bool __must_check rdseed_int(unsigned int *v)
> {
>       bool ok;
>-      asm volatile(RDSEED_INT
>+      asm volatile("rdseed %[out]"
>                    CC_SET(c)
>-                   : CC_OUT(c) (ok), "=a" (*v));
>+                   : CC_OUT(c) (ok), [out] "=r" (*v));
>       return ok;
> }
> 

Reviewed-by: H. Peter Anvin (Intel) <h...@zytor.com>
-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.

Reply via email to