]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: implement runtime.usleep for FreeBSD/386 and amd64.
authorShenghou Ma <minux.ma@gmail.com>
Mon, 16 Jan 2012 16:22:34 +0000 (03:22 +1100)
committerJoel Sing <jsing@google.com>
Mon, 16 Jan 2012 16:22:34 +0000 (03:22 +1100)
R=golang-dev, jsing
CC=golang-dev
https://golang.org/cl/5528106

src/pkg/runtime/sys_freebsd_386.s
src/pkg/runtime/sys_freebsd_amd64.s

index 25c28d3f8093a4d2050ed66dcbd690bd34550cee..6e26f4c8b3f29aef16bf31ea7178c7ea8179369c 100644 (file)
@@ -199,8 +199,24 @@ TEXT runtime·sigaltstack(SB),7,$0
        CALL    runtime·notok(SB)
        RET
 
-// TODO: Implement usleep
-TEXT runtime·usleep(SB),7,$0
+TEXT runtime·usleep(SB),7,$20
+       MOVL    $0, DX
+       MOVL    usec+0(FP), AX
+       MOVL    $1000000, CX
+       DIVL    CX
+       MOVL    AX, 12(SP)              // tv_sec
+       MOVL    $1000, AX
+       MULL    DX
+       MOVL    AX, 16(SP)              // tv_nsec
+
+       MOVL    $0, 0(SP)
+       LEAL    12(SP), AX
+       MOVL    AX, 4(SP)               // arg 1 - rqtp
+       MOVL    $0, 8(SP)               // arg 2 - rmtp
+       MOVL    $240, AX                // sys_nanosleep
+       INT     $0x80
+       JAE     2(PC)
+       CALL    runtime·notok(SB)
        RET
 
 /*
index d5bb5f0c16a44bced63a66853510431132f3b0ff..dcd55855a927d1146fdfbb95b5cfb817a7612c26 100644 (file)
@@ -184,8 +184,22 @@ TEXT runtime·sigaltstack(SB),7,$-8
        CALL    runtime·notok(SB)
        RET
 
-// TODO: Implement usleep
-TEXT runtime·usleep(SB),7,$0
+TEXT runtime·usleep(SB),7,$16
+       MOVL    $0, DX
+       MOVL    usec+0(FP), AX
+       MOVL    $1000000, CX
+       DIVL    CX
+       MOVQ    AX, 0(SP)               // tv_sec
+       MOVL    $1000, AX
+       MULL    DX
+       MOVQ    AX, 8(SP)               // tv_nsec
+
+       MOVQ    SP, DI                  // arg 1 - rqtp
+       MOVQ    $0, SI                  // arg 2 - rmtp
+       MOVL    $240, AX                // sys_nanosleep
+       SYSCALL
+       JCC     2(PC)
+       CALL    runtime·notok(SB)
        RET
 
 // set tls base to DI