aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2016-10-27 09:22:43 -0400
committerRuss Cox <rsc@golang.org>2016-10-27 17:53:13 +0000
commit5594074dcd09d0bb8c35998e20cddf728893ff00 (patch)
treeb9ecefbc4d8ed561f7ac35e9661c48ff5a99f5c9 /src
parentaff37662d1f70f2bf9e47b4f962e85521e7c18d1 (diff)
downloadgo-5594074dcd09d0bb8c35998e20cddf728893ff00.tar.xz
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 <cherryyz@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/runtime/sys_darwin_386.s2
-rw-r--r--src/runtime/sys_darwin_amd64.s2
-rw-r--r--src/runtime/sys_dragonfly_amd64.s2
-rw-r--r--src/runtime/sys_freebsd_386.s2
-rw-r--r--src/runtime/sys_freebsd_amd64.s2
-rw-r--r--src/runtime/sys_linux_arm64.s10
-rw-r--r--src/runtime/sys_linux_mips64x.s11
7 files changed, 13 insertions, 18 deletions
diff --git a/src/runtime/sys_darwin_386.s b/src/runtime/sys_darwin_386.s
index 9cffe3e424..45658d0ae6 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 8d1b9b11d9..a15ac3e158 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 77fb525aa3..fd960e608a 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 b37abcef95..7f3cd56cad 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 c3912f7101..118febde47 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 3bf2e97972..1b91b4499d 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 031a089214..5a75bb81ae 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