diff --git a/internal/pause/pause_loong64.s b/internal/pause/pause_loong64.s index e800a4b..27d842d 100644 --- a/internal/pause/pause_loong64.s +++ b/internal/pause/pause_loong64.s @@ -13,9 +13,9 @@ TEXT ·pause1(SB), NOSPLIT|NOFRAME, $0-0 // func pauseN(cycles int) TEXT ·pauseN(SB), NOSPLIT|NOFRAME, $0-8 - MOVV cycles+0(FP), R0 + MOVV cycles+0(FP), R4 loop: OR R0, R0, R0 - ADDV $-1, R0, R0 - BNE R0, loop + ADDV $-1, R4, R4 + BNE R4, loop RET diff --git a/internal/pause/pause_riscv64.s b/internal/pause/pause_riscv64.s index 1011f8a..d0440a1 100644 --- a/internal/pause/pause_riscv64.s +++ b/internal/pause/pause_riscv64.s @@ -6,16 +6,18 @@ #include "textflag.h" +#define PAUSE WORD $0x0100000F // Zihintpause + // func pause1() TEXT ·pause1(SB), NOSPLIT|NOFRAME, $0-0 - FENCE + PAUSE RET // func pauseN(cycles int) TEXT ·pauseN(SB), NOSPLIT|NOFRAME, $0-8 MOV cycles+0(FP), X10 loop: - FENCE - ADDI $-1, X10, X10 // X10 = X10 - 1 + PAUSE + ADDI $-1, X10, X10 BNEZ X10, loop RET