]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/xen/l.s
usbohci: use 64-bit io base address, disable interrupts before reset, remove resetlck
[plan9front.git] / sys / src / 9 / xen / l.s
index f50fd5842f77bca61a57fdf96f3fac4e5c60779f..af246e70a2623624a54f01757e3b12d5177d8e94 100644 (file)
@@ -163,32 +163,40 @@ TEXT fpinit(SB), $0                               /* enable and init */
        WAIT
        RET
 
-TEXT fpx87save(SB), $0                         /* save state and disable */
+TEXT fpx87save0(SB), $0                                /* save state and disable */
        MOVL    p+0(FP), AX
        FSAVE   0(AX)                           /* no WAIT */
        FPOFF(l2)
        RET
 
-TEXT fpx87restore(SB), $0                              /* enable and restore state */
+TEXT fpx87restore0(SB), $0                             /* enable and restore state */
        FPON
        MOVL    p+0(FP), AX
        FRSTOR  0(AX)
        WAIT
        RET
 
-TEXT fpstatus(SB), $0                          /* get floating point status */
-       FSTSW   AX
+TEXT fpclear(SB), $0                           /* clear pending exceptions */
+       FPON
+       FCLEX                                   /* no WAIT */
+       FPOFF(l3)
        RET
 
-TEXT fpenv(SB), $0                             /* save state without waiting */
+TEXT fpssesave(SB), $0                         /* save state and disable */
        MOVL    p+0(FP), AX
-       FSTENV  0(AX)
+       FXSAVE  0(AX)                           /* no WAIT */
+       FPOFF(l4)
        RET
 
-TEXT fpclear(SB), $0                           /* clear pending exceptions */
+TEXT fpsserestore(SB), $0                      /* enable and restore state */
        FPON
-       FCLEX                                   /* no WAIT */
-       FPOFF(l3)
+       MOVL    p+0(FP), AX
+       FXRSTOR 0(AX)
+       WAIT
+       RET
+
+TEXT ldmxcsr(SB), $0                           /* Load MXCSR */
+       LDMXCSR mxcsr+0(FP)
        RET
 
 /*
@@ -296,6 +304,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
  */