Chromium Code Reviews| Index: runtime/vm/locations.h |
| =================================================================== |
| --- runtime/vm/locations.h (revision 20148) |
| +++ runtime/vm/locations.h (working copy) |
| @@ -14,6 +14,17 @@ |
| class BufferFormatter; |
| class Value; |
| + |
| +enum Representation { |
| + kNoRepresentation, |
| + kTagged, |
| + kUntagged, |
| + kUnboxedDouble, |
| + kUnboxedMint, |
| + kNumRepresentations |
| +}; |
| + |
| + |
| // Location objects are used to connect register allocator and code generator. |
| // Instruction templates used by code generator have a corresponding |
| // LocationSummary object which specifies expected location for every input |
| @@ -160,10 +171,10 @@ |
| } |
| // Register locations. |
| - static Location RegisterLocation(Register reg) { |
| + static Location RegisterLocation(Register reg, Representation rep = kTagged) { |
| uword payload = |
| RegisterField::encode(reg) | |
| - RepresentationField::encode(kDouble); // Unused for Register. |
| + RepresentationField::encode(rep); |
| return Location(kRegister, payload); |
| } |
| @@ -176,15 +187,7 @@ |
| return RegisterField::decode(payload()); |
| } |
| - // FPU registers and double spill slots can contain either doubles |
| - // or 64-bit integers. |
| - enum Representation { |
| - kDouble, |
| - kMint |
| - }; |
| - |
| Representation representation() const { |
| - ASSERT(IsFpuRegister() || IsDoubleStackSlot()); |
| return RepresentationField::decode(payload()); |
| } |
| @@ -230,7 +233,7 @@ |
| // Spill slots. |
| static Location StackSlot(intptr_t stack_index, |
| - Representation rep = kDouble) { |
| + Representation rep = kTagged) { |
| ASSERT((-kStackIndexBias <= stack_index) && |
| (stack_index < kStackIndexBias)); |
| uword payload = |
| @@ -310,9 +313,9 @@ |
| // Layout for kUnallocated locations payload. |
| typedef BitField<Policy, 0, 3> PolicyField; |
| - // Layout for register locations payload. The representation bit is only used |
| - // for FpuRegister and unused for Register. |
| - static const intptr_t kBitsForRepresentation = 1; |
| + // Layout for register locations payload. |
| + static const intptr_t kBitsForRepresentation = 3; |
| + COMPILE_ASSERT(kNumRepresentations <= 8, invalid_enum); |
|
Vyacheslav Egorov (Google)
2013/03/18 18:42:29
this 8 is disconnected from 3 above. please connec
Florian Schneider
2013/03/19 11:48:57
Done.
|
| static const intptr_t kBitsForRegister = |
| kBitsForPayload - kBitsForRepresentation; |
| typedef BitField<Representation, |
| @@ -325,8 +328,7 @@ |
| kBitsForRepresentation, |
| kBitsForRegister> FpuRegisterField; |
| - // Layout for stack slots. The representation bit is only used for |
| - // DoubleStackSlot and unused for StackSlot. |
| + // Layout for stack slots. |
| static const intptr_t kBitsForIndex = |
| kBitsForPayload - kBitsForRepresentation; |
| typedef BitField<uword, |