Index: third_party/boringssl/win-x86_64/crypto/rand/rdrand-x86_64.asm |
diff --git a/third_party/boringssl/win-x86_64/crypto/rand/rdrand-x86_64.asm b/third_party/boringssl/win-x86_64/crypto/rand/rdrand-x86_64.asm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4c03791b48efed0eda7140d590c3da8faeeb9ec9 |
--- /dev/null |
+++ b/third_party/boringssl/win-x86_64/crypto/rand/rdrand-x86_64.asm |
@@ -0,0 +1,70 @@ |
+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 |