# HG changeset patch # User zmajo # Date 1493365847 -7200 # Node ID 6ecc7cc676191f52c7a755940ce4aac70e4af0d8 # Parent 6365d86cf7229f218db4ce5023526558034ff052 8179019: Correct range checks for command-line options ArraycopySrcPrefetchDistance and ArraycopyDstPrefetchDistance Summary: Update constraint for the command-line options. Change stubs to use register values instead of immediates. Reviewed-by: kvn diff -r 6365d86cf722 -r 6ecc7cc67619 hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Thu Apr 27 14:15:30 2017 +0000 +++ b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp Fri Apr 28 09:50:47 2017 +0200 @@ -968,10 +968,11 @@ // than prefetch distance. __ set(prefetch_count, O4); __ cmp_and_brx_short(count, O4, Assembler::less, Assembler::pt, L_block_copy); - __ sub(count, prefetch_count, count); + __ sub(count, O4, count); (this->*copy_loop_func)(from, to, count, count_dec, L_block_copy_prefetch, true, true); - __ add(count, prefetch_count, count); // restore count + __ set(prefetch_count, O4); + __ add(count, O4, count); } // prefetch_count > 0 @@ -992,11 +993,12 @@ // than prefetch distance. __ set(prefetch_count, O4); __ cmp_and_brx_short(count, O4, Assembler::lessUnsigned, Assembler::pt, L_copy); - __ sub(count, prefetch_count, count); + __ sub(count, O4, count); Label L_copy_prefetch; (this->*copy_loop_func)(from, to, count, count_dec, L_copy_prefetch, true, false); - __ add(count, prefetch_count, count); // restore count + __ set(prefetch_count, O4); + __ add(count, O4, count); } // prefetch_count > 0 diff -r 6365d86cf722 -r 6ecc7cc67619 hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.cpp --- a/hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.cpp Thu Apr 27 14:15:30 2017 +0000 +++ b/hotspot/src/share/vm/runtime/commandLineFlagConstraintsCompiler.cpp Fri Apr 28 09:50:47 2017 +0200 @@ -289,10 +289,10 @@ } Flag::Error ArraycopyDstPrefetchDistanceConstraintFunc(uintx value, bool verbose) { - if (value != 0) { + if (value >= 4032) { CommandLineError::print(verbose, - "ArraycopyDstPrefetchDistance (" UINTX_FORMAT ") must be 0\n", - value); + "ArraycopyDstPrefetchDistance (" UINTX_FORMAT ") must be" + "between 0 and 4031\n", value); return Flag::VIOLATES_CONSTRAINT; } @@ -300,10 +300,10 @@ } Flag::Error ArraycopySrcPrefetchDistanceConstraintFunc(uintx value, bool verbose) { - if (value != 0) { + if (value >= 4032) { CommandLineError::print(verbose, - "ArraycopySrcPrefetchDistance (" UINTX_FORMAT ") must be 0\n", - value); + "ArraycopySrcPrefetchDistance (" UINTX_FORMAT ") must be" + "between 0 and 4031\n", value); return Flag::VIOLATES_CONSTRAINT; }