X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/aaf296c8b4ac5515bc09fe7ec3c98f5e5f311e12..0923a413958b0e778a3f059c76355ab58e5be414:/rand/rand.c?ds=sidebyside diff --git a/rand/rand.c b/rand/rand.c index 29b180d8..f9f16d5d 100644 --- a/rand/rand.c +++ b/rand/rand.c @@ -165,17 +165,13 @@ static int trivial_quick(rand_pool *r) { return (-1); } static int rdrand_quick(rand_pool *r) { unsigned long rr; - unsigned char w; - int i; - - for (i = 0; i < 16; i++) { - __asm__ ("rdrand %0; setc %1" : "=r" (rr), "=g" (w) : : "cc"); - if (w) { - rand_add(r, &rr, sizeof(rr), 8*sizeof(rr)); - return (0); - } - } - return (-1); + int i = 16; + + __asm__ ("0: rdrand %0; jc 9f; dec %1; jnz 0b; 9:" + : "=r" (rr), "=r" (i) : "1" (i) : "cc"); + if (!i) return (-1); + rand_add(r, &rr, sizeof(rr), 8*sizeof(rr)); + return (0); } #endif