8179019: Correct range checks for command-line options ArraycopySrcPrefetchDistance and ArraycopyDstPrefetchDistance

Update constraint for the command-line options. Change stubs to use register values instead of immediates.

Reviewed-by: kvn
This commit is contained in:
Zoltan Majo 2017-04-28 09:50:47 +02:00
parent dbbc52769a
commit 3e1753d49b
2 changed files with 12 additions and 10 deletions

View File

@ -968,10 +968,11 @@ class StubGenerator: public StubCodeGenerator {
// 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 @@ class StubGenerator: public StubCodeGenerator {
// 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

View File

@ -289,10 +289,10 @@ Flag::Error OptoLoopAlignmentConstraintFunc(intx value, bool verbose) {
}
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 ArraycopyDstPrefetchDistanceConstraintFunc(uintx value, bool verbose
}
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;
}