| OLD | NEW | 
|     1 // Copyright 2012 the V8 project authors. All rights reserved. |     1 // Copyright 2012 the V8 project authors. All rights reserved. | 
|     2 // Redistribution and use in source and binary forms, with or without |     2 // Redistribution and use in source and binary forms, with or without | 
|     3 // modification, are permitted provided that the following conditions are |     3 // modification, are permitted provided that the following conditions are | 
|     4 // met: |     4 // met: | 
|     5 // |     5 // | 
|     6 //     * Redistributions of source code must retain the above copyright |     6 //     * Redistributions of source code must retain the above copyright | 
|     7 //       notice, this list of conditions and the following disclaimer. |     7 //       notice, this list of conditions and the following disclaimer. | 
|     8 //     * Redistributions in binary form must reproduce the above |     8 //     * Redistributions in binary form must reproduce the above | 
|     9 //       copyright notice, this list of conditions and the following |     9 //       copyright notice, this list of conditions and the following | 
|    10 //       disclaimer in the documentation and/or other materials provided |    10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
|    33 #include "globals.h" |    33 #include "globals.h" | 
|    34 #include "codegen.h" |    34 #include "codegen.h" | 
|    35  |    35  | 
|    36 namespace v8 { |    36 namespace v8 { | 
|    37 namespace internal { |    37 namespace internal { | 
|    38  |    38  | 
|    39 // List of code stubs used on all platforms. |    39 // List of code stubs used on all platforms. | 
|    40 #define CODE_STUB_LIST_ALL_PLATFORMS(V)  \ |    40 #define CODE_STUB_LIST_ALL_PLATFORMS(V)  \ | 
|    41   V(CallFunction)                        \ |    41   V(CallFunction)                        \ | 
|    42   V(CallConstruct)                       \ |    42   V(CallConstruct)                       \ | 
 |    43   V(UnaryOp)                             \ | 
|    43   V(BinaryOp)                            \ |    44   V(BinaryOp)                            \ | 
|    44   V(StringAdd)                           \ |    45   V(StringAdd)                           \ | 
|    45   V(SubString)                           \ |    46   V(SubString)                           \ | 
|    46   V(StringCompare)                       \ |    47   V(StringCompare)                       \ | 
|    47   V(Compare)                             \ |    48   V(Compare)                             \ | 
|    48   V(CompareIC)                           \ |    49   V(CompareIC)                           \ | 
|    49   V(CompareNilIC)                        \ |    50   V(CompareNilIC)                        \ | 
|    50   V(MathPow)                             \ |    51   V(MathPow)                             \ | 
|    51   V(StringLength)                        \ |    52   V(StringLength)                        \ | 
|    52   V(FunctionPrototype)                   \ |    53   V(FunctionPrototype)                   \ | 
| (...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   585   class StrictModeBits: public BitField<StrictModeFlag, 0, 1> {}; |   586   class StrictModeBits: public BitField<StrictModeFlag, 0, 1> {}; | 
|   586   class IsConstantBits: public BitField<bool, 1, 1> {}; |   587   class IsConstantBits: public BitField<bool, 1, 1> {}; | 
|   587   class RepresentationBits: public BitField<Representation::Kind, 2, 8> {}; |   588   class RepresentationBits: public BitField<Representation::Kind, 2, 8> {}; | 
|   588  |   589  | 
|   589   int bit_field_; |   590   int bit_field_; | 
|   590  |   591  | 
|   591   DISALLOW_COPY_AND_ASSIGN(StoreGlobalStub); |   592   DISALLOW_COPY_AND_ASSIGN(StoreGlobalStub); | 
|   592 }; |   593 }; | 
|   593  |   594  | 
|   594  |   595  | 
 |   596 class UnaryOpStub : public HydrogenCodeStub { | 
 |   597  public: | 
 |   598   // Stub without type info available -> construct uninitialized | 
 |   599   explicit UnaryOpStub(Token::Value operation) | 
 |   600       : HydrogenCodeStub(UNINITIALIZED), operation_(operation) { } | 
 |   601   explicit UnaryOpStub(Code::ExtraICState ic_state) : | 
 |   602       state_(StateBits::decode(ic_state)), | 
 |   603       operation_(OperatorBits::decode(ic_state)) { } | 
 |   604  | 
 |   605   virtual void InitializeInterfaceDescriptor( | 
 |   606       Isolate* isolate, | 
 |   607       CodeStubInterfaceDescriptor* descriptor); | 
 |   608  | 
 |   609   virtual Code::Kind GetCodeKind() const { return Code::UNARY_OP_IC; } | 
 |   610   virtual InlineCacheState GetICState() { | 
 |   611     if (state_.Contains(GENERIC)) { | 
 |   612       return MEGAMORPHIC; | 
 |   613     } else if (state_.IsEmpty()) { | 
 |   614       return PREMONOMORPHIC; | 
 |   615     } else { | 
 |   616       return MONOMORPHIC; | 
 |   617     } | 
 |   618   } | 
 |   619   virtual Code::ExtraICState GetExtraICState() { | 
 |   620     return OperatorBits::encode(operation_) | | 
 |   621            StateBits::encode(state_.ToIntegral()); | 
 |   622   } | 
 |   623  | 
 |   624   Token::Value operation() { return operation_; } | 
 |   625   Handle<JSFunction> ToJSFunction(Isolate* isolate); | 
 |   626   Builtins::JavaScript ToJSBuiltin(); | 
 |   627  | 
 |   628   void UpdateStatus(Handle<Object> object); | 
 |   629   MaybeObject* Result(Handle<Object> object, Isolate* isolate); | 
 |   630   Handle<Code> GenerateCode(); | 
 |   631   Handle<Type> GetType(Isolate* isolate); | 
 |   632  | 
 |   633  protected: | 
 |   634   void PrintState(StringStream* stream); | 
 |   635   void PrintBaseName(StringStream* stream); | 
 |   636  | 
 |   637  private: | 
 |   638   enum UnaryOpType { | 
 |   639     SMI, | 
 |   640     HEAP_NUMBER, | 
 |   641     GENERIC, | 
 |   642     NUMBER_OF_TYPES | 
 |   643   }; | 
 |   644  | 
 |   645   class State : public EnumSet<UnaryOpType, byte> { | 
 |   646    public: | 
 |   647     State() : EnumSet<UnaryOpType, byte>() { } | 
 |   648     explicit State(byte bits) : EnumSet<UnaryOpType, byte>(bits) { } | 
 |   649     void Print(StringStream* stream) const; | 
 |   650   }; | 
 |   651  | 
 |   652   class StateBits : public BitField<int, 0, NUMBER_OF_TYPES> { }; | 
 |   653   class OperatorBits : public BitField<Token::Value, NUMBER_OF_TYPES, 8> { }; | 
 |   654  | 
 |   655   State state_; | 
 |   656   Token::Value operation_; | 
 |   657  | 
 |   658   virtual CodeStub::Major MajorKey() { return UnaryOp; } | 
 |   659   virtual int NotMissMinorKey() { return GetExtraICState(); } | 
 |   660 }; | 
 |   661  | 
 |   662  | 
|   595 class FastCloneShallowArrayStub : public HydrogenCodeStub { |   663 class FastCloneShallowArrayStub : public HydrogenCodeStub { | 
|   596  public: |   664  public: | 
|   597   // Maximum length of copied elements array. |   665   // Maximum length of copied elements array. | 
|   598   static const int kMaximumClonedLength = 8; |   666   static const int kMaximumClonedLength = 8; | 
|   599   enum Mode { |   667   enum Mode { | 
|   600     CLONE_ELEMENTS, |   668     CLONE_ELEMENTS, | 
|   601     CLONE_DOUBLE_ELEMENTS, |   669     CLONE_DOUBLE_ELEMENTS, | 
|   602     COPY_ON_WRITE_ELEMENTS, |   670     COPY_ON_WRITE_ELEMENTS, | 
|   603     CLONE_ANY_ELEMENTS, |   671     CLONE_ANY_ELEMENTS, | 
|   604     LAST_CLONE_MODE = CLONE_ANY_ELEMENTS |   672     LAST_CLONE_MODE = CLONE_ANY_ELEMENTS | 
| (...skipping 1702 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2307   int MinorKey() { return 0; } |  2375   int MinorKey() { return 0; } | 
|  2308  |  2376  | 
|  2309   void Generate(MacroAssembler* masm); |  2377   void Generate(MacroAssembler* masm); | 
|  2310  |  2378  | 
|  2311   DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub); |  2379   DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub); | 
|  2312 }; |  2380 }; | 
|  2313  |  2381  | 
|  2314 } }  // namespace v8::internal |  2382 } }  // namespace v8::internal | 
|  2315  |  2383  | 
|  2316 #endif  // V8_CODE_STUBS_H_ |  2384 #endif  // V8_CODE_STUBS_H_ | 
| OLD | NEW |