Index: src/frame-element.h |
=================================================================== |
--- src/frame-element.h (revision 4147) |
+++ src/frame-element.h (working copy) |
@@ -145,6 +145,16 @@ |
void set_copied() { value_ = value_ | CopiedField::encode(true); } |
void clear_copied() { value_ = value_ & ~CopiedField::mask(); } |
+ // An untagged int32 FrameElement represents a signed int32 |
+ // on the stack. These are only allowed in a side-effect-free |
+ // int32 calculation, and if a non-int32 input shows up or an overflow |
+ // occurs, we bail out and drop all the int32 values. |
+ void set_untagged_int32(bool value) { |
+ value_ &= ~UntaggedInt32Field::mask(); |
+ value_ |= UntaggedInt32Field::encode(value); |
+ } |
+ bool is_untagged_int32() const { return UntaggedInt32Field::decode(value_); } |
+ |
Register reg() const { |
ASSERT(is_register()); |
uint32_t reg = DataField::decode(value_); |
@@ -255,8 +265,9 @@ |
class TypeField: public BitField<Type, 0, 3> {}; |
class CopiedField: public BitField<bool, 3, 1> {}; |
class SyncedField: public BitField<bool, 4, 1> {}; |
- class NumberInfoField: public BitField<int, 5, 4> {}; |
- class DataField: public BitField<uint32_t, 9, 32 - 9> {}; |
+ class UntaggedInt32Field: public BitField<bool, 5, 1> {}; |
+ class NumberInfoField: public BitField<int, 6, 4> {}; |
+ class DataField: public BitField<uint32_t, 10, 32 - 10> {}; |
friend class VirtualFrame; |
}; |