< prev index next >

src/hotspot/share/c1/c1_Instruction.hpp

Print this page


  60 class   NegateOp;
  61 class   Op2;
  62 class     ArithmeticOp;
  63 class     ShiftOp;
  64 class     LogicOp;
  65 class     CompareOp;
  66 class     IfOp;
  67 class   Convert;
  68 class   NullCheck;
  69 class   TypeCast;
  70 class   OsrEntry;
  71 class   ExceptionObject;
  72 class   StateSplit;
  73 class     Invoke;
  74 class     NewInstance;
  75 class     NewValueTypeInstance;
  76 class     NewArray;
  77 class       NewTypeArray;
  78 class       NewObjectArray;
  79 class       NewMultiArray;


  80 class     TypeCheck;
  81 class       CheckCast;
  82 class       InstanceOf;
  83 class     AccessMonitor;
  84 class       MonitorEnter;
  85 class       MonitorExit;
  86 class     Intrinsic;
  87 class     BlockBegin;
  88 class     BlockEnd;
  89 class       Goto;
  90 class       If;
  91 class       IfInstanceOf;
  92 class       Switch;
  93 class         TableSwitch;
  94 class         LookupSwitch;
  95 class       Return;
  96 class       Throw;
  97 class       Base;
  98 class   RoundFP;
  99 class   UnsafeOp;


 165   virtual void do_LoadField      (LoadField*       x) = 0;
 166   virtual void do_StoreField     (StoreField*      x) = 0;
 167   virtual void do_ArrayLength    (ArrayLength*     x) = 0;
 168   virtual void do_LoadIndexed    (LoadIndexed*     x) = 0;
 169   virtual void do_StoreIndexed   (StoreIndexed*    x) = 0;
 170   virtual void do_NegateOp       (NegateOp*        x) = 0;
 171   virtual void do_ArithmeticOp   (ArithmeticOp*    x) = 0;
 172   virtual void do_ShiftOp        (ShiftOp*         x) = 0;
 173   virtual void do_LogicOp        (LogicOp*         x) = 0;
 174   virtual void do_CompareOp      (CompareOp*       x) = 0;
 175   virtual void do_IfOp           (IfOp*            x) = 0;
 176   virtual void do_Convert        (Convert*         x) = 0;
 177   virtual void do_NullCheck      (NullCheck*       x) = 0;
 178   virtual void do_TypeCast       (TypeCast*        x) = 0;
 179   virtual void do_Invoke         (Invoke*          x) = 0;
 180   virtual void do_NewInstance    (NewInstance*     x) = 0;
 181   virtual void do_NewValueTypeInstance(NewValueTypeInstance* x) = 0;
 182   virtual void do_NewTypeArray   (NewTypeArray*    x) = 0;
 183   virtual void do_NewObjectArray (NewObjectArray*  x) = 0;
 184   virtual void do_NewMultiArray  (NewMultiArray*   x) = 0;


 185   virtual void do_CheckCast      (CheckCast*       x) = 0;
 186   virtual void do_InstanceOf     (InstanceOf*      x) = 0;
 187   virtual void do_MonitorEnter   (MonitorEnter*    x) = 0;
 188   virtual void do_MonitorExit    (MonitorExit*     x) = 0;
 189   virtual void do_Intrinsic      (Intrinsic*       x) = 0;
 190   virtual void do_BlockBegin     (BlockBegin*      x) = 0;
 191   virtual void do_Goto           (Goto*            x) = 0;
 192   virtual void do_If             (If*              x) = 0;
 193   virtual void do_IfInstanceOf   (IfInstanceOf*    x) = 0;
 194   virtual void do_TableSwitch    (TableSwitch*     x) = 0;
 195   virtual void do_LookupSwitch   (LookupSwitch*    x) = 0;
 196   virtual void do_Return         (Return*          x) = 0;
 197   virtual void do_Throw          (Throw*           x) = 0;
 198   virtual void do_Base           (Base*            x) = 0;
 199   virtual void do_OsrEntry       (OsrEntry*        x) = 0;
 200   virtual void do_ExceptionObject(ExceptionObject* x) = 0;
 201   virtual void do_RoundFP        (RoundFP*         x) = 0;
 202   virtual void do_UnsafeGetRaw   (UnsafeGetRaw*    x) = 0;
 203   virtual void do_UnsafePutRaw   (UnsafePutRaw*    x) = 0;
 204   virtual void do_UnsafeGetObject(UnsafeGetObject* x) = 0;


 548   virtual LoadIndexed*      as_LoadIndexed()     { return NULL; }
 549   virtual StoreIndexed*     as_StoreIndexed()    { return NULL; }
 550   virtual NegateOp*         as_NegateOp()        { return NULL; }
 551   virtual Op2*              as_Op2()             { return NULL; }
 552   virtual ArithmeticOp*     as_ArithmeticOp()    { return NULL; }
 553   virtual ShiftOp*          as_ShiftOp()         { return NULL; }
 554   virtual LogicOp*          as_LogicOp()         { return NULL; }
 555   virtual CompareOp*        as_CompareOp()       { return NULL; }
 556   virtual IfOp*             as_IfOp()            { return NULL; }
 557   virtual Convert*          as_Convert()         { return NULL; }
 558   virtual NullCheck*        as_NullCheck()       { return NULL; }
 559   virtual OsrEntry*         as_OsrEntry()        { return NULL; }
 560   virtual StateSplit*       as_StateSplit()      { return NULL; }
 561   virtual Invoke*           as_Invoke()          { return NULL; }
 562   virtual NewInstance*      as_NewInstance()     { return NULL; }
 563   virtual NewValueTypeInstance* as_NewValueTypeInstance() { return NULL; }
 564   virtual NewArray*         as_NewArray()        { return NULL; }
 565   virtual NewTypeArray*     as_NewTypeArray()    { return NULL; }
 566   virtual NewObjectArray*   as_NewObjectArray()  { return NULL; }
 567   virtual NewMultiArray*    as_NewMultiArray()   { return NULL; }


 568   virtual TypeCheck*        as_TypeCheck()       { return NULL; }
 569   virtual CheckCast*        as_CheckCast()       { return NULL; }
 570   virtual InstanceOf*       as_InstanceOf()      { return NULL; }
 571   virtual TypeCast*         as_TypeCast()        { return NULL; }
 572   virtual AccessMonitor*    as_AccessMonitor()   { return NULL; }
 573   virtual MonitorEnter*     as_MonitorEnter()    { return NULL; }
 574   virtual MonitorExit*      as_MonitorExit()     { return NULL; }
 575   virtual Intrinsic*        as_Intrinsic()       { return NULL; }
 576   virtual BlockBegin*       as_BlockBegin()      { return NULL; }
 577   virtual BlockEnd*         as_BlockEnd()        { return NULL; }
 578   virtual Goto*             as_Goto()            { return NULL; }
 579   virtual If*               as_If()              { return NULL; }
 580   virtual IfInstanceOf*     as_IfInstanceOf()    { return NULL; }
 581   virtual TableSwitch*      as_TableSwitch()     { return NULL; }
 582   virtual LookupSwitch*     as_LookupSwitch()    { return NULL; }
 583   virtual Return*           as_Return()          { return NULL; }
 584   virtual Throw*            as_Throw()           { return NULL; }
 585   virtual Base*             as_Base()            { return NULL; }
 586   virtual RoundFP*          as_RoundFP()         { return NULL; }
 587   virtual ExceptionObject*  as_ExceptionObject() { return NULL; }


