diff options
| author | Russ Cox <rsc@golang.org> | 2011-11-03 17:35:28 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2011-11-03 17:35:28 -0400 |
| commit | f437331f80b05944e8f15b2f81429729101a9455 (patch) | |
| tree | 213071dde50770d53d80083bf6d0b07937e70bf5 /src/pkg/runtime/linux | |
| parent | 31452a36189e48ad178a85299e2b189701d8f358 (diff) | |
| download | go-f437331f80b05944e8f15b2f81429729101a9455.tar.xz | |
time: faster Nanoseconds call
runtime knows how to get the time of day
without allocating memory.
R=golang-dev, dsymonds, dave, hectorchu, r, cw
CC=golang-dev
https://golang.org/cl/5297078
Diffstat (limited to 'src/pkg/runtime/linux')
| -rw-r--r-- | src/pkg/runtime/linux/386/sys.s | 25 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/amd64/sys.s | 16 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/arm/sys.s | 6 |
3 files changed, 27 insertions, 20 deletions
diff --git a/src/pkg/runtime/linux/386/sys.s b/src/pkg/runtime/linux/386/sys.s index 1b4f649bd7..97d9d5ed9c 100644 --- a/src/pkg/runtime/linux/386/sys.s +++ b/src/pkg/runtime/linux/386/sys.s @@ -95,21 +95,28 @@ TEXT runtime·mincore(SB),7,$0-24 CALL *runtime·_vdso(SB) RET -TEXT runtime·gettime(SB), 7, $32 +// int64 nanotime(void) so really +// void nanotime(int64 *nsec) +TEXT runtime·nanotime(SB), 7, $32 MOVL $78, AX // syscall - gettimeofday LEAL 8(SP), BX MOVL $0, CX MOVL $0, DX CALL *runtime·_vdso(SB) - - MOVL 8(SP), BX // sec - MOVL sec+0(FP), DI - MOVL BX, (DI) - MOVL $0, 4(DI) // zero extend 32 -> 64 bits - + MOVL 8(SP), AX // sec MOVL 12(SP), BX // usec - MOVL usec+4(FP), DI - MOVL BX, (DI) + + // sec is in AX, usec in BX + // convert to DX:AX nsec + MOVL $1000000000, CX + MULL CX + IMULL $1000, BX + ADDL BX, AX + ADCL $0, DX + + MOVL ret+0(FP), DI + MOVL AX, 0(DI) + MOVL DX, 4(DI) RET TEXT runtime·rt_sigaction(SB),7,$0 diff --git a/src/pkg/runtime/linux/amd64/sys.s b/src/pkg/runtime/linux/amd64/sys.s index 3174af2cb0..227c8e62cc 100644 --- a/src/pkg/runtime/linux/amd64/sys.s +++ b/src/pkg/runtime/linux/amd64/sys.s @@ -93,19 +93,19 @@ TEXT runtime·mincore(SB),7,$0-24 SYSCALL RET -TEXT runtime·gettime(SB), 7, $32 +TEXT runtime·nanotime(SB), 7, $32 LEAQ 8(SP), DI MOVQ $0, SI MOVQ $0xffffffffff600000, AX CALL AX + MOVQ 8(SP), AX // sec + MOVL 16(SP), DX // usec - MOVQ 8(SP), BX // sec - MOVQ sec+0(FP), DI - MOVQ BX, (DI) - - MOVL 16(SP), BX // usec - MOVQ usec+8(FP), DI - MOVL BX, (DI) + // sec is in AX, usec in DX + // return nsec in AX + IMULQ $1000000000, AX + IMULQ $1000, DX + ADDQ DX, AX RET TEXT runtime·rt_sigaction(SB),7,$0-32 diff --git a/src/pkg/runtime/linux/arm/sys.s b/src/pkg/runtime/linux/arm/sys.s index 764e779fdd..45da858abd 100644 --- a/src/pkg/runtime/linux/arm/sys.s +++ b/src/pkg/runtime/linux/arm/sys.s @@ -127,14 +127,14 @@ TEXT runtime·mincore(SB),7,$0 SWI $0 RET -TEXT runtime·gettime(SB),7,$32 +// int64 nanotime(void) so really +// void nanotime(int64 *nsec) +TEXT runtime·nanotime(SB),7,$32 /* dummy version - return 0,0 */ MOVW $0, R1 MOVW 0(FP), R0 MOVW R1, 0(R0) MOVW R1, 4(R0) - MOVW 4(FP), R0 - MOVW R1, 0(R0) /* attempt at real version - seg faults |
