1199 , _receiver(receiver)
1200 , _method(method)
1201 , _method_handle_invoke_SP_save_opr(LIR_OprFact::illegalOpr)
1202 { assert(is_in_range(code, begin_opJavaCall, end_opJavaCall), "code check"); }
1203
1204 LIR_OpJavaCall(LIR_Code code, ciMethod* method,
1205 LIR_Opr receiver, LIR_Opr result, intptr_t vtable_offset,
1206 LIR_OprList* arguments, CodeEmitInfo* info)
1207 : LIR_OpCall(code, (address)vtable_offset, result, arguments, info)
1208 , _receiver(receiver)
1209 , _method(method)
1210 , _method_handle_invoke_SP_save_opr(LIR_OprFact::illegalOpr)
1211 { assert(is_in_range(code, begin_opJavaCall, end_opJavaCall), "code check"); }
1212
1213 LIR_Opr receiver() const { return _receiver; }
1214 ciMethod* method() const { return _method; }
1215
1216 // JSR 292 support.
1217 bool is_invokedynamic() const { return code() == lir_dynamic_call; }
1218 bool is_method_handle_invoke() const {
1219 return
1220 method()->is_compiled_lambda_form() // Java-generated adapter
1221 ||
1222 method()->is_method_handle_intrinsic(); // JVM-generated MH intrinsic
1223 }
1224
1225 intptr_t vtable_offset() const {
1226 assert(_code == lir_virtual_call, "only have vtable for real vcall");
1227 return (intptr_t) addr();
1228 }
1229
1230 virtual void emit_code(LIR_Assembler* masm);
1231 virtual LIR_OpJavaCall* as_OpJavaCall() { return this; }
1232 virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
1233 };
1234
1235 // --------------------------------------------------
1236 // LIR_OpLabel
1237 // --------------------------------------------------
1238 // Location where a branch can continue
1239 class LIR_OpLabel: public LIR_Op {
1240 friend class LIR_OpVisitState;
1241
|
1199 , _receiver(receiver)
1200 , _method(method)
1201 , _method_handle_invoke_SP_save_opr(LIR_OprFact::illegalOpr)
1202 { assert(is_in_range(code, begin_opJavaCall, end_opJavaCall), "code check"); }
1203
1204 LIR_OpJavaCall(LIR_Code code, ciMethod* method,
1205 LIR_Opr receiver, LIR_Opr result, intptr_t vtable_offset,
1206 LIR_OprList* arguments, CodeEmitInfo* info)
1207 : LIR_OpCall(code, (address)vtable_offset, result, arguments, info)
1208 , _receiver(receiver)
1209 , _method(method)
1210 , _method_handle_invoke_SP_save_opr(LIR_OprFact::illegalOpr)
1211 { assert(is_in_range(code, begin_opJavaCall, end_opJavaCall), "code check"); }
1212
1213 LIR_Opr receiver() const { return _receiver; }
1214 ciMethod* method() const { return _method; }
1215
1216 // JSR 292 support.
1217 bool is_invokedynamic() const { return code() == lir_dynamic_call; }
1218 bool is_method_handle_invoke() const {
1219 return method()->is_compiled_lambda_form() || // Java-generated lambda form
1220 method()->is_method_handle_intrinsic(); // JVM-generated MH intrinsic
1221 }
1222
1223 intptr_t vtable_offset() const {
1224 assert(_code == lir_virtual_call, "only have vtable for real vcall");
1225 return (intptr_t) addr();
1226 }
1227
1228 virtual void emit_code(LIR_Assembler* masm);
1229 virtual LIR_OpJavaCall* as_OpJavaCall() { return this; }
1230 virtual void print_instr(outputStream* out) const PRODUCT_RETURN;
1231 };
1232
1233 // --------------------------------------------------
1234 // LIR_OpLabel
1235 // --------------------------------------------------
1236 // Location where a branch can continue
1237 class LIR_OpLabel: public LIR_Op {
1238 friend class LIR_OpVisitState;
1239
|