1450   // accessors
1451   ciKlass* klass() const                         { return _klass; }
1452   Values* dims() const                           { return _dims; }
1453   int rank() const                               { return dims()->length(); }
1454 
1455   // generic
1456   virtual void input_values_do(ValueVisitor* f) {
1457     // NOTE: we do not call NewArray::input_values_do since "length"
1458     // is meaningless for a multi-dimensional array; passing the
1459     // zeroth element down to NewArray as its length is a bad idea
1460     // since there will be a copy in the "dims" array which doesn't
1461     // get updated, and the value must not be traversed twice. Was bug
1462     // - kbr 4/10/2001
1463     StateSplit::input_values_do(f);
1464     for (int i = 0; i < _dims->length(); i++) f->visit(_dims->adr_at(i));
1465   }
1466 
1467   ciType* exact_type() const;
1468 };
1469 













1470 
1471 BASE(TypeCheck, StateSplit)
1472  private:
1473   ciKlass*    _klass;
1474   Value       _obj;
1475 
1476   ciMethod* _profiled_method;
1477   int       _profiled_bci;
1478 
1479  public:
1480   // creation
1481   TypeCheck(ciKlass* klass, Value obj, ValueType* type, ValueStack* state_before)
1482   : StateSplit(type, state_before), _klass(klass), _obj(obj),
1483     _profiled_method(NULL), _profiled_bci(0) {
1484     ASSERT_VALUES
1485     set_direct_compare(false);
1486   }
1487 
1488   // accessors
1489   ciKlass* klass() const                         { return _klass; }




  60 class   NegateOp;
  61 class   Op2;
  62 class     ArithmeticOp;
  63 class     ShiftOp;
  64 class     LogicOp;
  65 class     CompareOp;
  66 class     IfOp;
  67 class   Convert;
  68 class   NullCheck;
  69 class   TypeCast;
  70 class   OsrEntry;
  71 class   ExceptionObject;
  72 class   StateSplit;
  73 class     Invoke;
  74 class     NewInstance;
  75 class     NewValueTypeInstance;
  76 class     NewArray;
  77 class       NewTypeArray;
  78 class       NewObjectArray;
  79 class       NewMultiArray;
  80 class     WithField;
  81 class     DefaultValue;
  82 class     TypeCheck;
  83 class       CheckCast;
  84 class       InstanceOf;
  85 class     AccessMonitor;
  86 class       MonitorEnter;
  87 class       MonitorExit;
  88 class     Intrinsic;
  89 class     BlockBegin;
  90 class     BlockEnd;
  91 class       Goto;
  92 class       If;
  93 class       IfInstanceOf;
  94 class       Switch;
  95 class         TableSwitch;
  96 class         LookupSwitch;
  97 class       Return;
  98 class       Throw;
  99 class       Base;
 100 class   RoundFP;
 101 class   UnsafeOp;


 167   virtual void do_LoadField      (LoadField*       x) = 0;
 168   virtual void do_StoreField     (StoreField*      x) = 0;
 169   virtual void do_ArrayLength    (ArrayLength*     x) = 0;
 170   virtual void do_LoadIndexed    (LoadIndexed*     x) = 0;
 171   virtual void do_StoreIndexed   (StoreIndexed*    x) = 0;
 172   virtual void do_NegateOp       (NegateOp*        x) = 0;
 173   virtual void do_ArithmeticOp   (ArithmeticOp*    x) = 0;
 174   virtual void do_ShiftOp        (ShiftOp*         x) = 0;
 175   virtual void do_LogicOp        (LogicOp*         x) = 0;
 176   virtual void do_CompareOp      (CompareOp*       x) = 0;
 177   virtual void do_IfOp           (IfOp*            x) = 0;
 178   virtual void do_Convert        (Convert*         x) = 0;
 179   virtual void do_NullCheck      (NullCheck*       x) = 0;
 180   virtual void do_TypeCast       (TypeCast*        x) = 0;
 181   virtual void do_Invoke         (Invoke*          x) = 0;
 182   virtual void do_NewInstance    (NewInstance*     x) = 0;
 183   virtual void do_NewValueTypeInstance(NewValueTypeInstance* x) = 0;
 184   virtual void do_NewTypeArray   (NewTypeArray*    x) = 0;
 185   virtual void do_NewObjectArray (NewObjectArray*  x) = 0;
 186   virtual void do_NewMultiArray  (NewMultiArray*   x) = 0;
 187   virtual void do_WithField      (WithField*       x) = 0;
 188   virtual void do_DefaultValue   (DefaultValue*    x) = 0;
 189   virtual void do_CheckCast      (CheckCast*       x) = 0;
 190   virtual void do_InstanceOf     (InstanceOf*      x) = 0;
 191   virtual void do_MonitorEnter   (MonitorEnter*    x) = 0;
 192   virtual void do_MonitorExit    (MonitorExit*     x) = 0;
 193   virtual void do_Intrinsic      (Intrinsic*       x) = 0;
 194   virtual void do_BlockBegin     (BlockBegin*      x) = 0;
 195   virtual void do_Goto           (Goto*            x) = 0;
 196   virtual void do_If             (If*              x) = 0;
 197   virtual void do_IfInstanceOf   (IfInstanceOf*    x) = 0;
 198   virtual void do_TableSwitch    (TableSwitch*     x) = 0;
 199   virtual void do_LookupSwitch   (LookupSwitch*    x) = 0;
 200   virtual void do_Return         (Return*          x) = 0;
 201   virtual void do_Throw          (Throw*           x) = 0;
 202   virtual void do_Base           (Base*            x) = 0;
 203   virtual void do_OsrEntry       (OsrEntry*        x) = 0;
 204   virtual void do_ExceptionObject(ExceptionObject* x) = 0;
 205   virtual void do_RoundFP        (RoundFP*         x) = 0;
 206   virtual void do_UnsafeGetRaw   (UnsafeGetRaw*    x) = 0;
 207   virtual void do_UnsafePutRaw   (UnsafePutRaw*    x) = 0;
 208   virtual void do_UnsafeGetObject(UnsafeGetObject* x) = 0;


 552   virtual LoadIndexed*      as_LoadIndexed()     { return NULL; }
 553   virtual StoreIndexed*     as_StoreIndexed()    { return NULL; }
 554   virtual NegateOp*         as_NegateOp()        { return NULL; }
 555   virtual Op2*              as_Op2()             { return NULL; }
 556   virtual ArithmeticOp*     as_ArithmeticOp()    { return NULL; }
 557   virtual ShiftOp*          as_ShiftOp()         { return NULL; }
 558   virtual LogicOp*          as_LogicOp()         { return NULL; }
 559   virtual CompareOp*        as_CompareOp()       { return NULL; }
 560   virtual IfOp*             as_IfOp()            { return NULL; }
 561   virtual Convert*          as_Convert()         { return NULL; }
 562   virtual NullCheck*        as_NullCheck()       { return NULL; }
 563   virtual OsrEntry*         as_OsrEntry()        { return NULL; }
 564   virtual StateSplit*       as_StateSplit()      { return NULL; }
 565   virtual Invoke*           as_Invoke()          { return NULL; }
 566   virtual NewInstance*      as_NewInstance()     { return NULL; }
 567   virtual NewValueTypeInstance* as_NewValueTypeInstance() { return NULL; }
 568   virtual NewArray*         as_NewArray()        { return NULL; }
 569   virtual NewTypeArray*     as_NewTypeArray()    { return NULL; }
 570   virtual NewObjectArray*   as_NewObjectArray()  { return NULL; }
 571   virtual NewMultiArray*    as_NewMultiArray()   { return NULL; }
 572   virtual WithField*        as_WithField()       { return NULL; }
 573   virtual DefaultValue*     as_DefaultValue()    { return NULL; }
 574   virtual TypeCheck*        as_TypeCheck()       { return NULL; }
 575   virtual CheckCast*        as_CheckCast()       { return NULL; }
 576   virtual InstanceOf*       as_InstanceOf()      { return NULL; }
 577   virtual TypeCast*         as_TypeCast()        { return NULL; }
 578   virtual AccessMonitor*    as_AccessMonitor()   { return NULL; }
 579   virtual MonitorEnter*     as_MonitorEnter()    { return NULL; }
 580   virtual MonitorExit*      as_MonitorExit()     { return NULL; }
 581   virtual Intrinsic*        as_Intrinsic()       { return NULL; }
 582   virtual BlockBegin*       as_BlockBegin()      { return NULL; }
 583   virtual BlockEnd*         as_BlockEnd()        { return NULL; }
 584   virtual Goto*             as_Goto()            { return NULL; }
 585   virtual If*               as_If()              { return NULL; }
 586   virtual IfInstanceOf*     as_IfInstanceOf()    { return NULL; }
 587   virtual TableSwitch*      as_TableSwitch()     { return NULL; }
 588   virtual LookupSwitch*     as_LookupSwitch()    { return NULL; }
 589   virtual Return*           as_Return()          { return NULL; }
 590   virtual Throw*            as_Throw()           { return NULL; }
 591   virtual Base*             as_Base()            { return NULL; }
 592   virtual RoundFP*          as_RoundFP()         { return NULL; }
 593   virtual ExceptionObject*  as_ExceptionObject() { return NULL; }


