mirror of
https://github.com/golang/go
synced 2024-10-02 12:18:33 -06:00
runtime: add nanotime for Plan 9
R=paulzhol, rsc, dave, rminnich CC=golang-dev https://golang.org/cl/5327063
This commit is contained in:
parent
f6279b46f8
commit
4a2d30e13b
@ -4,12 +4,6 @@
|
|||||||
|
|
||||||
#include "runtime.h"
|
#include "runtime.h"
|
||||||
|
|
||||||
int64
|
|
||||||
runtime·nanotime(void)
|
|
||||||
{
|
|
||||||
// Won't compile.
|
|
||||||
}
|
|
||||||
|
|
||||||
String
|
String
|
||||||
runtime·signame(int32)
|
runtime·signame(int32)
|
||||||
{
|
{
|
||||||
|
@ -14,15 +14,13 @@ TEXT runtime·open(SB),7,$0
|
|||||||
INT $64
|
INT $64
|
||||||
RET
|
RET
|
||||||
|
|
||||||
// TODO(ality): remove use of deprecated system calls
|
TEXT runtime·pread(SB),7,$0
|
||||||
|
MOVL $50, AX
|
||||||
TEXT runtime·read(SB),7,$0
|
|
||||||
MOVL $15, AX
|
|
||||||
INT $64
|
INT $64
|
||||||
RET
|
RET
|
||||||
|
|
||||||
TEXT runtime·write(SB),7,$0
|
TEXT runtime·pwrite(SB),7,$0
|
||||||
MOVL $20, AX
|
MOVL $51, AX
|
||||||
INT $64
|
INT $64
|
||||||
RET
|
RET
|
||||||
|
|
||||||
@ -90,9 +88,9 @@ TEXT runtime·rfork(SB),7,$0
|
|||||||
MOVL 0(BX), BX
|
MOVL 0(BX), BX
|
||||||
|
|
||||||
// more paranoia; check that stack splitting code works
|
// more paranoia; check that stack splitting code works
|
||||||
PUSHAL
|
PUSHL SI
|
||||||
CALL runtime·emptyfunc(SB)
|
CALL runtime·emptyfunc(SB)
|
||||||
POPAL
|
POPL SI
|
||||||
|
|
||||||
CALL SI // fn()
|
CALL SI // fn()
|
||||||
CALL runtime·exit(SB)
|
CALL runtime·exit(SB)
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
// Plan 9-specific system calls
|
// Plan 9-specific system calls
|
||||||
int32 runtime·open(uint8 *file, int32 mode);
|
int32 runtime·open(uint8 *file, int32 mode);
|
||||||
|
int32 runtime·pread(int32 fd, void *buf, int32 nbytes, int64 offset);
|
||||||
|
int32 runtime·pwrite(int32 fd, void *buf, int32 nbytes, int64 offset);
|
||||||
int32 runtime·read(int32 fd, void *buf, int32 nbytes);
|
int32 runtime·read(int32 fd, void *buf, int32 nbytes);
|
||||||
int32 runtime·close(int32 fd);
|
int32 runtime·close(int32 fd);
|
||||||
void runtime·exits(int8* msg);
|
void runtime·exits(int8* msg);
|
||||||
@ -18,7 +20,12 @@ enum
|
|||||||
{
|
{
|
||||||
OREAD = 0,
|
OREAD = 0,
|
||||||
OWRITE = 1,
|
OWRITE = 1,
|
||||||
ORDWR = 2
|
ORDWR = 2,
|
||||||
|
OEXEC = 3,
|
||||||
|
OTRUNC = 16,
|
||||||
|
OCEXEC = 32,
|
||||||
|
ORCLOSE = 64,
|
||||||
|
OEXCL = 0x1000
|
||||||
};
|
};
|
||||||
|
|
||||||
/* rfork */
|
/* rfork */
|
||||||
|
@ -69,6 +69,34 @@ runtime·usleep(uint32 µs)
|
|||||||
runtime·sleep(ms);
|
runtime·sleep(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64
|
||||||
|
runtime·nanotime(void)
|
||||||
|
{
|
||||||
|
static int32 fd = -1;
|
||||||
|
byte b[8];
|
||||||
|
uint32 hi, lo;
|
||||||
|
|
||||||
|
// 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((byte*)"/dev/bintime", OREAD|OCEXEC)) < 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;
|
||||||
|
}
|
||||||
|
|
||||||
extern Tos *_tos;
|
extern Tos *_tos;
|
||||||
void
|
void
|
||||||
runtime·exit(int32)
|
runtime·exit(int32)
|
||||||
@ -183,3 +211,15 @@ void
|
|||||||
runtime·sigpanic(void)
|
runtime·sigpanic(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32
|
||||||
|
runtime·read(int32 fd, void *buf, int32 nbytes)
|
||||||
|
{
|
||||||
|
return runtime·pread(fd, buf, nbytes, -1LL);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32
|
||||||
|
runtime·write(int32 fd, void *buf, int32 nbytes)
|
||||||
|
{
|
||||||
|
return runtime·pwrite(fd, buf, nbytes, -1LL);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user