| OLD | NEW | 
|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef V8_MIPS_CODE_STUBS_ARM_H_ | 5 #ifndef V8_MIPS_CODE_STUBS_ARM_H_ | 
| 6 #define V8_MIPS_CODE_STUBS_ARM_H_ | 6 #define V8_MIPS_CODE_STUBS_ARM_H_ | 
| 7 | 7 | 
| 8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" | 
| 9 | 9 | 
| 10 | 10 | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 22 | 22 | 
| 23   void Generate(MacroAssembler* masm); | 23   void Generate(MacroAssembler* masm); | 
| 24 | 24 | 
| 25   static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate); | 25   static void GenerateFixedRegStubsAheadOfTime(Isolate* isolate); | 
| 26   virtual bool SometimesSetsUpAFrame() { return false; } | 26   virtual bool SometimesSetsUpAFrame() { return false; } | 
| 27 | 27 | 
| 28  private: | 28  private: | 
| 29   SaveFPRegsMode save_doubles_; | 29   SaveFPRegsMode save_doubles_; | 
| 30 | 30 | 
| 31   Major MajorKey() const { return StoreBufferOverflow; } | 31   Major MajorKey() const { return StoreBufferOverflow; } | 
| 32   int MinorKey() const { return (save_doubles_ == kSaveFPRegs) ? 1 : 0; } | 32   uint32_t MinorKey() const { return (save_doubles_ == kSaveFPRegs) ? 1 : 0; } | 
| 33 }; | 33 }; | 
| 34 | 34 | 
| 35 | 35 | 
| 36 class StringHelper : public AllStatic { | 36 class StringHelper : public AllStatic { | 
| 37  public: | 37  public: | 
| 38   // Generate code for copying a large number of characters. This function | 38   // Generate code for copying a large number of characters. This function | 
| 39   // is allowed to spend extra time setting up conditions to make copying | 39   // is allowed to spend extra time setting up conditions to make copying | 
| 40   // faster. Copying of overlapping regions is not supported. | 40   // faster. Copying of overlapping regions is not supported. | 
| 41   // Dest register ends at the position after the last character written. | 41   // Dest register ends at the position after the last character written. | 
| 42   static void GenerateCopyCharacters(MacroAssembler* masm, | 42   static void GenerateCopyCharacters(MacroAssembler* masm, | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 62   DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper); | 62   DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper); | 
| 63 }; | 63 }; | 
| 64 | 64 | 
| 65 | 65 | 
| 66 class SubStringStub: public PlatformCodeStub { | 66 class SubStringStub: public PlatformCodeStub { | 
| 67  public: | 67  public: | 
| 68   explicit SubStringStub(Isolate* isolate) : PlatformCodeStub(isolate) {} | 68   explicit SubStringStub(Isolate* isolate) : PlatformCodeStub(isolate) {} | 
| 69 | 69 | 
| 70  private: | 70  private: | 
| 71   Major MajorKey() const { return SubString; } | 71   Major MajorKey() const { return SubString; } | 
| 72   int MinorKey() const { return 0; } | 72   uint32_t MinorKey() const { return 0; } | 
| 73 | 73 | 
| 74   void Generate(MacroAssembler* masm); | 74   void Generate(MacroAssembler* masm); | 
| 75 }; | 75 }; | 
| 76 | 76 | 
| 77 | 77 | 
| 78 class StoreRegistersStateStub: public PlatformCodeStub { | 78 class StoreRegistersStateStub: public PlatformCodeStub { | 
| 79  public: | 79  public: | 
| 80   explicit StoreRegistersStateStub(Isolate* isolate) | 80   explicit StoreRegistersStateStub(Isolate* isolate) | 
| 81       : PlatformCodeStub(isolate) {} | 81       : PlatformCodeStub(isolate) {} | 
| 82 | 82 | 
| 83   static void GenerateAheadOfTime(Isolate* isolate); | 83   static void GenerateAheadOfTime(Isolate* isolate); | 
| 84  private: | 84  private: | 
| 85   Major MajorKey() const { return StoreRegistersState; } | 85   Major MajorKey() const { return StoreRegistersState; } | 
| 86   int MinorKey() const { return 0; } | 86   uint32_t MinorKey() const { return 0; } | 
| 87 | 87 | 
| 88   void Generate(MacroAssembler* masm); | 88   void Generate(MacroAssembler* masm); | 
| 89 }; | 89 }; | 
| 90 | 90 | 
| 91 class RestoreRegistersStateStub: public PlatformCodeStub { | 91 class RestoreRegistersStateStub: public PlatformCodeStub { | 
| 92  public: | 92  public: | 
| 93   explicit RestoreRegistersStateStub(Isolate* isolate) | 93   explicit RestoreRegistersStateStub(Isolate* isolate) | 
| 94       : PlatformCodeStub(isolate) {} | 94       : PlatformCodeStub(isolate) {} | 
| 95 | 95 | 
| 96   static void GenerateAheadOfTime(Isolate* isolate); | 96   static void GenerateAheadOfTime(Isolate* isolate); | 
| 97  private: | 97  private: | 
| 98   Major MajorKey() const { return RestoreRegistersState; } | 98   Major MajorKey() const { return RestoreRegistersState; } | 
| 99   int MinorKey() const { return 0; } | 99   uint32_t MinorKey() const { return 0; } | 
| 100 | 100 | 
| 101   void Generate(MacroAssembler* masm); | 101   void Generate(MacroAssembler* masm); | 
| 102 }; | 102 }; | 
| 103 | 103 | 
| 104 class StringCompareStub: public PlatformCodeStub { | 104 class StringCompareStub: public PlatformCodeStub { | 
| 105  public: | 105  public: | 
| 106   explicit StringCompareStub(Isolate* isolate) : PlatformCodeStub(isolate) { } | 106   explicit StringCompareStub(Isolate* isolate) : PlatformCodeStub(isolate) { } | 
| 107 | 107 | 
| 108   // Compare two flat ASCII strings and returns result in v0. | 108   // Compare two flat ASCII strings and returns result in v0. | 
| 109   static void GenerateCompareFlatAsciiStrings(MacroAssembler* masm, | 109   static void GenerateCompareFlatAsciiStrings(MacroAssembler* masm, | 
| 110                                               Register left, | 110                                               Register left, | 
| 111                                               Register right, | 111                                               Register right, | 
| 112                                               Register scratch1, | 112                                               Register scratch1, | 
| 113                                               Register scratch2, | 113                                               Register scratch2, | 
| 114                                               Register scratch3, | 114                                               Register scratch3, | 
| 115                                               Register scratch4); | 115                                               Register scratch4); | 
| 116 | 116 | 
| 117   // Compares two flat ASCII strings for equality and returns result | 117   // Compares two flat ASCII strings for equality and returns result | 
| 118   // in v0. | 118   // in v0. | 
| 119   static void GenerateFlatAsciiStringEquals(MacroAssembler* masm, | 119   static void GenerateFlatAsciiStringEquals(MacroAssembler* masm, | 
| 120                                             Register left, | 120                                             Register left, | 
| 121                                             Register right, | 121                                             Register right, | 
| 122                                             Register scratch1, | 122                                             Register scratch1, | 
| 123                                             Register scratch2, | 123                                             Register scratch2, | 
| 124                                             Register scratch3); | 124                                             Register scratch3); | 
| 125 | 125 | 
| 126  private: | 126  private: | 
| 127   virtual Major MajorKey() const { return StringCompare; } | 127   virtual Major MajorKey() const { return StringCompare; } | 
| 128   virtual int MinorKey() const { return 0; } | 128   virtual uint32_t MinorKey() const { return 0; } | 
| 129   virtual void Generate(MacroAssembler* masm); | 129   virtual void Generate(MacroAssembler* masm); | 
| 130 | 130 | 
| 131   static void GenerateAsciiCharsCompareLoop(MacroAssembler* masm, | 131   static void GenerateAsciiCharsCompareLoop(MacroAssembler* masm, | 
| 132                                             Register left, | 132                                             Register left, | 
| 133                                             Register right, | 133                                             Register right, | 
| 134                                             Register length, | 134                                             Register length, | 
| 135                                             Register scratch1, | 135                                             Register scratch1, | 
| 136                                             Register scratch2, | 136                                             Register scratch2, | 
| 137                                             Register scratch3, | 137                                             Register scratch3, | 
| 138                                             Label* chars_not_equal); | 138                                             Label* chars_not_equal); | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 168   Register scratch_; | 168   Register scratch_; | 
| 169   Register sign_; | 169   Register sign_; | 
| 170 | 170 | 
| 171   // Minor key encoding in 16 bits. | 171   // Minor key encoding in 16 bits. | 
| 172   class IntRegisterBits: public BitField<int, 0, 4> {}; | 172   class IntRegisterBits: public BitField<int, 0, 4> {}; | 
| 173   class HeapNumberRegisterBits: public BitField<int, 4, 4> {}; | 173   class HeapNumberRegisterBits: public BitField<int, 4, 4> {}; | 
| 174   class ScratchRegisterBits: public BitField<int, 8, 4> {}; | 174   class ScratchRegisterBits: public BitField<int, 8, 4> {}; | 
| 175   class SignRegisterBits: public BitField<int, 12, 4> {}; | 175   class SignRegisterBits: public BitField<int, 12, 4> {}; | 
| 176 | 176 | 
| 177   Major MajorKey() const { return WriteInt32ToHeapNumber; } | 177   Major MajorKey() const { return WriteInt32ToHeapNumber; } | 
| 178   int MinorKey() const { | 178   uint32_t MinorKey() const { | 
| 179     // Encode the parameters in a unique 16 bit value. | 179     // Encode the parameters in a unique 16 bit value. | 
| 180     return IntRegisterBits::encode(the_int_.code()) | 180     return IntRegisterBits::encode(the_int_.code()) | 
| 181            | HeapNumberRegisterBits::encode(the_heap_number_.code()) | 181            | HeapNumberRegisterBits::encode(the_heap_number_.code()) | 
| 182            | ScratchRegisterBits::encode(scratch_.code()) | 182            | ScratchRegisterBits::encode(scratch_.code()) | 
| 183            | SignRegisterBits::encode(sign_.code()); | 183            | SignRegisterBits::encode(sign_.code()); | 
| 184   } | 184   } | 
| 185 | 185 | 
| 186   void Generate(MacroAssembler* masm); | 186   void Generate(MacroAssembler* masm); | 
| 187 }; | 187 }; | 
| 188 | 188 | 
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 340   void Generate(MacroAssembler* masm); | 340   void Generate(MacroAssembler* masm); | 
| 341   void GenerateIncremental(MacroAssembler* masm, Mode mode); | 341   void GenerateIncremental(MacroAssembler* masm, Mode mode); | 
| 342   void CheckNeedsToInformIncrementalMarker( | 342   void CheckNeedsToInformIncrementalMarker( | 
| 343       MacroAssembler* masm, | 343       MacroAssembler* masm, | 
| 344       OnNoNeedToInformIncrementalMarker on_no_need, | 344       OnNoNeedToInformIncrementalMarker on_no_need, | 
| 345       Mode mode); | 345       Mode mode); | 
| 346   void InformIncrementalMarker(MacroAssembler* masm); | 346   void InformIncrementalMarker(MacroAssembler* masm); | 
| 347 | 347 | 
| 348   Major MajorKey() const { return RecordWrite; } | 348   Major MajorKey() const { return RecordWrite; } | 
| 349 | 349 | 
| 350   int MinorKey() const { | 350   uint32_t MinorKey() const { | 
| 351     return ObjectBits::encode(object_.code()) | | 351     return ObjectBits::encode(object_.code()) | | 
| 352         ValueBits::encode(value_.code()) | | 352         ValueBits::encode(value_.code()) | | 
| 353         AddressBits::encode(address_.code()) | | 353         AddressBits::encode(address_.code()) | | 
| 354         RememberedSetActionBits::encode(remembered_set_action_) | | 354         RememberedSetActionBits::encode(remembered_set_action_) | | 
| 355         SaveFPRegsModeBits::encode(save_fp_regs_mode_); | 355         SaveFPRegsModeBits::encode(save_fp_regs_mode_); | 
| 356   } | 356   } | 
| 357 | 357 | 
| 358   void Activate(Code* code) { | 358   void Activate(Code* code) { | 
| 359     code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code); | 359     code->GetHeap()->incremental_marking()->ActivateGeneratedStub(code); | 
| 360   } | 360   } | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
| 381 // simplest approach is to generate such stub early enough so it can never be | 381 // simplest approach is to generate such stub early enough so it can never be | 
| 382 // moved by GC | 382 // moved by GC | 
| 383 class DirectCEntryStub: public PlatformCodeStub { | 383 class DirectCEntryStub: public PlatformCodeStub { | 
| 384  public: | 384  public: | 
| 385   explicit DirectCEntryStub(Isolate* isolate) : PlatformCodeStub(isolate) {} | 385   explicit DirectCEntryStub(Isolate* isolate) : PlatformCodeStub(isolate) {} | 
| 386   void Generate(MacroAssembler* masm); | 386   void Generate(MacroAssembler* masm); | 
| 387   void GenerateCall(MacroAssembler* masm, Register target); | 387   void GenerateCall(MacroAssembler* masm, Register target); | 
| 388 | 388 | 
| 389  private: | 389  private: | 
| 390   Major MajorKey() const { return DirectCEntry; } | 390   Major MajorKey() const { return DirectCEntry; } | 
| 391   int MinorKey() const { return 0; } | 391   uint32_t MinorKey() const { return 0; } | 
| 392 | 392 | 
| 393   bool NeedsImmovableCode() { return true; } | 393   bool NeedsImmovableCode() { return true; } | 
| 394 }; | 394 }; | 
| 395 | 395 | 
| 396 | 396 | 
| 397 class NameDictionaryLookupStub: public PlatformCodeStub { | 397 class NameDictionaryLookupStub: public PlatformCodeStub { | 
| 398  public: | 398  public: | 
| 399   enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; | 399   enum LookupMode { POSITIVE_LOOKUP, NEGATIVE_LOOKUP }; | 
| 400 | 400 | 
| 401   NameDictionaryLookupStub(Isolate* isolate, LookupMode mode) | 401   NameDictionaryLookupStub(Isolate* isolate, LookupMode mode) | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 428   static const int kCapacityOffset = | 428   static const int kCapacityOffset = | 
| 429       NameDictionary::kHeaderSize + | 429       NameDictionary::kHeaderSize + | 
| 430       NameDictionary::kCapacityIndex * kPointerSize; | 430       NameDictionary::kCapacityIndex * kPointerSize; | 
| 431 | 431 | 
| 432   static const int kElementsStartOffset = | 432   static const int kElementsStartOffset = | 
| 433       NameDictionary::kHeaderSize + | 433       NameDictionary::kHeaderSize + | 
| 434       NameDictionary::kElementsStartIndex * kPointerSize; | 434       NameDictionary::kElementsStartIndex * kPointerSize; | 
| 435 | 435 | 
| 436   Major MajorKey() const { return NameDictionaryLookup; } | 436   Major MajorKey() const { return NameDictionaryLookup; } | 
| 437 | 437 | 
| 438   int MinorKey() const { return LookupModeBits::encode(mode_); } | 438   uint32_t MinorKey() const { return LookupModeBits::encode(mode_); } | 
| 439 | 439 | 
| 440   class LookupModeBits: public BitField<LookupMode, 0, 1> {}; | 440   class LookupModeBits: public BitField<LookupMode, 0, 1> {}; | 
| 441 | 441 | 
| 442   LookupMode mode_; | 442   LookupMode mode_; | 
| 443 }; | 443 }; | 
| 444 | 444 | 
| 445 | 445 | 
| 446 } }  // namespace v8::internal | 446 } }  // namespace v8::internal | 
| 447 | 447 | 
| 448 #endif  // V8_MIPS_CODE_STUBS_ARM_H_ | 448 #endif  // V8_MIPS_CODE_STUBS_ARM_H_ | 
| OLD | NEW | 
|---|