X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/dc2adc883524babe0ebec62d8f85372ef18bfd7a..6c0946ef1f1fa9b75b8c6d65ea0554ff4e1ec4eb:/rand/rand-x86ish.S diff --git a/rand/rand-x86ish.S b/rand/rand-x86ish.S index 70907feb..b91a9373 100644 --- a/rand/rand-x86ish.S +++ b/rand/rand-x86ish.S @@ -74,6 +74,34 @@ FUNC(rand_quick_x86ish_rdrand) // Failed. mov eax, -1 jmp 9f +ENDFUNC + +FUNC(rand_quick_x86ish_rdseed) + // Enter with a pointer to the random context in the first argument. + // Return zero on success, or -1 on error. + +#if CPUFAM_X86 + mov edx, [SP + 4] + stalloc 28 +#endif +#if CPUFAM_AMD64 && ABI_SYSV + stalloc 8 +#endif +#if CPUFAM_AMD64 && ABI_WIN + stalloc 40 +#endif + endprologue + + // Try to fetch a random number. + mov COUNT, 16 +0: rdseed AX + jc 1f + dec COUNT + jnz 0b + + // Failed. + mov eax, -1 + jmp 9f // Success. 1: