Skip to content

Commit ae39a66

Browse files
author
Hamlin Li
committed
8339992: RISC-V: some minor improvements of base64_vector_decode_round
Reviewed-by: fyang, luhenry
1 parent 471a51a commit ae39a66

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/hotspot/cpu/riscv/stubGenerator_riscv.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5331,7 +5331,7 @@ class StubGenerator: public StubCodeGenerator {
53315331
* NOTE: each field will occupy a single vector register group
53325332
*/
53335333
void base64_vector_decode_round(Register src, Register dst, Register codec,
5334-
Register size, Register stepSrc, Register stepDst, Register failedIdx, Register minusOne,
5334+
Register size, Register stepSrc, Register stepDst, Register failedIdx,
53355335
VectorRegister inputV1, VectorRegister inputV2, VectorRegister inputV3, VectorRegister inputV4,
53365336
VectorRegister idxV1, VectorRegister idxV2, VectorRegister idxV3, VectorRegister idxV4,
53375337
VectorRegister outputV1, VectorRegister outputV2, VectorRegister outputV3,
@@ -5358,8 +5358,11 @@ class StubGenerator: public StubCodeGenerator {
53585358
__ vor_vv(outputV1, outputV1, outputV2);
53595359
__ vmseq_vi(v0, outputV1, -1);
53605360
__ vfirst_m(failedIdx, v0);
5361-
Label NoFailure;
5362-
__ beq(failedIdx, minusOne, NoFailure);
5361+
Label NoFailure, FailureAtIdx0;
5362+
// valid value can only be -1 when < 0
5363+
__ bltz(failedIdx, NoFailure);
5364+
// when the first data (at index 0) fails, no need to process data anymore
5365+
__ beqz(failedIdx, FailureAtIdx0);
53635366
__ vsetvli(x0, failedIdx, Assembler::e8, lmul, Assembler::mu, Assembler::tu);
53645367
__ slli(stepDst, failedIdx, 1);
53655368
__ add(stepDst, failedIdx, stepDst);
@@ -5382,6 +5385,7 @@ class StubGenerator: public StubCodeGenerator {
53825385

53835386
// dst = dst + register_group_len_bytes * 3
53845387
__ add(dst, dst, stepDst);
5388+
__ BIND(FailureAtIdx0);
53855389
}
53865390

53875391
/**
@@ -5501,7 +5505,7 @@ class StubGenerator: public StubCodeGenerator {
55015505
// Assembler::m2
55025506
__ BIND(ProcessM2);
55035507
base64_vector_decode_round(src, dst, codec,
5504-
size, stepSrcM2, stepDst, failedIdx, minusOne,
5508+
size, stepSrcM2, stepDst, failedIdx,
55055509
v2, v4, v6, v8, // inputs
55065510
v10, v12, v14, v16, // indexes
55075511
v18, v20, v22, // outputs
@@ -5521,7 +5525,7 @@ class StubGenerator: public StubCodeGenerator {
55215525
__ srli(size, size, 1);
55225526
__ srli(stepDst, stepDst, 1);
55235527
base64_vector_decode_round(src, dst, codec,
5524-
size, stepSrcM1, stepDst, failedIdx, minusOne,
5528+
size, stepSrcM1, stepDst, failedIdx,
55255529
v1, v2, v3, v4, // inputs
55265530
v5, v6, v7, v8, // indexes
55275531
v9, v10, v11, // outputs

0 commit comments

Comments
 (0)