--- old/src/hotspot/cpu/x86/macroAssembler_x86.cpp 2018-03-21 12:02:49.968023212 +0100 +++ new/src/hotspot/cpu/x86/macroAssembler_x86.cpp 2018-03-21 12:02:49.708017386 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -3657,6 +3657,12 @@ } } +void MacroAssembler::test_klass_is_value(Register klass, Register temp_reg, Label& is_value) { + movl(temp_reg, Address(klass, Klass::access_flags_offset())); + testl(temp_reg, JVM_ACC_VALUE); + jcc(Assembler::notZero, is_value); +} + void MacroAssembler::test_field_is_flattenable(Register flags, Register temp_reg, Label& is_flattenable) { movl(temp_reg, flags); shrl(temp_reg, ConstantPoolCacheEntry::is_flattenable_field_shift); @@ -3681,6 +3687,21 @@ jcc(Assembler::notZero, is_flattened); } +void MacroAssembler::test_flat_array_klass(Register klass, Register temp_reg, + Label& is_flat_array) { + movl(temp_reg, Address(klass, Klass::layout_helper_offset())); + sarl(temp_reg, Klass::_lh_array_tag_shift); + cmpl(temp_reg, Klass::_lh_array_tag_vt_value); + jcc(Assembler::equal, is_flat_array); +} + + +void MacroAssembler::test_flat_array_oop(Register oop, Register temp_reg, + Label& is_flat_array) { + load_klass(temp_reg, oop); + test_flat_array_klass(temp_reg, temp_reg, is_flat_array); +} + void MacroAssembler::test_value_is_not_buffered(Register value, Register temp_reg, Label& not_buffered) { ExternalAddress VTBuffer_top(VTBuffer::top_addr()); ExternalAddress VTBuffer_end(VTBuffer::end_addr());