On 7/9/19 7:05 PM, Kim Barrett wrote:
On Jul 9, 2019, at 9:13 AM, Daniel D. Daugherty <daniel.daughe...@oracle.com>
wrote:
Hi Kim,
Thanks for the review.
More like drive by commentary :)
Your commentary, drive by or otherwise, is always appreciated... :-)
I’ve never really looked at the interpreter code, and make no
claim to understand it at all. I *think* I understand what’s going on with
this change, but I don’t
think you should count me toward the requisite number of reviewers.
I have three (R)eviewers at the moment so no worries on that account.
Since one of your comments motivated a change to the code, I plan to
list you as a reviewer...
On 7/8/19 7:00 PM, Kim Barrett wrote:
On Jul 7, 2019, at 8:08 PM, David Holmes <david.hol...@oracle.com> wrote:
On 7/07/2019 6:48 pm, Erik Osterlund wrote:
The real danger is SPARC though and its BIS instructions. I don’t have the code
in front of me, but I really hope not to see that switch statement and
non-volatile loop in that pd_disjoint_words_atomic() function.
sparc uses the same loop.
Let's face it, almost no body expects the compiler to do these kinds of
transformations. :(
See JDK-8131330 and JDK-8142368, where we saw exactly this sort of
transformation from a fill-loop
to memset (which may use BIS, and indeed empirically does in some cases). The
loops in question
seem trivially convertible to memcpy/memmove.
Very interesting reads. Thanks for pointing those out.
src/hotspot/share/interpreter/templateInterpreter.cpp:
DispatchTable TemplateInterpreter::_active_table;
DispatchTable TemplateInterpreter::_normal_table;
DispatchTable TemplateInterpreter::_safept_table;
So it seems like changing _active_table to:
volatile DispatchTable TemplateInterpreter::_active_table;
might be a good idea... Do you concur?
I suspect that might be a problem for various reasons. Reading ahead, I see
you’ve run into at
least some, and deferred this to a new RFE. So I think I’m not going to
pretend to understand
this code well enough to understand the ramifications of such a change.
Agreed. Doing this fix for Robbin (JDK-8227117) has turned into quite the
adventure... Seems to be the story of my life right now... :-)
I’ve been reserving Atomic::load/store for cases where the location “ought” to be
declared std::atomic<T> if
we were using C++11 atomics (or alternatively some homebrew equivalent). Not
all places where we do
stuff “atomically” is appropriate for that though (consider card tables, being
arrays of bytes, where using an
atomic<T> type might impose alignment constraints that are undesirable here).
I *think* just using volatile
here would likely be sufficient, e.g. we should have
Copy::disjoint_words_atomic(const HeapWord* from,volatile HeapWord* to,
size_t count)
I think this part should be taken up in the follow bug that I filed:
JDK-8227369 pd_disjoint_words_atomic() needs to be atomic
https://bugs.openjdk.java.net/browse/JDK-8227369
Agreed.
I pasted the above comment and the follow up comment into JDK-8227369
yesterday...
Thanks again for chiming in...
Dan
Thanks for chiming in on the review!
Dan