default rel %define XMMWORD %define YMMWORD %define ZMMWORD section .text code align=64 global CRYPTO_rdrand ALIGN 16 CRYPTO_rdrand: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_CRYPTO_rdrand: mov rdi,rcx xor rax,rax DB 0x48,0x0f,0xc7,0xf1 adc rax,rax mov QWORD[rdi],rcx mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret global CRYPTO_rdrand_multiple8_buf ALIGN 16 CRYPTO_rdrand_multiple8_buf: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp $L$SEH_begin_CRYPTO_rdrand_multiple8_buf: mov rdi,rcx mov rsi,rdx test rsi,rsi jz NEAR $L$out mov rdx,8 $L$loop: DB 0x48,0x0f,0xc7,0xf1 jnc NEAR $L$err mov QWORD[rdi],rcx add rdi,rdx sub rsi,rdx jnz NEAR $L$loop $L$out: mov rax,1 mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret $L$err: xor rax,rax mov rdi,QWORD[8+rsp] ;WIN64 epilogue mov rsi,QWORD[16+rsp] DB 0F3h,0C3h ;repret