OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef VM_LOCATIONS_H_ | 5 #ifndef VM_LOCATIONS_H_ |
6 #define VM_LOCATIONS_H_ | 6 #define VM_LOCATIONS_H_ |
7 | 7 |
8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/bitfield.h" | 10 #include "vm/bitfield.h" |
11 | 11 |
12 namespace dart { | 12 namespace dart { |
13 | 13 |
14 class BufferFormatter; | 14 class BufferFormatter; |
15 class Value; | 15 class Value; |
16 class PairLocation; | 16 class PairLocation; |
| 17 class ConstantInstr; |
17 | 18 |
18 | 19 |
19 enum Representation { | 20 enum Representation { |
20 kNoRepresentation, | 21 kNoRepresentation, |
21 kTagged, | 22 kTagged, |
22 kUntagged, | 23 kUntagged, |
23 kUnboxedDouble, | 24 kUnboxedDouble, |
| 25 kUnboxedInt32, |
24 kUnboxedUint32, | 26 kUnboxedUint32, |
25 kUnboxedMint, | 27 kUnboxedMint, |
26 kUnboxedFloat32x4, | 28 kUnboxedFloat32x4, |
27 kUnboxedInt32x4, | 29 kUnboxedInt32x4, |
28 kUnboxedFloat64x2, | 30 kUnboxedFloat64x2, |
29 kPairOfTagged, | 31 kPairOfTagged, |
30 kPairOfUnboxedDouble, | 32 kPairOfUnboxedDouble, |
31 kNumRepresentations | 33 kNumRepresentations |
32 }; | 34 }; |
33 | 35 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 | 138 |
137 bool IsInvalid() const { | 139 bool IsInvalid() const { |
138 return value_ == kInvalidLocation; | 140 return value_ == kInvalidLocation; |
139 } | 141 } |
140 | 142 |
141 // Constants. | 143 // Constants. |
142 bool IsConstant() const { | 144 bool IsConstant() const { |
143 return (value_ & kLocationTagMask) == kConstantTag; | 145 return (value_ & kLocationTagMask) == kConstantTag; |
144 } | 146 } |
145 | 147 |
146 static Location Constant(const Object& obj) { | 148 static Location Constant(ConstantInstr* obj) { |
147 Location loc(reinterpret_cast<uword>(&obj) | kConstantTag); | 149 Location loc(reinterpret_cast<uword>(obj) | kConstantTag); |
148 ASSERT(&obj == &loc.constant()); | 150 ASSERT(obj == loc.constant_instruction()); |
149 return loc; | 151 return loc; |
150 } | 152 } |
151 | 153 |
152 const Object& constant() const { | 154 ConstantInstr* constant_instruction() const { |
153 ASSERT(IsConstant()); | 155 ASSERT(IsConstant()); |
154 return *reinterpret_cast<const Object*>(value_ & ~kLocationTagMask); | 156 return reinterpret_cast<ConstantInstr*>(value_ & ~kLocationTagMask); |
155 } | 157 } |
156 | 158 |
| 159 const Object& constant() const; |
| 160 |
157 bool IsPairLocation() const { | 161 bool IsPairLocation() const { |
158 return (value_ & kLocationTagMask) == kPairLocationTag; | 162 return (value_ & kLocationTagMask) == kPairLocationTag; |
159 } | 163 } |
160 | 164 |
161 static Location Pair(Location first, Location second); | 165 static Location Pair(Location first, Location second); |
162 | 166 |
163 PairLocation* AsPairLocation() const; | 167 PairLocation* AsPairLocation() const; |
164 | 168 |
165 // Unallocated locations. | 169 // Unallocated locations. |
166 enum Policy { | 170 enum Policy { |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
637 BitmapBuilder* stack_bitmap_; | 641 BitmapBuilder* stack_bitmap_; |
638 | 642 |
639 const ContainsCall contains_call_; | 643 const ContainsCall contains_call_; |
640 RegisterSet live_registers_; | 644 RegisterSet live_registers_; |
641 }; | 645 }; |
642 | 646 |
643 | 647 |
644 } // namespace dart | 648 } // namespace dart |
645 | 649 |
646 #endif // VM_LOCATIONS_H_ | 650 #endif // VM_LOCATIONS_H_ |
OLD | NEW |