@@ -34,7 +34,7 @@ adler32_rvv:
3434 slli t2, a0 , 48
3535 srli t2, t2, 48 // t2: A = adler32 & 0xffff;
3636 srliw t3, a0 , 16 // t3: B = adler32 >> 16 ;
37- beqz a2 , 4f
37+ beqz a2 , 3f
3838
3939 vsetvli t0, a2 , e64, m8, ta, ma
4040 vmv.v.i v8, 0
@@ -69,6 +69,7 @@ unroll_loop_4x:
6969 vsub.vx v12, v12, t1 // len-vl, len-vl-1 , len-vl-2
7070 vadd.vv v8, v8, v28
7171 vwmaccu.vv v16, v12, v28
72+ sub a2 , a2 , a4
7273 vzext.vf4 v4, v2
7374 vzext.vf4 v28, v3
7475 vsub.vx v12, v12, t1
@@ -77,25 +78,24 @@ unroll_loop_4x:
7778 vsub.vx v12, v12, t1
7879 vadd.vv v8, v8, v28
7980 vwmaccu.vv v16, v12, v28
80- sub a2 , a2 , a4
8181 bge a2 , t0, unroll_loop_4x
8282
83831 :
84- beqz a2 , 3f
84+ beqz a2 , 2f
8585single:
8686 vsetvli t1, a2 , e8, m1, ta, ma
8787 vle8.v v0, (a1 )
8888 vsetvli zero, zero, e32, m4, tu, ma
8989 vzext.vf4 v4, v0
90- vid.v v12 // 0 , 1 , 2 , .. vl-1
90+ vid.v v12 // 0 , 1 , 2 , .. vl-1
9191 vadd.vv v8, v8, v4
92- vrsub.vx v12, v12, a2 // len, len-1 , len-2
93- vwmaccu.vv v16, v12, v4 // v16: B += weight * next
94- add a1 , a1 , t1
92+ vrsub.vx v12, v12, a2 // len, len-1 , len-2
93+ vwmaccu.vv v16, v12, v4 // v16: B += weight * next
9594 sub a2 , a2 , t1
95+ add a1 , a1 , t1
9696 bnez a2 , single
9797
98- 3 :
98+ 2 :
9999 vsetvli zero, t6, e32, m4, tu, ma
100100 vwredsumu.vs v24, v8, v24
101101 mul a7 , t6, t2 // B += A(init) * len
@@ -106,7 +106,7 @@ single:
106106 vmv.x.s t2, v24 // A = t2
107107 add t3, t4, t3
108108
109- 4 :
109+ 3 :
110110 li t0, 65521
111111 remu t2, t2, t0 // A = A % ADLER_MOD
112112 remu t3, t3, t0 // B = B % ADLER_MOD
0 commit comments