45 static int TYPE_MASK_IN_PLACE; |
45 static int TYPE_MASK_IN_PLACE; |
46 static int REGISTER_MASK; |
46 static int REGISTER_MASK; |
47 static int REGISTER_MASK_IN_PLACE; |
47 static int REGISTER_MASK_IN_PLACE; |
48 |
48 |
49 // Types of OopValues |
49 // Types of OopValues |
50 static int UNUSED_VALUE; |
|
51 static int OOP_VALUE; |
50 static int OOP_VALUE; |
52 static int NARROWOOP_VALUE; |
51 static int NARROWOOP_VALUE; |
53 static int CALLEE_SAVED_VALUE; |
52 static int CALLEE_SAVED_VALUE; |
54 static int DERIVED_OOP_VALUE; |
53 static int DERIVED_OOP_VALUE; |
55 |
54 |
68 REGISTER_SHIFT = db.lookupIntConstant("OopMapValue::register_shift").intValue(); |
67 REGISTER_SHIFT = db.lookupIntConstant("OopMapValue::register_shift").intValue(); |
69 TYPE_MASK = db.lookupIntConstant("OopMapValue::type_mask").intValue(); |
68 TYPE_MASK = db.lookupIntConstant("OopMapValue::type_mask").intValue(); |
70 TYPE_MASK_IN_PLACE = db.lookupIntConstant("OopMapValue::type_mask_in_place").intValue(); |
69 TYPE_MASK_IN_PLACE = db.lookupIntConstant("OopMapValue::type_mask_in_place").intValue(); |
71 REGISTER_MASK = db.lookupIntConstant("OopMapValue::register_mask").intValue(); |
70 REGISTER_MASK = db.lookupIntConstant("OopMapValue::register_mask").intValue(); |
72 REGISTER_MASK_IN_PLACE = db.lookupIntConstant("OopMapValue::register_mask_in_place").intValue(); |
71 REGISTER_MASK_IN_PLACE = db.lookupIntConstant("OopMapValue::register_mask_in_place").intValue(); |
73 UNUSED_VALUE = db.lookupIntConstant("OopMapValue::unused_value").intValue(); |
|
74 OOP_VALUE = db.lookupIntConstant("OopMapValue::oop_value").intValue(); |
72 OOP_VALUE = db.lookupIntConstant("OopMapValue::oop_value").intValue(); |
75 NARROWOOP_VALUE = db.lookupIntConstant("OopMapValue::narrowoop_value").intValue(); |
73 NARROWOOP_VALUE = db.lookupIntConstant("OopMapValue::narrowoop_value").intValue(); |
76 CALLEE_SAVED_VALUE = db.lookupIntConstant("OopMapValue::callee_saved_value").intValue(); |
74 CALLEE_SAVED_VALUE = db.lookupIntConstant("OopMapValue::callee_saved_value").intValue(); |
77 DERIVED_OOP_VALUE = db.lookupIntConstant("OopMapValue::derived_oop_value").intValue(); |
75 DERIVED_OOP_VALUE = db.lookupIntConstant("OopMapValue::derived_oop_value").intValue(); |
78 } |
76 } |
79 |
77 |
80 public static abstract class OopTypes { |
78 public static abstract class OopTypes { |
81 public static final OopTypes UNUSED_VALUE = new OopTypes() { int getValue() { return OopMapValue.UNUSED_VALUE; }}; |
|
82 public static final OopTypes OOP_VALUE = new OopTypes() { int getValue() { return OopMapValue.OOP_VALUE; }}; |
79 public static final OopTypes OOP_VALUE = new OopTypes() { int getValue() { return OopMapValue.OOP_VALUE; }}; |
83 public static final OopTypes NARROWOOP_VALUE = new OopTypes() { int getValue() { return OopMapValue.NARROWOOP_VALUE; }}; |
80 public static final OopTypes NARROWOOP_VALUE = new OopTypes() { int getValue() { return OopMapValue.NARROWOOP_VALUE; }}; |
84 public static final OopTypes CALLEE_SAVED_VALUE = new OopTypes() { int getValue() { return OopMapValue.CALLEE_SAVED_VALUE; }}; |
81 public static final OopTypes CALLEE_SAVED_VALUE = new OopTypes() { int getValue() { return OopMapValue.CALLEE_SAVED_VALUE; }}; |
85 public static final OopTypes DERIVED_OOP_VALUE = new OopTypes() { int getValue() { return OopMapValue.DERIVED_OOP_VALUE; }}; |
82 public static final OopTypes DERIVED_OOP_VALUE = new OopTypes() { int getValue() { return OopMapValue.DERIVED_OOP_VALUE; }}; |
86 |
83 |
109 public VMReg getReg() { return new VMReg((getValue() & REGISTER_MASK_IN_PLACE) >> REGISTER_SHIFT); } |
106 public VMReg getReg() { return new VMReg((getValue() & REGISTER_MASK_IN_PLACE) >> REGISTER_SHIFT); } |
110 public void setReg(VMReg r) { setValue((short) (r.getValue() << REGISTER_SHIFT | (getValue() & TYPE_MASK_IN_PLACE))); } |
107 public void setReg(VMReg r) { setValue((short) (r.getValue() << REGISTER_SHIFT | (getValue() & TYPE_MASK_IN_PLACE))); } |
111 |
108 |
112 public OopTypes getType() { |
109 public OopTypes getType() { |
113 int which = (getValue() & TYPE_MASK_IN_PLACE); |
110 int which = (getValue() & TYPE_MASK_IN_PLACE); |
114 if (which == UNUSED_VALUE) return OopTypes.UNUSED_VALUE; |
111 if (which == OOP_VALUE) return OopTypes.OOP_VALUE; |
115 else if (which == OOP_VALUE) return OopTypes.OOP_VALUE; |
|
116 else if (which == NARROWOOP_VALUE) return OopTypes.NARROWOOP_VALUE; |
112 else if (which == NARROWOOP_VALUE) return OopTypes.NARROWOOP_VALUE; |
117 else if (which == CALLEE_SAVED_VALUE) return OopTypes.CALLEE_SAVED_VALUE; |
113 else if (which == CALLEE_SAVED_VALUE) return OopTypes.CALLEE_SAVED_VALUE; |
118 else if (which == DERIVED_OOP_VALUE) return OopTypes.DERIVED_OOP_VALUE; |
114 else if (which == DERIVED_OOP_VALUE) return OopTypes.DERIVED_OOP_VALUE; |
119 else throw new InternalError("unknown which " + which + " (TYPE_MASK_IN_PLACE = " + TYPE_MASK_IN_PLACE + ")"); |
115 else throw new InternalError("unknown which " + which + " (TYPE_MASK_IN_PLACE = " + TYPE_MASK_IN_PLACE + ")"); |
120 } |
116 } |