From d61c0c9283fb1cc3195f113428296976f1fc03ce Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 3 Feb 2026 17:39:40 +0800 Subject: [PATCH] runtime: simplify the implementation of walltime and nanotime1 on loong64 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Michael Knyszek Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: sophie zhao Reviewed-by: Meidan Li --- src/runtime/sys_linux_loong64.s | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/runtime/sys_linux_loong64.s b/src/runtime/sys_linux_loong64.s index 41e12c30f8..0abbda4935 100644 --- a/src/runtime/sys_linux_loong64.s +++ b/src/runtime/sys_linux_loong64.s @@ -205,7 +205,6 @@ TEXT runtime·mincore(SB),NOSPLIT,$0 // func walltime() (sec int64, nsec int32) TEXT runtime·walltime(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(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), R3 // 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(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(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), R3 // 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 -- 2.52.0