< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page

        

*** 2114,2123 **** --- 2114,2124 ---- enc_class Java_To_Runtime(method meth) %{ // No relocation needed MacroAssembler _masm(&cbuf); __ mov64(r10, (int64_t) $meth$$method); __ call(r10); + __ post_call_nop(); %} enc_class Java_To_Interpreter(method meth) %{ // CALL Java_To_Interpreter
*** 2127,2143 **** --- 2128,2146 ---- // CALL directly to the runtime emit_d32_reloc(cbuf, (int) ($meth$$method - ((intptr_t) cbuf.insts_end()) - 4), runtime_call_Relocation::spec(), RELOC_DISP32); + __ post_call_nop(); %} enc_class Java_Static_Call(method meth) %{ // JAVA STATIC CALL // CALL to fixup routine. Fixup routine uses ScopeDesc info to // determine who we intended to call. + MacroAssembler _masm(&cbuf); cbuf.set_insts_mark(); $$$emit8$primary; if (!_method) { emit_d32_reloc(cbuf, (int) ($meth$$method - ((intptr_t) cbuf.insts_end()) - 4),
*** 2158,2172 **** --- 2161,2177 ---- } #if INCLUDE_AOT CompiledStaticCall::emit_to_aot_stub(cbuf, mark); #endif } + __ post_call_nop(); %} enc_class Java_Dynamic_Call(method meth) %{ MacroAssembler _masm(&cbuf); __ ic_call((address)$meth$$method, resolved_method_index(cbuf)); + __ post_call_nop(); %} enc_class Java_Compiled_Call(method meth) %{ // JAVA COMPILED CALL
*** 2174,2192 **** --- 2179,2199 ---- // XXX XXX offset is 128 is 1.5 NON-PRODUCT !!! // assert(-0x80 <= disp && disp < 0x80, "compiled_code_offset isn't small"); // callq *disp(%rax) + MacroAssembler _masm(&cbuf); cbuf.set_insts_mark(); $$$emit8$primary; if (disp < 0x80) { emit_rm(cbuf, 0x01, $secondary, RAX_enc); // R/M byte emit_d8(cbuf, disp); // Displacement } else { emit_rm(cbuf, 0x02, $secondary, RAX_enc); // R/M byte emit_d32(cbuf, disp); // Displacement } + __ post_call_nop(); %} enc_class reg_opc_imm(rRegI dst, immI8 shift) %{ // SAL, SAR, SHR
*** 11618,11627 **** --- 11625,11648 ---- $tmp4$$XMMRegister, $tmp5$$Register, $result$$Register); %} ins_pipe( pipe_slow ); %} + instruct getFP(rRegL dst) %{ + match(Set dst (GetFP)); + effect(DEF dst); + ins_cost(1); + + ins_encode %{ + // Remove wordSize for return addr which is already pushed. + int framesize = Compile::current()->frame_size_in_bytes() - wordSize; + Address base(rsp, framesize); + __ lea($dst$$Register, base); + %} + ins_pipe(ialu_reg_reg_long); + %} + //----------Overflow Math Instructions----------------------------------------- instruct overflowAddI_rReg(rFlagsReg cr, rax_RegI op1, rRegI op2) %{ match(Set cr (OverflowAddI op1 op2));
< prev index next >