diff -r c3ccaf6e5707 src/cpu/s390/vm/macroAssembler_s390.hpp --- a/src/cpu/s390/vm/macroAssembler_s390.hpp Mon Nov 07 12:37:28 2016 +0100 +++ b/src/cpu/s390/vm/macroAssembler_s390.hpp Tue Nov 08 16:02:56 2016 +0100 @@ -574,6 +574,7 @@ static int call_far_patchable_ret_addr_offset() { return call_far_patchable_size(); } static bool call_far_patchable_requires_alignment_nop(address pc) { + if (!os::is_MP()) return false; int size = call_far_patchable_size(); return ((intptr_t)(pc + size) & 0x03L) != 0; } diff -r c3ccaf6e5707 src/cpu/s390/vm/nativeInst_s390.cpp --- a/src/cpu/s390/vm/nativeInst_s390.cpp Mon Nov 07 12:37:28 2016 +0100 +++ b/src/cpu/s390/vm/nativeInst_s390.cpp Tue Nov 08 16:02:56 2016 +0100 @@ -256,11 +256,7 @@ address NativeFarCall::destination() { assert(MacroAssembler::is_call_far_patchable_at((address)this), "unexpected call type"); address ctable = NULL; - if (MacroAssembler::call_far_patchable_requires_alignment_nop((address)this)) { - return MacroAssembler::get_dest_of_call_far_patchable_at(((address)this)+MacroAssembler::nop_size(), ctable); - } else { - return MacroAssembler::get_dest_of_call_far_patchable_at((address)this, ctable); - } + return MacroAssembler::get_dest_of_call_far_patchable_at((address)this, ctable); } diff -r c3ccaf6e5707 src/cpu/s390/vm/relocInfo_s390.cpp --- a/src/cpu/s390/vm/relocInfo_s390.cpp Mon Nov 07 12:37:28 2016 +0100 +++ b/src/cpu/s390/vm/relocInfo_s390.cpp Tue Nov 08 16:02:56 2016 +0100 @@ -102,11 +102,8 @@ if (orig_addr == NULL) { call = nativeFarCall_at(inst_addr); } else { - if (MacroAssembler::is_call_far_patchable_pcrelative_at(inst_addr)) { - call = nativeFarCall_at(orig_addr); - } else { - call = nativeFarCall_at(orig_addr); // must access location (in CP) where destination is stored in unmoved code, because load from CP is pc-relative - } + // must access location (in CP) where destination is stored in unmoved code, because load from CP is pc-relative + call = nativeFarCall_at(orig_addr); } return call->destination(); }