| Index: src/code-stubs.h
|
| diff --git a/src/code-stubs.h b/src/code-stubs.h
|
| index 4d021c2dc7dbe19c901d15753d288c1e8ad506ee..6375cb4fa6431e56d252484d4c34814f056ef891 100644
|
| --- a/src/code-stubs.h
|
| +++ b/src/code-stubs.h
|
| @@ -150,7 +150,7 @@ class CodeStub BASE_EMBEDDED {
|
| static Major MajorKeyFromKey(uint32_t key) {
|
| return static_cast<Major>(MajorKeyBits::decode(key));
|
| }
|
| - static int MinorKeyFromKey(uint32_t key) {
|
| + static uint32_t MinorKeyFromKey(uint32_t key) {
|
| return MinorKeyBits::decode(key);
|
| }
|
|
|
| @@ -163,7 +163,7 @@ class CodeStub BASE_EMBEDDED {
|
|
|
| static const char* MajorName(Major major_key, bool allow_unknown_keys);
|
|
|
| - explicit CodeStub(Isolate* isolate) : isolate_(isolate) { }
|
| + explicit CodeStub(Isolate* isolate) : minor_key_(0), isolate_(isolate) {}
|
| virtual ~CodeStub() {}
|
|
|
| static void GenerateStubsAheadOfTime(Isolate* isolate);
|
| @@ -182,7 +182,7 @@ class CodeStub BASE_EMBEDDED {
|
|
|
| // Returns information for computing the number key.
|
| virtual Major MajorKey() const = 0;
|
| - virtual int MinorKey() const = 0;
|
| + virtual uint32_t MinorKey() const { return minor_key_; }
|
|
|
| virtual InlineCacheState GetICState() const { return UNINITIALIZED; }
|
| virtual ExtraICState GetExtraICState() const { return kNoExtraICState; }
|
| @@ -215,6 +215,8 @@ class CodeStub BASE_EMBEDDED {
|
| return MinorKeyBits::encode(MinorKey()) | MajorKeyBits::encode(MajorKey());
|
| }
|
|
|
| + uint32_t minor_key_;
|
| +
|
| private:
|
| // Perform bookkeeping required after code generation when stub code is
|
| // initially generated.
|
| @@ -476,7 +478,7 @@ class HydrogenCodeStub : public CodeStub {
|
| class IsMissBits: public BitField<bool, kStubMinorKeyBits - 1, 1> {};
|
|
|
| void GenerateLightweightMiss(MacroAssembler* masm);
|
| - virtual int MinorKey() const {
|
| + virtual uint32_t MinorKey() const {
|
| return IsMissBits::encode(is_uninitialized_) |
|
| MinorKeyBits::encode(NotMissMinorKey());
|
| }
|
| @@ -753,7 +755,7 @@ class InstanceofStub: public PlatformCodeStub {
|
|
|
| private:
|
| Major MajorKey() const { return Instanceof; }
|
| - int MinorKey() const { return static_cast<int>(flags_); }
|
| + uint32_t MinorKey() const { return static_cast<int>(flags_); }
|
|
|
| bool HasArgsInRegisters() const {
|
| return (flags_ & kArgsInRegisters) != 0;
|
| @@ -794,7 +796,7 @@ class ArrayConstructorStub: public PlatformCodeStub {
|
| virtual void PrintName(OStream& os) const V8_OVERRIDE; // NOLINT
|
|
|
| virtual CodeStub::Major MajorKey() const { return ArrayConstructor; }
|
| - virtual int MinorKey() const { return argument_count_; }
|
| + virtual uint32_t MinorKey() const { return argument_count_; }
|
|
|
| ArgumentCountKey argument_count_;
|
| };
|
| @@ -808,7 +810,7 @@ class InternalArrayConstructorStub: public PlatformCodeStub {
|
|
|
| private:
|
| virtual CodeStub::Major MajorKey() const { return InternalArrayConstructor; }
|
| - virtual int MinorKey() const { return 0; }
|
| + virtual uint32_t MinorKey() const { return 0; }
|
|
|
| void GenerateCase(MacroAssembler* masm, ElementsKind kind);
|
| };
|
| @@ -824,7 +826,7 @@ class MathPowStub: public PlatformCodeStub {
|
|
|
| private:
|
| virtual CodeStub::Major MajorKey() const { return MathPow; }
|
| - virtual int MinorKey() const { return exponent_type_; }
|
| + virtual uint32_t MinorKey() const { return exponent_type_; }
|
|
|
| ExponentType exponent_type_;
|
| };
|
| @@ -857,7 +859,7 @@ class CallICStub: public PlatformCodeStub {
|
| }
|
|
|
| protected:
|
| - virtual int MinorKey() const { return GetExtraICState(); }
|
| + virtual uint32_t MinorKey() const { return GetExtraICState(); }
|
| virtual void PrintState(OStream& os) const V8_OVERRIDE; // NOLINT
|
|
|
| virtual CodeStub::Major MajorKey() const { return CallIC; }
|
| @@ -897,7 +899,7 @@ class FunctionPrototypeStub : public PlatformCodeStub {
|
|
|
| private:
|
| virtual CodeStub::Major MajorKey() const { return FunctionPrototype; }
|
| - virtual int MinorKey() const { return 0; }
|
| + virtual uint32_t MinorKey() const { return 0; }
|
| };
|
|
|
|
|
| @@ -1083,7 +1085,7 @@ class CallApiFunctionStub : public PlatformCodeStub {
|
| private:
|
| virtual void Generate(MacroAssembler* masm) V8_OVERRIDE;
|
| virtual Major MajorKey() const V8_OVERRIDE { return CallApiFunction; }
|
| - virtual int MinorKey() const V8_OVERRIDE { return bit_field_; }
|
| + virtual uint32_t MinorKey() const V8_OVERRIDE { return bit_field_; }
|
|
|
| class IsStoreBits: public BitField<bool, 0, 1> {};
|
| class CallDataUndefinedBits: public BitField<bool, 1, 1> {};
|
| @@ -1102,7 +1104,7 @@ class CallApiGetterStub : public PlatformCodeStub {
|
| private:
|
| virtual void Generate(MacroAssembler* masm) V8_OVERRIDE;
|
| virtual Major MajorKey() const V8_OVERRIDE { return CallApiGetter; }
|
| - virtual int MinorKey() const V8_OVERRIDE { return 0; }
|
| + virtual uint32_t MinorKey() const V8_OVERRIDE { return 0; }
|
|
|
| DISALLOW_COPY_AND_ASSIGN(CallApiGetterStub);
|
| };
|
| @@ -1196,7 +1198,7 @@ class BinaryOpICWithAllocationSiteStub V8_FINAL : public PlatformCodeStub {
|
| virtual Major MajorKey() const V8_OVERRIDE {
|
| return BinaryOpICWithAllocationSite;
|
| }
|
| - virtual int MinorKey() const V8_OVERRIDE { return GetExtraICState(); }
|
| + virtual uint32_t MinorKey() const V8_OVERRIDE { return GetExtraICState(); }
|
|
|
| private:
|
| static void GenerateAheadOfTime(Isolate* isolate,
|
| @@ -1327,7 +1329,7 @@ class ICCompareStub: public PlatformCodeStub {
|
| class HandlerStateField: public BitField<int, 11, 4> { };
|
|
|
| virtual CodeStub::Major MajorKey() const { return CompareIC; }
|
| - virtual int MinorKey() const;
|
| + virtual uint32_t MinorKey() const;
|
|
|
| virtual Code::Kind GetCodeKind() const { return Code::COMPARE_IC; }
|
|
|
| @@ -1460,14 +1462,22 @@ OStream& operator<<(OStream& os, const CompareNilICStub::State& s);
|
|
|
| class CEntryStub : public PlatformCodeStub {
|
| public:
|
| - CEntryStub(Isolate* isolate,
|
| - int result_size,
|
| + CEntryStub(Isolate* isolate, int result_size,
|
| SaveFPRegsMode save_doubles = kDontSaveFPRegs)
|
| - : PlatformCodeStub(isolate),
|
| - result_size_(result_size),
|
| - save_doubles_(save_doubles) { }
|
| + : PlatformCodeStub(isolate) {
|
| + minor_key_ = SaveDoublesBits::encode(save_doubles == kSaveFPRegs);
|
| + DCHECK(result_size == 1 || result_size == 2);
|
| +#ifdef _WIN64
|
| + minor_key_ = ResultSizeBits::update(minor_key_, result_size);
|
| +#endif // _WIN64
|
| + }
|
|
|
| void Generate(MacroAssembler* masm);
|
| + bool save_doubles() const { return SaveDoublesBits::decode(minor_key_); }
|
| +#ifdef _WIN64
|
| + int result_size() const { ResultSizeBits::decode(minor_key_); }
|
| +#endif // _WIN64
|
| +
|
|
|
| // The version of this stub that doesn't save doubles is generated ahead of
|
| // time, so it's OK to call it from other stubs that can't cope with GC during
|
| @@ -1476,14 +1486,12 @@ class CEntryStub : public PlatformCodeStub {
|
| static void GenerateAheadOfTime(Isolate* isolate);
|
|
|
| private:
|
| - // Number of pointers/values returned.
|
| - const int result_size_;
|
| - SaveFPRegsMode save_doubles_;
|
| -
|
| Major MajorKey() const { return CEntry; }
|
| - int MinorKey() const;
|
|
|
| bool NeedsImmovableCode();
|
| +
|
| + class SaveDoublesBits : public BitField<bool, 0, 1> {};
|
| + class ResultSizeBits : public BitField<int, 3, 1> {};
|
| };
|
|
|
|
|
| @@ -1498,7 +1506,7 @@ class JSEntryStub : public PlatformCodeStub {
|
|
|
| private:
|
| Major MajorKey() const { return JSEntry; }
|
| - int MinorKey() const { return 0; }
|
| + uint32_t MinorKey() const { return 0; }
|
|
|
| virtual void FinishCode(Handle<Code> code);
|
|
|
| @@ -1513,7 +1521,7 @@ class JSConstructEntryStub : public JSEntryStub {
|
| void Generate(MacroAssembler* masm) { GenerateBody(masm, true); }
|
|
|
| private:
|
| - int MinorKey() const { return 1; }
|
| + uint32_t MinorKey() const { return 1; }
|
|
|
| virtual void PrintName(OStream& os) const V8_OVERRIDE { // NOLINT
|
| os << "JSConstructEntryStub";
|
| @@ -1537,7 +1545,7 @@ class ArgumentsAccessStub: public PlatformCodeStub {
|
| Type type_;
|
|
|
| Major MajorKey() const { return ArgumentsAccess; }
|
| - int MinorKey() const { return type_; }
|
| + uint32_t MinorKey() const { return type_; }
|
|
|
| void Generate(MacroAssembler* masm);
|
| void GenerateReadElement(MacroAssembler* masm);
|
| @@ -1555,7 +1563,7 @@ class RegExpExecStub: public PlatformCodeStub {
|
|
|
| private:
|
| Major MajorKey() const { return RegExpExec; }
|
| - int MinorKey() const { return 0; }
|
| + uint32_t MinorKey() const { return 0; }
|
|
|
| void Generate(MacroAssembler* masm);
|
| };
|
| @@ -1615,7 +1623,7 @@ class CallFunctionStub: public PlatformCodeStub {
|
| STATIC_ASSERT(Code::kArgumentsBits + 2 <= kStubMinorKeyBits);
|
|
|
| Major MajorKey() const { return CallFunction; }
|
| - int MinorKey() const {
|
| + uint32_t MinorKey() const {
|
| // Encode the parameters in a unique 32 bit value.
|
| return FlagBits::encode(flags_) | ArgcBits::encode(argc_);
|
| }
|
| @@ -1650,7 +1658,7 @@ class CallConstructStub: public PlatformCodeStub {
|
| virtual void PrintName(OStream& os) const V8_OVERRIDE; // NOLINT
|
|
|
| Major MajorKey() const { return CallConstruct; }
|
| - int MinorKey() const { return flags_; }
|
| + uint32_t MinorKey() const { return flags_; }
|
|
|
| bool RecordCallTarget() const {
|
| return (flags_ & RECORD_CONSTRUCTOR_TARGET) != 0;
|
| @@ -1859,7 +1867,7 @@ class LoadDictionaryElementPlatformStub : public PlatformCodeStub {
|
|
|
| private:
|
| Major MajorKey() const { return LoadElement; }
|
| - int MinorKey() const { return DICTIONARY_ELEMENTS; }
|
| + uint32_t MinorKey() const { return DICTIONARY_ELEMENTS; }
|
|
|
| DISALLOW_COPY_AND_ASSIGN(LoadDictionaryElementPlatformStub);
|
| };
|
| @@ -1946,7 +1954,7 @@ class DoubleToIStub : public PlatformCodeStub {
|
| public BitField<int, 2 * kBitsPerRegisterNumber + 5, 1> {}; // NOLINT
|
|
|
| Major MajorKey() const { return DoubleToI; }
|
| - int MinorKey() const { return bit_field_; }
|
| + uint32_t MinorKey() const { return bit_field_; }
|
|
|
| int bit_field_;
|
|
|
| @@ -2282,7 +2290,7 @@ class StoreElementStub : public PlatformCodeStub {
|
| store_mode_(store_mode) {}
|
|
|
| Major MajorKey() const { return StoreElement; }
|
| - int MinorKey() const {
|
| + uint32_t MinorKey() const {
|
| return ElementsKindBits::encode(elements_kind_) |
|
| IsJSArrayBits::encode(is_js_array_) |
|
| StoreModeBits::encode(store_mode_);
|
| @@ -2472,7 +2480,7 @@ class StoreArrayLiteralElementStub : public PlatformCodeStub {
|
|
|
| private:
|
| Major MajorKey() const { return StoreArrayLiteralElement; }
|
| - int MinorKey() const { return 0; }
|
| + uint32_t MinorKey() const { return 0; }
|
|
|
| void Generate(MacroAssembler* masm);
|
|
|
| @@ -2492,7 +2500,9 @@ class StubFailureTrampolineStub : public PlatformCodeStub {
|
| class FunctionModeField: public BitField<StubFunctionMode, 0, 1> {};
|
|
|
| Major MajorKey() const { return StubFailureTrampoline; }
|
| - int MinorKey() const { return FunctionModeField::encode(function_mode_); }
|
| + uint32_t MinorKey() const {
|
| + return FunctionModeField::encode(function_mode_);
|
| + }
|
|
|
| void Generate(MacroAssembler* masm);
|
|
|
| @@ -2518,7 +2528,7 @@ class ProfileEntryHookStub : public PlatformCodeStub {
|
| Isolate* isolate);
|
|
|
| Major MajorKey() const { return ProfileEntryHook; }
|
| - int MinorKey() const { return 0; }
|
| + uint32_t MinorKey() const { return 0; }
|
|
|
| void Generate(MacroAssembler* masm);
|
|
|
|
|