1456   // accessors
1457   ciKlass* klass() const                         { return _klass; }
1458   Values* dims() const                           { return _dims; }
1459   int rank() const                               { return dims()->length(); }
1460 
1461   // generic
1462   virtual void input_values_do(ValueVisitor* f) {
1463     // NOTE: we do not call NewArray::input_values_do since "length"
1464     // is meaningless for a multi-dimensional array; passing the
1465     // zeroth element down to NewArray as its length is a bad idea
1466     // since there will be a copy in the "dims" array which doesn't
1467     // get updated, and the value must not be traversed twice. Was bug
1468     // - kbr 4/10/2001
1469     StateSplit::input_values_do(f);
1470     for (int i = 0; i < _dims->length(); i++) f->visit(_dims->adr_at(i));
1471   }
1472 
1473   ciType* exact_type() const;
1474 };
1475 
1476 LEAF(WithField, StateSplit)
1477  public:
1478   // creation
1479   WithField(ValueType* type, ValueStack* state_before)
1480   : StateSplit(type, state_before) {}
1481 };
1482 
1483 LEAF(DefaultValue, StateSplit)
1484  public:
1485   // creation
1486   DefaultValue(ValueType* type, ValueStack* state_before)
1487   : StateSplit(type, state_before) {}
1488 };
1489 
1490 BASE(TypeCheck, StateSplit)
1491  private:
1492   ciKlass*    _klass;
1493   Value       _obj;
1494 
1495   ciMethod* _profiled_method;
1496   int       _profiled_bci;
1497 
1498  public:
1499   // creation
1500   TypeCheck(ciKlass* klass, Value obj, ValueType* type, ValueStack* state_before)
1501   : StateSplit(type, state_before), _klass(klass), _obj(obj),
1502     _profiled_method(NULL), _profiled_bci(0) {
1503     ASSERT_VALUES
1504     set_direct_compare(false);
1505   }
1506 
1507   // accessors
1508   ciKlass* klass() const                         { return _klass; }


< prev index next >