RFR: JDK-8234507 [lworld] Macro ASM version of access_value_copy

David Simms david.simms at oracle.com
Wed Nov 20 13:36:18 UTC 2019


Bug/RFE: https://bugs.openjdk.java.net/browse/JDK-8234507

Webrev: http://cr.openjdk.java.net/~dsimms/valhalla/8234507/webrev0/


Greetings,

     In working towards complete support for the "Heap Access API", I 
have added "MacroAssembler::access_value_copy". Given the complexity of 
performing essentially a "clone" operation (oop iteration applying 
barrier logic interspersed with memcpy), it is currently implemented 
simply as a leaf call (has very little overhead).

   There maybe be further opportunities to optimized for value type 
containing no oops etc, but this general purpose variant would probably 
remain as "fall back" implementation, so it seem like decent first step 
for building on.

   In order to provide testing for "MacroAssembler::access_value_copy", 
I created a "fast path" alternative for 
"InterpreterRuntime::read_flattened_field()" see: 
"InterpreterMacroAssembler::read_flattened_field()". This required quite 
a number of support methods, i.e. assembler versions of:

  * "InstanceKlass::get_value_field_klass()"
  * "ValueKlass::read_flattened_field()"
      o is_empty_value()
      o default_value()
      o allocate_instance()
      o data_for_oop()

This increased the scope of the change, most of these ancillary helpers 
make up the bulk of the change. I feel this was necessary in order to 
evaluate whether the performance gains were the amount of engineering 
required to avoid interpreter runtime calls. Micro-benchmarking show a 
x3 performance gain for reading int sized value type field (and x2 gain 
for reading empty value type field). So answer seems to confirm 
Frederic's desire to remove as many runtime calls as possible.

Of interest: "MacroAssembler::allocate_instance()". I took the guts out 
of "TemplateTable::_new" in order to allocate "oop buffer". This seems 
like fairly general code (not specific to interpreter), thinking we can 
refactor some of our other tlab allocations to use this (perhaps 
"MacroAssembler::store_value_type_fields_to_buf")

Still running testing, there may be a subtle bug hiding...but this patch 
is taking it's time, best gather feedback at this point.

/David Simms



More information about the valhalla-dev mailing list