From 5594074dcd09d0bb8c35998e20cddf728893ff00 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 27 Oct 2016 09:22:43 -0400 Subject: [PATCH] runtime: use clock_gettime(CLOCK_REALTIME) for nanosecond-precision time.now on arm64, mips64x Assembly copied from the clock_gettime(CLOCK_MONOTONIC) call in runtime.nanotime in these files and then modified to use CLOCK_REALTIME. Also comment system call numbers in a few other files. Fixes #11222. Change-Id: Ie132086de7386f865908183aac2713f90fc73e0d Reviewed-on: https://go-review.googlesource.com/32177 Reviewed-by: Cherry Zhang --- src/runtime/sys_darwin_386.s | 2 +- src/runtime/sys_darwin_amd64.s | 2 +- src/runtime/sys_dragonfly_amd64.s | 2 +- src/runtime/sys_freebsd_386.s | 2 +- src/runtime/sys_freebsd_amd64.s | 2 +- src/runtime/sys_linux_arm64.s | 10 ++++------ src/runtime/sys_linux_mips64x.s | 11 ++++------- 7 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/runtime/sys_darwin_386.s b/src/runtime/sys_darwin_386.s index 9cffe3e4242..45658d0ae66 100644 --- a/src/runtime/sys_darwin_386.s +++ b/src/runtime/sys_darwin_386.s @@ -200,7 +200,7 @@ systime: MOVL AX, 4(SP) MOVL $0, 8(SP) // time zone pointer MOVL $0, 12(SP) // required as of Sierra; Issue 16570 - MOVL $116, AX + MOVL $116, AX // SYS_GETTIMEOFDAY INT $0x80 CMPL AX, $0 JNE inreg diff --git a/src/runtime/sys_darwin_amd64.s b/src/runtime/sys_darwin_amd64.s index 8d1b9b11d9e..a15ac3e1587 100644 --- a/src/runtime/sys_darwin_amd64.s +++ b/src/runtime/sys_darwin_amd64.s @@ -158,7 +158,7 @@ systime: MOVQ SP, DI MOVQ $0, SI MOVQ $0, DX // required as of Sierra; Issue 16570 - MOVL $(0x2000000+116), AX + MOVL $(0x2000000+116), AX // gettimeofday SYSCALL CMPQ AX, $0 JNE inreg diff --git a/src/runtime/sys_dragonfly_amd64.s b/src/runtime/sys_dragonfly_amd64.s index 77fb525aa3c..fd960e608a6 100644 --- a/src/runtime/sys_dragonfly_amd64.s +++ b/src/runtime/sys_dragonfly_amd64.s @@ -150,7 +150,7 @@ TEXT runtime·setitimer(SB), NOSPLIT, $-8 // func now() (sec int64, nsec int32) TEXT time·now(SB), NOSPLIT, $32 - MOVL $232, AX + MOVL $232, AX // clock_gettime MOVQ $0, DI // CLOCK_REALTIME LEAQ 8(SP), SI SYSCALL diff --git a/src/runtime/sys_freebsd_386.s b/src/runtime/sys_freebsd_386.s index b37abcef957..7f3cd56cad9 100644 --- a/src/runtime/sys_freebsd_386.s +++ b/src/runtime/sys_freebsd_386.s @@ -161,7 +161,7 @@ TEXT runtime·setitimer(SB), NOSPLIT, $-4 // func now() (sec int64, nsec int32) TEXT time·now(SB), NOSPLIT, $32 - MOVL $232, AX + MOVL $232, AX // clock_gettime LEAL 12(SP), BX MOVL $0, 4(SP) // CLOCK_REALTIME MOVL BX, 8(SP) diff --git a/src/runtime/sys_freebsd_amd64.s b/src/runtime/sys_freebsd_amd64.s index c3912f71011..118febde476 100644 --- a/src/runtime/sys_freebsd_amd64.s +++ b/src/runtime/sys_freebsd_amd64.s @@ -144,7 +144,7 @@ TEXT runtime·setitimer(SB), NOSPLIT, $-8 // func now() (sec int64, nsec int32) TEXT time·now(SB), NOSPLIT, $32 - MOVL $232, AX + MOVL $232, AX // clock_gettime MOVQ $0, DI // CLOCK_REALTIME LEAQ 8(SP), SI SYSCALL diff --git a/src/runtime/sys_linux_arm64.s b/src/runtime/sys_linux_arm64.s index 3bf2e979720..1b91b4499d2 100644 --- a/src/runtime/sys_linux_arm64.s +++ b/src/runtime/sys_linux_arm64.s @@ -184,14 +184,12 @@ TEXT runtime·mincore(SB),NOSPLIT,$-8-28 // func now() (sec int64, nsec int32) TEXT time·now(SB),NOSPLIT,$24-12 - MOVD RSP, R0 - MOVD $0, R1 - MOVD $SYS_gettimeofday, R8 + MOVW $0, R0 // CLOCK_REALTIME + MOVD RSP, R1 + MOVD $SYS_clock_gettime, R8 SVC MOVD 0(RSP), R3 // sec - MOVD 8(RSP), R5 // usec - MOVD $1000, R4 - MUL R4, R5 + MOVD 8(RSP), R5 // nsec MOVD R3, sec+0(FP) MOVW R5, nsec+8(FP) RET diff --git a/src/runtime/sys_linux_mips64x.s b/src/runtime/sys_linux_mips64x.s index 031a0892148..5a75bb81aea 100644 --- a/src/runtime/sys_linux_mips64x.s +++ b/src/runtime/sys_linux_mips64x.s @@ -174,15 +174,12 @@ TEXT runtime·mincore(SB),NOSPLIT,$-8-28 // func now() (sec int64, nsec int32) TEXT time·now(SB),NOSPLIT,$16 - MOVV $0(R29), R4 - MOVV $0, R5 - MOVV $SYS_gettimeofday, R2 + MOVW $0, R4 // CLOCK_REALTIME + MOVV $0(R29), R5 + MOVV $SYS_clock_gettime, R2 SYSCALL MOVV 0(R29), R3 // sec - MOVV 8(R29), R5 // usec - MOVV $1000, R4 - MULVU R4, R5 - MOVV LO, R5 + MOVV 8(R29), R5 // nsec MOVV R3, sec+0(FP) MOVW R5, nsec+8(FP) RET