< prev index next >

src/hotspot/share/c1/c1_LIRGenerator.hpp

Print this page

242 
243   void load_klass(LIR_Opr obj, LIR_Opr klass, CodeEmitInfo* null_check_info);
244 
245   // platform dependent
246   LIR_Opr getThreadPointer();
247 
248  private:
249   // code emission
250   void do_ArithmeticOp_Long(ArithmeticOp* x);
251   void do_ArithmeticOp_Int (ArithmeticOp* x);
252   void do_ArithmeticOp_FPU (ArithmeticOp* x);
253 
254   void do_RegisterFinalizer(Intrinsic* x);
255   void do_isInstance(Intrinsic* x);
256   void do_getClass(Intrinsic* x);
257   void do_getObjectSize(Intrinsic* x);
258   void do_currentCarrierThread(Intrinsic* x);
259   void do_scopedValueCache(Intrinsic* x);
260   void do_vthread(Intrinsic* x);
261   void do_JavaThreadField(Intrinsic* x, ByteSize offset);


262   void do_FmaIntrinsic(Intrinsic* x);
263   void do_MathIntrinsic(Intrinsic* x);
264   void do_LibmIntrinsic(Intrinsic* x);
265   void do_ArrayCopy(Intrinsic* x);
266   void do_CompareAndSwap(Intrinsic* x, ValueType* type);
267   void do_PreconditionsCheckIndex(Intrinsic* x, BasicType type);
268   void do_FPIntrinsics(Intrinsic* x);
269   void do_Reference_get0(Intrinsic* x);
270   void do_update_CRC32(Intrinsic* x);
271   void do_update_CRC32C(Intrinsic* x);
272   void do_vectorizedMismatch(Intrinsic* x);
273   void do_blackhole(Intrinsic* x);
274 
275  public:
276   LIR_Opr call_runtime(BasicTypeArray* signature, LIRItemList* args, address entry, ValueType* result_type, CodeEmitInfo* info);
277   LIR_Opr call_runtime(BasicTypeArray* signature, LIR_OprList* args, address entry, ValueType* result_type, CodeEmitInfo* info);
278 
279   // convenience functions
280   LIR_Opr call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info);
281   LIR_Opr call_runtime(Value arg1, Value arg2, address entry, ValueType* result_type, CodeEmitInfo* info);

460     return l;
461   }
462 
463 #ifdef __SOFTFP__
464   void do_soft_float_compare(If *x);
465 #endif // __SOFTFP__
466 
467   SwitchRangeArray* create_lookup_ranges(TableSwitch* x);
468   SwitchRangeArray* create_lookup_ranges(LookupSwitch* x);
469   void do_SwitchRanges(SwitchRangeArray* x, LIR_Opr value, BlockBegin* default_sux);
470 
471   void do_RuntimeCall(address routine, Intrinsic* x);
472 
473   ciKlass* profile_type(ciMethodData* md, int md_first_offset, int md_offset, intptr_t profiled_k,
474                         Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_at_call_k,
475                         ciKlass* callee_signature_k);
476   void profile_arguments(ProfileCall* x);
477   void profile_parameters(Base* x);
478   void profile_parameters_at_call(ProfileCall* x);
479   LIR_Opr mask_boolean(LIR_Opr array, LIR_Opr value, CodeEmitInfo*& null_check_info);


480 
481  public:
482   Compilation*  compilation() const              { return _compilation; }
483   FrameMap*     frame_map() const                { return _compilation->frame_map(); }
484   ciMethod*     method() const                   { return _method; }
485   BlockBegin*   block() const                    { return _block; }
486   IRScope*      scope() const                    { return block()->scope(); }
487 
488   int max_virtual_register_number() const        { return _virtual_register_number; }
489 
490   void block_do(BlockBegin* block);
491 
492   // Flags that can be set on vregs
493   enum VregFlag {
494       must_start_in_memory = 0  // needs to be assigned a memory location at beginning, but may then be loaded in a register
495     , callee_saved     = 1    // must be in a callee saved register
496     , byte_reg         = 2    // must be in a byte register
497     , num_vreg_flags
498 
499   };

