diff --git a/src/math/big/arith_loong64.s b/src/math/big/arith_loong64.s index 12cfb84eea..a0130efc31 100644 --- a/src/math/big/arith_loong64.s +++ b/src/math/big/arith_loong64.s @@ -15,8 +15,30 @@ TEXT ·addVV(SB),NOSPLIT,$0 TEXT ·subVV(SB),NOSPLIT,$0 JMP ·subVV_g(SB) +// func addVW(z, x []Word, y Word) (c Word) TEXT ·addVW(SB),NOSPLIT,$0 - JMP ·addVW_g(SB) + // input: + // R4: z + // R5: z_len + // R7: x + // R10: y + MOVV z+0(FP), R4 + MOVV z_len+8(FP), R5 + MOVV x+24(FP), R7 + MOVV y+48(FP), R10 + MOVV $0, R6 + SLLV $3, R5 +loop: + BEQ R5, R6, done + MOVV (R6)(R7), R8 + ADDV R8, R10, R9 // x1 + c = z1, if z1 < x1 then z1 overflow + SGTU R8, R9, R10 + MOVV R9, (R6)(R4) + ADDV $8, R6 + JMP loop +done: + MOVV R10, c+56(FP) + RET TEXT ·subVW(SB),NOSPLIT,$0 JMP ·subVW_g(SB)