src/cpu/x86/vm/assembler_x86.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/cpu/x86/vm/assembler_x86.cpp Fri Mar 25 19:58:38 2011
--- new/src/cpu/x86/vm/assembler_x86.cpp Fri Mar 25 19:58:38 2011
*** 3508,3518 ****
--- 3508,3517 ----
// For external_word_type/runtime_call_type if it is reachable from where we
// are now (possibly a temp buffer) and where we might end up
// anywhere in the codeCache then we are always reachable.
// This would have to change if we ever save/restore shared code
// to be more pessimistic.
disp = (int64_t)adr._target - ((int64_t)CodeCache::low_bound() + sizeof(int));
if (!is_simm32(disp)) return false;
disp = (int64_t)adr._target - ((int64_t)CodeCache::high_bound() + sizeof(int));
if (!is_simm32(disp)) return false;
*** 3532,3541 ****
--- 3531,3548 ----
disp += fudge;
}
return is_simm32(disp);
}
+ // Check if the polling page is not reachable from the code cache using rip-relative
+ // addressing.
+ bool Assembler::is_polling_page_far() {
+ intptr_t addr = (intptr_t)os::get_polling_page();
+ return !is_simm32(addr - (intptr_t)CodeCache::low_bound()) ||
+ !is_simm32(addr - (intptr_t)CodeCache::high_bound());
+ }
+
void Assembler::emit_data64(jlong data,
relocInfo::relocType rtype,
int format) {
if (rtype == relocInfo::none) {
emit_long64(data);
*** 6884,6893 ****
--- 6891,6905 ----
shll(reg, 16);
sarl(reg, 16);
}
}
+ void MacroAssembler::testl(Register dst, AddressLiteral src) {
+ assert(reachable(src), "Address should be reachable");
+ testl(dst, as_Address(src));
+ }
+
//////////////////////////////////////////////////////////////////////////////////
#ifndef SERIALGC
void MacroAssembler::g1_write_barrier_pre(Register obj,
#ifndef _LP64
*** 7119,7139 ****
--- 7131,7140 ----
void MacroAssembler::subptr(Register dst, Register src) {
LP64_ONLY(subq(dst, src)) NOT_LP64(subl(dst, src));
}
void MacroAssembler::test32(Register src1, AddressLiteral src2) {
// src2 must be rval
if (reachable(src2)) {
testl(src1, as_Address(src2));
} else {
lea(rscratch1, src2);
testl(src1, Address(rscratch1, 0));
}
}
// C++ bool manipulation
void MacroAssembler::testbool(Register dst) {
if(sizeof(bool) == 1)
testb(dst, 0xff);
else if(sizeof(bool) == 2) {
src/cpu/x86/vm/assembler_x86.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File