]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: simplify the implementation of walltime and nanotime1 on loong64
authorGuoqi Chen <chenguoqi@loongson.cn>
Tue, 3 Feb 2026 09:39:40 +0000 (17:39 +0800)
committerabner chenc <chenguoqi@loongson.cn>
Sat, 7 Feb 2026 00:54:36 +0000 (16:54 -0800)
goos: linux
goarch: loong64
pkg: time
cpu: Loongson-3A6000 @ 2500.00MHz
              |   old.txt   |   new.txt                          |
              |   sec/op    |   sec/op      vs base              |
Now             34.82n ± 0%   34.24n ± 0%  -1.67% (p=0.000 n=10)
NowUnixNano     35.44n ± 0%   35.82n ± 0%  +1.07% (p=0.000 n=10)
NowUnixMilli    36.05n ± 0%   34.24n ± 0%  -5.02% (p=0.000 n=10)
NowUnixMicro    36.83n ± 0%   34.83n ± 0%  -5.43% (p=0.000 n=10)
geomean         35.78n        34.78n       -2.80%

Change-Id: I6ab143b61dbf94c91df2e9dfb80ec9b908219825
Reviewed-on: https://go-review.googlesource.com/c/go/+/741380
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: sophie zhao <zhaoxiaolin@loongson.cn>
Reviewed-by: Meidan Li <limeidan@loongson.cn>
src/runtime/sys_linux_loong64.s

index 41e12c30f87cf0aa86f73b4923fb06dda0d83d20..0abbda4935096ddb9a3d0fe92320244f4ed3f367 100644 (file)
@@ -205,7 +205,6 @@ TEXT runtime·mincore<ABIInternal>(SB),NOSPLIT,$0
 // func walltime() (sec int64, nsec int32)
 TEXT runtime·walltime<ABIInternal>(SB),NOSPLIT,$24
        MOVV    R3, R23 // R23 is unchanged by C code
-       MOVV    R3, R25
 
        MOVV    g_m(g), R24     // R24 = m
 
@@ -222,16 +221,14 @@ TEXT runtime·walltime<ABIInternal>(SB),NOSPLIT,$24
        MOVV    R11, m_vdsoSP(R24)
 
        MOVV    m_curg(R24), R4
-       MOVV    g, R5
-       BNE     R4, R5, noswitch
+       BNE     R4, g, noswitch
 
        MOVV    m_g0(R24), R4
-       MOVV    (g_sched+gobuf_sp)(R4), R25     // Set SP to g0 stack
+       MOVV    (g_sched+gobuf_sp)(R4), R     // Set SP to g0 stack
 
 noswitch:
-       SUBV    $16, R25
-       AND     $~15, R25       // Align for C code
-       MOVV    R25, R3
+       SUBV    $16, R3
+       AND     $~15, R3        // Align for C code
 
        MOVW    $CLOCK_REALTIME, R4
        MOVV    $0(R3), R5
@@ -283,7 +280,6 @@ fallback:
 // func nanotime1() int64
 TEXT runtime·nanotime1<ABIInternal>(SB),NOSPLIT,$24
        MOVV    R3, R23 // R23 is unchanged by C code
-       MOVV    R3, R25
 
        MOVV    g_m(g), R24     // R24 = m
 
@@ -300,16 +296,14 @@ TEXT runtime·nanotime1<ABIInternal>(SB),NOSPLIT,$24
        MOVV    R11, m_vdsoSP(R24)
 
        MOVV    m_curg(R24), R4
-       MOVV    g, R5
-       BNE     R4, R5, noswitch
+       BNE     R4, g, noswitch
 
        MOVV    m_g0(R24), R4
-       MOVV    (g_sched+gobuf_sp)(R4), R25     // Set SP to g0 stack
+       MOVV    (g_sched+gobuf_sp)(R4), R     // Set SP to g0 stack
 
 noswitch:
-       SUBV    $16, R25
-       AND     $~15, R25       // Align for C code
-       MOVV    R25, R3
+       SUBV    $16, R3
+       AND     $~15, R3        // Align for C code
 
        MOVW    $CLOCK_MONOTONIC, R4
        MOVV    $0(R3), R5