]> 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 dbfbf248eb4d8fd6927454e1a4038ce5dbe3aeff..af246e70a2623624a54f01757e3b12d5177d8e94 100644 (file)
@@ -163,62 +163,52 @@ 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
 
 /*
  * Test-And-Set
  */
 TEXT tas(SB), $0
+TEXT _tas(SB), $0
        MOVL    $0xDEADDEAD, AX
        MOVL    lock+0(FP), BX
        XCHGL   AX, (BX)                        /* lock->key */
        RET
 
-TEXT _xinc(SB), $0                             /* void _xinc(long*); */
-       MOVL    l+0(FP), AX
-       LOCK;   INCL 0(AX)
-       RET
-
-TEXT _xdec(SB), $0                             /* long _xdec(long*); */
-       MOVL    l+0(FP), BX
-       XORL    AX, AX
-       LOCK;   DECL 0(BX)
-       JLT     _xdeclt
-       JGT     _xdecgt
-       RET
-_xdecgt:
-       INCL    AX
-       RET
-_xdeclt:
-       DECL    AX
-       RET
-
 TEXT   getstack(SB), $0
        MOVL    SP, AX
        RET
@@ -314,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
  */