< prev index next >
src/hotspot/cpu/ppc/nativeInst_ppc.cpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2015 SAP SE. 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
--- 1,7 ----
/*
! * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2015 SAP SE. 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
*** 219,235 ****
} else if (cb != NULL &&
MacroAssembler::is_calculate_address_from_global_toc_at(addr, cb->content_begin())) {
// A calculation relative to the global TOC.
if (MacroAssembler::get_address_of_calculate_address_from_global_toc_at(addr, cb->content_begin()) !=
(address)data) {
! const int invalidated_range =
! MacroAssembler::patch_calculate_address_from_global_toc_at(addr, cb->content_begin(),
(address)data);
! const address start = invalidated_range < 0 ? addr + invalidated_range : addr;
! // FIXME:
! const int range = invalidated_range < 0 ? 4 - invalidated_range : 8;
! ICache::ppc64_flush_icache_bytes(start, range);
}
next_address = addr + 1 * BytesPerInstWord;
} else if (MacroAssembler::is_load_const_at(addr)) {
// A normal 5 instruction load_const code sequence.
if (MacroAssembler::get_const(addr) != (long)data) {
--- 219,235 ----
} else if (cb != NULL &&
MacroAssembler::is_calculate_address_from_global_toc_at(addr, cb->content_begin())) {
// A calculation relative to the global TOC.
if (MacroAssembler::get_address_of_calculate_address_from_global_toc_at(addr, cb->content_begin()) !=
(address)data) {
! const address inst2_addr = addr;
! const address inst1_addr =
! MacroAssembler::patch_calculate_address_from_global_toc_at(inst2_addr, cb->content_begin(),
(address)data);
! assert(inst1_addr != NULL && inst1_addr < inst2_addr, "first instruction must be found");
! const int range = inst2_addr - inst1_addr + BytesPerInstWord;
! ICache::ppc64_flush_icache_bytes(inst1_addr, range);
}
next_address = addr + 1 * BytesPerInstWord;
} else if (MacroAssembler::is_load_const_at(addr)) {
// A normal 5 instruction load_const code sequence.
if (MacroAssembler::get_const(addr) != (long)data) {
*** 286,304 ****
}
}
}
void NativeMovConstReg::set_narrow_oop(narrowOop data, CodeBlob *code /* = NULL */) {
! address addr = addr_at(0);
CodeBlob* cb = (code) ? code : CodeCache::find_blob(instruction_address());
! if (MacroAssembler::get_narrow_oop(addr, cb->content_begin()) == (long)data) return;
! const int invalidated_range =
! MacroAssembler::patch_set_narrow_oop(addr, cb->content_begin(), (long)data);
! const address start = invalidated_range < 0 ? addr + invalidated_range : addr;
! // FIXME:
! const int range = invalidated_range < 0 ? 4 - invalidated_range : 8;
! ICache::ppc64_flush_icache_bytes(start, range);
}
// Do not use an assertion here. Let clients decide whether they only
// want this when assertions are enabled.
#ifdef ASSERT
--- 286,304 ----
}
}
}
void NativeMovConstReg::set_narrow_oop(narrowOop data, CodeBlob *code /* = NULL */) {
! address inst2_addr = addr_at(0);
CodeBlob* cb = (code) ? code : CodeCache::find_blob(instruction_address());
! if (MacroAssembler::get_narrow_oop(inst2_addr, cb->content_begin()) == (long)data)
! return;
! const address inst1_addr =
! MacroAssembler::patch_set_narrow_oop(inst2_addr, cb->content_begin(), (long)data);
! assert(inst1_addr != NULL && inst1_addr < inst2_addr, "first instruction must be found");
! const int range = inst2_addr - inst1_addr + BytesPerInstWord;
! ICache::ppc64_flush_icache_bytes(inst1_addr, range);
}
// Do not use an assertion here. Let clients decide whether they only
// want this when assertions are enabled.
#ifdef ASSERT
< prev index next >