< prev index next >

src/cpu/x86/vm/x86_64.ad

Print this page




2108     $$$emit8$primary;
2109 
2110     if (!_method) {
2111       emit_d32_reloc(cbuf,
2112                      (int) ($meth$$method - ((intptr_t) cbuf.insts_end()) - 4),
2113                      runtime_call_Relocation::spec(),
2114                      RELOC_DISP32);
2115     } else if (_optimized_virtual) {
2116       emit_d32_reloc(cbuf,
2117                      (int) ($meth$$method - ((intptr_t) cbuf.insts_end()) - 4),
2118                      opt_virtual_call_Relocation::spec(),
2119                      RELOC_DISP32);
2120     } else {
2121       emit_d32_reloc(cbuf,
2122                      (int) ($meth$$method - ((intptr_t) cbuf.insts_end()) - 4),
2123                      static_call_Relocation::spec(),
2124                      RELOC_DISP32);
2125     }
2126     if (_method) {
2127       // Emit stub for static call.
2128       CompiledStaticCall::emit_to_interp_stub(cbuf);




2129     }
2130   %}
2131 
2132   enc_class Java_Dynamic_Call(method meth) %{
2133     MacroAssembler _masm(&cbuf);
2134     __ ic_call((address)$meth$$method);
2135   %}
2136 
2137   enc_class Java_Compiled_Call(method meth)
2138   %{
2139     // JAVA COMPILED CALL
2140     int disp = in_bytes(Method:: from_compiled_offset());
2141 
2142     // XXX XXX offset is 128 is 1.5 NON-PRODUCT !!!
2143     // assert(-0x80 <= disp && disp < 0x80, "compiled_code_offset isn't small");
2144 
2145     // callq *disp(%rax)
2146     cbuf.set_insts_mark();
2147     $$$emit8$primary;
2148     if (disp < 0x80) {




2108     $$$emit8$primary;
2109 
2110     if (!_method) {
2111       emit_d32_reloc(cbuf,
2112                      (int) ($meth$$method - ((intptr_t) cbuf.insts_end()) - 4),
2113                      runtime_call_Relocation::spec(),
2114                      RELOC_DISP32);
2115     } else if (_optimized_virtual) {
2116       emit_d32_reloc(cbuf,
2117                      (int) ($meth$$method - ((intptr_t) cbuf.insts_end()) - 4),
2118                      opt_virtual_call_Relocation::spec(),
2119                      RELOC_DISP32);
2120     } else {
2121       emit_d32_reloc(cbuf,
2122                      (int) ($meth$$method - ((intptr_t) cbuf.insts_end()) - 4),
2123                      static_call_Relocation::spec(),
2124                      RELOC_DISP32);
2125     }
2126     if (_method) {
2127       // Emit stub for static call.
2128       address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
2129       if (stub == NULL) {
2130         ciEnv::current()->record_failure("CodeCache is full");
2131         return;
2132       } 
2133     }
2134   %}
2135 
2136   enc_class Java_Dynamic_Call(method meth) %{
2137     MacroAssembler _masm(&cbuf);
2138     __ ic_call((address)$meth$$method);
2139   %}
2140 
2141   enc_class Java_Compiled_Call(method meth)
2142   %{
2143     // JAVA COMPILED CALL
2144     int disp = in_bytes(Method:: from_compiled_offset());
2145 
2146     // XXX XXX offset is 128 is 1.5 NON-PRODUCT !!!
2147     // assert(-0x80 <= disp && disp < 0x80, "compiled_code_offset isn't small");
2148 
2149     // callq *disp(%rax)
2150     cbuf.set_insts_mark();
2151     $$$emit8$primary;
2152     if (disp < 0x80) {


< prev index next >