From 052abe1cc8dd6403f4983b1b587f14d3eed1fe8c Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Wed, 14 Dec 2016 20:02:07 +0100 Subject: xen: fix build by adding missing rdrandbuf() function --- sys/src/9/xen/fns.h | 1 + sys/src/9/xen/l.s | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) (limited to 'sys/src/9/xen') diff --git a/sys/src/9/xen/fns.h b/sys/src/9/xen/fns.h index 5b39cfddb..88f5f1916 100644 --- a/sys/src/9/xen/fns.h +++ b/sys/src/9/xen/fns.h @@ -102,6 +102,7 @@ int wrmsr(int, vlong); uint xchgl(uint*, uint); uint xchgw(ushort*, uint); uint xchgb(uchar*, uint); +void rdrandbuf(void*, ulong); #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) #define KADDR(a) ((void*)((ulong)(a)|KZERO)) 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 */ -- cgit v1.2.3