< prev index next >

src/hotspot/cpu/aarch64/templateTable_aarch64.cpp

Print this page

        

*** 1,8 **** /* * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2014, Red Hat Inc. 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,8 ---- /* * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2014, 2018, Red Hat, Inc. 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 3838,3847 **** --- 3838,3852 ---- transition(atos, vtos); // check for NULL object __ null_check(r0); + // We need to preemptively evacuate the object, because we later compare + // it to objects in the BasicObjectLock list, and we might get false negatives + // if another thread evacuates the object in the meantime. See acmp. + __ resolve_for_write(0, r0); + const Address monitor_block_top( rfp, frame::interpreter_frame_monitor_block_top_offset * wordSize); const Address monitor_block_bot( rfp, frame::interpreter_frame_initial_sp_offset * wordSize); const int entry_size = frame::interpreter_frame_monitor_size() * wordSize;
*** 3937,3946 **** --- 3942,3956 ---- transition(atos, vtos); // check for NULL object __ null_check(r0); + // We need to preemptively evacuate the object, because we later compare + // it to objects in the BasicObjectLock list, and we might get false negatives + // if another thread evacuates the object in the meantime. See acmp. + __ resolve_for_write(0, r0); + const Address monitor_block_top( rfp, frame::interpreter_frame_monitor_block_top_offset * wordSize); const Address monitor_block_bot( rfp, frame::interpreter_frame_initial_sp_offset * wordSize); const int entry_size = frame::interpreter_frame_monitor_size() * wordSize;
< prev index next >