| Index: src/safepoint-table.h
|
| diff --git a/src/safepoint-table.h b/src/safepoint-table.h
|
| index 6e5e0d84036ae00c6324dbac65a8eb981b9a6078..d703051423ed10de9d4813d34adf9b560666b737 100644
|
| --- a/src/safepoint-table.h
|
| +++ b/src/safepoint-table.h
|
| @@ -73,6 +73,11 @@ class SafepointEntry BASE_EMBEDDED {
|
| return ArgumentsField::decode(info_);
|
| }
|
|
|
| + bool has_doubles() const {
|
| + ASSERT(is_valid());
|
| + return SaveDoublesField::decode(info_);
|
| + }
|
| +
|
| uint8_t* bits() {
|
| ASSERT(is_valid());
|
| return bits_;
|
| @@ -87,8 +92,9 @@ class SafepointEntry BASE_EMBEDDED {
|
| // instructions before potentially emitting a constant pool.
|
| static const int kGapCodeSizeBits = 13;
|
| static const int kArgumentsFieldBits = 3;
|
| + static const int kSaveDoublesFieldBits = 1;
|
| static const int kDeoptIndexBits =
|
| - 32 - kGapCodeSizeBits - kArgumentsFieldBits;
|
| + 32 - kGapCodeSizeBits - kArgumentsFieldBits - kSaveDoublesFieldBits;
|
| class GapCodeSizeField: public BitField<unsigned, 0, kGapCodeSizeBits> {};
|
| class DeoptimizationIndexField: public BitField<int,
|
| kGapCodeSizeBits,
|
| @@ -96,6 +102,11 @@ class SafepointEntry BASE_EMBEDDED {
|
| class ArgumentsField: public BitField<unsigned,
|
| kGapCodeSizeBits + kDeoptIndexBits,
|
| kArgumentsFieldBits> {}; // NOLINT
|
| + class SaveDoublesField: public BitField<bool,
|
| + kGapCodeSizeBits + kDeoptIndexBits +
|
| + kArgumentsFieldBits,
|
| + kSaveDoublesFieldBits> { }; // NOLINT
|
| +
|
| private:
|
| unsigned info_;
|
| uint8_t* bits_;
|
| @@ -209,6 +220,16 @@ class SafepointTableBuilder BASE_EMBEDDED {
|
| int arguments,
|
| int deoptimization_index = Safepoint::kNoDeoptimizationIndex);
|
|
|
| + // Define a new safepoint with all double registers and the normal
|
| + // registers on the stack for the current position in the body and
|
| + // take the number of arguments on top of the registers into account.
|
| + // TODO(1043) Rewrite the three SafepointTableBuilder::DefineSafepoint
|
| + // methods to one method that uses template arguments.
|
| + Safepoint DefineSafepointWithRegistersAndDoubles(
|
| + Assembler* assembler,
|
| + int arguments,
|
| + int deoptimization_index = Safepoint::kNoDeoptimizationIndex);
|
| +
|
| // Update the last safepoint with the size of the code generated for the gap
|
| // following it.
|
| void SetPcAfterGap(int pc) {
|
| @@ -227,6 +248,7 @@ class SafepointTableBuilder BASE_EMBEDDED {
|
| unsigned deoptimization_index;
|
| unsigned pc_after_gap;
|
| unsigned arguments;
|
| + bool has_doubles;
|
| };
|
|
|
| uint32_t EncodeExceptPC(const DeoptimizationInfo& info);
|
|
|