< prev index next >

src/hotspot/share/c1/c1_LIRGenerator.hpp

Print this page

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


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

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


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

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

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