242 
243   void load_klass(LIR_Opr obj, LIR_Opr klass, CodeEmitInfo* null_check_info);
244 
245   // platform dependent
246   LIR_Opr getThreadPointer();
247 
248  private:
249   // code emission
250   void do_ArithmeticOp_Long(ArithmeticOp* x);
251   void do_ArithmeticOp_Int (ArithmeticOp* x);
252   void do_ArithmeticOp_FPU (ArithmeticOp* x);
253 
254   void do_RegisterFinalizer(Intrinsic* x);
255   void do_isInstance(Intrinsic* x);
256   void do_getClass(Intrinsic* x);
257   void do_getObjectSize(Intrinsic* x);
258   void do_currentCarrierThread(Intrinsic* x);
259   void do_scopedValueCache(Intrinsic* x);
260   void do_vthread(Intrinsic* x);
261   void do_JavaThreadField(Intrinsic* x, ByteSize offset);
262   void do_sizeOf(Intrinsic* x);
263   void do_addressOf(Intrinsic* x);
264   void do_FmaIntrinsic(Intrinsic* x);
265   void do_MathIntrinsic(Intrinsic* x);
266   void do_LibmIntrinsic(Intrinsic* x);
267   void do_ArrayCopy(Intrinsic* x);
268   void do_CompareAndSwap(Intrinsic* x, ValueType* type);
269   void do_PreconditionsCheckIndex(Intrinsic* x, BasicType type);
270   void do_FPIntrinsics(Intrinsic* x);
271   void do_Reference_get0(Intrinsic* x);
272   void do_update_CRC32(Intrinsic* x);
273   void do_update_CRC32C(Intrinsic* x);
274   void do_vectorizedMismatch(Intrinsic* x);
275   void do_blackhole(Intrinsic* x);
276 
277  public:
278   LIR_Opr call_runtime(BasicTypeArray* signature, LIRItemList* args, address entry, ValueType* result_type, CodeEmitInfo* info);
279   LIR_Opr call_runtime(BasicTypeArray* signature, LIR_OprList* args, address entry, ValueType* result_type, CodeEmitInfo* info);
280 
281   // convenience functions
282   LIR_Opr call_runtime(Value arg1, address entry, ValueType* result_type, CodeEmitInfo* info);
283   LIR_Opr call_runtime(Value arg1, Value arg2, address entry, ValueType* result_type, CodeEmitInfo* info);

462     return l;
463   }
464 
465 #ifdef __SOFTFP__
466   void do_soft_float_compare(If *x);
467 #endif // __SOFTFP__
468 
469   SwitchRangeArray* create_lookup_ranges(TableSwitch* x);
470   SwitchRangeArray* create_lookup_ranges(LookupSwitch* x);
471   void do_SwitchRanges(SwitchRangeArray* x, LIR_Opr value, BlockBegin* default_sux);
472 
473   void do_RuntimeCall(address routine, Intrinsic* x);
474 
475   ciKlass* profile_type(ciMethodData* md, int md_first_offset, int md_offset, intptr_t profiled_k,
476                         Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_at_call_k,
477                         ciKlass* callee_signature_k);
478   void profile_arguments(ProfileCall* x);
479   void profile_parameters(Base* x);
480   void profile_parameters_at_call(ProfileCall* x);
481   LIR_Opr mask_boolean(LIR_Opr array, LIR_Opr value, CodeEmitInfo*& null_check_info);
482 
483   void do_sizeOf_impl(Intrinsic* x, int arg_idx);
484 
485  public:
486   Compilation*  compilation() const              { return _compilation; }
487   FrameMap*     frame_map() const                { return _compilation->frame_map(); }
488   ciMethod*     method() const                   { return _method; }
489   BlockBegin*   block() const                    { return _block; }
490   IRScope*      scope() const                    { return block()->scope(); }
491 
492   int max_virtual_register_number() const        { return _virtual_register_number; }
493 
494   void block_do(BlockBegin* block);
495 
496   // Flags that can be set on vregs
497   enum VregFlag {
498       must_start_in_memory = 0  // needs to be assigned a memory location at beginning, but may then be loaded in a register
499     , callee_saved     = 1    // must be in a callee saved register
500     , byte_reg         = 2    // must be in a byte register
501     , num_vreg_flags
502 
503   };
< prev index next >