diff a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp --- a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp +++ b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp @@ -1922,10 +1922,16 @@ // if [src->klass() != dst->klass()] then return -1 __ load_klass(t1, dst); __ bne(t1, scratch_src_klass, L_failed); + // Check for flat inline type array -> return -1 + __ test_flat_array_oop(src, t1, L_failed); + + // Check for null-free (non-flat) inline type array -> handle as object array + __ test_null_free_array_oop(src, t1, L_objArray); + // if src->is_Array() isn't null then return -1 // i.e. (lh >= 0) __ bgez(lh, L_failed); // At this point, it is known to be a typeArray (array_tag 0x3). @@ -5998,11 +6004,11 @@ if (multi_block) { int64_t block_bytes = 16 * 4; __ addi(buf, buf, block_bytes); - __ bge(limit, buf, L_sha1_loop, true); + __ bge(limit, buf, L_sha1_loop, /* is_far */ true); } // store back the state. __ zext(a, a, 32); __ slli(b, b, 32);