summaryrefslogtreecommitdiff
path: root/sys/src/9/xen/l.s
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2016-12-14 20:02:07 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2016-12-14 20:02:07 +0100
commit052abe1cc8dd6403f4983b1b587f14d3eed1fe8c (patch)
tree9131a31ef4a6f6f72602a3cfa947ec8e2d996e6a /sys/src/9/xen/l.s
parent6cbc226351d6c47ace019f6d62e7070deb7b4b5a (diff)
xen: fix build by adding missing rdrandbuf() function
Diffstat (limited to 'sys/src/9/xen/l.s')
-rw-r--r--sys/src/9/xen/l.s32
1 files changed, 32 insertions, 0 deletions
diff --git a/sys/src/9/xen/l.s b/sys/src/9/xen/l.s
index f50fd5842..466b84d8c 100644
--- a/sys/src/9/xen/l.s
+++ b/sys/src/9/xen/l.s
@@ -296,6 +296,38 @@ TEXT mul64fract(SB), $0
ADCL BX, 4(CX) /* r2 += carry */
RET
+#define RDRANDAX BYTE $0x0f; BYTE $0xc7; BYTE $0xf0
+
+TEXT rdrand32(SB), $-4
+_rloop32:
+ RDRANDAX
+ JCC _rloop32
+ RET
+
+TEXT rdrandbuf(SB), $0
+ MOVL buf+0(FP), DI
+ MOVL cnt+4(FP), CX
+ CLD
+ MOVL CX, DX
+ SHRL $2, CX
+ CMPL CX, $0
+ JE _rndleft
+_rnddwords:
+ CALL rdrand32(SB)
+ STOSL
+ LOOP _rnddwords
+_rndleft:
+ MOVL DX, CX
+ ANDL $3, CX
+ CMPL CX, $0
+ JE _rnddone
+_rndbytes:
+ CALL rdrand32(SB)
+ STOSB
+ LOOP _rndbytes
+_rnddone:
+ RET
+
/*
* label consists of a stack pointer and a PC
*/