mirror of
https://github.com/golang/go
synced 2024-11-19 16:24:45 -07:00
runtime: use the nsec system call instead of /dev/bintime on Plan 9
LGTM=0intro R=0intro CC=ality, dave, golang-codereviews, jas, mischief, rsc https://golang.org/cl/104570043
This commit is contained in:
parent
0a2083edd7
commit
a84e3ad198
@ -150,29 +150,13 @@ runtime·usleep(uint32 µs)
|
||||
int64
|
||||
runtime·nanotime(void)
|
||||
{
|
||||
static int32 fd = -1;
|
||||
byte b[8];
|
||||
uint32 hi, lo;
|
||||
int64 ns, scratch;
|
||||
|
||||
// As long as all goroutines share the same file
|
||||
// descriptor table we can get away with using
|
||||
// just a static fd. Without a lock the file can
|
||||
// be opened twice but that's okay.
|
||||
//
|
||||
// Using /dev/bintime gives us a latency on the
|
||||
// order of ten microseconds between two calls.
|
||||
//
|
||||
// The naïve implementation (without the cached
|
||||
// file descriptor) is roughly four times slower
|
||||
// in 9vx on a 2.16 GHz Intel Core 2 Duo.
|
||||
|
||||
if(fd < 0 && (fd = runtime·open("/dev/bintime", OREAD|OCEXEC, 0)) < 0)
|
||||
return 0;
|
||||
if(runtime·pread(fd, b, sizeof b, 0) != sizeof b)
|
||||
return 0;
|
||||
hi = b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3];
|
||||
lo = b[4]<<24 | b[5]<<16 | b[6]<<8 | b[7];
|
||||
return (int64)hi<<32 | (int64)lo;
|
||||
ns = runtime·nsec(&scratch);
|
||||
// TODO(aram): remove hack after I fix _nsec in the pc64 kernel.
|
||||
if(ns == 0)
|
||||
return scratch;
|
||||
return ns;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -15,6 +15,7 @@ int32 runtime·plan9_tsemacquire(uint32 *addr, int32 ms);
|
||||
int32 runtime·plan9_semrelease(uint32 *addr, int32 count);
|
||||
int32 runtime·notify(void (*fn)(void*, int8*));
|
||||
int32 runtime·noted(int32);
|
||||
int64 runtime·nsec(int64*);
|
||||
void runtime·sigtramp(void*, int8*);
|
||||
void runtime·sigpanic(void);
|
||||
void runtime·goexitsall(int8*);
|
||||
|
@ -64,6 +64,16 @@ TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
|
||||
INT $64
|
||||
RET
|
||||
|
||||
TEXT runtime·nsec(SB),NOSPLIT,$0
|
||||
MOVL $53, AX
|
||||
INT $64
|
||||
CMPL AX, $-1
|
||||
JNE 4(PC)
|
||||
MOVL a+0(FP), CX
|
||||
MOVL AX, 0(CX)
|
||||
MOVL AX, 4(CX)
|
||||
RET
|
||||
|
||||
TEXT runtime·notify(SB),NOSPLIT,$0
|
||||
MOVL $28, AX
|
||||
INT $64
|
||||
|
@ -77,6 +77,11 @@ TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
|
||||
SYSCALL
|
||||
RET
|
||||
|
||||
TEXT runtime·nsec(SB),NOSPLIT,$0
|
||||
MOVQ $53, BP
|
||||
SYSCALL
|
||||
RET
|
||||
|
||||
TEXT runtime·notify(SB),NOSPLIT,$0
|
||||
MOVQ $28, BP
|
||||
SYSCALL
|
||||
|
Loading…
Reference in New Issue
Block a user